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

Clickable Table Row Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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

  • Archived, single-maintainer, 17 stars, 0 dependents: no security response path, no upstream fixes, no community signal. Treat as unmaintained source code, not as a dependency.
  • DOM/Vue-internal coupling: a Nova upgrade that renames a CSS class or changes the row component silently breaks the feature — no error, no test, just rows that stop being clickable or navigate twice.
  • Accessibility and UX regressions: clickable <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.
  • Nova licensing dependency: nothing works without a valid Nova license; the package cannot be evaluated in CI without a Nova credential.
  • Low opportunity score (15.8): the market has moved on; several maintained alternatives and Nova-native row-link patterns exist, so there is no strategic reason to carry this specific artifact.

Key questions

  1. Which Nova major version are we on, and does the package's Vue 2 asset model even load under it?
  2. Does it handle modifier-clicks, keyboard activation, and in-row action buttons, or does it swallow those events?
  3. Is the code small enough to audit completely (expected: 1–2 files, <200 LOC) and relicense as internal code under MIT?
  4. Do we have a Nova-credentialed CI environment to smoke-test the UI on every Nova upgrade?
  5. Is row-click navigation an actual product requirement, or a nice-to-have that the default "click the primary field" link already satisfies?

Integration Approach

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

  1. Spike (0.5 day) — install on a scratch Nova instance, confirm the behavior and read the source; document exactly which DOM selectors and Vue hooks it relies on.
  2. Decision gate — if it works as-is on our Nova version, proceed to vendor; if not, reimplement the ~50–150 lines natively. In both cases the deliverable is our code.
  3. Hardening (1 day) — add keyboard support, modifier-click handling, and suppression of clicks originating from action menus/checkboxes; add a Dusk or manual QA checklist.
  4. Rollout — ship behind a config flag, enable per-resource (not globally) so noisy index views don't become accidental navigation traps; announce in release notes.
  5. Upgrade gate — add "verify clickable rows" to the Nova upgrade runbook.

Operational Impact

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

  • Silent regression on Nova upgrade — rows stop being clickable; no exception, no log. Highest-likelihood failure.
  • Event conflict — double navigation, or in-row action buttons/checkboxes that no longer respond because the row handler intercepts the click. Highest-severity failure (blocks a workflow).
  • Accessibility gap — keyboard-only and screen-reader users cannot activate rows; potential compliance issue if we are subject to WCAG obligations.
  • Selective-click bugs — Ctrl/Cmd-click fails to open in a new tab, or dragging to select text triggers navigation, eroding trust in the UI.
  • Packagist disappearance — mitigated by vendoring.

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.

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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels