← All @molecule/* packages · App templates
@molecule/app-hero-metric-card-reactFeature · hero-metric-card · App (browser) · v1.0.1 · Apache-2.0
Top-of-dashboard hero metric card — large primary value, optional trend chip + progress-ring slot, accent border
npm install @molecule/app-hero-metric-card-react@molecule/app-hero-metric-card-react is a ready-made hero-metric-card feature for the app (browser) side. It composes the core interfaces it needs, so it works with whichever providers your app has bonded.
import { HeroMetricCard } from '@molecule/app-hero-metric-card-react'
;<HeroMetricCard
title="Total Revenue"
value="$84,320"
unit="USD"
trend={{ direction: 'up', delta: '+12.4%' }}
subtitle="vs last month"
accent="success"
onClick={() => navigate('/revenue')}
/>Works with: @molecule/app-i18n, @molecule/app-react, @molecule/app-ui, @molecule/app-ui-react
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
React hero metric card primitives.
Exports:
<HeroMetricCard> — top-of-dashboard hero metric card.<HeroMetricTrendChip> — directional ▲/▼ + delta chip used inside the card.HeroMetricCardProps, HeroMetricTrend,
HeroMetricTrendDirection, HeroMetricAccent, HeroMetricSemanticAccent.import { HeroMetricCard } from '@molecule/app-hero-metric-card-react'
;<HeroMetricCard
title="Total Revenue"
value="$84,320"
unit="USD"
trend={{ direction: 'up', delta: '+12.4%' }}
subtitle="vs last month"
accent="success"
onClick={() => navigate('/revenue')}
/>
feature
npm install @molecule/app-hero-metric-card-react @molecule/app-i18n @molecule/app-react @molecule/app-ui @molecule/app-ui-react react
npm install -D @types/react
HeroMetricCardPropsProps for <HeroMetricCard>.
interface HeroMetricCardProps {
/** Title / label for the metric (usually `t('...')`). */
title: ReactNode
/** The large primary value (string or formatted number). */
value: ReactNode
/** Optional unit shown next to the value (e.g. `'kcal'`, `'bpm'`). */
unit?: ReactNode
/** Optional trend chip rendered below the value. */
trend?: HeroMetricTrend
/** Optional supporting text below the trend / value. */
subtitle?: ReactNode
/** Optional progress ring or sparkline ReactNode shown to the right. */
progressRing?: ReactNode
/** Optional leading icon (used when no `progressRing` is provided). */
icon?: ReactNode
/** Optional accent border color (top edge). */
accent?: HeroMetricAccent
/** Optional click handler — turns the card into a button-role interactive. */
onClick?: () => void
/**
* When `true`, swaps the value for a localized loading line and
* announces a loading state to assistive tech.
*/
loading?: boolean
/** Extra classes on the outer Card. */
className?: string
/** `data-mol-id` for AI-agent selectors. */
dataMolId?: string
}
HeroMetricTrendTrend chip rendered below the hero value.
delta is rendered verbatim — the caller is responsible for sign,
units, and locale formatting.
interface HeroMetricTrend {
/** Direction arrow / color. */
direction: HeroMetricTrendDirection
/** Pre-formatted delta string, e.g. `'+2.4%'` or `'-12 bpm'`. */
delta: string
}
HeroMetricTrendChipPropsProps for {@link HeroMetricTrendChip}.
interface HeroMetricTrendChipProps {
/** Direction + pre-formatted delta string. */
trend: HeroMetricTrend
/** Extra classes. */
className?: string
}
HeroMetricAccentOptional accent color for the hero card's top edge.
A semantic name ({@link HeroMetricSemanticAccent}) is resolved through
cm.progressColor() to a real, theme-aware ClassMap color token, so the
accent bar is visibly colored in both light and dark themes. An arbitrary
CSS color string is also accepted and applied inline (a one-off accent
color — the documented ClassMap exception).
type HeroMetricAccent = HeroMetricSemanticAccent | (string & { __raw?: never })
HeroMetricSemanticAccentSemantic accent names for the hero card's top-edge accent bar.
Each name resolves at render time to a real ClassMap ColorVariant (and
therefore a real, theme-aware color token). Note the two the theme has no
matching token for: 'danger' → error and 'neutral' → secondary.
type HeroMetricSemanticAccent = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'
HeroMetricTrendDirectionDirection of a hero-metric trend chip.
'up' — value rose since the prior period.'down' — value fell since the prior period.type HeroMetricTrendDirection = 'up' | 'down'
HeroMetricCard(props)Top-of-dashboard hero metric card.
Replaces the bespoke *HeroCard components found across flagship
dashboards (CalorieRingCard, TodayHeroCard, MoodHeroCard,
SleepScoreHeroCard, PetSnapshotHero, NextAppointmentCard,
WorkoutHeroCard, VitalsHeroCard, …) with a single composable
primitive.
Layout: large value left (with optional unit + trend chip + subtitle),
progressRing or icon slot to the right.
Styling routes entirely through getClassMap() — including the colored
top-edge accent, which is a full-width bar tinted via cm.progressColor().
Inline style is used only for the bar's fixed height (and a one-off raw
accent color when the caller passes a CSS color string).
function HeroMetricCard({
title,
value,
unit,
trend,
subtitle,
progressRing,
icon,
accent,
onClick,
loading = false,
className,
dataMolId,
}: HeroMetricCardProps): ReactElement<unknown, string | JSXElementConstructor<any>>
props — Component props.Returns: The rendered hero metric card element.
HeroMetricTrendChip(props)Compact trend indicator rendered below the hero value.
Shows a directional arrow (▲ / ▼) followed by the caller-provided
delta string. The arrow's aria-label is localized via
@molecule/app-i18n so screen readers announce "Trending up" or
"Trending down" rather than the bare glyph.
function HeroMetricTrendChip({
trend,
className,
}: HeroMetricTrendChipProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>
props — Component props.Returns: The rendered trend chip element.
Peer dependencies:
@molecule/app-i18n ^1.0.1@molecule/app-react ^1.0.1@molecule/app-ui ^1.0.1@molecule/app-ui-react ^1.0.1react ^18.0.0 || ^19.0.0@molecule/app-i18n
@molecule/app-react
@molecule/app-ui
@molecule/app-ui-react
react
Every semantic accent (primary/success/warning/danger/info/
neutral) resolves to a REAL, theme-aware ClassMap color via
cm.progressColor() — visibly colored in both light and dark themes.
danger maps to the theme's error token and neutral to secondary
(the theme defines no danger/neutral token). A raw CSS color string is
also accepted for one-off brand accents.
Styling routes through getClassMap() (muted text = cm.textMuted,
caps/tracking = cm.uppercase/cm.trackingWide). The lone raw utility is
leading-none on the big value — a line-height with no ClassMap member.
getClassMap() requires a bonded ClassMap. Text uses
@molecule/app-i18n's t() with English fallbacks — the companion
@molecule/app-locales-hero-metric-card bond supplies translations.
Translation strings are provided by @molecule/app-locales-hero-metric-card.