@@ -2,6 +2,13 @@ import type { DiagnosisBlock, ViewBlock } from "@internal/dashboard-agent";
22import { VIEW_BLOCK_VERSION } from "@internal/dashboard-agent-contracts" ;
33import { QueryResultsChart } from "~/components/code/QueryResultsChart" ;
44import { AGENT_CHART_PLOT_CLASS } from "~/components/dashboard-agent/AgentChart" ;
5+ import { ConfidenceBadge } from "~/components/dashboard-agent/agent-badges" ;
6+ import {
7+ AgentCard ,
8+ AgentCardBody ,
9+ AgentCardHeader ,
10+ type AgentCardDensity ,
11+ } from "~/components/dashboard-agent/agent-card" ;
512import { DemoChartCard , demoFixtures } from "~/components/dashboard-agent/demo" ;
613import { RunDiagnosisCard } from "~/components/dashboard-agent/RunDiagnosisCard" ;
714import { ViewBlocks } from "~/components/dashboard-agent/view-catalog" ;
@@ -167,10 +174,10 @@ const badgeMatrixBlocks: DiagnosisBlock[] = DIAGNOSIS_CATEGORIES.map((category,
167174
168175function EmptyChartCard ( ) {
169176 return (
170- < div className = "overflow-hidden rounded-lg border border-border-bright bg-background-dimmed" >
171- < div className = "border-b border-grid-bright bg-background-bright px-3 py-2 text-xs font-medium text-text-dimmed" >
177+ < AgentCard >
178+ < AgentCardHeader className = "text-xs font-medium text-text-dimmed" >
172179 { demoFixtures . demoChart . title }
173- </ div >
180+ </ AgentCardHeader >
174181 < div className = { AGENT_CHART_PLOT_CLASS } >
175182 < QueryResultsChart
176183 rows = { [ ] }
@@ -179,7 +186,29 @@ function EmptyChartCard() {
179186 timeRange = { demoFixtures . demoChart . timeRange }
180187 />
181188 </ div >
182- </ div >
189+ </ AgentCard >
190+ ) ;
191+ }
192+
193+ /** The card primitive on its own: both body densities, and a card with no header. */
194+ function CardChrome ( { density, header } : { density ?: AgentCardDensity ; header ?: boolean } ) {
195+ return (
196+ < AgentCard >
197+ { header ? (
198+ < AgentCardHeader className = "flex flex-wrap items-center gap-2" >
199+ < span className = "text-xs font-medium text-text-dimmed" > Card header</ span >
200+ < ConfidenceBadge confidence = "high" />
201+ </ AgentCardHeader >
202+ ) : null }
203+ < AgentCardBody density = { density } >
204+ < p className = "text-sm text-text-bright" >
205+ The card owns its border, surface and insets; the transcript owns where it sits.
206+ </ p >
207+ < p className = "text-sm text-text-dimmed" >
208+ A second section, so the body's density is visible as the gap between them.
209+ </ p >
210+ </ AgentCardBody >
211+ </ AgentCard >
183212 ) ;
184213}
185214
@@ -196,6 +225,10 @@ const STATES: Record<string, React.ReactNode> = {
196225 ) ,
197226 "view-blocks-actions-offer" : < ViewBlocks blocks = { [ offerActionsBlock ] } onIntent = { noop } /> ,
198227
228+ "card-compact" : < CardChrome header density = "compact" /> ,
229+ "card-roomy" : < CardChrome header density = "roomy" /> ,
230+ "card-headerless" : < CardChrome /> ,
231+
199232 "diagnosis-full-high" : < RunDiagnosisCard block = { fullDiagnosis } /> ,
200233 "diagnosis-low-minimal" : < RunDiagnosisCard block = { lowConfidenceDiagnosis } /> ,
201234 "diagnosis-badge-matrix" : (
0 commit comments