Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Choosable Chips Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • Version maturity. This is v1.0.0 — the first public release. There is no track record of patch cadence, and the fluent API surface (colors(), icons(), descriptions(), disableOptionWhen(), checkSelected(), selectedColor(), checkIcon(), size(), defaultColor(), gridDirection()) is broad enough that early breaking changes are plausible.
  • Platform constraints. PHP 8.4+ and 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.
  • Vendor concentration. A single small vendor owning a UI component in an admin panel creates a maintenance dependency with limited community escape hatch. Mitigation is low (fork the field, it is self-contained), but it should be an explicit contingency.
  • UX and accessibility. Dismissable chips conflate selection with removal: a delete button on a selected chip deselects it, and the selected check mark swaps out the dismiss button while shown. That is a deliberate interaction design, but it is non-standard for checkbox/radio semantics and needs keyboard, screen-reader, and touch-target validation before it lands in a production admin surface used by external or low-skill operators.
  • Silent behavior surface. Auto-enabling checkSelected() when no per-option icons are set is convenient but implicit — teams should confirm the rendered affordance matches what QA documents.

Key questions.

  1. What is the Laravel version support matrix, and is there a published policy for Filament major-version tracking?
  2. License terms and whether the repo is open to external PRs / has a maintainer bus factor above one.
  3. Test coverage and any CI matrix against Filament minor releases — particularly around the badge component the chip builds on.
  4. Accessibility posture: keyboard interaction model, ARIA roles emitted, contrast guarantees for defaultColor()/selectedColor() against theme tokens.
  5. Documented state contract for enum-backed options and how the derived in validation rule interacts with existing Rule::in/exists rules already on the field.
  6. Whether the dismiss interaction is configurable or hard-coded, and whether deselection is announced to assistive tech.

Integration Approach

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:

  • Inventory existing Select, ToggleButtons, CheckboxList, and Radio usages that represent a small, fixed option set (roughly 2–8 options) — that is the sweet spot for chips.
  • Confirm state shape per field (scalar vs. array) and confirm enum casts and validation rules survive the swap.
  • Replace field-by-field behind a feature branch; no data backfill, no dual-write, no rollback beyond reverting the component class.
  • Explicitly do not convert high-cardinality or dynamic-option fields — chips do not scale to long option lists, and the dismiss interaction becomes hostile past a certain count.

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.

  1. Sandbox spike (1–2 days). Install in a non-production panel, render single-select, multi-select, enum-backed, and disableOptionWhen() variants. Validate state casts round-trip correctly through create and edit forms, and that the in rule rejects disabled options.
  2. Accessibility and UX review (parallel). Keyboard-only pass, screen-reader pass, and a design review of the dismiss-vs-check-mark swap. Decide whether checkSelected() is on by default for your panels.
  3. Pilot (one resource, one sprint). Ship to an internal-only resource with a small option set. Instrument for form-level errors and support tickets referencing the field.
  4. Rollout. Convert remaining eligible fields in batches by pattern (e.g. all status/priority enums). Keep the old field class in a branch for one release cycle as the revert path.
  5. Standardize. Once proven, document the field in the internal Filament component guide so new resources reach for it deliberately rather than by copy-paste.

Operational Impact

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.

  • Filament major upgrade breakage. The field depends on Filament's badge and form-component internals; a Filament v6 will likely require a package update that may lag. Symptom: field fails to render or loses styling after a panel upgrade. Mitigation: pin, stage upgrades, keep the revert-to-Select swap documented.
  • PHP floor lock. The PHP 8.4 requirement makes this package a constraint on the application's minimum PHP version, and therefore on framework and dependency upgrades in the other direction. Track it in the upgrade planning doc, not just composer.
  • Accidental deselection. The dismiss button on a selected chip is a one-click destructive action with no undo. In multi-select fields with a min/required constraint this surfaces as a validation error the operator did not intend. Watch support tickets for "my selection disappeared" during the pilot.
  • Implicit defaults drifting. 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.
  • Theme token mismatch. 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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console