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 Text Card Laravel Package

think.studio/nova-text-card

A Laravel Nova card component for displaying custom text content on your dashboard. Add headings, notes, or instructional copy to Nova pages with a simple, configurable text card that's lightweight and easy to register.

View on GitHub
Deep Wiki
Context7

Getting Started

Install and register

composer require think.studio/nova-text-card

Because this is a vendor Nova card, there is no nova:card generator step — you register the card class directly:

// app/Providers/NovaServiceProvider.php
public function cards()
{
    return [
        new \Think\NovaTextCard\NovaTextCard('Some text to render'),
    ];
}

Where to look first

  1. src/ — the Card subclass. This is the real API surface: its constructor signature tells you what the card accepts (text, title, withMeta payload, width, etc.). Anything the README omits you will find here.
  2. resources/js/card.js (and the compiled dist/js/card.js) — the Vue component. This tells you exactly which props/meta keys the frontend reads, which is the source of truth for what "options" actually exist.
  3. resources/views/ — if there is a Blade view, it may be publishable/overridable, which is your cheapest customization path.
  4. composer.json — check the laravel/nova constraint before you commit to it. This package predates or targets a specific Nova major; a mismatch is the single most common install failure for abandoned Nova cards.

First use case

The intended job is a static informational block on a Nova dashboard — release notes, "how to use this admin" copy, an environment banner, or a support contact. Treat it as a presentation-only card: it renders text you hand it, it does not query anything. If you need dynamic content, you compose it yourself (see below).

Implementation Patterns

Resource detail sidebar instead of dashboard

The most common real-world placement is a detail card, not a dashboard card:

// inside a Resource's fields()
TextCard::make()->onlyOnDetail()

or via Nova::resources() / a cards() method on the resource. Verify the card resolves correctly in a three-column detail layout — most simple text cards assume full width and look cramped at 1/3 width.

Injecting content dynamically

Since the card just displays a string, build the string in PHP and pass it in:

(new NovaTextCard())
    ->withMeta([
        'text' => view('admin.support-blurb', [
            'onCall' => config('support.on_call'),
        ])->render(),
    ]);

Confirm against resources/js/card.js whether the component reads card.text or a meta property — guessing here produces a silently blank card, which is the #1 debugging time-sink with this package.

Multi-language admin

If the card renders a fixed string, don't hardcode English in NovaServiceProvider. Resolve it per request:

new NovaTextCard(__('admin.dashboard.help_text'))

This is also a clean way to make the card useful in a team where Nova is shared across locales.

Per-environment banners

A high-value, low-risk pattern: render a warning banner only when app()->environment() !== 'production', including the env name and current git SHA. Keeps staging from being mistaken for prod without writing a custom card.

Replacing the Vue component

If the package ships a dist/ build you can't rebuild, the pragmatic move is to copy the card class + Vue component into nova-components/TextCard and path-require it. Given the activity level of this package, treat it as a starting point rather than a dependency.

Gotchas and Tips

Version compatibility is the main risk. Nova cards are tightly coupled to Nova's major version (Vue 2 vs Vue 3, nova.mix vs the old asset pipeline). Check the laravel/nova constraint in composer.json and the compiled bundle before installing. If the constraint is loose (e.g. *), do not trust it — test on your actual Nova version.

License is NOASSERTION. There is no clear license grant. For an internal admin card the practical risk is low, but if this ships inside a distributed product, get clarity first or reimplement — the card is small enough that rewriting it is likely cheaper than a legal review.

Zero stars, zero dependents, no ecosystem. Plan for abandonment: pin an exact version in composer.json, and expect no upstream fixes. Budget an hour to read the source rather than relying on the README.

Nova's private Composer repo. laravel/nova is a paid, authenticated repository. If composer require fails, it's usually CI or a teammate missing the Nova credentials in auth.json, not this package.

Blank card debugging checklist, in order: (1) is the card registered in cards() and not shadowed by Nova::cards() order, (2) does the Vue component's expected prop name match what you passed, (3) is dist/js/card.js actually published/present, (4) hard-refresh the browser — Nova card bundles are cached aggressively.

XSS. If the component uses v-html to render your text, anything user-influenced (a name, a config value from a DB row) becomes an injection vector in an admin-authenticated context. Keep the input static or sanitize it. If it renders as plain text, you lose formatting — so decide up front which you actually need.

Extension points are limited to what the card exposes: constructor args, withMeta, width(), and visibility helpers (onlyOnDetail, canSee). canSee() is worth using for role-gated help text — restrict operational copy to the roles who need it rather than cluttering every admin's dashboard.

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.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource