shreejan/actionable-column
Add interactive action buttons to Filament table columns: badges or plain text with connected action buttons, custom icons and colors, clickable columns, and empty-state "+ Add" support. Works with any Filament Action and Filament v4/v5.
Action. This is enough to ship approve/reject/assign/resend-invite flows in a single sprint without building an inline-edit system. It is not an inline editor, a bulk-action engine, or a workflow builder — decide that boundary before committing, because stakeholders will ask for more once they see it.TextColumn subclass plus a Blade template and CSS (roughly a few hundred lines). Buying costs one composer require and near-zero infrastructure impact — no migrations, no service provider, no config publish required. Building costs a day or two of engineering plus permanent ownership. Buying wins only if you accept the dependency risk below; if your team would need more than the eight documented methods, build.^4.0|^5.0, and v1.1.0 explicitly states "No code changes needed." That is a green light for a v5 upgrade path, but it is an unverified claim — make "confirm the column renders and the action fires on our exact Filament version" an acceptance criterion, not an assumption.Action system, authorization policies, confirmation modals, notifications, and audit logging carry over from existing row actions untouched. That lets you mandate one interaction language across resources (badge = state, pencil = change it) without each team reimplementing it.Adopt when most of the following hold:
^1.1) and accepting that upstream fixes may never arrive. Practically: budget an hour to read ActionableColumn.php and the Blade view so someone on the team can maintain it.resources/css/actionable-column-custom.css auto-detection and ACTIONABLE_COLUMN_CUSTOM_CSS_PATH env override exist specifically so composer update doesn't clobber your styling — that is the single most maintenance-aware thing in the package and a genuine adoption signal.Look elsewhere, or build in-house, when:
clickableColumn()) with a hidden icon (showActionIcon(false)) is a keyboard and screen-reader hazard; the package does not document focus management, ARIA roles, or a visible focus ring for the cell-as-button mode. If you have WCAG obligations, restrict yourself to showActionIcon(true) or build a proper button-based column.->hideEmptyButton(). The "+ Add" affordance always renders when the column is empty, even with showActionIcon(false). For a null-heavy column where creation shouldn't be offered per-row, this is a blocker — verify against your data distribution before committing.^4.0|^5.0 constraint is generous; a future Filament major will not be covered, and you should expect the upgrade to be your problem, not the maintainer's.One specific caution to put in the adoption ticket: the package's tapAction() accepts Action|Closure, and the documented closure pattern returns different actions per record. Confirm the closure's return type against the class signature and verify behavior when it returns null for some rows. Undocumented edge-case behavior in a UI affordance shows up as a broken row, not a soft degradation.
One line for executives: A small, MIT-licensed UI component that turns our existing admin table columns into the place where work actually gets done — cutting a click or a page navigation out of every approval, assignment, and status change, for the cost of one dependency and no database or infrastructure change.
What it buys us: Faster completion of the highest-volume back-office tasks, without a bespoke build. It plugs into Filament's existing action system, so permissions, confirmation dialogs, notifications, and audit trails we already have continue to apply — no new security surface, no new logging to instrument, no parallel code path to keep in sync.
What it costs: One composer require, no migrations, no service provider, no config to publish. Roughly one row of table markup per column we convert. Reversible in an afternoon: delete the column definition and the dependency, and behavior reverts to the previous TextColumn.
What we are accepting, honestly stated: The package is maintained by a single author with low public adoption. We treat it as a convenience, not a platform bet — presented as a reversible, presentation-layer choice. Mitigations are cheap and already planned: pin the minor version, keep an in-house wrapper so the class name appears in one place, and read the two source files so we can fork if upstream goes quiet. Filament v5 support is declared and plausible but unverified against our install; we validate it on one table before rolling it out.
One-line ask to engineering: Confirm on a single status column that the modal opens pre-filled, the record updates, and the table refreshes — and flag any accessibility or empty-state behavior that conflicts with our requirements before we standardize it across resources.
How can I help you explore Laravel packages today?