@cueplusplus/ui 0.13.0 → 0.14.1

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 (302) hide show
  1. package/CHANGELOG.md +307 -0
  2. package/README.md +2 -19
  3. package/dist/index.d.ts +2 -2
  4. package/dist/layout/frames.d.ts +19 -1
  5. package/dist/layout/frames.js +21 -7
  6. package/dist/layout/index.d.ts +2 -2
  7. package/dist/primitives/chip.d.ts +1 -1
  8. package/dist/system/theme-provider.d.ts +46 -1
  9. package/dist/system/theme-provider.js +29 -3
  10. package/manifest/components/accordion.json +16 -4
  11. package/manifest/components/activity-graph.json +15 -3
  12. package/manifest/components/agent-card.json +15 -3
  13. package/manifest/components/agent-handoff.json +14 -3
  14. package/manifest/components/agent-mode-badge.json +12 -3
  15. package/manifest/components/agent-pile.json +13 -3
  16. package/manifest/components/agent-plan.json +13 -3
  17. package/manifest/components/agent-status.json +14 -3
  18. package/manifest/components/agent-surface.json +12 -3
  19. package/manifest/components/alert-dialog.json +14 -3
  20. package/manifest/components/animated-number.json +12 -3
  21. package/manifest/components/app-window-frame.json +13 -3
  22. package/manifest/components/approval-card.json +14 -3
  23. package/manifest/components/artifact-card.json +14 -3
  24. package/manifest/components/ask-box.json +13 -3
  25. package/manifest/components/audience-icon.json +11 -3
  26. package/manifest/components/autocomplete.json +15 -3
  27. package/manifest/components/avatar-group.json +15 -4
  28. package/manifest/components/avatar.json +16 -4
  29. package/manifest/components/background-inbox.json +14 -3
  30. package/manifest/components/band.json +14 -4
  31. package/manifest/components/breadcrumb.json +14 -3
  32. package/manifest/components/button-group.json +13 -3
  33. package/manifest/components/calendar.json +15 -4
  34. package/manifest/components/canvas-split-body.json +13 -3
  35. package/manifest/components/canvas-split-document.json +11 -3
  36. package/manifest/components/canvas-split-header.json +13 -3
  37. package/manifest/components/canvas-split-line.json +13 -3
  38. package/manifest/components/canvas-split-message.json +13 -3
  39. package/manifest/components/canvas-split-thread.json +11 -3
  40. package/manifest/components/canvas-split.json +13 -3
  41. package/manifest/components/card.json +14 -3
  42. package/manifest/components/carousel.json +12 -3
  43. package/manifest/components/catalogue-icon.json +11 -3
  44. package/manifest/components/channel-beta-icon.json +11 -3
  45. package/manifest/components/channel-matrix.json +11 -3
  46. package/manifest/components/channel-released-icon.json +11 -3
  47. package/manifest/components/chart-container.json +11 -3
  48. package/manifest/components/chart-ramp.json +12 -3
  49. package/manifest/components/chart-swatch.json +11 -3
  50. package/manifest/components/chart-tooltip-content.json +12 -4
  51. package/manifest/components/chart.json +14 -3
  52. package/manifest/components/chat-empty-state.json +13 -3
  53. package/manifest/components/chat-panel-assistant-message.json +11 -3
  54. package/manifest/components/chat-panel-composer.json +11 -3
  55. package/manifest/components/chat-panel-messages.json +11 -3
  56. package/manifest/components/chat-panel-typing.json +11 -3
  57. package/manifest/components/chat-panel-user-message.json +11 -3
  58. package/manifest/components/chat-panel.json +13 -3
  59. package/manifest/components/checkbox-group.json +15 -4
  60. package/manifest/components/checkpoint-history.json +13 -3
  61. package/manifest/components/clamp.json +12 -3
  62. package/manifest/components/cli-tool-icon.json +11 -3
  63. package/manifest/components/code-diff.json +14 -3
  64. package/manifest/components/code-runner.json +13 -3
  65. package/manifest/components/collapsible.json +13 -3
  66. package/manifest/components/color-area.json +12 -4
  67. package/manifest/components/color-field.json +12 -3
  68. package/manifest/components/color-picker.json +14 -4
  69. package/manifest/components/color-slider.json +12 -3
  70. package/manifest/components/color-swatch.json +13 -3
  71. package/manifest/components/colors-section.json +11 -3
  72. package/manifest/components/combobox.json +15 -4
  73. package/manifest/components/compaction-row.json +12 -3
  74. package/manifest/components/comparison-card.json +12 -3
  75. package/manifest/components/composer-actions.json +11 -3
  76. package/manifest/components/composer-attach-button.json +11 -3
  77. package/manifest/components/composer-attachment-chip.json +13 -3
  78. package/manifest/components/composer-attachments.json +11 -3
  79. package/manifest/components/composer-bar.json +12 -3
  80. package/manifest/components/composer-command-item.json +13 -3
  81. package/manifest/components/composer-context.json +13 -3
  82. package/manifest/components/composer-input.json +11 -3
  83. package/manifest/components/composer-menu-item.json +12 -3
  84. package/manifest/components/composer-menu.json +13 -3
  85. package/manifest/components/composer-model-item.json +13 -3
  86. package/manifest/components/composer-model-trigger.json +13 -3
  87. package/manifest/components/composer-person-item.json +13 -3
  88. package/manifest/components/composer-send.json +13 -3
  89. package/manifest/components/composer-toolbar.json +11 -3
  90. package/manifest/components/composer-voice-button.json +11 -3
  91. package/manifest/components/composer-voice.json +13 -3
  92. package/manifest/components/composer.json +14 -4
  93. package/manifest/components/computer-use.json +13 -3
  94. package/manifest/components/confidence-marker.json +11 -3
  95. package/manifest/components/connection-state.json +12 -3
  96. package/manifest/components/container.json +12 -3
  97. package/manifest/components/context-breakdown.json +12 -4
  98. package/manifest/components/context-menu.json +14 -4
  99. package/manifest/components/context-usage.json +14 -4
  100. package/manifest/components/conversation-search.json +13 -3
  101. package/manifest/components/copy-button.json +14 -3
  102. package/manifest/components/cost-meter.json +12 -3
  103. package/manifest/components/cue-portal-frame.json +12 -3
  104. package/manifest/components/data-table-pagination.json +13 -3
  105. package/manifest/components/data-table-toolbar.json +12 -3
  106. package/manifest/components/date-field.json +12 -3
  107. package/manifest/components/date-picker.json +13 -3
  108. package/manifest/components/date-range-picker.json +11 -3
  109. package/manifest/components/day-separator.json +12 -3
  110. package/manifest/components/delegation-card.json +14 -4
  111. package/manifest/components/density.json +12 -2
  112. package/manifest/components/description-list.json +15 -4
  113. package/manifest/components/diagram.json +13 -3
  114. package/manifest/components/disclosure.json +15 -4
  115. package/manifest/components/dmx-bar.json +12 -3
  116. package/manifest/components/dmx-strip.json +11 -3
  117. package/manifest/components/document-reference.json +13 -3
  118. package/manifest/components/draft-restore.json +13 -3
  119. package/manifest/components/drawer.json +13 -4
  120. package/manifest/components/edit-message.json +13 -3
  121. package/manifest/components/elements-command-palette.json +13 -3
  122. package/manifest/components/elements-composer.json +13 -3
  123. package/manifest/components/elements-data-table.json +11 -3
  124. package/manifest/components/elements-timeline.json +13 -3
  125. package/manifest/components/elicitation-form.json +13 -3
  126. package/manifest/components/empty-state-composer.json +11 -3
  127. package/manifest/components/empty-state-greeting.json +11 -3
  128. package/manifest/components/empty-state-suggestion.json +11 -3
  129. package/manifest/components/empty-state-suggestions.json +11 -3
  130. package/manifest/components/empty-state.json +15 -4
  131. package/manifest/components/end-of-turn-summary.json +14 -3
  132. package/manifest/components/env-var-input.json +15 -4
  133. package/manifest/components/error-state.json +13 -3
  134. package/manifest/components/export-dialog.json +10 -2
  135. package/manifest/components/eyebrow.json +14 -4
  136. package/manifest/components/feedback-dialog.json +13 -3
  137. package/manifest/components/field-description.json +15 -4
  138. package/manifest/components/field-error.json +15 -4
  139. package/manifest/components/field-label.json +15 -4
  140. package/manifest/components/file-tree.json +13 -3
  141. package/manifest/components/file-upload.json +14 -4
  142. package/manifest/components/flow-background.json +11 -3
  143. package/manifest/components/flow-controls.json +11 -3
  144. package/manifest/components/flow-graph.json +13 -3
  145. package/manifest/components/folder-icon.json +12 -3
  146. package/manifest/components/frac.json +11 -3
  147. package/manifest/components/frames.json +14 -0
  148. package/manifest/components/generation-loader.json +13 -3
  149. package/manifest/components/generative-ui.json +16 -4
  150. package/manifest/components/grid.json +14 -3
  151. package/manifest/components/group-bar.json +13 -3
  152. package/manifest/components/guardrail-notice.json +13 -3
  153. package/manifest/components/hover-card.json +14 -4
  154. package/manifest/components/icon-button.json +15 -3
  155. package/manifest/components/image-generation.json +13 -3
  156. package/manifest/components/info-tip.json +15 -4
  157. package/manifest/components/inline-citation.json +13 -3
  158. package/manifest/components/input-group.json +15 -4
  159. package/manifest/components/item.json +15 -4
  160. package/manifest/components/job-progress.json +14 -3
  161. package/manifest/components/kbd.json +14 -3
  162. package/manifest/components/launcher-bubble.json +14 -3
  163. package/manifest/components/link.json +13 -3
  164. package/manifest/components/live-region-announcer.json +16 -4
  165. package/manifest/components/log-viewer.json +15 -3
  166. package/manifest/components/map-answer.json +13 -3
  167. package/manifest/components/markdown-text.json +16 -4
  168. package/manifest/components/math-block.json +13 -3
  169. package/manifest/components/mcp-server-icon.json +12 -3
  170. package/manifest/components/mcp-server-panel.json +13 -3
  171. package/manifest/components/memory-chips.json +12 -3
  172. package/manifest/components/menubar.json +13 -3
  173. package/manifest/components/message-actions.json +14 -4
  174. package/manifest/components/message-attachments.json +12 -3
  175. package/manifest/components/message-branches.json +12 -3
  176. package/manifest/components/message-list.json +12 -3
  177. package/manifest/components/message-pair.json +12 -3
  178. package/manifest/components/message-queue.json +13 -3
  179. package/manifest/components/message-timing.json +13 -3
  180. package/manifest/components/message.json +12 -3
  181. package/manifest/components/mobile-composer.json +14 -3
  182. package/manifest/components/model-picker.json +12 -3
  183. package/manifest/components/multi-select.json +16 -4
  184. package/manifest/components/musical-time-input.json +11 -3
  185. package/manifest/components/navigation-menu.json +13 -3
  186. package/manifest/components/node-card.json +11 -3
  187. package/manifest/components/node-handle.json +11 -3
  188. package/manifest/components/number-field.json +15 -3
  189. package/manifest/components/number-ticker.json +12 -3
  190. package/manifest/components/onboarding.json +12 -3
  191. package/manifest/components/otp-field.json +14 -3
  192. package/manifest/components/page-shell.json +14 -4
  193. package/manifest/components/pagination.json +14 -3
  194. package/manifest/components/panel-header.json +14 -4
  195. package/manifest/components/password-input.json +15 -4
  196. package/manifest/components/permission-grant.json +13 -3
  197. package/manifest/components/permission-scopes.json +14 -3
  198. package/manifest/components/piano-keyboard.json +11 -3
  199. package/manifest/components/preset-section.json +11 -3
  200. package/manifest/components/progress.json +14 -3
  201. package/manifest/components/prompt-library.json +12 -3
  202. package/manifest/components/queue-dock.json +14 -3
  203. package/manifest/components/quota-banner.json +12 -3
  204. package/manifest/components/quote-reply.json +12 -3
  205. package/manifest/components/radio-group.json +15 -4
  206. package/manifest/components/radio.json +15 -4
  207. package/manifest/components/rating.json +15 -4
  208. package/manifest/components/read-aloud.json +13 -3
  209. package/manifest/components/reasoning-effort.json +12 -3
  210. package/manifest/components/reasoning-panel.json +13 -3
  211. package/manifest/components/recommendation-card.json +12 -3
  212. package/manifest/components/regenerate-menu.json +12 -3
  213. package/manifest/components/replay-player.json +14 -3
  214. package/manifest/components/research-report.json +12 -3
  215. package/manifest/components/resizable.json +13 -3
  216. package/manifest/components/retrieval-chunks.json +13 -3
  217. package/manifest/components/revert-dock.json +14 -3
  218. package/manifest/components/reviewable-diff.json +12 -3
  219. package/manifest/components/risk-badge.json +14 -3
  220. package/manifest/components/schedule-card.json +12 -3
  221. package/manifest/components/score-breakdown.json +13 -3
  222. package/manifest/components/scroll-anchor.json +12 -3
  223. package/manifest/components/scroll-area.json +13 -3
  224. package/manifest/components/scrollable-tabs-list.json +14 -4
  225. package/manifest/components/seam-cell.json +13 -4
  226. package/manifest/components/seam-grid.json +14 -3
  227. package/manifest/components/seam-list.json +13 -3
  228. package/manifest/components/search-input.json +15 -4
  229. package/manifest/components/section-header.json +14 -3
  230. package/manifest/components/segmented-control.json +15 -3
  231. package/manifest/components/separator.json +14 -3
  232. package/manifest/components/settings-panel.json +13 -3
  233. package/manifest/components/shape-section.json +11 -3
  234. package/manifest/components/shared-conversation.json +12 -3
  235. package/manifest/components/sheet.json +14 -4
  236. package/manifest/components/shimmer-label.json +12 -3
  237. package/manifest/components/sidebar.json +15 -4
  238. package/manifest/components/signal-edge.json +13 -4
  239. package/manifest/components/skeleton.json +16 -4
  240. package/manifest/components/skill-icon.json +12 -3
  241. package/manifest/components/slider.json +14 -3
  242. package/manifest/components/sources.json +12 -3
  243. package/manifest/components/sparkline.json +14 -4
  244. package/manifest/components/speaker-identity.json +11 -3
  245. package/manifest/components/spec-sheet.json +13 -4
  246. package/manifest/components/spectrum-visualizer.json +11 -3
  247. package/manifest/components/spinner.json +16 -4
  248. package/manifest/components/stack-icon.json +12 -3
  249. package/manifest/components/stack.json +14 -3
  250. package/manifest/components/stacks-matrix-icon.json +11 -3
  251. package/manifest/components/stat.json +14 -3
  252. package/manifest/components/status-dot.json +16 -4
  253. package/manifest/components/stepper.json +15 -4
  254. package/manifest/components/stopped-run.json +13 -4
  255. package/manifest/components/streaming-text.json +12 -3
  256. package/manifest/components/sub.json +11 -3
  257. package/manifest/components/subagent-list.json +13 -3
  258. package/manifest/components/suggestions.json +12 -3
  259. package/manifest/components/sup.json +11 -3
  260. package/manifest/components/swap-label.json +12 -3
  261. package/manifest/components/tags-input.json +15 -4
  262. package/manifest/components/tail-status.json +14 -3
  263. package/manifest/components/terminal-block.json +13 -3
  264. package/manifest/components/terminal-frame.json +14 -3
  265. package/manifest/components/textarea.json +15 -4
  266. package/manifest/components/theme-configurator.json +12 -3
  267. package/manifest/components/theme-provider.json +10 -0
  268. package/manifest/components/thinking-indicator.json +12 -3
  269. package/manifest/components/thread-list.json +12 -3
  270. package/manifest/components/thread-search.json +12 -3
  271. package/manifest/components/threshold-rail.json +13 -3
  272. package/manifest/components/time-boundary.json +13 -3
  273. package/manifest/components/time-field.json +15 -4
  274. package/manifest/components/timeline-ruler.json +13 -3
  275. package/manifest/components/timeline.json +13 -3
  276. package/manifest/components/title-bar.json +13 -3
  277. package/manifest/components/todo-list.json +12 -3
  278. package/manifest/components/toggle-group.json +15 -4
  279. package/manifest/components/toggle.json +15 -4
  280. package/manifest/components/token-editor.json +12 -3
  281. package/manifest/components/tool-call.json +13 -3
  282. package/manifest/components/tool-error.json +14 -4
  283. package/manifest/components/tool-group.json +12 -3
  284. package/manifest/components/tool-timeline.json +14 -4
  285. package/manifest/components/toolbar.json +14 -4
  286. package/manifest/components/trace-waterfall.json +12 -3
  287. package/manifest/components/tree-visibility-toggle.json +13 -3
  288. package/manifest/components/tree.json +14 -3
  289. package/manifest/components/turn-footer.json +14 -3
  290. package/manifest/components/two-step-button.json +14 -3
  291. package/manifest/components/typing-indicator.json +12 -3
  292. package/manifest/components/universe-grid.json +14 -4
  293. package/manifest/components/unread-divider.json +14 -4
  294. package/manifest/components/usage-chart.json +14 -3
  295. package/manifest/components/verdict-row.json +14 -3
  296. package/manifest/components/voice-conversation.json +13 -3
  297. package/manifest/components/web-preview.json +13 -3
  298. package/manifest/components/web-search.json +13 -3
  299. package/manifest/components/work-collapse.json +15 -4
  300. package/manifest/manifest.json +651 -651
  301. package/manifest/tokens.json +1 -1
  302. package/package.json +5 -5
@@ -17,10 +17,19 @@
17
17
  "tokensUsed": [],
18
18
  "summary": "The released channel: what a colleague gets when they install without asking for anything in particular.",
19
19
  "examples": [],
20
- "status": "todo-docs",
20
+ "status": "stable",
21
21
  "url": "/docs/components/channel-released-icon",
22
22
  "mdUrl": "/docs/components/channel-released-icon.md",
23
23
  "jsonUrl": "/r/components/channel-released-icon.json",
24
+ "whenToUse": [
25
+ "Marking the default, finished channel."
26
+ ],
27
+ "whenNotToUse": [
28
+ "A pre-release. Use `ChannelBetaIcon`, which is the same ring filled halfway."
29
+ ],
30
+ "commonMistakes": [
31
+ "Pairing it with an unrelated glyph for beta. The two are one mark told twice, so a reader never has to learn which of two pictures means 'finished'."
32
+ ],
24
33
  "specimens": [
25
34
  {
26
35
  "title": "The container icon set",
@@ -41,6 +50,5 @@
41
50
  "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
42
51
  "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
43
52
  }
44
- ],
45
- "todo": true
53
+ ]
46
54
  }
@@ -87,10 +87,19 @@
87
87
  "language": "tsx"
88
88
  }
89
89
  ],
90
- "status": "todo-docs",
90
+ "status": "stable",
91
91
  "url": "/docs/components/chart-container",
92
92
  "mdUrl": "/docs/components/chart-container.md",
93
93
  "jsonUrl": "/r/components/chart-container.json",
94
+ "whenToUse": [
95
+ "Around any chart, so the palette arrives as `--chart-1`…`--chart-N` custom properties."
96
+ ],
97
+ "whenNotToUse": [
98
+ "Around a `Sparkline` or `UsageChart`, which draw themselves and need no palette."
99
+ ],
100
+ "commonMistakes": [
101
+ "Hard-coding chart colours. The properties carry `var(--cue-accent)`, `var(--cue-info)` and the rest *by reference*, so a theme change reaches the chart without the chart knowing."
102
+ ],
94
103
  "specimens": [
95
104
  {
96
105
  "title": "ChartContainer — line",
@@ -122,6 +131,5 @@
122
131
  "note": "An area with an explicit tone list, which overrides the default palette for this chart only.",
123
132
  "interaction": "none beyond the tooltip."
124
133
  }
125
- ],
126
- "todo": true
134
+ ]
127
135
  }
@@ -62,10 +62,20 @@
62
62
  "language": "tsx"
63
63
  }
64
64
  ],
65
- "status": "todo-docs",
65
+ "status": "stable",
66
66
  "url": "/docs/components/chart-ramp",
67
67
  "mdUrl": "/docs/components/chart-ramp.md",
68
68
  "jsonUrl": "/r/components/chart-ramp.json",
69
+ "whenToUse": [
70
+ "Showing a sequential scale beside the chart that uses it."
71
+ ],
72
+ "whenNotToUse": [
73
+ "A categorical legend. Use `ChartSwatch` per category."
74
+ ],
75
+ "commonMistakes": [
76
+ "Drawing it as a CSS gradient. A ramp *is* discrete — a gradient shows steps the data cannot address and quietly disagrees with the same ramp filling the bars.",
77
+ "Adding seams between cells, which read as category boundaries in a scale that has none."
78
+ ],
69
79
  "specimens": [
70
80
  {
71
81
  "title": "RAMPS / accentRamp()",
@@ -77,6 +87,5 @@
77
87
  "note": "Ordered scales rather than categorical ones: four ported frequency ramps that never re-hue (a listener who has learnt `bass is red` must not relearn it), and one sequential ramp derived from the live accent.",
78
88
  "interaction": "none."
79
89
  }
80
- ],
81
- "todo": true
90
+ ]
82
91
  }
@@ -52,10 +52,19 @@
52
52
  "language": "tsx"
53
53
  }
54
54
  ],
55
- "status": "todo-docs",
55
+ "status": "stable",
56
56
  "url": "/docs/components/chart-swatch",
57
57
  "mdUrl": "/docs/components/chart-swatch.md",
58
58
  "jsonUrl": "/r/components/chart-swatch.json",
59
+ "whenToUse": [
60
+ "Every entry in a legend."
61
+ ],
62
+ "whenNotToUse": [
63
+ "A continuous scale. Use `ChartRamp`."
64
+ ],
65
+ "commonMistakes": [
66
+ "Rendering it without a label. The chip is `aria-hidden` and the label is the meaning — a swatch with no label is decoration and announces nothing, which is the honest reading of a colour with no caption (WCAG 1.4.1)."
67
+ ],
59
68
  "specimens": [
60
69
  {
61
70
  "title": "chartTones() / ChartSwatch",
@@ -67,6 +76,5 @@
67
76
  "note": "The categorical palette: the theme's six status colours first, then nine generated oklch hues at fixed lightness and chroma for when six run out. Resolved at render, so switching theme reharmonises every chart on the page without a subscription.",
68
77
  "interaction": "none. A swatch is a readout."
69
78
  }
70
- ],
71
- "todo": true
79
+ ]
72
80
  }
@@ -112,7 +112,7 @@
112
112
  "--cue-text-label",
113
113
  "--cue-text-ui"
114
114
  ],
115
- "summary": "The tooltip surface: an overlay, styled like every other overlay.",
115
+ "summary": "The chart tooltip surface: an overlay, styled like every other overlay.",
116
116
  "examples": [
117
117
  {
118
118
  "title": "Usage",
@@ -120,10 +120,19 @@
120
120
  "language": "tsx"
121
121
  }
122
122
  ],
123
- "status": "todo-docs",
123
+ "status": "stable",
124
124
  "url": "/docs/components/chart-tooltip-content",
125
125
  "mdUrl": "/docs/components/chart-tooltip-content.md",
126
126
  "jsonUrl": "/r/components/chart-tooltip-content.json",
127
+ "whenToUse": [
128
+ "Inside a chart's tooltip, so it gets what a popover gets — `surface-2`, the overlay rim, one soft shadow."
129
+ ],
130
+ "whenNotToUse": [
131
+ "Outside a chart. Use `Tooltip` or `Popover`."
132
+ ],
133
+ "commonMistakes": [
134
+ "Writing a chart-only surface recipe, which is a second source of truth that drifts from `_surface.ts`."
135
+ ],
127
136
  "specimens": [
128
137
  {
129
138
  "title": "ChartTooltipContent",
@@ -135,6 +144,5 @@
135
144
  "note": "The tooltip surface on its own, so a chart drawn from raw recharts parts can still wear it. Shown here mounted rather than hovered.",
136
145
  "interaction": "in a chart it is positioned by recharts; the styling is the same either way."
137
146
  }
138
- ],
139
- "todo": true
147
+ ]
140
148
  }
@@ -97,10 +97,22 @@
97
97
  "language": "tsx"
98
98
  }
99
99
  ],
100
- "status": "todo-docs",
100
+ "status": "stable",
101
101
  "url": "/docs/components/chart",
102
102
  "mdUrl": "/docs/components/chart.md",
103
103
  "jsonUrl": "/r/components/chart.json",
104
+ "whenToUse": [
105
+ "A series that arrives over time, where `visibleCount` walks forward as points land.",
106
+ "A headline figure with a change against the previous window beside the marks."
107
+ ],
108
+ "whenNotToUse": [
109
+ "A series whose numbers still need formatting. The chart never formats numbers itself — `value` and `delta` are pre-formatted strings.",
110
+ "A dataset with no natural last point. The last point stays emphasised in all three variants."
111
+ ],
112
+ "commonMistakes": [
113
+ "Passing only the points that have arrived. Pass the whole series in `points` and move `visibleCount`, because the scale is computed from all of it so the axis does not jump while streaming.",
114
+ "Expecting `delta` to be coloured by your own sign logic. It renders green unless it starts with a minus sign."
115
+ ],
104
116
  "specimens": [
105
117
  {
106
118
  "title": "Chart",
@@ -112,6 +124,5 @@
112
124
  "note": "One series, three ways, on one scale: an area, a bare line, or bars with the newest one lit. It draws its own SVG at a fixed viewBox and stretches — there is no charting library under this, which is the point of it being an element rather than an instrument.",
113
125
  "interaction": "none, and it is not a substitute for the charts group: no axes, no legend, no tooltip. The `<svg>` carries role='img' and a label built from the figure beside it."
114
126
  }
115
- ],
116
- "todo": true
127
+ ]
117
128
  }
@@ -31,10 +31,21 @@
31
31
  "language": "tsx"
32
32
  }
33
33
  ],
34
- "status": "todo-docs",
34
+ "status": "stable",
35
35
  "url": "/docs/components/chat-empty-state",
36
36
  "mdUrl": "/docs/components/chat-empty-state.md",
37
37
  "jsonUrl": "/r/components/chat-empty-state.json",
38
+ "whenToUse": [
39
+ "A thread with no messages yet, where the greeting, the suggestions and a composer are the whole screen.",
40
+ "A row of starter pills that should arrive in order, which `EmptyStateSuggestion` staggers from its `index`."
41
+ ],
42
+ "whenNotToUse": [
43
+ "A thread that already has turns in it."
44
+ ],
45
+ "commonMistakes": [
46
+ "Scattering the suggestion pills outside `EmptyStateSuggestions`, which is the row they belong in.",
47
+ "Expecting `EmptyStateComposer` to hold text. It takes a `placeholder` string and an `onSend` handler."
48
+ ],
38
49
  "specimens": [
39
50
  {
40
51
  "title": "ChatEmptyState",
@@ -50,6 +61,5 @@
50
61
  "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
51
62
  "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
52
63
  }
53
- ],
54
- "todo": true
64
+ ]
55
65
  }
@@ -27,10 +27,19 @@
27
27
  ],
28
28
  "summary": "One message from the model: plain text on the leading edge, no bubble.",
29
29
  "examples": [],
30
- "status": "todo-docs",
30
+ "status": "stable",
31
31
  "url": "/docs/components/chat-panel-assistant-message",
32
32
  "mdUrl": "/docs/components/chat-panel-assistant-message.md",
33
33
  "jsonUrl": "/r/components/chat-panel-assistant-message.json",
34
+ "whenToUse": [
35
+ "Model turns in a panel transcript."
36
+ ],
37
+ "whenNotToUse": [
38
+ "A turn from the person, which is drawn as a filled bubble on the trailing edge instead."
39
+ ],
40
+ "commonMistakes": [
41
+ "Wrapping it in a bubble to match the user's turns. The asymmetry is the point: the model's text runs plain on the leading edge."
42
+ ],
34
43
  "specimens": [
35
44
  {
36
45
  "title": "ChatPanel",
@@ -47,6 +56,5 @@
47
56
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
48
57
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
49
58
  }
50
- ],
51
- "todo": true
59
+ ]
52
60
  }
@@ -49,10 +49,19 @@
49
49
  ],
50
50
  "summary": "The panel's composer row.",
51
51
  "examples": [],
52
- "status": "todo-docs",
52
+ "status": "stable",
53
53
  "url": "/docs/components/chat-panel-composer",
54
54
  "mdUrl": "/docs/components/chat-panel-composer.md",
55
55
  "jsonUrl": "/r/components/chat-panel-composer.json",
56
+ "whenToUse": [
57
+ "The input row at the foot of a panel, when the screen needs the shape of a composer rather than a live one."
58
+ ],
59
+ "whenNotToUse": [
60
+ "A working input. It is a display of a composer — `placeholder` is a string, not a value."
61
+ ],
62
+ "commonMistakes": [
63
+ "Omitting `onSend` and expecting a live control. Without a handler the send control renders disabled."
64
+ ],
56
65
  "specimens": [
57
66
  {
58
67
  "title": "ChatPanel",
@@ -69,6 +78,5 @@
69
78
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
70
79
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
71
80
  }
72
- ],
73
- "todo": true
81
+ ]
74
82
  }
@@ -27,10 +27,19 @@
27
27
  ],
28
28
  "summary": "The scrolling transcript inside a `ChatPanel`.",
29
29
  "examples": [],
30
- "status": "todo-docs",
30
+ "status": "stable",
31
31
  "url": "/docs/components/chat-panel-messages",
32
32
  "mdUrl": "/docs/components/chat-panel-messages.md",
33
33
  "jsonUrl": "/r/components/chat-panel-messages.json",
34
+ "whenToUse": [
35
+ "Holding the turns of a panel conversation."
36
+ ],
37
+ "whenNotToUse": [
38
+ "Content outside a `ChatPanel`. It is that frame's transcript slot."
39
+ ],
40
+ "commonMistakes": [
41
+ "Adding your own top alignment or spacer. It is bottom-aligned, so a short conversation sits on the composer rather than floating at the top of the panel."
42
+ ],
34
43
  "specimens": [
35
44
  {
36
45
  "title": "ChatPanel",
@@ -47,6 +56,5 @@
47
56
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
48
57
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
49
58
  }
50
- ],
51
- "todo": true
59
+ ]
52
60
  }
@@ -27,10 +27,19 @@
27
27
  ],
28
28
  "summary": "The three-dot rest state, for the gap between sending and the first token.",
29
29
  "examples": [],
30
- "status": "todo-docs",
30
+ "status": "stable",
31
31
  "url": "/docs/components/chat-panel-typing",
32
32
  "mdUrl": "/docs/components/chat-panel-typing.md",
33
33
  "jsonUrl": "/r/components/chat-panel-typing.json",
34
+ "whenToUse": [
35
+ "The pause after a message is sent and before the first token arrives."
36
+ ],
37
+ "whenNotToUse": [
38
+ "Any wait that outlasts that gap. It is a rest state, not a progress indicator."
39
+ ],
40
+ "commonMistakes": [
41
+ "Leaving it mounted once tokens are streaming, which shows the model as still silent while it is already replying."
42
+ ],
34
43
  "specimens": [
35
44
  {
36
45
  "title": "ChatPanel",
@@ -47,6 +56,5 @@
47
56
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
48
57
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
49
58
  }
50
- ],
51
- "todo": true
59
+ ]
52
60
  }
@@ -27,10 +27,19 @@
27
27
  ],
28
28
  "summary": "One message from the person, drawn as a filled bubble on the trailing edge.",
29
29
  "examples": [],
30
- "status": "todo-docs",
30
+ "status": "stable",
31
31
  "url": "/docs/components/chat-panel-user-message",
32
32
  "mdUrl": "/docs/components/chat-panel-user-message.md",
33
33
  "jsonUrl": "/r/components/chat-panel-user-message.json",
34
+ "whenToUse": [
35
+ "Turns from the person in a panel transcript."
36
+ ],
37
+ "whenNotToUse": [
38
+ "A model turn, which runs as plain text on the leading edge rather than in a bubble."
39
+ ],
40
+ "commonMistakes": [
41
+ "Overriding the alignment to match the model's turns. The trailing edge and the fill are what tell the two apart at a glance."
42
+ ],
34
43
  "specimens": [
35
44
  {
36
45
  "title": "ChatPanel",
@@ -47,6 +56,5 @@
47
56
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
48
57
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
49
58
  }
50
- ],
51
- "todo": true
59
+ ]
52
60
  }
@@ -33,10 +33,21 @@
33
33
  "language": "tsx"
34
34
  }
35
35
  ],
36
- "status": "todo-docs",
36
+ "status": "stable",
37
37
  "url": "/docs/components/chat-panel",
38
38
  "mdUrl": "/docs/components/chat-panel.md",
39
39
  "jsonUrl": "/r/components/chat-panel.json",
40
+ "whenToUse": [
41
+ "A compact chat surface that needs a transcript and a composer in one frame.",
42
+ "A transcript where the pause before the first token has a rest state of its own, via `ChatPanelTyping`."
43
+ ],
44
+ "whenNotToUse": [
45
+ "A single message on its own. The panel is the frame around the transcript and the composer, not a message wrapper."
46
+ ],
47
+ "commonMistakes": [
48
+ "Rendering turns directly inside `ChatPanel`. They go in `ChatPanelMessages`.",
49
+ "Leaving `ChatPanelTyping` mounted once tokens arrive — it stands for the pause before the reply, not the reply."
50
+ ],
40
51
  "specimens": [
41
52
  {
42
53
  "title": "ChatPanel",
@@ -53,6 +64,5 @@
53
64
  "note": "The six parts working together, which is what the whole family is for. The person's turn is a filled bubble on the trailing edge, the model's is plain text on the leading one, and the transcript is bottom-aligned so a short conversation sits on the composer rather than floating.",
54
65
  "interaction": "the send control is the only live thing here; use it and the reply is replaced by the three-dot pause, then comes back."
55
66
  }
56
- ],
57
- "todo": true
67
+ ]
58
68
  }
@@ -41,7 +41,7 @@
41
41
  "--cue-sunken",
42
42
  "--cue-text-ui"
43
43
  ],
44
- "summary": "Shared state for a set of {@link Checkbox}es: one `value` array in, one out.",
44
+ "summary": "Shared state for a set of checkboxes: one `value` array in, one out.",
45
45
  "examples": [
46
46
  {
47
47
  "title": "Usage",
@@ -49,10 +49,22 @@
49
49
  "language": "tsx"
50
50
  }
51
51
  ],
52
- "status": "todo-docs",
52
+ "status": "stable",
53
53
  "url": "/docs/components/checkbox-group",
54
54
  "mdUrl": "/docs/components/checkbox-group.md",
55
55
  "jsonUrl": "/r/components/checkbox-group.json",
56
+ "whenToUse": [
57
+ "Any number of options, including none — filters, permissions, capabilities.",
58
+ "Anywhere the selected set should be read and written as one array rather than N booleans."
59
+ ],
60
+ "whenNotToUse": [
61
+ "Exactly one answer. Use `RadioGroup`.",
62
+ "A single independent toggle. Use `Checkbox`, or `Switch` for a setting."
63
+ ],
64
+ "commonMistakes": [
65
+ "Leaving it unnamed. A group of checkboxes with no accessible name is a list of unrelated toggles as far as a screen reader is concerned.",
66
+ "Keeping a separate boolean per option beside the group's array, which gives two sources of truth that drift."
67
+ ],
56
68
  "specimens": [
57
69
  {
58
70
  "title": "Checkbox / CheckboxGroup",
@@ -65,6 +77,5 @@
65
77
  "note": "Two sizes and a real indeterminate state, wired as a parent of its group.",
66
78
  "interaction": "Space toggles; the group's parent box drives and reflects its children."
67
79
  }
68
- ],
69
- "todo": true
80
+ ]
70
81
  }
@@ -71,10 +71,21 @@
71
71
  "language": "tsx"
72
72
  }
73
73
  ],
74
- "status": "todo-docs",
74
+ "status": "stable",
75
75
  "url": "/docs/components/checkpoint-history",
76
76
  "mdUrl": "/docs/components/checkpoint-history.md",
77
77
  "jsonUrl": "/r/components/checkpoint-history.json",
78
+ "whenToUse": [
79
+ "A run with restore points, where the user needs to see what returning to one would give back."
80
+ ],
81
+ "whenNotToUse": [
82
+ "A plain event log with nothing to restore to.",
83
+ "Choosing between possible futures. These are points already behind the run, listed oldest first."
84
+ ],
85
+ "commonMistakes": [
86
+ "Passing `checkpoints` newest first. They are expected oldest first.",
87
+ "Leaving `currentId` stale after a restore. Everything after it dims, because restoring would discard it."
88
+ ],
78
89
  "specimens": [
79
90
  {
80
91
  "title": "CheckpointHistory",
@@ -86,6 +97,5 @@
86
97
  "note": "Points the run can be put back to, oldest first, each with what a fallback would cost in files. Everything after the current point dims, because restoring would discard it — the list is the undo stack drawn as a place rather than a count.",
87
98
  "interaction": "each row carries a labelled restore button (`Restore to …`), so the control is named even though it draws as a glyph."
88
99
  }
89
- ],
90
- "todo": true
100
+ ]
91
101
  }
@@ -105,10 +105,20 @@
105
105
  "language": "tsx"
106
106
  }
107
107
  ],
108
- "status": "todo-docs",
108
+ "status": "stable",
109
109
  "url": "/docs/components/clamp",
110
110
  "mdUrl": "/docs/components/clamp.md",
111
111
  "jsonUrl": "/r/components/clamp.json",
112
+ "whenToUse": [
113
+ "Anything a transcript truncates: command output, a pasted file, a reasoning trace, a quoted message.",
114
+ "Anywhere the cut must look the same everywhere — the alternative is five slightly different cuts."
115
+ ],
116
+ "whenNotToUse": [
117
+ "Content short enough to show. A fade over nothing is chrome."
118
+ ],
119
+ "commonMistakes": [
120
+ "Painting a gradient of the surface colour over the content instead. The fade is a **mask**, so it needs no idea of what is behind it — the overlay version is the one that hard-codes a colour and breaks in light mode."
121
+ ],
112
122
  "specimens": [
113
123
  {
114
124
  "title": "Clamp",
@@ -120,6 +130,5 @@
120
130
  "note": "The truncation trio as one element: a height, a dissolve of a fixed number of pixels at the cut, and a way back. The fixed depth is the part worth copying — ten pixels of dissolve is the same cut over a two-line row and a forty-line one, which is why the reference's five different truncations read as one idea. The fade is a mask rather than a gradient of the surface colour, which is the bug the reference shipped: its diff variant hard-codes a dark grey and smears on a light theme. A mask fades the content itself, so it has no colour to get wrong in any theme, either mode, or inside the island.",
121
131
  "interaction": "the reveal is always present and always focusable; hover and focus decide only how loudly it is drawn, and Show less is never dimmed at all. That is the one place this does not copy the reference, whose Show more chip appears on hover only and is unreachable for anyone not holding a pointer. The height and the fade are published as custom properties on the root, and the mask is written in terms of them, so a height overridden in a stylesheet moves the dissolve with it."
122
132
  }
123
- ],
124
- "todo": true
133
+ ]
125
134
  }
@@ -17,10 +17,19 @@
17
17
  "tokensUsed": [],
18
18
  "summary": "A CLI tool in the registry: a thing that runs in a terminal.",
19
19
  "examples": [],
20
- "status": "todo-docs",
20
+ "status": "stable",
21
21
  "url": "/docs/components/cli-tool-icon",
22
22
  "mdUrl": "/docs/components/cli-tool-icon.md",
23
23
  "jsonUrl": "/r/components/cli-tool-icon.json",
24
+ "whenToUse": [
25
+ "A catalogue row for something invoked from a shell."
26
+ ],
27
+ "whenNotToUse": [
28
+ "A running service. Use `McpServerIcon`."
29
+ ],
30
+ "commonMistakes": [
31
+ "Using a bare chevron. A chevron is a disclosure everywhere else in this library, and a navigation row that appeared to expand and then navigated instead is a worse failure than a slightly busier glyph at 10px."
32
+ ],
24
33
  "specimens": [
25
34
  {
26
35
  "title": "The container icon set",
@@ -41,6 +50,5 @@
41
50
  "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
42
51
  "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
43
52
  }
44
- ],
45
- "todo": true
53
+ ]
46
54
  }
@@ -84,10 +84,22 @@
84
84
  "language": "tsx"
85
85
  }
86
86
  ],
87
- "status": "todo-docs",
87
+ "status": "stable",
88
88
  "url": "/docs/components/code-diff",
89
89
  "mdUrl": "/docs/components/code-diff.md",
90
90
  "jsonUrl": "/r/components/code-diff.json",
91
+ "whenToUse": [
92
+ "One file's unified diff inside a transcript, with its path and counts in the header.",
93
+ "A diff that should replay its entrance animation when the turn changes, by moving `cycle`."
94
+ ],
95
+ "whenNotToUse": [
96
+ "A change spanning many files. This is one file, one `lines` array of context, added and removed.",
97
+ "A side-by-side comparison. `lines` is a single unified list."
98
+ ],
99
+ "commonMistakes": [
100
+ "Deriving `additions` and `deletions` from `lines` and expecting them to agree. They are separate props and the header prints what you pass.",
101
+ "Holding `cycle` constant and wondering why the entrance animation never replays. It is an identity key that remounts the body."
102
+ ],
91
103
  "specimens": [
92
104
  {
93
105
  "title": "CodeDiff",
@@ -99,6 +111,5 @@
99
111
  "note": "A unified diff sized for a chat column: added and removed rows carry both a gutter mark and a tint, so the diff survives being read in greyscale. Rows animate in on `cycle`, which is an identity rather than a trigger.",
100
112
  "interaction": "none. Scrolls sideways rather than wrapping, because a wrapped diff line is a lie about the file."
101
113
  }
102
- ],
103
- "todo": true
114
+ ]
104
115
  }
@@ -104,10 +104,21 @@
104
104
  "language": "tsx"
105
105
  }
106
106
  ],
107
- "status": "todo-docs",
107
+ "status": "stable",
108
108
  "url": "/docs/components/code-runner",
109
109
  "mdUrl": "/docs/components/code-runner.md",
110
110
  "jsonUrl": "/r/components/code-runner.json",
111
+ "whenToUse": [
112
+ "Executable code in a transcript, with its output attached to it rather than in a second block.",
113
+ "A settled run, where `durationMs` prints how long it took."
114
+ ],
115
+ "whenNotToUse": [
116
+ "Code that is only there to be read. The run control is the point of the element."
117
+ ],
118
+ "commonMistakes": [
119
+ "Passing highlighted markup to `code`. It is rendered as plain mono; wrap it yourself for highlighting.",
120
+ "Using `state=\"idle\"` for a finished run that produced nothing. idle hides the output pane entirely."
121
+ ],
111
122
  "specimens": [
112
123
  {
113
124
  "title": "CodeRunner",
@@ -119,6 +130,5 @@
119
130
  "note": "A snippet with a run button and the output it produced attached underneath, rather than in a console somewhere else. `idle` hides the output pane entirely — an empty black box is not a result — `error` tints what came back in the danger hue, and the duration prints once it settles.",
120
131
  "interaction": "the run control is a labelled icon button (`Run this snippet`); while running it spins and the output arrives a line at a time."
121
132
  }
122
- ],
123
- "todo": true
133
+ ]
124
134
  }
@@ -113,10 +113,21 @@
113
113
  "language": "tsx"
114
114
  }
115
115
  ],
116
- "status": "todo-docs",
116
+ "status": "stable",
117
117
  "url": "/docs/components/collapsible",
118
118
  "mdUrl": "/docs/components/collapsible.md",
119
119
  "jsonUrl": "/r/components/collapsible.json",
120
+ "whenToUse": [
121
+ "A single section of a page that peers with the sections around it.",
122
+ "Anywhere it should look identical to a member of an `Accordion`, because it wears the same summary-row skin."
123
+ ],
124
+ "whenNotToUse": [
125
+ "Several sections. Use `Accordion`, which coordinates which are open.",
126
+ "Advanced fields inside a form. Use `Disclosure` — this is a peer section, that is an annotation on the form."
127
+ ],
128
+ "commonMistakes": [
129
+ "Using it for the 'advanced' idiom. The summary row is the tell: it announces a section where the form wanted a footnote."
130
+ ],
120
131
  "specimens": [
121
132
  {
122
133
  "title": "Collapsible",
@@ -128,6 +139,5 @@
128
139
  "note": "One panel, one trigger, no grouping rules.",
129
140
  "interaction": "same height animation as the accordion panel."
130
141
  }
131
- ],
132
- "todo": true
142
+ ]
133
143
  }