Intentwise Primitives

Cards

Standalone KPI display blocks for dashboards and summaries. MetricCard combines a formatted value, trend badge, and optional icon into a single component.

Dashboard Grid

Four MetricCards in a responsive grid layout β€” the most common dashboard pattern.

Monthly Revenue
$708.9K
12.50%MoM

Total revenue across all channels

Active Customers
12,847
5.30%MoM
ROAS
4.20x
8.10%WoW
ACoS
18.50%
2.30%MoM

Advertising Cost of Sales

Show code
<MetricCard data={{ title: 'Revenue', value: 708939, format: 'currency', trend: 'up', changePercent: 12.5 }} />

Size Variants

Available in sm, md (default), and lg sizes for different layout densities.

sm

Monthly Revenue
$708.9K
12.50%MoM

Total revenue across all channels

md

Monthly Revenue
$708.9K
12.50%MoM

Total revenue across all channels

lg

Monthly Revenue
$708.9K
12.50%MoM

Total revenue across all channels

Show code
<MetricCard data={data} size="sm" />
<MetricCard data={data} size="md" />
<MetricCard data={data} size="lg" />

Without Trend

Trend badge can be hidden with showTrend={false}.

Monthly Revenue
$708.9K

Total revenue across all channels

Show code
<MetricCard data={data} showTrend={false} />

With Secondary Change

MetricCard supports a secondary comparison period (e.g., YoY alongside MoM).

Monthly Revenue
$708.9K
12.50%MoM8.20%YoY

Total revenue across all channels

Show code
<MetricCard data={{ ...data, secondaryChange: { value: 85000, percent: 8.2, trend: 'up', periodLabel: 'YoY' } }} />

Locked / Gated State

When a metric requires additional access, set locked={true} and provide a lockedAction ({ label, href, tooltip }). The value, trend, and sparkline are hidden; the label renders as a link and the info icon shows the tooltip on hover. All three fields are dynamic β€” pass any message and URL from the consuming app.

Total Revenue
Provide Access
Total ROAS (TROAS)
Provide Access
Show code
<MetricCard
  data={{
    title: 'Total Revenue',
    value: 0,
    format: 'currency',
    locked: true,
    lockedAction: {
      label: 'Provide Access',
      href: 'https://help.intentwise.com',
      tooltip: 'Marketplace access required',
    },
  }}
/>

HealthScoreGauge

Account Health

Composite score card with ProgressCircle gauge and sub-metric rows with status indicators, mini progress bars, and trend arrows.

Account Health Score

Last 30 days performance

78Health
ACoS
22.0%0.0%
CTR
3.500.0%
Conversion Rate
12.0%
TACoS
45.0%0.0%
Show code
<HealthScoreGauge data={{ overallScore: 78, overallStatus: 'good', metrics: [...] }} />

Size Variants

Available in sm, md (default), and lg sizes.

sm

78Health
ACoS
22.0%0.0%
CTR
3.500.0%
Conversion Rate
12.0%
TACoS
45.0%0.0%

md

78Health
ACoS
22.0%0.0%
CTR
3.500.0%
Conversion Rate
12.0%
TACoS
45.0%0.0%

lg

78Health
ACoS
22.0%0.0%
CTR
3.500.0%
Conversion Rate
12.0%
TACoS
45.0%0.0%
Show code
<HealthScoreGauge data={data} size="sm" />

InfoCard

Collapsible Info Card

Card with title and expandable content. defaultExpanded and onToggle supported.

How we calculate ROAS
Show code
<InfoCard title="How we calculate ROAS" defaultExpanded={false}>
  <p>ROAS = Revenue / Ad Spend. We use last 30 days data.</p>
</InfoCard>

InlineNotice

Borderless notice (billing-style copy)

Light grey surface, secondary text, links use primary + underline. `variant` picks icon + tint (here: `warning` = alert circle, amber).

The list of subscriptions will be updated at the start of each month. If you wish to add new subscriptions, or cancel existing subscriptions, please reach out to our Customer Success team at [email protected].
Info variant uses the circled β€œi” icon for softer guidance copy.
Success variant uses a check icon for confirmations.
Show code
<InlineNotice variant="warning">
  <>… reach us at <a href="mailto:[email protected]" className="underline">[email protected]</a>.</>
</InlineNotice>

TitleStatusCard

Title + status row (e.g. subscriptions)

Legacy billing `subsList`: success tone uses a 6% success tint (`bg-iw-success/[0.06]`), no border, `shadow-iw-sm`. Neutral uses `bg-iw-light-grey`.

Example grid

Intentwise Ad Optimizer - Amazon AdvertisingActive
Intentwise Ad Optimizer - Walmart AdvertisingActive
Intentwise Analytics CloudActive
Intentwise Analytics Services - Custom ReportsActive
Intentwise Content AnalyticsActive
Intentwise Explore - Amazon Marketing CloudActive
Intentwise Managed Services - AmazonActive
Intentwise Share Of VoiceActive
Show code
<TitleStatusCard title="Product name" />
<TitleStatusCard title="Other" statusLabel="Trialing" statusTone="neutral" />

TitleStatusCard β€” custom status

Optional `statusLabel` and `statusTone`.

Custom product lineTrialing
Show code
<TitleStatusCard title="Custom product line" statusLabel="Trialing" statusTone="neutral" />

MetricChip

Interactive Metric Chips

Small chip representing a selected metric. Supports chart type switching (line/bar), removal, and color dots.

SpendRevenueACoS
Show code
<MetricChip label="Spend" color="#4573D2" type="line" onTypeChange={...} onRemove={...} />

Variants

Control visibility of color dot, chart type icons, and remove button.

With everythingNo chart iconsNo removeMinimal
Show code
<MetricChip label="CTR" showColor={false} showChartTypeIcons={false} showRemove={false} />

MetricCardsDashboard

Metric Cards Grid

Responsive grid of MetricCards with optional customization via MetricCardSelector. cards, title, categories, size.

Key Metrics

Spend
$48.3K
Revenue
$156.8K
ROAS
3.25
ACoS
30.77%
Impressions
4,850,000
Clicks
38,500
Show code
<MetricCardsDashboard cards={cards} title="Key Metrics" size="sm" />

Drag-to-Reorder (no Customize button)

Pass draggable={true} with showCustomize={false} to enable drag-reorder without showing the Customize button or per-card remove buttons. Pair with visibleOrder + onVisibleOrderChange for controlled persistence.

Spend
$48.3K
Revenue
$156.8K
ROAS
3.25
ACoS
30.77%
Impressions
4,850,000
Clicks
38,500
Show code
<MetricCardsDashboard
  cards={cards}
  showCustomize={false}
  draggable={true}
  visibleOrder={order}
  onVisibleOrderChange={setOrder}
  size="sm"
/>

With Sparkline

Pass a sparkline object (values[], color, showArea) inside the data prop to render a mini trend chart below the value β€” as used in the Overview page KPI strip.

Spend
$526.6M
233.60%vs prev period
Ad Attr. Revenue
$2.4B
349.20%vs prev period
Impressions
529,339,124
120.10%vs prev period
ROAS
4.62
49.50%vs prev period
Show code
<MetricCard
  data={{
    title: 'Spend',
    value: 526600000,
    format: 'currency',
    trend: 'up',
    changePercent: 233.6,
    sparkline: { values: [...], color: '#ef4444', showArea: false },
  }}
  size="sm"
/>

Overview Page Layout (6-col subgrid)

Matches the Walmart Overview KPI strip exactly: 6-column grid with grid-template-rows: subgrid so title / value / sparkline / trend rows align horizontally across all cards. Drag-to-reorder enabled, Customize button hidden.

Spend
$526.6M
233.60%vs prev period
Ad Attr. Revenue
$2.4B
349.20%vs prev period
Impressions
529,339,124
120.10%vs prev period
ROAS
4.62
49.50%vs prev period
Total Revenue
$0
0.00%vs prev period
Total ROAS (TROAS)
0
0.00%vs prev period
Show code
<MetricCardsDashboard
  cards={cards}
  showCustomize={false}
  draggable={true}
  visibleOrder={order}
  onVisibleOrderChange={setOrder}
  size="sm"
  className={[
    '[&>div]:!grid',
    '[&>div]:[grid-template-columns:repeat(6,minmax(0,1fr))]',
    '[&>div]:[grid-template-rows:repeat(4,auto)]',
    '[&>div>div]:[grid-row:span_4]',
    '[&>div>div]:grid',
    '[&>div>div]:[grid-template-rows:subgrid]',
    '[&>div>div>div]:!grid',
    '[&>div>div>div]:[grid-row:span_4]',
    '[&>div>div>div]:[grid-template-rows:subgrid]',
  ].join(' ')}
/>

MetricCardSelector

Metric Card Selector Modal

Modal to pick which metric cards to display. Grouped by category with search and reset.

Show code
<MetricCardSelector isOpen={open} onClose={...} categories={cats} selectedKeys={keys} onApply={setKeys} />