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

Nova Tooltip Field Laravel Package

marshmallow/nova-tooltip-field

marshmallow/nova-tooltip-field is a Laravel Nova field that adds configurable tooltips to resource fields, showing helpful hints on hover or click. Use it to clarify data, explain icons, and guide users without cluttering your admin UI. Supports custom text and placement.

View on GitHub
Deep Wiki
Context7

Getting Started

marshmallow/nova-tooltip-field is a thin Nova field wrapper around Nova’s built-in <Tooltip> Vue component. It exists so you can drop an inline help icon into a resource form/details page without writing a custom field or hand-rolling a Vue component for resources/js/components/Tooltip.vue. It’s a very small package (3 stars, no dependents), so treat it as a convenience wrapper rather than a framework: read the source first, it will take five minutes.

Minimal steps

composer require marshmallow/nova-tooltip-field

Then in a Nova resource:

use Marshmallow\NovaTooltipField\NovaTooltipField;

public function fields(NovaRequest $request): array
{
    return [
        NovaTooltipField::make('Help')
            ->text('This value is used in the invoice footer.'),
        // ... real fields
    ];
}

Where to look first

  1. README.md — confirm the exact fluent method names for your tagged version (text(), tooltip(), content() have all been used in similar packages; don’t guess).
  2. src/ — the Field subclass. You’re looking for the $component value and the withMeta()/resolve logic, since that determines what props reach Vue.
  3. resources/js/components/ — the Vue component, if one is shipped. If the component simply renders Nova’s <Tooltip> and passes text, there is nothing else to learn.
  4. composer.json — verify the Nova version constraint. This is the single most important line for whether the package will work on your install.

First use case

Adding an inline help icon next to a confusing form field:

NovaTooltipField::make('Tax Rate')
    ->text('Percentage excluding VAT. Leave blank to inherit from the company default.')
    ->onlyOnForms(),

This is the highest-value, lowest-risk use: you get documentation inside the admin UI, and onlyOnForms() keeps it out of the detail view and index table where it would be noise.

Implementation Patterns

Separating the tooltip into its own field

Because this is a Field subclass, it appears as its own row in the form grid. The common pattern is to place it immediately before the field it documents, and to constrain it so it never leaks into unwanted views:

NovaTooltipField::make('Help')
    ->text(__('invoice.tax_rate_help'))
    ->onlyOnForms()
    ->hideFromIndex(),

If the package supports Nova 4’s ->help()-style meta, prefer injecting the text through meta so it stays out of the database entirely. Never let a help-text field be sortable or searchable — it has no backing column.

Localisation done once

Don’t inline strings in every resource. Wrap it:

// app/Nova/Fields/HelpIcon.php
class HelpIcon extends NovaTooltipField
{
    public static function for(string $translationKey): self
    {
        return static::make('Help')
            ->text(__($translationKey))
            ->asHtml(); // only if the package exposes html support
    }
}

Then HelpIcon::for('invoice.tax_rate_help') reads cleanly across resources and centralises the “hide it from index/detail” defaults.

Grouping help text with the field it describes

Nova’s Field::make() stack is linear, so the tooltip sits above or below its target, not physically beside it. If you truly need the icon adjacent to a label, you’re better off using Nova’s own field help() text or a small custom field — this package shines for blocks of guidance, not per-label icons.

Detail-view documentation

For read-only admin screens, the same field works as a persistent explanatory note:

NovaTooltipField::make('Compliance Notice')
    ->text('This record is retained for 7 years under HMRC rules.')
    ->onlyOnDetail(),

Combine with ->canSee(fn ($request) => $request->user()->isAdmin()) when the note is internal-only.

Conditional content

Because text() typically accepts a string resolved at field-definition time, use closures or withMeta if the package exposes them to vary the message by user or by resource state:

NovaTooltipField::make('Status Help')
    ->text($this->status === 'locked'
        ? 'Locked records cannot be edited.'
        : 'Edit freely until the month is closed.')

If text() doesn’t accept a closure, compute the string in fields() — that method already has $request and $this.

Gotchas and Tips

Nova version compatibility is the whole ballgame. With 3 stars and no dependents, this package has not been battle-tested against Nova 5’s Vite/mix changes or Nova’s component API drift. Check composer.json for the laravel/nova constraint and the dist/ folder for a pre-built bundle. If dist/js/field.js is committed, it may have been compiled against an older Nova and silently fail to render (blank row, no JS error). If it’s not committed, you’ll need npm install && npm run prod in vendor/marshmallow/nova-tooltip-field.

No visible output? In order:

  1. php artisan nova:publish — the field’s assets may need publishing.
  2. Hard-refresh the browser; Nova caches compiled assets aggressively.
  3. Check the browser console for Unknown custom element — that means the component didn’t register, which is nearly always the version-mismatch issue above.
  4. php artisan optimize:clear if field meta looks stale.

It has no column. This field does not store anything. If you forget ->onlyOnForms() / ->onlyOnDetail() and put it on an index, you’ll get an empty table column. There is no sortable, searchable, or rules behaviour worth configuring — and validation rules on a tooltip field are meaningless.

Don’t add it to $fields on a create/update form where the form is tight on space. Each Nova field is a grid row; ten tooltips means ten extra rows and a lot of scrolling. Batch guidance into one longer tooltip where possible, or use Nova’s native ->help() on individual fields.

XSS surface. If the package supports HTML in the tooltip content (asHtml(), ->text() rendered with v-html), any user-influenced string is an injection vector. Keep tooltip content in translation files or hardcoded strings — never interpolate $this->notes or other record data into HTML tooltips without escaping.

Extension points are limited by design. There’s essentially one: subclass the field and override the component or the meta payload. Given the tiny codebase, forking into app/Nova/Fields/Tooltip.php (or copying the Vue component into your own nova-components/) is often a better long-term bet than depending on a 3-star package that may not track Nova releases. Weigh that against the trivial effort of maintaining ~50 lines of code.

Maintenance signal. Last release listed as 2026-03-18 with zero dependents means you are effectively the only user in the wild. Pin the version in composer.json, and add a note in your upgrade checklist to re-test tooltips after every Nova major bump — this is the kind of dependency that quietly breaks during a Nova 5 upgrade and gets discovered by an admin noticing missing help text.

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.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource