lara-zeus/accordion
Lara Zeus Accordion adds a simple accordion component to Laravel and Filament forms, letting you group fields into collapsible sections for cleaner, more organized layouts.
Build vs. buy on a commodity UI primitive. Collapsible/accordion sections are a solved problem. This package replaces hand-rolled Alpine/Livewire toggle logic with a single MIT-licensed Filament layout component. Scope it honestly: we are consuming one UI primitive, not adopting a framework or a design system.
Unblocking long-form usability work without a front-end sprint. The recurring roadmap item this serves is "our 40-field admin form is unusable" or "settings need progressive disclosure." With this package the work becomes a schema-level change — wrap these fields in an accordion — rather than a bespoke component build. That shifts effort from engineering to configuration and compresses the timeline from a sprint to an afternoon.
Design-system consistency is the real story of the 3.0.2 release. The patch publishes documented CSS hooks: zeus-accordion-btn / zeus-accordion-btn-* for triggers and zeus-accordion-container / zeus-accordion-container-* for panels. Product-wise this converts a recurring cost ("we fork the vendor Blade view every time branding changes") into a one-time, isolated styling layer. Documented extension points are what determine whether a third-party dependency stays cheap over a two-year horizon or becomes permanent fork debt.
Consolidation of divergent implementations. Teams typically end up with three slightly different hand-rolled toggles across settings, FAQs, and filter panels. This gives one shared implementation with one theming entry point — a maintainability win that shows up as reduced review surface and fewer UI inconsistencies, not as a user-visible feature.
Dependency risk posture, framed before it is re-litigated. 11 stars, zero dependent packages, a single-vendor ecosystem (lara-zeus), and a thin adoption signal mean this is a dependency we plan to be able to remove, not one we plan to standardize on. That has a concrete product consequence: we route all usage through one internal wrapper and never reference the package's selectors outside a single stylesheet, so replacing it with native <details>/<summary> or an in-house Alpine toggle is an afternoon of work. Low exit cost is the actual buy decision.
A usability assumption worth validating, not assuming. Collapsed sections are visual only — fields inside them remain mounted, validated, and submitted. That's good news for our validation rules and $fillable handling, but it means a required field hidden in a collapsed panel produces "the form won't submit and I can't see why." Product rule to commit to up front: collapse only optional or genuinely secondary fields, or open the section by default.
Scope boundary worth naming explicitly. The package description markets "simple Blade integration" while the repository reality is a Filament schema component that tracks Filament's majors. These are different audiences and different support burdens. Before we build a roadmap around it, confirm which one it actually is — otherwise we plan for a Blade-only page and discover we've signed up for a Filament version-coupling commitment.
Adopt when all of these are true:
Fields::metaSection()); confine theming to one stylesheet using only the documented hooks.Look elsewhere, or don't adopt, when:
<details>/<summary> is zero dependencies, keyboard-accessible by default, and works without JS. Taking on a maintenance lifecycle for one toggle is a bad trade.aria-expanded, aria-controls, or keyboard handling. Verify once, write down the answer, and assume it's ours to add — cheapest at the single wrapper, not nine call sites.To executives — one paragraph. We can fix a recurring usability complaint — admin forms and settings screens that are too long to navigate — with a small, free, MIT-licensed UI component instead of a front-end build. The work becomes configuration rather than engineering, so we get the usability win in an afternoon rather than a sprint, and we consolidate three or four inconsistent toggle implementations into one. The dependency is deliberately small and, critically, cheap to reverse: because it exposes documented styling hooks and we're isolating every usage behind one internal wrapper, replacing it later is measured in hours. This is a low-cost, low-commitment improvement to internal tooling, not a platform decision.
To engineering — the summary. A Filament layout component for grouping schema fields into collapsible panels, currently on its 3.x line tracking Filament majors. Three things to internalize before you use it:
Fields::metaSection(...)) so heading copy, icons, and default open state live in one file. Never reference zeus-accordion-* selectors outside a single stylesheet, and never target the internal DOM — only the documented base classes from 3.0.2.required field yields an invisible blocker. And open/closed state is Alpine-driven, so test that a panel you opened doesn't snap shut after a live() field inside it updates. That exact combination is what breaks.resources/views/ are the documentation. Confirm the component namespace and method names (->collapsed() vs ->open(false)) from src/ before writing call sites. If collapse breaks after an upgrade, diffing the vendor views is the entire changelog you need.Start with one screen — a Resource form split into a "daily fields" top half and a collapsed "metadata" bottom half. Verify rendering, verify collapsed fields still save, verify the Livewire re-render behavior, check ARIA and keyboard handling once and record the result. Then widen adoption. And keep exit cheap: the realistic risk isn't a bug, it's abandonment — the guardrails above are what turn that from a sprint into an afternoon.
How can I help you explore Laravel packages today?