harvirsidhu/filament-cards
Filament Cards turns any Filament page into a card-based navigation hub for settings hubs, cluster front pages, and resource dashboards. It auto-discovers authorized pages, supports grouping and layout, and feels native to Filament.
Several features this package documents never actually worked. The view built its Tailwind classes by string interpolation, and Tailwind only sees literal strings when it scans a Blade file — so those utilities were never generated. Layout and colour now go through Filament's own primitives, whose classes ship compiled in Filament's CSS.
No code changes needed, but rebuild your CSS (npm run build) and check three things:
columns(['md' => 2, 'xl' => 4]) and columnSpan() rendered as a single column before and now work.canAccess() is now enforced on every card, not only auto-discovered ones. Add ->checkAccess(false) to keep one visible regardless.If you published pages/cards-page.blade.php, re-publish it — the view is now split into components/group.blade.php and components/card.blade.php.
columns() / columnSpan() / columnSpanFull() now render. Layout is delegated to Filament's grid() and gridColumn() attribute macros. columnStart() is supported, and every breakpoint works — previously only default and lg were even read out of a span array.discoverResourceCards() works. It was gated behind is_a(static::class, Filament\Resources\Pages\Page::class), which no CardsPage subclass can satisfy — that class is a sibling of Filament\Pages\Page, not an ancestor. The guard was always false, so the documented resource hub rendered blank.addCards() no longer leaks between pages. $appendedCards was a plain static on the abstract base, which PHP shares with every subclass that doesn't redeclare it.getLabel() / case name rather than backing value, matching Filament's sidebar.# link.FilamentCardsPlugin::make()->columns(4)->searchable()->persistCollapsed(). Resolution order is page property → plugin default → package default, so existing pages are unaffected.CardItem::actions([Action::make('sync')->action(...)]).canAccess() filtering on every card, with ->checkAccess(false) to opt out.CardGroup::persistCollapsed(), contained() and id().getCardsColumns(), isCardsSearchable(), …) for runtime values.<h2> and card titles <h3>; a collapsible group's toggle is a real keyboard-reachable <button> with aria-expanded.Full changelog: https://github.com/harvirsidhu/filament-cards/blob/1.x/CHANGELOG.md
$navigationSort. Previously group order followed component discovery order (effectively filesystem order), so a cluster's front page could contradict its own navigation.CHANGELOG.md for 1.0.1 through 1.0.8, which had sat at the skeleton's placeholder entry since the initial release.Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.8...v1.0.9
Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.7...v1.0.8
Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.4...v1.0.5
Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.4...v1.0.5
Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.3...v1.0.4
Full Changelog: https://github.com/harvirsidhu/filament-cards/compare/v1.0.2...v1.0.3
Full Changelog: https://github.com/harvirsidhu/filament-cards/commits/v1.0.0
How can I help you explore Laravel packages today?