sixlive/nova-text-copy-field
A Laravel Nova field that displays text with a one-click copy-to-clipboard button, making it easy for users to grab URLs, IDs, tokens, and other values from the admin panel without manual selection. Simple to install and customize.
Whether to invest in internal-tooling UX at all. This package is a forcing function for a question most roadmaps never ask explicitly: how much friction should we remove from admin workflows where staff repeatedly lift identifiers out of Nova? v1.5.0 extends the copy-to-clipboard affordance from index/detail views into create/edit forms (#26) — the exact moment a freshly generated API token, invite link, webhook secret, or account ID needs to leave the screen and land in a ticket or config. The PM decision is not "should we install this," it's "do we care about transcription errors on operator surfaces?" If yes, this is a nearly free way to act on it.
Build vs. buy for admin-panel niceties. The honest framing is a tiny third-party dependency versus ~100 lines of a custom Nova field we own, build, and maintain. Buying is defensible only if you accept single-maintainer risk and Nova-version coupling; otherwise vendoring the component is the cheap, durable answer. Either way this is a low-stakes decision that should not consume roadmap energy — make it a policy call, not a project.
Standardizing a "copyable value" convention across resources. If the roadmap includes support consoles, onboarding flows, or account-provisioning tooling, there's a real case for a consistent field pattern instead of hand-rolling per resource. This package is one candidate implementation — but the convention is the decision, and it's worth standardizing regardless of which implementation wins. A one-file internal wrapper (CopyableValue extends TextCopy) makes the convention durable and makes swapping implementations a single-line change.
Drawing a scope boundary the org will otherwise blur. Fit is where the copied value is convenience-sensitive but not highly classified — IDs, public links, keys shown once at creation. This is not a secrets-management control: no masking, reveal-on-demand, audit trail, or rotation. Do not let it be positioned internally as a security feature. Getting that boundary wrong is the only way this small dependency becomes a governance problem.
Dependency triage and adoption prioritization. 69 stars, zero dependents, last release March 2019, no multi-maintainer stewardship. That profile supports a clear call: opportunistic adoption on an internal panel, inappropriate as a validated strategic dependency. Treat it as "cheap, useful, disposable" — and plan the disposal path before adoption, not after.
Where to place the affordance (index vs. detail). For support/ops desks, the highest-value placement is often the index, so an operator reading a ticket can copy an account ID without opening the record. That's a product decision about workflow, and it hinges on whether the component implements IndexField — a technical detail with a direct UX consequence. Verify before promising it.
Adopt when:
composer.json constraints and prove it in a dev environment before writing it into a resource.->onlyOnDetail()->readonly()) is where this field is safest and most useful; resolveUsing() for derived strings (e.g., a full invite URL) is the sweet spot.navigator.clipboard requires a secure context; over plain HTTP the button can fail silently, generating tickets that look like bugs.1.5.0, name an owner, record it as disposable in the dependency register, and review on every Nova major upgrade rather than on a calendar.Text::make() instead, or an in-house nova:field replacement of ~100 lines. Both are hours, not days.Look elsewhere when:
Text behaviors — displayUsing(), asHtml(), index truncation, custom withMeta() props. This is a subclass with its own Vue component; the component author's props, not Nova's, decide what works. Use plain Text and accept the missing button rather than hacking around it in the resource.""; either generate pre-render in a model observer and route the operator to detail, or scope the field to detail only.To executives — the one-paragraph version: This is a small, free UI addition to our internal admin panel that gives staff a one-click copy button on values they currently retype by hand — account IDs, invite links, slugs, one-time tokens. It reduces transcription errors on operator surfaces at essentially zero cost and zero roadmap impact. It is explicitly not a security or secrets-management feature: it adds no masking, audit trail, or rotation, and we will not position it as one. We are treating it as disposable — pinned to a single version, owned by one person, and reviewed whenever we upgrade Nova, with a one-file replacement path if it breaks. The decision before us isn't "should we install this," it's "do we care about operator friction on admin screens?" If yes, this is the cheapest possible way to act on it, reversible one field at a time.
To engineering — what we're actually asking for:
readonly() on a form (the combination we'll actually use, and the least likely to be covered upstream).CopyableValue wrapper extending TextCopy so the label, visibility, and accessibility text live in one file. That wrapper is also the exit ramp.1.5.0 (not ^1.5), add it to the dependency register marked disposable, run nova:publish + hard refresh after any change, and verify accessibility by hand once (tab focus, screen-reader label, visible success state).Text behaviors that don't carry over, and aggressive asset caching masking changes. Each has a documented workaround; none is a blocker.The ask: approve as a policy-level, low-stakes convenience dependency — not a project, not a security control — with the explicit understanding that it is reviewed at every Nova major upgrade and replaced rather than rescued if it breaks.
How can I help you explore Laravel packages today?