Skip to content

Releases

v1.2.0

Choose a tag to compare

@mortalkiller mortalkiller released this 11 Nov 22:21
ed4674f

v1.2.0 — Smoother Table Updates & Our First Community Contribution! 🎉

🎉 A huge welcome to our first community contributor!

This release marks a special milestone for Filament Skeleton Loading: our first community-contributed feature! 🥳

A massive thank you to "@goncalosoaresdev" (https://github.com/goncalosoaresdev) (Gonçalo Soares) for building "showSkeletonsOnTableUpdate()", adding documentation and browser tests, and following through on the Filament 4 compatibility fix. 🙌

Your contribution makes table interactions feel smoother for everyone using this package. Welcome to the contributor family, Gonçalo! 🚀👏

✨ What's new

Skeleton rows while tables update — opt-in

Enable skeleton rows whenever an already-loaded Filament table updates, including pagination, searching, filtering, sorting, switching tabs, grouping, and changing the number of records per page.

SkeletonLoadingPlugin::make()
->showSkeletonsOnTableUpdate();

You can also enable it selectively, per table:

SkeletonLoadingPlugin::make()
->showSkeletonsOnTableUpdate(fn (Table $table): bool => $table->getLivewire() instanceof ListRecords);

Or configure it for panels that register the plugin using:

SKELETON_LOADING_SHOW_ON_TABLE_UPDATE=true

Off by default. This option is independent of "deferTables()", preserves the initial loading behavior, and does not alter widgets, sections, or panels without the plugin.

🎨 Filament 4 and 5 styling

  • Loading skeleton colors now work in both Filament 4 and Filament 5, using the appropriate native CSS variables.
  • Existing panel radius, dark mode, and shimmer preferences continue to apply.
  • Added a dedicated Workbench Invoices page and browser coverage for table updates, first-load behavior, and light/dark styling.

🔧 Maintenance

  • Updated the "zizmor" GitHub Actions dependency.
  • Expanded the README and documentation for configuration and table loading states.

✅ Verification

All five GitHub Actions workflows passed, including package tests, code quality, documentation, package standard, and browser tests.

⬆️ Upgrading

composer update mortalkiller/filament-skeleton-loading
php artisan filament:assets

The new table-update skeletons are optional: enable them explicitly in your panel or environment if you want them.

Compatibility: PHP 8.3+, Laravel 12/13, Filament 4.15.2+ or 5.10.2+.

Pull request: "#6 — showSkeletonsOnTableUpdate()" (#6)

Full changelog: v1.1.1...v1.2.0


Thanks again, Gonçalo — here's to many more community contributions! 🎊

v1.1.1

Choose a tag to compare

@mortalkiller mortalkiller released this 09 Nov 03:39
92268e3

Fixes

  • The optional page loader now uses a separately published Filament asset, registers its listeners once and leaves Livewire SPA navigation to Livewire.
  • The loader waits for its configured display threshold without delaying navigation. Links and form submissions targeting another browsing context do not trigger it.
  • Lazy stats widgets render their skeleton cards without fetching stats or calculating columns from the widget's data.

Upgrading

This security update supports Filament 4.15.2+ and 5.10.2+. Upgrade Filament first if your application is on an earlier patch of either major. These minimum versions include the upstream tenant tooltip XSS fix.

After updating the package, run php artisan filament:assets to publish the updated stylesheet and the new page loader script.

Full changelog: v1.1.0...v1.1.1

v1.1.0

Choose a tag to compare

@mortalkiller mortalkiller released this 09 Nov 02:19

Added

  • rounded() sets the corner radius of the skeletons per panel: a theme size (none, xs to 4xl, full) or an exact pixel length (8, '2.5px'). Other values throw InvalidArgumentException.
  • selectSearchSkeletons() and globalSearchSkeletons() show skeleton lines while searchable selects and the global search wait for results. Both are off by default.
  • Deferred schemas get a form, infolist or list placeholder: chosen from the page (a ViewRecord page, a schema inside a repeater) or set with ->skeletonPlaceholder(SchemaPlaceholder::Infolist).
  • Deferred tables follow the visible columns or the card grid when Filament exposes them to the table content hook; older Filament versions keep the fixed rows.
  • Tables that use Filament's loadingSkeleton() get the package's colours and radius while they update.

Fixed

  • The page loader no longer blocks the page when the browser stays on it, for example after a cancelled "leave page?" prompt or a link that downloads a file: a click or Escape hides it. Links with a download attribute still never show it.

Compatibility

Unchanged: PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+. CI tests the lowest and latest dependency sets of each Filament major, plus browser tests on both majors.

Upgrading

composer update mortalkiller/filament-skeleton-loading, then php artisan filament:assets if your deployment does not already run it: the stylesheet changed.

Documentation

https://docs.pedromonteiro.dev/filament-skeleton-loading/

Full changelog: v1.0.1...v1.1.0

v1.0.1

Choose a tag to compare

@mortalkiller mortalkiller released this 08 Nov 23:46

Patch release: skeletons now stay in the panels that register the plugin, and CI watches for Filament releases that change the markup the package builds on.

Fixes

  • Panels without the plugin keep Filament's own loading states. The stylesheet and the loading-section view override used to apply to every panel. Now the stylesheet is loaded on request through the plugin's STYLES_AFTER render hook, the override renders Filament's own view when the current panel does not use the plugin, and HasSkeletonPlaceholder falls back to Filament's placeholder there.

Improvements

  • The test and browser workflows also run weekly, and on demand, against the latest Filament releases.
  • Canary tests fail when Filament changes what the package relies on: the lazy placeholder view, its props, or the contents of the table, schema and notifications loading containers.

Documentation

  • README opens with the package cover image.
  • The documentation site's favicon no longer gets the base path twice.
  • API pages describe which panels the stylesheet, view override and trait apply to.

Upgrading

composer update mortalkiller/filament-skeleton-loading, then php artisan filament:assets if your deployment does not already run it. If you relied on skeletons in a panel that does not register SkeletonLoadingPlugin, register the plugin on that panel.

Compatibility

Unchanged: PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+.

Full changelog: v1.0.0...v1.0.1

v1.0.0

Choose a tag to compare

@mortalkiller mortalkiller released this 08 Nov 22:41

First stable release.

Skeleton loading states for Filament panels: lazy widgets, lazy sections and deferred tables show the shape of what is coming instead of a grey box or a spinner.

Features

  • HasSkeletonPlaceholder trait: typed skeletons for stats overview, chart (bars, line or ring, with the real heading) and table widgets, and for relation managers.
  • Generic skeleton for every other lazy widget, relation manager or Livewire component.
  • Skeleton rows for deferred tables, the database notifications panel and lazy loaded sections.
  • Opt-in page loader between pages, shown only when the next page is slower than the delay, with a custom brand symbol and label.
  • deferTables() plugin option and defer_tables setting to defer the panel's tables.
  • Shimmer that can be turned off and stands still for reduced motion; light and dark mode; en, pt, pt_PT and pt_BR translations.

Compatibility

PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+. CI tests the lowest and latest dependency sets of each Filament major, plus browser tests on both majors.

Documentation

https://docs.pedromonteiro.dev/filament-skeleton-loading/