digital-creative/clickable-table-row
Make any Filament table row clickable with digital-creative/clickable-table-row. Add the trait to your resource, point rows at a URL or action, and users can click anywhere in a row to navigate—lightweight, configurable, and easy to drop into existing tables.
Architecture fit — The package is a thin presentation-layer customization for Laravel Nova: a service provider that registers a small JS/CSS asset (and likely a Vue mixin or DOM listener) which makes table rows navigate to the resource detail view on click. It carries no domain logic, no database footprint, no queue or API surface. For a TPM this is the best possible shape for a third-party dependency: the blast radius is confined to the Nova UI layer, and removal is a composer remove plus cache clear. The catch is that its entire value depends on hooking Nova's private table markup and Vue component internals, not a documented extension point — so it is architecturally a patch, not an integration.
Integration feasibility — Installation is trivial (Composer, auto-discovery, php artisan nova:publish / asset rebuild). The real feasibility question is version alignment: last release August 2021 places it in the Nova 3.x / Vue 2 era. Nova 4 moved to Vue 3 and reworked asset registration and table rendering; Nova 5 continues that direction. Probability of drop-in compatibility with a current Nova install is low, and it is unverified either way. Because the codebase is small, a fork-and-fix or clean reimplementation is realistically a one-to-two-day job for a Laravel developer — which reframes the decision from "adopt a dependency" to "adopt a snippet."
Technical risk
<tr> elements implemented via JS listeners typically lack keyboard focus, role, and Enter/Space handling, and can hijack text selection, middle-click, and Ctrl/Cmd-click (open in new tab), and conflict with in-row action buttons/menus. This is the most likely source of user-visible bugs and the hardest to get right.Key questions
Stack fit — Compatible in principle with any Laravel + Nova application; it introduces no new runtime services, PHP extensions, or config surface. It fits cleanly only if we are on the Nova generation it was built for, and even then only as a UI nicety. Do not let it become load-bearing for any workflow.
Migration path — Recommended path is not composer require. Instead: (1) read the repository's source directly, (2) vendor the logic into our own app as a small custom Nova asset — a service provider calling Nova::script()/Nova::style() with our own JS — or fork it under our org and pin to a commit. Both give us: MIT license compliance (retain the notice), a code path we can patch on Nova upgrades, and no dead upstream in the dependency graph. If a fork is chosen, tag it 1.0.0-internal and require it by VCS path in composer.json.
Compatibility — Verify against a matrix of: Nova major version, Laravel version (9/10/11), PHP 8.x, and the browsers in our support policy. Also verify coexistence with any other table-extending packages (custom row components, inline-edit, filters, drag-and-drop reordering) — DOM-listener packages frequently collide because both attach click handlers to the same rows.
Sequencing
Maintenance — Ownership transfers entirely to us on day one. The upside is that the artifact is tiny; the downside is that it is invisible maintenance — a Nova upgrade can break it with no failing test unless we write one. Budget a recurring item in every Nova upgrade cycle, not a one-off. The archived status means we should also plan for the package disappearing from Packagist; vendoring eliminates that risk.
Support — None from upstream. Internal support burden is low-volume but high-friction: reports arrive as vague UX complaints ("I clicked the row and nothing happened" / "it opened twice") rather than errors, so triage requires a browser and a Nova session. Route these to the owning team with a documented reproduction checklist.
Scaling — Negligible. It is client-side only: no server cost, no query overhead, no per-request impact at any user count. The only scaling concern is codebase scale — every custom Nova asset we accumulate increases upgrade surface area, so keep the count small.
Failure modes
Ramp-up — Effectively zero for a Laravel developer: the whole feature is a handful of lines of JS plus a service provider registration. The real ramp-up cost is not understanding the code, it's discovering which Nova internals it depends on when it breaks — which is exactly why the source must be in our repo with a short README explaining the selectors and hooks it relies on. Total onboarding for a new team member: under one hour.
TPM recommendation — Do not take this as a dependency. Its opportunity score (15.8) and archived status confirm the ecosystem has moved past it. If row-click navigation is a genuine requirement, absorb the ~100 lines as internal code, harden the accessibility and modifier-click behavior in the same pass, and own it. If it is not a requirement, skip it entirely — the default primary-field link in Nova covers the majority of the value with none of the risk.
How can I help you explore Laravel packages today?