@vadimcomanescu/nadicode-design-system 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/.agents/skills/seed/SKILL.md +38 -166
  2. package/.agents/skills/seed/references/animation.md +2 -2
  3. package/.agents/skills/seed/references/responsive.md +1 -1
  4. package/README.md +2 -2
  5. package/dist/catalog/components.js +4 -4
  6. package/dist/{chunk-7A2RXKGH.js → chunk-GJ557DGH.js} +1 -1
  7. package/dist/{chunk-7XLZCXUL.js → chunk-K4U67BVG.js} +1 -1
  8. package/dist/{chunk-TUJZMJXW.js → chunk-LK2L3C7D.js} +1 -1
  9. package/dist/{chunk-DSMGCFMJ.js → chunk-POFFOUQW.js} +2 -5
  10. package/dist/components/blocks/HeroBlock.js +2 -2
  11. package/dist/components/page-kits/LandingPageKit.js +3 -3
  12. package/dist/components/page-kits/ServiceSuitePageKit.js +3 -3
  13. package/dist/components/ui/AvatarUpload.js +1 -1
  14. package/dist/components/ui/MouseEffect.js +1 -1
  15. package/eslint-rules/nadicode/config.js +1 -0
  16. package/eslint-rules/nadicode/index.js +2 -0
  17. package/eslint-rules/nadicode/rules/__tests__/require-catalog-import.test.js +111 -0
  18. package/eslint-rules/nadicode/rules/no-has-svg-selector.js +1 -1
  19. package/eslint-rules/nadicode/rules/require-catalog-import.js +59 -0
  20. package/package.json +1 -338
  21. package/scripts/ds-check.mjs +0 -10
  22. package/scripts/sync-seed-skill.mjs +0 -3
  23. package/.agents/skills/seed/contract.md +0 -104
  24. package/.agents/skills/seed/intent-map.md +0 -320
  25. package/.agents/skills/seed/recipes/agency-home.md +0 -311
  26. package/.agents/skills/seed/recipes/agents-chat.md +0 -305
  27. package/.agents/skills/seed/recipes/analytics.md +0 -253
  28. package/.agents/skills/seed/recipes/auth.md +0 -254
  29. package/.agents/skills/seed/recipes/blog-content.md +0 -307
  30. package/.agents/skills/seed/recipes/checkout.md +0 -311
  31. package/.agents/skills/seed/recipes/company-about.md +0 -276
  32. package/.agents/skills/seed/recipes/company-contact.md +0 -234
  33. package/.agents/skills/seed/recipes/crud-form.md +0 -233
  34. package/.agents/skills/seed/recipes/crud-list-detail.md +0 -230
  35. package/.agents/skills/seed/recipes/dashboard.md +0 -354
  36. package/.agents/skills/seed/recipes/digital-workers.md +0 -314
  37. package/.agents/skills/seed/recipes/error-pages.md +0 -199
  38. package/.agents/skills/seed/recipes/marketing-landing.md +0 -293
  39. package/.agents/skills/seed/recipes/marketing-shell.md +0 -156
  40. package/.agents/skills/seed/recipes/navigation-shell.md +0 -786
  41. package/.agents/skills/seed/recipes/onboarding.md +0 -258
  42. package/.agents/skills/seed/recipes/pricing.md +0 -271
  43. package/.agents/skills/seed/recipes/service-detail.md +0 -302
  44. package/.agents/skills/seed/recipes/settings.md +0 -252
  45. package/.agents/skills/seed/references/blocks.md +0 -128
  46. package/.agents/skills/seed/references/components.md +0 -287
  47. package/.agents/skills/seed/references/icons.md +0 -169
  48. package/.agents/skills/seed/references/nextjs.md +0 -49
  49. package/.agents/skills/seed/references/tokens.md +0 -88
@@ -1,311 +0,0 @@
1
- # Recipe: Agency Home
2
-
3
- AI agency/platform homepage oriented around selling AI services, showcasing process and outcomes.
4
-
5
- ## Route Pattern
6
-
7
- `/` or `/home`
8
-
9
- ## Shell
10
-
11
- `marketing-shell` (HeaderBlock + FooterBlock)
12
-
13
- ---
14
-
15
- ## Layout Blueprint (Desktop)
16
-
17
- ```
18
- +------------------------------------------------+
19
- | HeaderBlock: Logo [Nav links] [CTA Button] |
20
- +------------------------------------------------+
21
- | |
22
- | HERO SECTION |
23
- | Agency headline (centered) |
24
- | Subtitle: what the agency delivers |
25
- | [Primary CTA] [Secondary CTA] |
26
- | ShaderBackground / ambient visual |
27
- | |
28
- +------------------------------------------------+
29
- | Logo Cloud: client logos (InfiniteSlider) |
30
- +------------------------------------------------+
31
- | |
32
- | SERVICES GRID (3-col) |
33
- | +----------+ +----------+ +----------+ |
34
- | | Service 1| | Service 2| | Service 3| |
35
- | +----------+ +----------+ +----------+ |
36
- | +----------+ +----------+ +----------+ |
37
- | | Service 4| | Service 5| | Service 6| |
38
- | +----------+ +----------+ +----------+ |
39
- | |
40
- +------------------------------------------------+
41
- | PROCESS FLOW |
42
- | [Step 1] → [Step 2] → [Step 3] → [Step 4] |
43
- | How we work: discovery → design → deliver |
44
- +------------------------------------------------+
45
- | OUTCOME STATS |
46
- | +------+ +------+ +------+ +------+ |
47
- | | ROI | | Time | | Cost | | Scale| |
48
- | | 340% | | -60% | | -45% | | 10x | |
49
- | +------+ +------+ +------+ +------+ |
50
- +------------------------------------------------+
51
- | |
52
- | TESTIMONIALS (carousel or grid) |
53
- | |
54
- +------------------------------------------------+
55
- | |
56
- | FAQ (Accordion) |
57
- | |
58
- +------------------------------------------------+
59
- | FINAL CTA SECTION |
60
- | Headline + [CTA Button] |
61
- +------------------------------------------------+
62
- | FooterBlock: columns + social + legal |
63
- +------------------------------------------------+
64
- ```
65
-
66
- ---
67
-
68
- ## Section Sequence
69
-
70
- ### 1. Header
71
-
72
- ```tsx
73
- <HeaderBlock logo={<Logo />} links={navLinks} actions={<Button>Book a Call</Button>} />
74
- ```
75
-
76
- ### 2. Hero Section
77
-
78
- ```tsx
79
- <section className="relative py-24 md:py-32 overflow-hidden">
80
- <ShaderBackground shader="meshGradient" intent="hero" opacity={0.25} />
81
- <div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
82
- <motion.div variants={heroStagger.container} initial="hidden" animate="visible">
83
- <motion.div variants={heroStagger.child}>
84
- <Badge variant="outline" className="mb-4">AI-Powered Solutions</Badge>
85
- </motion.div>
86
- <motion.h1 variants={heroStagger.child} className="text-4xl md:text-6xl font-bold tracking-tight">
87
- {headline}
88
- </motion.h1>
89
- <motion.p variants={heroStagger.child} className="mt-6 text-lg md:text-xl text-text-secondary max-w-2xl mx-auto">
90
- {subtitle}
91
- </motion.p>
92
- <motion.div variants={heroStagger.child} className="mt-8 flex flex-col sm:flex-row gap-4 justify-center">
93
- <Button size="lg">Book a Call</Button>
94
- <Button size="lg" variant="outline">See Our Work</Button>
95
- </motion.div>
96
- </motion.div>
97
- </div>
98
- </section>
99
- ```
100
-
101
- ### 3. Logo Cloud
102
-
103
- ```tsx
104
- <section className="py-12 border-y border-border-subtle">
105
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
106
- <Typography variant="small" className="text-center text-text-tertiary mb-6">
107
- Trusted by forward-thinking companies
108
- </Typography>
109
- <LogoCloud logos={clientLogos} />
110
- </div>
111
- </section>
112
- ```
113
-
114
- ### 4. Services Grid
115
-
116
- ```tsx
117
- <ScrollFadeIn>
118
- <section className="py-16 md:py-24">
119
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
120
- <div className="text-center mb-12">
121
- <Heading level={2} size="section" >Our Services</Heading>
122
- <Typography variant="lead" className="mt-4 text-text-secondary">
123
- End-to-end AI solutions tailored to your business
124
- </Typography>
125
- </div>
126
- <FeatureGridBlock features={services} columns={3} />
127
- </div>
128
- </section>
129
- </ScrollFadeIn>
130
- ```
131
-
132
- ### 5. Process Flow
133
-
134
- ```tsx
135
- <ScrollFadeIn>
136
- <section className="py-16 md:py-24 bg-muted">
137
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
138
- <div className="text-center mb-12">
139
- <Heading level={2} size="section" >How We Work</Heading>
140
- <Typography variant="lead" className="mt-4 text-text-secondary">
141
- A proven process from discovery to deployment
142
- </Typography>
143
- </div>
144
- <ProcessFlowBlock steps={processSteps} />
145
- </div>
146
- </section>
147
- </ScrollFadeIn>
148
- ```
149
-
150
- ### 6. Outcome Stats
151
-
152
- ```tsx
153
- <ScrollFadeIn>
154
- <section className="py-16 md:py-24">
155
- <StatsMarketingBlock stats={outcomeStats} />
156
- </section>
157
- </ScrollFadeIn>
158
- ```
159
-
160
- ### 7. Testimonials
161
-
162
- ```tsx
163
- <ScrollFadeIn>
164
- <section className="py-16 md:py-24 bg-muted">
165
- <TestimonialsBlock testimonials={testimonials} />
166
- </section>
167
- </ScrollFadeIn>
168
- ```
169
-
170
- ### 8. FAQ
171
-
172
- ```tsx
173
- <ScrollFadeIn>
174
- <section className="py-16 md:py-24">
175
- <FAQBlock items={faqItems} />
176
- </section>
177
- </ScrollFadeIn>
178
- ```
179
-
180
- ### 9. Final CTA
181
-
182
- ```tsx
183
- <ScrollFadeIn>
184
- <section className="py-16 md:py-24">
185
- <CallToActionBlock
186
- title="Ready to transform your business with AI?"
187
- description="Book a free discovery call and see how we can help."
188
- action={<Button size="lg">Book a Call</Button>}
189
- />
190
- </section>
191
- </ScrollFadeIn>
192
- ```
193
-
194
- ### 10. Footer
195
-
196
- ```tsx
197
- <FooterBlock columns={footerColumns} social={socialLinks} legal={legalLinks} />
198
- ```
199
-
200
- ---
201
-
202
- ## Animation Storyboard
203
-
204
- ```
205
- ANIMATION STORYBOARD
206
- ====================
207
- BUDGET: 1000ms (above-fold) | SPRING: dramatic (hero), snappy (rest) | REDUCED: opacity-only
208
-
209
- T+0ms [nav] Header visible (instant)
210
- T+100ms [badge] Agency badge {fadeIn, snappy}
211
- T+200ms [headline] Hero headline {fadeInUp, dramatic}
212
- T+350ms [subtitle] Hero subtitle {fadeInUp, dramatic}
213
- T+500ms [ctas] CTA buttons {fadeInUp, dramatic}
214
- T+700ms [shader] Hero visual/shader appears {fadeIn, gentle}
215
- T+900ms [logos] Logo cloud fades in {fadeIn, snappy}
216
-
217
- SCROLL-TRIGGERED (below fold):
218
- [services] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 100ms}
219
- [process] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 150ms}
220
- [stats] ScrollFadeIn at 20% visible {fadeInUp, snappy}
221
- [testimonials] ScrollFadeIn at 20% visible {fadeIn, gentle}
222
- [faq] ScrollFadeIn at 20% visible {fadeInUp, snappy}
223
- [cta] ScrollFadeIn at 20% visible {scaleIn, gentle}
224
-
225
- REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
226
- ```
227
-
228
- ---
229
-
230
- ## Required Components
231
-
232
- | Component | Import Path | Purpose |
233
- |-----------|-------------|---------|
234
- | `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/header-block` | Site navigation |
235
- | `FooterBlock` | `@vadimcomanescu/nadicode-design-system/footer-block` | Site footer |
236
- | `Button` | `@vadimcomanescu/nadicode-design-system/button` | CTAs |
237
- | `Badge` | `@vadimcomanescu/nadicode-design-system/badge` | Hero tag |
238
- | `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Headings, body text |
239
- | `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold animations |
240
- | `ProcessFlowBlock` | `@vadimcomanescu/nadicode-design-system/process-flow-block` | How-we-work process |
241
- | `FeatureGridBlock` | `@vadimcomanescu/nadicode-design-system/feature-grid-block` | Services grid |
242
- | `StatsMarketingBlock` | `@vadimcomanescu/nadicode-design-system/stats-marketing-block` | Outcome metrics (ROI, time saved) |
243
-
244
- ### Allowed (optional)
245
-
246
- `HeroBlock`, `HeroSectionBlock`, `TestimonialsBlock`, `LogoCloud`, `FAQBlock`, `CallToActionBlock`, `SocialProofBlock`, `InfiniteSlider`, `CountingNumber`, `ShaderBackground`, `Card`, `BentoGrid`
247
-
248
- ### Forbidden
249
-
250
- `Sidebar`, `DataTable`, `Form`, `FormWizard`, `AgentTeamPanel`, `AgentTerminal`, `SettingsLayout`, `ChatLayout`
251
-
252
- ---
253
-
254
- ## Required States
255
-
256
- | State | Trigger | Visual |
257
- |-------|---------|--------|
258
- | `default` | Page loaded | Full marketing content |
259
- | `mobile-navigation` | Hamburger tap | Mobile nav drawer/sheet |
260
-
261
- ---
262
-
263
- ## Responsive Contract
264
-
265
- | Breakpoint | Hero | Services | Process | Stats | Content Width |
266
- |------------|------|----------|---------|-------|---------------|
267
- | Mobile | Stacked, text-center | 1 col | Vertical stack | 2 col | px-4 |
268
- | `sm:` | Stacked, text-center | 2 col | Vertical stack | 2 col | px-6, max-w-7xl |
269
- | `lg:` | Centered | 3 col | Horizontal flow | 4 col | px-8, max-w-7xl |
270
-
271
- ---
272
-
273
- ## Styling Rules
274
-
275
- - Hero: `ShaderBackground` for ambient glow, `glass-floating` for elevated cards
276
- - Section backgrounds alternate: `bg-background` and `bg-muted`
277
- - Process flow uses connected step indicators with semantic `border-accent`
278
- - Stats use `CountingNumber` for animated counters
279
- - CTAs use `Button` with `size="lg"` for prominence
280
- - No raw palette colors; semantic tokens only
281
-
282
- ---
283
-
284
- ## Accessibility
285
-
286
- - Hero heading is `<h1>`, section headings are `<h2>`
287
- - Skip-nav link to main content
288
- - All images have alt text
289
- - CTA buttons have descriptive text (not just "Click here")
290
- - Mobile nav is keyboard accessible with focus trap
291
- - Process flow steps are in an ordered list
292
-
293
- ---
294
-
295
- ## Reference Implementations
296
-
297
- - `src/app/landing/page.tsx`
298
- - `src/components/blocks/ProcessFlowBlock.tsx`
299
- - `src/components/blocks/FeatureGridBlock.tsx`
300
- - `src/components/blocks/StatsMarketingBlock.tsx`
301
-
302
- ---
303
-
304
- ## Verification
305
-
306
- ```bash
307
- npx tsc --noEmit
308
- npm run lint
309
- npm run test
310
- npx vitest run src/test/css-variable-usage.test.ts
311
- ```
@@ -1,305 +0,0 @@
1
- # Recipe: Agent Chat
2
-
3
- 3-region agent workbench for AI agent interaction, tool monitoring, and artifact inspection.
4
-
5
- ## Route Patterns
6
-
7
- - `/agents`
8
- - `/voice-agents`
9
-
10
- ## Shell
11
-
12
- `app-shell` (Sidebar + top bar + SearchCommand)
13
-
14
- ---
15
-
16
- ## Layout Blueprint (Desktop)
17
-
18
- ```
19
- +--+------+---------------------------+---------+
20
- | | Team | Conversation | Work |
21
- |S | Panel| | Panel |
22
- |I | | [AgentMessageBubble] | |
23
- |D | Agent| [ToolCallCard] | [Tabs] |
24
- |E | list | [ThinkingIndicator] | Work |
25
- |B | with | [AgentMessageBubble] | Logs |
26
- |A | status| [ApprovalCard] | Files |
27
- |R | | | |
28
- | | Team | [AgentMessageBubble] | Code |
29
- | | metrics| | Diff |
30
- | | | | |
31
- | | +---------------------------+ Artifact|
32
- | | | Composer | Card |
33
- | | | [Textarea] [Send] | |
34
- +--+------+---------------------------+---------+
35
-
36
- Mobile: Conversation + Composer only.
37
- Team panel: left Sheet. Work panel: right Sheet.
38
- ```
39
-
40
- ---
41
-
42
- ## Section Sequence
43
-
44
- ### 1. Team & Status Panel (left, 280px)
45
-
46
- ```tsx
47
- <aside className="hidden xl:flex flex-col w-[280px] border-r border-border bg-surface/50">
48
- <div className="p-4 border-b border-border">
49
- <Heading level={4} size="title" >Team</Heading>
50
- </div>
51
- <ScrollArea className="flex-1">
52
- <AgentTeamPanel agents={agents} activeAgent={active} onSelect={setActive} />
53
- <div className="p-4 border-t border-border">
54
- <WorkflowGraph nodes={workflowNodes} edges={workflowEdges} />
55
- </div>
56
- <div className="p-4 mt-auto">
57
- <AgentMetricsCard metrics={runMetrics} />
58
- </div>
59
- </ScrollArea>
60
- <div className="p-4 border-t border-border">
61
- <ContextMeter used={contextUsed} total={contextTotal} />
62
- </div>
63
- </aside>
64
- ```
65
-
66
- ### 2. Conversation Region (center, flex-1)
67
-
68
- ```tsx
69
- <main className="flex-1 flex flex-col min-w-0">
70
- {/* Mobile header with panel triggers */}
71
- <header className="xl:hidden flex items-center gap-2 p-3 border-b border-border">
72
- <Sheet>
73
- <SheetTrigger asChild>
74
- <Button variant="ghost" size="icon"><UsersIcon size={16} /></Button>
75
- </SheetTrigger>
76
- <SheetContent side="left"><AgentTeamPanel ... /></SheetContent>
77
- </Sheet>
78
- <Heading level={4} size="title" className="flex-1 text-center truncate">
79
- {runTitle}
80
- </Heading>
81
- <Sheet>
82
- <SheetTrigger asChild>
83
- <Button variant="ghost" size="icon"><FileTextIcon size={16} /></Button>
84
- </SheetTrigger>
85
- <SheetContent side="right"><WorkPanel ... /></SheetContent>
86
- </Sheet>
87
- </header>
88
-
89
- {/* Message thread */}
90
- <ScrollArea className="flex-1 p-4" aria-live="polite">
91
- {messages.map(msg => {
92
- if (msg.type === "thinking") return <ThinkingIndicator key={msg.id} />
93
- if (msg.type === "tool") return (
94
- <ToolCallCard key={msg.id} name={msg.tool} args={msg.args}
95
- status={msg.status} result={msg.result} />
96
- )
97
- if (msg.type === "approval") return (
98
- <ApprovalCard key={msg.id} action={msg.action}
99
- onApprove={() => approve(msg.id)} onReject={() => reject(msg.id)} />
100
- )
101
- return (
102
- <AgentMessageBubble key={msg.id} role={msg.role}
103
- content={msg.content} isStreaming={msg.isStreaming} />
104
- )
105
- })}
106
- </ScrollArea>
107
-
108
- {/* Composer */}
109
- <div className="p-4 border-t border-border">
110
- <div className="flex items-end gap-2">
111
- <Textarea
112
- placeholder="Type a message..."
113
- className="flex-1 min-h-[44px] max-h-[200px]"
114
- value={input}
115
- onChange={e => setInput(e.target.value)}
116
- onKeyDown={handleKeyDown}
117
- />
118
- <Button onClick={handleSend} disabled={!input.trim() || isSending}>
119
- <SendIcon size={16} />
120
- </Button>
121
- </div>
122
- </div>
123
- </main>
124
- ```
125
-
126
- ### 3. Work Panel (right, 320px)
127
-
128
- ```tsx
129
- <aside className="hidden xl:flex flex-col w-[320px] border-l border-border">
130
- <Tabs value={workTab} onValueChange={setWorkTab} className="flex flex-col h-full">
131
- <TabsList className="mx-4 mt-4">
132
- <TabsTrigger value="work">Work</TabsTrigger>
133
- <TabsTrigger value="logs">Logs</TabsTrigger>
134
- <TabsTrigger value="files">Files</TabsTrigger>
135
- </TabsList>
136
- <ScrollArea className="flex-1">
137
- <TabsContent value="work" className="p-4 space-y-4">
138
- {artifacts.map(a => <ArtifactCard key={a.id} {...a} />)}
139
- </TabsContent>
140
- <TabsContent value="logs" className="p-4">
141
- <AgentTerminal lines={logLines} />
142
- </TabsContent>
143
- <TabsContent value="files" className="p-4 space-y-4">
144
- {diffs.map(d => <CodeDiffViewer key={d.file} {...d} />)}
145
- </TabsContent>
146
- </ScrollArea>
147
- </Tabs>
148
- </aside>
149
- ```
150
-
151
- ---
152
-
153
- ## Animation Storyboard
154
-
155
- ```
156
- ANIMATION STORYBOARD
157
- ====================
158
- BUDGET: 300ms (shell) | STREAMING: continuous | REDUCED: opacity-only
159
-
160
- T+0ms [shell] All panels visible (instant)
161
- T+50ms [team] Team panel content fades in {fadeIn, snappy}
162
- T+100ms [messages] Message history fades in {fadeIn, snappy}
163
- T+200ms [work] Work panel content fades in {fadeIn, snappy}
164
-
165
- NEW MESSAGE (runtime):
166
- T+0ms [bubble] Message slides up from bottom {slideInUp, snappy, y: 16px}
167
-
168
- TOOL CALL (runtime):
169
- T+0ms [toolcard] Card expands in-place {scaleIn, snappy}
170
- T+0ms [status] Status badge animates {fadeIn, micro}
171
-
172
- THINKING (runtime):
173
- T+0ms [dots] Pulsing dot animation (continuous CSS)
174
-
175
- APPROVAL (runtime):
176
- T+0ms [card] ApprovalCard scales in {scaleIn, gentle}
177
-
178
- REDUCED MOTION: Items appear instantly, no slide/scale
179
- ```
180
-
181
- ---
182
-
183
- ## Required Components
184
-
185
- ### Chat Primitives (preferred)
186
-
187
- | Component | Import Path | Purpose |
188
- |-----------|-------------|---------|
189
- | `Conversation` | `.../conversation` | Scroll-aware container with auto-scroll |
190
- | `ChatMessage` | `.../chat-message` | Core message with avatar, content, actions |
191
- | `ChatResponse` | `.../chat-response` | Streaming markdown response renderer |
192
- | `ChatPromptInput` | `.../chat-prompt-input` | Chat text input with keyboard handling |
193
- | `ChatToolCall` | `.../chat-tool-call` | Tool call lifecycle wrapper |
194
- | `ChatActions` | `.../chat-actions` | Copy, retry, edit action buttons |
195
- | `ChatGreeting` | `.../chat-greeting` | Welcome greeting for sessions |
196
- | `ChatThinkingMessage` | `.../chat-thinking-message` | Animated thinking state |
197
- | `ChatShimmer` | `.../chat-shimmer` | Loading shimmer placeholder |
198
- | `ChatReasoning` | `.../chat-reasoning` | AI reasoning with auto-close |
199
- | `ChatConfirmation` | `.../chat-confirmation` | Action confirmation dialog |
200
- | `ChatSuggestion` | `.../chat-suggestion` | Follow-up prompt chips |
201
- | `ChatSources` | `.../chat-sources` | Source citations panel |
202
- | `ChatBranch` | `.../chat-branch` | Conversation fork navigation |
203
- | `ChatChainOfThought` | `.../chat-chain-of-thought` | Step-by-step reasoning |
204
- | `ChatPlan` | `.../chat-plan` | Collapsible plan card |
205
- | `ChatQueue` | `.../chat-queue` | Task queue with sections |
206
- | `ChatPromptInputAttachments` | `.../chat-prompt-input-attachments` | File attachment support |
207
-
208
- ### Agent-Level Components
209
-
210
- | Component | Import Path | Purpose |
211
- |-----------|-------------|---------|
212
- | `AgentTeamPanel` | `.../agent-team-panel` | Team member list |
213
- | `AgentStatus` | `.../agent-status` | Connection status |
214
- | `AgentTimeline` | `.../agent-timeline` | Action timeline |
215
- | `AgentMetricsCard` | `.../agent-metrics-card` | Run metrics |
216
- | `ConversationThread` | `.../conversation-thread` | Legacy message rendering |
217
- | `AgentMessageBubble` | `.../agent-message-bubble` | Individual messages |
218
- | `ThinkingIndicator` | `.../thinking-indicator` | Processing state |
219
- | `ToolCallCard` | `.../tool-call-card` | Tool invocations |
220
- | `ApprovalCard` | `.../approval-card` | Human approval flow |
221
- | `CodeDiffViewer` | `.../code-diff-viewer` | Code changes |
222
- | `ArtifactCard` | `.../artifact-card` | Generated outputs |
223
- | `AgentTerminal` | `.../agent-terminal` | Command output |
224
- | `WorkflowGraph` | `.../workflow-graph` | DAG execution flow |
225
- | `ContextMeter` | `.../context-meter` | Context window usage |
226
- | `SourceCitation` | `.../source-citation` | Referenced sources |
227
- | `Tabs` | `.../tabs` | Work panel tabs |
228
- | `Button` | `.../button` | Send, panel triggers |
229
- | `ScrollArea` | `.../scroll-area` | Scrollable regions |
230
- | `Sheet` | `.../sheet` | Mobile panel drawers |
231
-
232
- ### Allowed (optional)
233
-
234
- `HandoffIndicator`, `MemoryInspector`, `StreamingText`, `Badge`, `Avatar`, `AgentAvatar`, `Resizable`
235
-
236
- ### Forbidden
237
-
238
- `HeroBlock`, `PricingBlock`, `FormWizard`, `DataTable`, marketing blocks, decorative effects
239
-
240
- ---
241
-
242
- ## Required States
243
-
244
- | State | Trigger | Visual |
245
- |-------|---------|--------|
246
- | `empty` | No active run | `Empty` with "Start a conversation" message |
247
- | `loading` | History loading | Skeleton message bubbles |
248
- | `running` | Agent(s) active | Live conversation with streaming |
249
- | `thinking` | Agent processing | `ThinkingIndicator` in message thread |
250
- | `blocked-approval` | Awaiting user action | `ApprovalCard` prominent in thread |
251
- | `failed` | Run or tool error | Error message in thread + retry option |
252
- | `complete` | Run finished | Final message with artifacts summary |
253
- | `over-budget` | Cost/token threshold exceeded | Warning badge on metrics, pause prompt |
254
-
255
- ---
256
-
257
- ## Responsive Contract
258
-
259
- | Breakpoint | Team Panel | Conversation | Work Panel |
260
- |------------|------------|-------------|------------|
261
- | Mobile | Hidden (Sheet, left) | Full width + composer | Hidden (Sheet, right) |
262
- | `lg:` | Sidebar 280px | Flex-1 | Hidden (Sheet) |
263
- | `xl:` | Sidebar 280px | Flex-1 | Panel 320px |
264
-
265
- ---
266
-
267
- ## Styling Rules
268
-
269
- - Panel backgrounds: `bg-surface/50` or `bg-background`
270
- - Panel borders: `border-border`
271
- - Message bubbles: styled by `AgentMessageBubble` (role-based)
272
- - Tool call cards: `glass-panel` with status color
273
- - Composer: `border-t border-border` with `p-4`
274
- - No raw palette colors
275
-
276
- ---
277
-
278
- ## Accessibility
279
-
280
- - Message thread uses `aria-live="polite"` for streaming updates
281
- - All interactive controls have visible focus rings
282
- - Panel toggles on mobile have `aria-label`
283
- - Composer textarea has `aria-label="Message input"`
284
- - Approval buttons are clearly labeled (approve/reject)
285
- - Tab navigation for work panel is keyboard accessible
286
-
287
- ---
288
-
289
- ## Reference Implementations
290
-
291
- - `src/app/voice-agents/page.tsx`
292
- - `src/components/pages/VoiceAgentsPage.tsx`
293
- - `src/components/blocks/AgentConversationBlock.tsx`
294
- - `src/components/blocks/ChatLayout.tsx`
295
-
296
- ---
297
-
298
- ## Verification
299
-
300
- ```bash
301
- npx tsc --noEmit
302
- npm run lint
303
- npm run test
304
- npx vitest run src/test/css-variable-usage.test.ts
305
- ```