vitisstudio/filament-choosable-chips
A Filament form component that lets users select one or more options as clickable chips, offering a compact visual alternative to dropdowns and integrating cleanly with Filament forms.
Architecture fit. The package is a single-purpose Filament v5 form field published by VitisStudio. It extends the Filament forms component model (fluent options API patterned after Select/ToggleButtons), so it composes with existing Filament resources, schemas, and state handling rather than introducing a parallel abstraction. For teams already standardized on Filament v5, this is a low-coupling UI primitive — not a service, not a persistence layer, and it carries no migration or schema footprint. The blast radius is limited to the form fields that opt into it.
Integration feasibility. Installation is a single composer require vitisstudio/filament-choosable-chips, with no published config, service provider bootstrapping concerns, or asset pipeline steps called out beyond Filament's normal asset handling. The field is adopted per-field, meaning a pilot can be scoped to one resource and reverted by swapping the component class back to Select/CheckboxList without data migration — provided the underlying state contract (scalar for single, array for ->multiple()) matches what the persistence layer already expects. That is the critical feasibility check: the package's value is presentation, so the state cast must align with existing casts, enum handling, and validation rules.
Technical risk.
colors(), icons(), descriptions(), disableOptionWhen(), checkSelected(), selectedColor(), checkIcon(), size(), defaultColor(), gridDirection()) is broad enough that early breaking changes are plausible.filament/forms ^5.0 are both aggressive floors. Any team mid-migration to Filament v5, or pinned below PHP 8.4 for host or dependency reasons, cannot adopt this without a coordinated platform upgrade — this package becomes a downstream blocker on the upgrade critical path.checkSelected() when no per-option icons are set is convenient but implicit — teams should confirm the rendered affordance matches what QA documents.Key questions.
defaultColor()/selectedColor() against theme tokens.in validation rule interacts with existing Rule::in/exists rules already on the field.Stack fit. Assumes Laravel + Filament v5 admin panels on PHP 8.4+. It is a presentation-layer component with no runtime services, queues, storage, or external calls — the integration surface is the form schema and the field's state. If the admin panel is not Filament v5, or is Filament v3/v4, this package is out of scope until that upgrade completes. If the application uses a separate frontend for end users, the package is admin-only and does not touch customer-facing UI.
Migration path. Treat this as an in-place field substitution, not a migration:
Select, ToggleButtons, CheckboxList, and Radio usages that represent a small, fixed option set (roughly 2–8 options) — that is the sweet spot for chips.Compatibility. Two hard gates: PHP 8.4 and filament/forms ^5.0. Verify the application's Filament minor version is inside the caret range and that the panel's asset build picks up the package's views/assets without manual publishing. Check theme compatibility for defaultColor() and selectedColor() against the panel's configured palette — Filament color tokens are semantic, so custom themes can render these unexpectedly. Also verify behavior under the panel's dark mode and RTL configuration if either is in use.
Sequencing.
disableOptionWhen() variants. Validate state casts round-trip correctly through create and edit forms, and that the in rule rejects disabled options.checkSelected() is on by default for your panels.Maintenance. A new third-party dependency in the admin layer with no prior release history. Pin to an exact version (1.0.0) rather than a caret range until a patch cadence is observed, and let Dependabot/Renovate surface updates for manual review. Budget a small but real recurring cost: Filament ships majors on a predictable-ish cadence, and this package must track filament/forms — expect to re-validate on each Filament major. Because the field is self-contained, the fork-and-own contingency is cheap; identify the owner now rather than during an incident.
Support. Assume community-only support via the GitHub repo. There is no vendor SLA, no commercial backing stated, and no indication of a security disclosure process. For an internal admin tool that is usually acceptable; if the field appears in a customer-facing or regulated surface, that calculus changes and an internal fork should be planned from day one. Capture the version, the fork point, and the maintainer contact in the dependency register.
Scaling. Negligible backend impact — rendering is client-side and the field holds only the selected values in form state. The scaling limit is option cardinality and operator throughput, not load: chips consume far more vertical and horizontal space than a select, and the dismiss affordance makes large multi-selects slow and error-prone. Set a team convention (e.g. chips only for fixed option sets under ~8 values with meaningful color/icon differentiation) and enforce it in review, otherwise the pattern will metastasize into fields where a searchable select is correct.
Failure modes.
Select swap documented.min/required constraint this surfaces as a validation error the operator did not intend. Watch support tickets for "my selection disappeared" during the pilot.checkSelected() auto-enabling when no per-option icons are set means the rendered affordance changes based on unrelated configuration. A later edit adding icons silently removes the check mark. Document the interaction or set it explicitly.defaultColor()/selectedColor() resolve against the panel palette; custom themes can produce low-contrast chips, which is both an accessibility and a "looks broken" failure.Ramp-up. Low for developers already fluent in Filament's fluent field API — the options API deliberately mirrors Select/ToggleButtons, so the learning delta is the option-keyed colors()/icons()/descriptions() maps and the multi-select state shape. Expect under an hour for a Filament-comfortable engineer to be productive. The larger ramp-up cost is on QA and design: the dismiss/check-mark interaction is bespoke and needs an explicit test script (single vs. multi, required-field deselection, disabled options, enum-backed, dark mode, keyboard-only) or it will be under-tested. Front-line support staff should get a one-paragraph note on why chips look different and that clicking the × deselects.
How can I help you explore Laravel packages today?