Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Account healthNewPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
Research runPro
AI insight cardNewPro
Catch upNewPro
AI feature launchNewPro
AI search barNewPro
AI setup wizardNewPro
Call insightsNewPro
Lead scoringNewPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
Agent builderNewPro
Agent galleryNewPro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Two-factor setupNewPro
Magic linkNewPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Onboarding surveyNewPro
Spend alertNewPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pageNewPro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Domain verifyNewPro
Webhook testerNewPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Seat managerNewPro
Credit top-upNewPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Activity feedNewPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
Feature votingNewPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Release readinessPro
Kanban boardPro
Smart schedulerNewPro
Task breakdownNewPro
Goal trackerNewPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new74 new
BlocksAI insight card

AI insight card

Pro

A KPI card that explains itself. Explain streams a short reason for the change and ranks three drivers with contribution bars. A numbered annotation lights up on the sparkline as each driver is read, and follow-up chips ask the next question in place.

Live block · sample data

When to use

  • A dashboard KPI where readers ask why it moved, such as net revenue, MRR, signups or churn.
  • Weekly business reviews and finance dashboards that want an explanation next to the number.
  • Products adding AI analysis to existing analytics without a separate chat.

When not to use

  • Open ended questions across many tables: use ask-your-data.
  • A plain number with no explanation: use metric-card or stat-card.
  • Dense multi series charts: use a full chart component.

Installation

Pro source and install commands unlock with a Pro plan.

Usage

Pass your KPI as `metric`: totals, the current and previous series, and point labels. Pass `followUps` for the chips. Wire `explain({ metric, followUp, signal })` to your analysis endpoint. It should resolve with `{ segments, drivers }`, where each driver has a signed delta and the series index its annotation marks. Write one text segment per driver, with `driver` set and in rank order, so the chart lights up as the reader reaches it. The signal aborts on Stop, Hide or a new question. If the promise rejects, the card shows an error row with Retry. Use `lowerIsBetter` for churn or cost metrics so a rise reads red, and `format` for metrics that are not currency. With `explain` set, autoPlay is off by default, so the card never calls the model on its own.

example.tsx
1import { AiInsightCard } from "@/components/arc/blocks/ai-insight-card/ai-insight-card";2 3export function RevenueCard({ metric }) {4  return (5    <AiInsightCard6      metric={metric}7      followUps={[{ id: "plan", label: "Break down by plan" }]}8      explain={async ({ metric, followUp, signal }) => {9        const res = await fetch("/api/insights/explain", {10          method: "POST",11          body: JSON.stringify({ metric: metric.label, followUp: followUp?.id }),12          signal,13        });14        if (!res.ok) throw new Error("The analysis service did not respond.");15        return res.json(); // { segments: [{ text, driver? }], drivers: [{ id, label, delta, point }] }16      }}17    />18  );19}
Built fromButtonTextShimmer

API reference

AiInsightCard

A KPI card with a sparkline that explains its own change: Explain streams a short reason, ranks three drivers with contribution bars and lights up a numbered chart annotation as each driver is read. Follow-up chips ask the next question in place.

PropTypeDefaultDescription
metricInsightMetricsampleMetricThe KPI: label, period, value, previous, comparisonLabel, series, previousSeries, points (tooltip labels), legend labels, an optional format function and lowerIsBetter to flip delta colors.
insightInsightsampleInsightThe local answer for Explain: segments of text (a segment with `driver` lights up that driver) and up to three ranked drivers, each with a signed delta and the series index its annotation marks.
followUpsInsightFollowUp[]sampleFollowUpsFollow-up chips under the answer. Each has an id, a label and an optional local insight. The chip showing its answer reads as pressed.
explain(request: { metric, followUp?, signal }) => Promise<Insight>–Fetch a real answer. Resolve with the full insight; the card streams it in chunks and syncs the annotations. The signal aborts on Stop, Hide or a new question. A rejection shows the error row with Retry.
onExplain(followUp?: InsightFollowUp) => void–Called when Explain is pressed (no argument) or a follow-up is picked.
autoPlaybooleantrue without explainPlays Explain and each follow-up on a loop while the card is on screen, until the reader interacts. Off with reduced motion.
thinkingLabelstring"Reading invoices and renewals"Shimmering status line while the answer is prepared.
source{ label: string; icon?: ReactNode } | nullStripe billingData source in the footer. Pass null to hide it.
model{ label: string; icon?: ReactNode } | nullClaude Sonnet 5.5Model in the footer. Pass null to hide it.
classNamestring–Class on the card root.

Keyboard interactions

Tab
Moves through Explain (Stop while streaming, Hide when open), the chart, Retry and the follow-up chips.
EnterorSpace
Explains the change, stops a stream, hides the panel or asks a follow-up.
LeftorRight
With the chart focused, steps through the points and announces each value.
HomeorEnd
Jumps to the first or last point.
Escape
Clears the chart readout.

Accessibility

  • The card is a labelled section; Explain carries aria-expanded and aria-controls for the answer panel.
  • A polite live region announces when the answer starts, the full answer when it is ready, Stop and errors. Without `explain` it says the answer is simulated from sample data.
  • Deltas carry a sign as well as color, and unread driver rows are hidden from assistive tech until the answer reaches them.
  • The chart is a focusable group with arrow key reading; values are announced through its own live region.
  • Follow-up chips use aria-pressed for the answer on screen and are disabled while a stream runs.

Motion

  • The panel opens and closes on a critically damped 260ms spring; answers of a different length spring to their height. No bounce.
  • The answer streams 3 to 7 words every 34ms, each chunk only fading in over 140ms. Its full text is reserved underneath, so the card never grows while streaming.
  • Annotations fade and scale in over 200ms as their driver is read; the driver being read takes the accent on its badge, dot, guide, rank and underline.
  • Contribution bars grow to their share over 240ms ease-out; skeletons crossfade to labels in 160ms.
  • Reduced motion: the answer appears whole after the short thinking state, transitions cut, and the demo loop stays off.

Responsive behavior

  • The card fills its container up to 640px. Under 460px the legend hides and the contribution bars shorten, so driver labels keep their room and truncate with an ellipsis.
  • Follow-up chips wrap onto a second row on phones. The chart redraws at the container width with crisp strokes.
  • Touch scrubs the chart only while the finger is down, so vertical page scrolling still works.

Performance

  • The chart is one inline SVG with two paths; annotations are absolutely positioned spans with CSS transitions.
  • Streaming updates one counter per tick; tokenizing runs once per answer.
  • The demo loop waits while the card is off screen and stops for good on the first interaction.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Use for one KPI that needs a why: revenue, signups, churn, pipeline. Return drivers that add up to the change, ranked by absolute size, at most three.
  • Point each driver at the series index where it shows, and write one text segment per driver with `driver` set, in rank order, so the chart lights up as the reader reaches it.
  • Pass lowerIsBetter for costs and churn so a rise reads red. Pass `format` for non-currency metrics.
  • With a real `explain`, autoPlay defaults to off so the card never spends model calls on its own.
/components/blocks/ai-insight-card/markdown

The full library index for assistants is at /llms.txt.

Related

Ask your dataProComponentA natural language to chart card: you ask a question, PostgreSQL streams into a collapsible, syntax highlighted panel, the query runs with a rolling row count, and the answer builds as stacked bars, lines or a table, with a one line insight streamed in underneath.Metric cardComponentA compact summary for a number that needs context.SparklineComponentShow a compact trend beside a value.Account healthProBlockA customer success card where a health score gauge, a renewal countdown and five sourced signals with sparklines lead into an AI risk summary and one recommended next step, like scheduling a QBR before usage slips further.Text shimmerComponentShow ongoing work with a calm light across the words.
PreviousAgent builderNextCatch up
Arc · 129 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown

Net revenue

Oct 20 to 26
$482.1k−6.4%vs last weekThis weekLast week
Mon, Oct 20Sun, Oct 26