@cueplusplus/ui 0.14.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 (296) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/dist/primitives/chip.d.ts +1 -1
  3. package/dist/system/theme-provider.d.ts +25 -3
  4. package/dist/system/theme-provider.js +27 -2
  5. package/manifest/components/accordion.json +16 -4
  6. package/manifest/components/activity-graph.json +15 -3
  7. package/manifest/components/agent-card.json +15 -3
  8. package/manifest/components/agent-handoff.json +14 -3
  9. package/manifest/components/agent-mode-badge.json +12 -3
  10. package/manifest/components/agent-pile.json +13 -3
  11. package/manifest/components/agent-plan.json +13 -3
  12. package/manifest/components/agent-status.json +14 -3
  13. package/manifest/components/agent-surface.json +12 -3
  14. package/manifest/components/alert-dialog.json +14 -3
  15. package/manifest/components/animated-number.json +12 -3
  16. package/manifest/components/app-window-frame.json +13 -3
  17. package/manifest/components/approval-card.json +14 -3
  18. package/manifest/components/artifact-card.json +14 -3
  19. package/manifest/components/ask-box.json +13 -3
  20. package/manifest/components/audience-icon.json +11 -3
  21. package/manifest/components/autocomplete.json +15 -3
  22. package/manifest/components/avatar-group.json +15 -4
  23. package/manifest/components/avatar.json +16 -4
  24. package/manifest/components/background-inbox.json +14 -3
  25. package/manifest/components/band.json +14 -4
  26. package/manifest/components/breadcrumb.json +14 -3
  27. package/manifest/components/button-group.json +13 -3
  28. package/manifest/components/calendar.json +15 -4
  29. package/manifest/components/canvas-split-body.json +13 -3
  30. package/manifest/components/canvas-split-document.json +11 -3
  31. package/manifest/components/canvas-split-header.json +13 -3
  32. package/manifest/components/canvas-split-line.json +13 -3
  33. package/manifest/components/canvas-split-message.json +13 -3
  34. package/manifest/components/canvas-split-thread.json +11 -3
  35. package/manifest/components/canvas-split.json +13 -3
  36. package/manifest/components/card.json +14 -3
  37. package/manifest/components/carousel.json +12 -3
  38. package/manifest/components/catalogue-icon.json +11 -3
  39. package/manifest/components/channel-beta-icon.json +11 -3
  40. package/manifest/components/channel-matrix.json +11 -3
  41. package/manifest/components/channel-released-icon.json +11 -3
  42. package/manifest/components/chart-container.json +11 -3
  43. package/manifest/components/chart-ramp.json +12 -3
  44. package/manifest/components/chart-swatch.json +11 -3
  45. package/manifest/components/chart-tooltip-content.json +12 -4
  46. package/manifest/components/chart.json +14 -3
  47. package/manifest/components/chat-empty-state.json +13 -3
  48. package/manifest/components/chat-panel-assistant-message.json +11 -3
  49. package/manifest/components/chat-panel-composer.json +11 -3
  50. package/manifest/components/chat-panel-messages.json +11 -3
  51. package/manifest/components/chat-panel-typing.json +11 -3
  52. package/manifest/components/chat-panel-user-message.json +11 -3
  53. package/manifest/components/chat-panel.json +13 -3
  54. package/manifest/components/checkbox-group.json +15 -4
  55. package/manifest/components/checkpoint-history.json +13 -3
  56. package/manifest/components/clamp.json +12 -3
  57. package/manifest/components/cli-tool-icon.json +11 -3
  58. package/manifest/components/code-diff.json +14 -3
  59. package/manifest/components/code-runner.json +13 -3
  60. package/manifest/components/collapsible.json +13 -3
  61. package/manifest/components/color-area.json +12 -4
  62. package/manifest/components/color-field.json +12 -3
  63. package/manifest/components/color-picker.json +14 -4
  64. package/manifest/components/color-slider.json +12 -3
  65. package/manifest/components/color-swatch.json +13 -3
  66. package/manifest/components/colors-section.json +11 -3
  67. package/manifest/components/combobox.json +15 -4
  68. package/manifest/components/compaction-row.json +12 -3
  69. package/manifest/components/comparison-card.json +12 -3
  70. package/manifest/components/composer-actions.json +11 -3
  71. package/manifest/components/composer-attach-button.json +11 -3
  72. package/manifest/components/composer-attachment-chip.json +13 -3
  73. package/manifest/components/composer-attachments.json +11 -3
  74. package/manifest/components/composer-bar.json +12 -3
  75. package/manifest/components/composer-command-item.json +13 -3
  76. package/manifest/components/composer-context.json +13 -3
  77. package/manifest/components/composer-input.json +11 -3
  78. package/manifest/components/composer-menu-item.json +12 -3
  79. package/manifest/components/composer-menu.json +13 -3
  80. package/manifest/components/composer-model-item.json +13 -3
  81. package/manifest/components/composer-model-trigger.json +13 -3
  82. package/manifest/components/composer-person-item.json +13 -3
  83. package/manifest/components/composer-send.json +13 -3
  84. package/manifest/components/composer-toolbar.json +11 -3
  85. package/manifest/components/composer-voice-button.json +11 -3
  86. package/manifest/components/composer-voice.json +13 -3
  87. package/manifest/components/composer.json +14 -4
  88. package/manifest/components/computer-use.json +13 -3
  89. package/manifest/components/confidence-marker.json +11 -3
  90. package/manifest/components/connection-state.json +12 -3
  91. package/manifest/components/container.json +12 -3
  92. package/manifest/components/context-breakdown.json +12 -4
  93. package/manifest/components/context-menu.json +14 -4
  94. package/manifest/components/context-usage.json +14 -4
  95. package/manifest/components/conversation-search.json +13 -3
  96. package/manifest/components/copy-button.json +14 -3
  97. package/manifest/components/cost-meter.json +12 -3
  98. package/manifest/components/cue-portal-frame.json +12 -3
  99. package/manifest/components/data-table-pagination.json +13 -3
  100. package/manifest/components/data-table-toolbar.json +12 -3
  101. package/manifest/components/date-field.json +12 -3
  102. package/manifest/components/date-picker.json +13 -3
  103. package/manifest/components/date-range-picker.json +11 -3
  104. package/manifest/components/day-separator.json +12 -3
  105. package/manifest/components/delegation-card.json +14 -4
  106. package/manifest/components/density.json +12 -2
  107. package/manifest/components/description-list.json +15 -4
  108. package/manifest/components/diagram.json +13 -3
  109. package/manifest/components/disclosure.json +15 -4
  110. package/manifest/components/dmx-bar.json +12 -3
  111. package/manifest/components/dmx-strip.json +11 -3
  112. package/manifest/components/document-reference.json +13 -3
  113. package/manifest/components/draft-restore.json +13 -3
  114. package/manifest/components/drawer.json +13 -4
  115. package/manifest/components/edit-message.json +13 -3
  116. package/manifest/components/elements-command-palette.json +13 -3
  117. package/manifest/components/elements-composer.json +13 -3
  118. package/manifest/components/elements-data-table.json +11 -3
  119. package/manifest/components/elements-timeline.json +13 -3
  120. package/manifest/components/elicitation-form.json +13 -3
  121. package/manifest/components/empty-state-composer.json +11 -3
  122. package/manifest/components/empty-state-greeting.json +11 -3
  123. package/manifest/components/empty-state-suggestion.json +11 -3
  124. package/manifest/components/empty-state-suggestions.json +11 -3
  125. package/manifest/components/empty-state.json +15 -4
  126. package/manifest/components/end-of-turn-summary.json +14 -3
  127. package/manifest/components/env-var-input.json +15 -4
  128. package/manifest/components/error-state.json +13 -3
  129. package/manifest/components/export-dialog.json +10 -2
  130. package/manifest/components/eyebrow.json +14 -4
  131. package/manifest/components/feedback-dialog.json +13 -3
  132. package/manifest/components/field-description.json +15 -4
  133. package/manifest/components/field-error.json +15 -4
  134. package/manifest/components/field-label.json +15 -4
  135. package/manifest/components/file-tree.json +13 -3
  136. package/manifest/components/file-upload.json +14 -4
  137. package/manifest/components/flow-background.json +11 -3
  138. package/manifest/components/flow-controls.json +11 -3
  139. package/manifest/components/flow-graph.json +13 -3
  140. package/manifest/components/folder-icon.json +12 -3
  141. package/manifest/components/frac.json +11 -3
  142. package/manifest/components/generation-loader.json +13 -3
  143. package/manifest/components/generative-ui.json +16 -4
  144. package/manifest/components/grid.json +14 -3
  145. package/manifest/components/group-bar.json +13 -3
  146. package/manifest/components/guardrail-notice.json +13 -3
  147. package/manifest/components/hover-card.json +14 -4
  148. package/manifest/components/icon-button.json +15 -3
  149. package/manifest/components/image-generation.json +13 -3
  150. package/manifest/components/info-tip.json +15 -4
  151. package/manifest/components/inline-citation.json +13 -3
  152. package/manifest/components/input-group.json +15 -4
  153. package/manifest/components/item.json +15 -4
  154. package/manifest/components/job-progress.json +14 -3
  155. package/manifest/components/kbd.json +14 -3
  156. package/manifest/components/launcher-bubble.json +14 -3
  157. package/manifest/components/link.json +13 -3
  158. package/manifest/components/live-region-announcer.json +16 -4
  159. package/manifest/components/log-viewer.json +15 -3
  160. package/manifest/components/map-answer.json +13 -3
  161. package/manifest/components/markdown-text.json +16 -4
  162. package/manifest/components/math-block.json +13 -3
  163. package/manifest/components/mcp-server-icon.json +12 -3
  164. package/manifest/components/mcp-server-panel.json +13 -3
  165. package/manifest/components/memory-chips.json +12 -3
  166. package/manifest/components/menubar.json +13 -3
  167. package/manifest/components/message-actions.json +14 -4
  168. package/manifest/components/message-attachments.json +12 -3
  169. package/manifest/components/message-branches.json +12 -3
  170. package/manifest/components/message-list.json +12 -3
  171. package/manifest/components/message-pair.json +12 -3
  172. package/manifest/components/message-queue.json +13 -3
  173. package/manifest/components/message-timing.json +13 -3
  174. package/manifest/components/message.json +12 -3
  175. package/manifest/components/mobile-composer.json +14 -3
  176. package/manifest/components/model-picker.json +12 -3
  177. package/manifest/components/multi-select.json +16 -4
  178. package/manifest/components/musical-time-input.json +11 -3
  179. package/manifest/components/navigation-menu.json +13 -3
  180. package/manifest/components/node-card.json +11 -3
  181. package/manifest/components/node-handle.json +11 -3
  182. package/manifest/components/number-field.json +15 -3
  183. package/manifest/components/number-ticker.json +12 -3
  184. package/manifest/components/onboarding.json +12 -3
  185. package/manifest/components/otp-field.json +14 -3
  186. package/manifest/components/page-shell.json +14 -4
  187. package/manifest/components/pagination.json +14 -3
  188. package/manifest/components/panel-header.json +14 -4
  189. package/manifest/components/password-input.json +15 -4
  190. package/manifest/components/permission-grant.json +13 -3
  191. package/manifest/components/permission-scopes.json +14 -3
  192. package/manifest/components/piano-keyboard.json +11 -3
  193. package/manifest/components/preset-section.json +11 -3
  194. package/manifest/components/progress.json +14 -3
  195. package/manifest/components/prompt-library.json +12 -3
  196. package/manifest/components/queue-dock.json +14 -3
  197. package/manifest/components/quota-banner.json +12 -3
  198. package/manifest/components/quote-reply.json +12 -3
  199. package/manifest/components/radio-group.json +15 -4
  200. package/manifest/components/radio.json +15 -4
  201. package/manifest/components/rating.json +15 -4
  202. package/manifest/components/read-aloud.json +13 -3
  203. package/manifest/components/reasoning-effort.json +12 -3
  204. package/manifest/components/reasoning-panel.json +13 -3
  205. package/manifest/components/recommendation-card.json +12 -3
  206. package/manifest/components/regenerate-menu.json +12 -3
  207. package/manifest/components/replay-player.json +14 -3
  208. package/manifest/components/research-report.json +12 -3
  209. package/manifest/components/resizable.json +13 -3
  210. package/manifest/components/retrieval-chunks.json +13 -3
  211. package/manifest/components/revert-dock.json +14 -3
  212. package/manifest/components/reviewable-diff.json +12 -3
  213. package/manifest/components/risk-badge.json +14 -3
  214. package/manifest/components/schedule-card.json +12 -3
  215. package/manifest/components/score-breakdown.json +13 -3
  216. package/manifest/components/scroll-anchor.json +12 -3
  217. package/manifest/components/scroll-area.json +13 -3
  218. package/manifest/components/scrollable-tabs-list.json +14 -4
  219. package/manifest/components/seam-cell.json +13 -4
  220. package/manifest/components/seam-grid.json +14 -3
  221. package/manifest/components/seam-list.json +13 -3
  222. package/manifest/components/search-input.json +15 -4
  223. package/manifest/components/section-header.json +14 -3
  224. package/manifest/components/segmented-control.json +15 -3
  225. package/manifest/components/separator.json +14 -3
  226. package/manifest/components/settings-panel.json +13 -3
  227. package/manifest/components/shape-section.json +11 -3
  228. package/manifest/components/shared-conversation.json +12 -3
  229. package/manifest/components/sheet.json +14 -4
  230. package/manifest/components/shimmer-label.json +12 -3
  231. package/manifest/components/sidebar.json +15 -4
  232. package/manifest/components/signal-edge.json +13 -4
  233. package/manifest/components/skeleton.json +16 -4
  234. package/manifest/components/skill-icon.json +12 -3
  235. package/manifest/components/slider.json +14 -3
  236. package/manifest/components/sources.json +12 -3
  237. package/manifest/components/sparkline.json +14 -4
  238. package/manifest/components/speaker-identity.json +11 -3
  239. package/manifest/components/spec-sheet.json +13 -4
  240. package/manifest/components/spectrum-visualizer.json +11 -3
  241. package/manifest/components/spinner.json +16 -4
  242. package/manifest/components/stack-icon.json +12 -3
  243. package/manifest/components/stack.json +14 -3
  244. package/manifest/components/stacks-matrix-icon.json +11 -3
  245. package/manifest/components/stat.json +14 -3
  246. package/manifest/components/status-dot.json +16 -4
  247. package/manifest/components/stepper.json +15 -4
  248. package/manifest/components/stopped-run.json +13 -4
  249. package/manifest/components/streaming-text.json +12 -3
  250. package/manifest/components/sub.json +11 -3
  251. package/manifest/components/subagent-list.json +13 -3
  252. package/manifest/components/suggestions.json +12 -3
  253. package/manifest/components/sup.json +11 -3
  254. package/manifest/components/swap-label.json +12 -3
  255. package/manifest/components/tags-input.json +15 -4
  256. package/manifest/components/tail-status.json +14 -3
  257. package/manifest/components/terminal-block.json +13 -3
  258. package/manifest/components/terminal-frame.json +14 -3
  259. package/manifest/components/textarea.json +15 -4
  260. package/manifest/components/theme-configurator.json +12 -3
  261. package/manifest/components/theme-provider.json +1 -1
  262. package/manifest/components/thinking-indicator.json +12 -3
  263. package/manifest/components/thread-list.json +12 -3
  264. package/manifest/components/thread-search.json +12 -3
  265. package/manifest/components/threshold-rail.json +13 -3
  266. package/manifest/components/time-boundary.json +13 -3
  267. package/manifest/components/time-field.json +15 -4
  268. package/manifest/components/timeline-ruler.json +13 -3
  269. package/manifest/components/timeline.json +13 -3
  270. package/manifest/components/title-bar.json +13 -3
  271. package/manifest/components/todo-list.json +12 -3
  272. package/manifest/components/toggle-group.json +15 -4
  273. package/manifest/components/toggle.json +15 -4
  274. package/manifest/components/token-editor.json +12 -3
  275. package/manifest/components/tool-call.json +13 -3
  276. package/manifest/components/tool-error.json +14 -4
  277. package/manifest/components/tool-group.json +12 -3
  278. package/manifest/components/tool-timeline.json +14 -4
  279. package/manifest/components/toolbar.json +14 -4
  280. package/manifest/components/trace-waterfall.json +12 -3
  281. package/manifest/components/tree-visibility-toggle.json +13 -3
  282. package/manifest/components/tree.json +14 -3
  283. package/manifest/components/turn-footer.json +14 -3
  284. package/manifest/components/two-step-button.json +14 -3
  285. package/manifest/components/typing-indicator.json +12 -3
  286. package/manifest/components/universe-grid.json +14 -4
  287. package/manifest/components/unread-divider.json +14 -4
  288. package/manifest/components/usage-chart.json +14 -3
  289. package/manifest/components/verdict-row.json +14 -3
  290. package/manifest/components/voice-conversation.json +13 -3
  291. package/manifest/components/web-preview.json +13 -3
  292. package/manifest/components/web-search.json +13 -3
  293. package/manifest/components/work-collapse.json +15 -4
  294. package/manifest/manifest.json +649 -649
  295. package/manifest/tokens.json +1 -1
  296. package/package.json +4 -4
@@ -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
  }
@@ -34,7 +34,7 @@
34
34
  "--cue-fg",
35
35
  "--cue-radius-control"
36
36
  ],
37
- "summary": "The two-axis colour field — saturation against brightness, by default.",
37
+ "summary": "The two-axis colour field — saturation against brightness by default.",
38
38
  "examples": [
39
39
  {
40
40
  "title": "Usage",
@@ -42,10 +42,19 @@
42
42
  "language": "tsx"
43
43
  }
44
44
  ],
45
- "status": "todo-docs",
45
+ "status": "stable",
46
46
  "url": "/docs/components/color-area",
47
47
  "mdUrl": "/docs/components/color-area.md",
48
48
  "jsonUrl": "/r/components/color-area.json",
49
+ "whenToUse": [
50
+ "Inside a colour picker, for the coarse visual pick."
51
+ ],
52
+ "whenNotToUse": [
53
+ "On its own without a hue control, which leaves two of three dimensions unreachable."
54
+ ],
55
+ "commonMistakes": [
56
+ "Rebuilding the pointer maths. The two hidden range inputs are what make it keyboard- and screen-reader-operable, and they come from the library."
57
+ ],
49
58
  "specimens": [
50
59
  {
51
60
  "title": "ColorArea",
@@ -57,6 +66,5 @@
57
66
  "note": "The two-axis plane. Saturation across, brightness down, with a thumb that reports both.",
58
67
  "interaction": "arrow keys move one axis at a time; the thumb keeps a ring in the background colour so it stays visible on any hue."
59
68
  }
60
- ],
61
- "todo": true
69
+ ]
62
70
  }
@@ -71,10 +71,20 @@
71
71
  "language": "tsx"
72
72
  }
73
73
  ],
74
- "status": "todo-docs",
74
+ "status": "stable",
75
75
  "url": "/docs/components/color-field",
76
76
  "mdUrl": "/docs/components/color-field.md",
77
77
  "jsonUrl": "/r/components/color-field.json",
78
+ "whenToUse": [
79
+ "An exact value the user knows or must paste.",
80
+ "Beside other text controls: it rides the same recessed chassis."
81
+ ],
82
+ "whenNotToUse": [
83
+ "A visual pick. Use `ColorArea` or `ColorPicker`."
84
+ ],
85
+ "commonMistakes": [
86
+ "Parsing the input yourself. Parsing, arrow-key stepping and commit-on-blur are the library's."
87
+ ],
78
88
  "specimens": [
79
89
  {
80
90
  "title": "ColorField",
@@ -86,6 +96,5 @@
86
96
  "note": "The text half of the suite, on the form chassis. Invalid input is rejected rather than silently coerced.",
87
97
  "interaction": "same rim and ring as Input; arrow keys step the channel under the caret."
88
98
  }
89
- ],
90
- "todo": true
99
+ ]
91
100
  }
@@ -207,7 +207,7 @@
207
207
  "--cue-text-label",
208
208
  "--cue-text-ui"
209
209
  ],
210
- "summary": "A colour, edited in a popover: two-axis area, hue rail, optional alpha rail, a text field that speaks hex *and* oklch, and an eyedropper where the browser has one.",
210
+ "summary": "A colour, edited in a popover: area, hue rail, optional alpha, a hex/oklch field and an eyedropper where the browser has one.",
211
211
  "examples": [
212
212
  {
213
213
  "title": "Usage",
@@ -215,10 +215,21 @@
215
215
  "language": "tsx"
216
216
  }
217
217
  ],
218
- "status": "todo-docs",
218
+ "status": "stable",
219
219
  "url": "/docs/components/color-picker",
220
220
  "mdUrl": "/docs/components/color-picker.md",
221
221
  "jsonUrl": "/r/components/color-picker.json",
222
+ "whenToUse": [
223
+ "Any full colour edit where the user needs both a visual pick and an exact value."
224
+ ],
225
+ "whenNotToUse": [
226
+ "One channel. Use `ColorSlider`.",
227
+ "A typed value only. Use `ColorField`.",
228
+ "Showing a colour. Use `ColorSwatch`."
229
+ ],
230
+ "commonMistakes": [
231
+ "Looking for a single primitive to wrap. It is composed from the React Aria colour parts because no primitive owns the combination."
232
+ ],
222
233
  "specimens": [
223
234
  {
224
235
  "title": "ColorPicker",
@@ -230,6 +241,5 @@
230
241
  "note": "Swatch, popover, area, hue slider and a text field, in one control. Reads and writes hex or oklch, so a token authored in oklch survives a round trip unchanged.",
231
242
  "interaction": "the swatch is the trigger; inside the popup, the area takes both arrow axes and the slider takes one."
232
243
  }
233
- ],
234
- "todo": true
244
+ ]
235
245
  }
@@ -64,10 +64,20 @@
64
64
  "language": "tsx"
65
65
  }
66
66
  ],
67
- "status": "todo-docs",
67
+ "status": "stable",
68
68
  "url": "/docs/components/color-slider",
69
69
  "mdUrl": "/docs/components/color-slider.md",
70
70
  "jsonUrl": "/r/components/color-slider.json",
71
+ "whenToUse": [
72
+ "A single channel the user adjusts directly.",
73
+ "Alpha — it gets the transparency checkerboard, without which 'half transparent' and 'half grey' look identical."
74
+ ],
75
+ "whenNotToUse": [
76
+ "A whole colour. Use `ColorPicker`."
77
+ ],
78
+ "commonMistakes": [
79
+ "Painting the gradient yourself. The library owns it along with the keyboard and pointer behaviour."
80
+ ],
71
81
  "specimens": [
72
82
  {
73
83
  "title": "ColorSlider",
@@ -79,6 +89,5 @@
79
89
  "note": "One channel at a time. The track paints the gradient for the channel it controls.",
80
90
  "interaction": "arrow keys step, Home and End jump to the channel bounds; the value is spoken as a colour, not a number."
81
91
  }
82
- ],
83
- "todo": true
92
+ ]
84
93
  }
@@ -59,10 +59,21 @@
59
59
  "language": "tsx"
60
60
  }
61
61
  ],
62
- "status": "todo-docs",
62
+ "status": "stable",
63
63
  "url": "/docs/components/color-swatch",
64
64
  "mdUrl": "/docs/components/color-swatch.md",
65
65
  "jsonUrl": "/r/components/color-swatch.json",
66
+ "whenToUse": [
67
+ "Displaying a colour — a legend, a palette row, a token value.",
68
+ "Anywhere transparency must read as transparency: the frame carries the checkerboard."
69
+ ],
70
+ "whenNotToUse": [
71
+ "Editing. Use `ColorPicker`.",
72
+ "A chart legend. Use `ChartSwatch`, which pairs the colour with a label."
73
+ ],
74
+ "commonMistakes": [
75
+ "Collapsing it to one element. It is two on purpose: the library writes the colour into inline `background-color`, which paints *behind* a background image, so one element cannot carry both the colour and the checkerboard."
76
+ ],
66
77
  "specimens": [
67
78
  {
68
79
  "title": "ColorSwatch",
@@ -74,6 +85,5 @@
74
85
  "note": "A colour as a readable object: three sizes, a checkerboard behind anything translucent, and a spoken description of the colour.",
75
86
  "interaction": "none. A swatch is a readout unless a picker wraps it."
76
87
  }
77
- ],
78
- "todo": true
88
+ ]
79
89
  }
@@ -54,7 +54,7 @@
54
54
  "--cue-text-micro",
55
55
  "--cue-text-ui"
56
56
  ],
57
- "summary": "Section 2 — every colour the active theme declares, one row each.",
57
+ "summary": "Section 2 of the configurator — every colour the active theme declares, one row each.",
58
58
  "examples": [
59
59
  {
60
60
  "title": "Usage",
@@ -62,9 +62,17 @@
62
62
  "language": "tsx"
63
63
  }
64
64
  ],
65
- "status": "todo-docs",
65
+ "status": "stable",
66
66
  "url": "/docs/components/colors-section",
67
67
  "mdUrl": "/docs/components/colors-section.md",
68
68
  "jsonUrl": "/r/components/colors-section.json",
69
- "todo": true
69
+ "whenToUse": [
70
+ "Inside `ThemeConfigurator`, where the rows are grouped by what each colour does."
71
+ ],
72
+ "whenNotToUse": [
73
+ "As a colour picker of your own. Use `TokenEditor`, which is the stateless, reusable half."
74
+ ],
75
+ "commonMistakes": [
76
+ "Reimplementing the rows. The editing lives in `TokenEditor` precisely so anything else can reuse it."
77
+ ]
70
78
  }
@@ -237,7 +237,7 @@
237
237
  "--cue-text-label",
238
238
  "--cue-text-ui"
239
239
  ],
240
- "summary": "A {@link Select } you can type into: one value out of a known, filterable set.",
240
+ "summary": "A `Select` you can type into: one value out of a known, filterable set.",
241
241
  "examples": [
242
242
  {
243
243
  "title": "Usage",
@@ -245,10 +245,22 @@
245
245
  "language": "tsx"
246
246
  }
247
247
  ],
248
- "status": "todo-docs",
248
+ "status": "stable",
249
249
  "url": "/docs/components/combobox",
250
250
  "mdUrl": "/docs/components/combobox.md",
251
251
  "jsonUrl": "/r/components/combobox.json",
252
+ "whenToUse": [
253
+ "A list too long to scroll comfortably — timezones, fixtures, users — where the value must still be one of the list.",
254
+ "Anywhere `Select` is right in contract but wrong in ergonomics."
255
+ ],
256
+ "whenNotToUse": [
257
+ "A value the user may invent. Use `Autocomplete`; anything not in `items` cannot be chosen here.",
258
+ "A short list that fits on screen. `Select` costs the user nothing to open and nothing to learn."
259
+ ],
260
+ "commonMistakes": [
261
+ "Treating the typed text as the value. It is a filter; the value is always an item.",
262
+ "Choosing between this and `Autocomplete` on appearance. They differ in what a value is allowed to be, which is the thing downstream code depends on."
263
+ ],
252
264
  "specimens": [
253
265
  {
254
266
  "title": "Combobox",
@@ -260,6 +272,5 @@
260
272
  "note": "A filtered list with a committed value. An item can be disabled; the empty message is a real string, not a blank popup.",
261
273
  "interaction": "arrow keys move the highlight, Enter commits, Escape reverts to the committed value."
262
274
  }
263
- ],
264
- "todo": true
275
+ ]
265
276
  }
@@ -108,10 +108,20 @@
108
108
  "language": "tsx"
109
109
  }
110
110
  ],
111
- "status": "todo-docs",
111
+ "status": "stable",
112
112
  "url": "/docs/components/compaction-row",
113
113
  "mdUrl": "/docs/components/compaction-row.md",
114
114
  "jsonUrl": "/r/components/compaction-row.json",
115
+ "whenToUse": [
116
+ "Marking a compaction in a transcript — the text above it is not the text below it any more.",
117
+ "Anywhere the reader needs to act on it: `128k → 24k tokens · 214 → 31 messages` explains why the model stopped remembering something."
118
+ ],
119
+ "whenNotToUse": [
120
+ "A time gap. Use `TimeBoundary`, which is the same `role=\"separator\"` for a different break."
121
+ ],
122
+ "commonMistakes": [
123
+ "Writing 'compacted' as prose. Alone it tells a reader nothing they can act on — the pair of numbers on both axes is the whole point."
124
+ ],
115
125
  "specimens": [
116
126
  {
117
127
  "title": "CompactionRow",
@@ -123,6 +133,5 @@
123
133
  "note": "A rule like TimeBoundary, because that is what it is: the transcript above it is not the transcript below it any more. What makes it a component is the pair of numbers on both axes — 'compacted' alone tells a reader nothing they can act on, while 128k → 24k tokens · 214 → 31 messages tells them why the model stopped remembering the thing they mentioned an hour ago. Five states, which is two more than most implementations have and exactly the two that matter: failed leaves the window full, and skipped leaves it full on purpose.",
124
134
  "interaction": "none. The whole rule is one accessible name, because a separator announces its label and never its children."
125
135
  }
126
- ],
127
- "todo": true
136
+ ]
128
137
  }
@@ -78,10 +78,20 @@
78
78
  "language": "tsx"
79
79
  }
80
80
  ],
81
- "status": "todo-docs",
81
+ "status": "stable",
82
82
  "url": "/docs/components/comparison-card",
83
83
  "mdUrl": "/docs/components/comparison-card.md",
84
84
  "jsonUrl": "/r/components/comparison-card.json",
85
+ "whenToUse": [
86
+ "A recommendation the reader may overrule — `recommendedId` names the pick and `reason` argues it."
87
+ ],
88
+ "whenNotToUse": [
89
+ "More than two options. Use a table.",
90
+ "A choice with no recommendation. Then it is just a comparison."
91
+ ],
92
+ "commonMistakes": [
93
+ "Naming a pick with no reason, which asks for trust instead of offering an argument."
94
+ ],
85
95
  "specimens": [
86
96
  {
87
97
  "title": "ComparisonCard",
@@ -93,6 +103,5 @@
93
103
  "note": "Two options side by side with the pick named, argued, and tinted in the streaming hue — not left for the reader to infer from a longer column. A trait that is `false` collapses to the label in grey with a minus, so the absence lines up with the presences instead of leaving a hole.",
94
104
  "interaction": "none. It is a read-only comparison; choosing is `RecommendationCard`'s job, one bench along."
95
105
  }
96
- ],
97
- "todo": true
106
+ ]
98
107
  }
@@ -39,10 +39,19 @@
39
39
  ],
40
40
  "summary": "One cluster of controls in the toolbar.",
41
41
  "examples": [],
42
- "status": "todo-docs",
42
+ "status": "stable",
43
43
  "url": "/docs/components/composer-actions",
44
44
  "mdUrl": "/docs/components/composer-actions.md",
45
45
  "jsonUrl": "/r/components/composer-actions.json",
46
+ "whenToUse": [
47
+ "Grouping the controls at one end of the composer toolbar."
48
+ ],
49
+ "whenNotToUse": [
50
+ "A third cluster in the middle. There are two of them, one at each end."
51
+ ],
52
+ "commonMistakes": [
53
+ "Putting every control into one cluster, which collapses the two-ended layout the toolbar is built around."
54
+ ],
46
55
  "specimens": [
47
56
  {
48
57
  "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
@@ -60,6 +69,5 @@
60
69
  "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
61
70
  "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
62
71
  }
63
- ],
64
- "todo": true
72
+ ]
65
73
  }
@@ -39,10 +39,19 @@
39
39
  ],
40
40
  "summary": "The paperclip, as a plus.",
41
41
  "examples": [],
42
- "status": "todo-docs",
42
+ "status": "stable",
43
43
  "url": "/docs/components/composer-attach-button",
44
44
  "mdUrl": "/docs/components/composer-attach-button.md",
45
45
  "jsonUrl": "/r/components/composer-attach-button.json",
46
+ "whenToUse": [
47
+ "Opening a file picker from the composer toolbar."
48
+ ],
49
+ "whenNotToUse": [
50
+ "An affordance with nothing behind it. With no handler it renders disabled."
51
+ ],
52
+ "commonMistakes": [
53
+ "Rendering it without a handler and expecting it to stay live. It disables itself rather than rendering a control that does nothing."
54
+ ],
46
55
  "specimens": [
47
56
  {
48
57
  "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
@@ -60,6 +69,5 @@
60
69
  "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
61
70
  "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
62
71
  }
63
- ],
64
- "todo": true
72
+ ]
65
73
  }
@@ -62,10 +62,21 @@
62
62
  ],
63
63
  "summary": "One attached file as a chip: an icon for its kind, its name and size, and — while it uploads — a progress hairline along the bottom edge.",
64
64
  "examples": [],
65
- "status": "todo-docs",
65
+ "status": "stable",
66
66
  "url": "/docs/components/composer-attachment-chip",
67
67
  "mdUrl": "/docs/components/composer-attachment-chip.md",
68
68
  "jsonUrl": "/r/components/composer-attachment-chip.json",
69
+ "whenToUse": [
70
+ "Each file attached to a message, including while it is still uploading.",
71
+ "A failed upload, which says so in its own meta line."
72
+ ],
73
+ "whenNotToUse": [
74
+ "A file the model produced rather than one the person attached."
75
+ ],
76
+ "commonMistakes": [
77
+ "Omitting `onRemove` and expecting a remove button. Without it a finished chip shows a tick instead.",
78
+ "Drawing your own progress bar. The hairline along the bottom edge is the upload progress."
79
+ ],
69
80
  "specimens": [
70
81
  {
71
82
  "title": "ComposerAttachments / ComposerAttachmentChip",
@@ -78,6 +89,5 @@
78
89
  "note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
79
90
  "interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
80
91
  }
81
- ],
82
- "todo": true
92
+ ]
83
93
  }
@@ -39,10 +39,19 @@
39
39
  ],
40
40
  "summary": "The rail the attachment chips wrap in, above the input.",
41
41
  "examples": [],
42
- "status": "todo-docs",
42
+ "status": "stable",
43
43
  "url": "/docs/components/composer-attachments",
44
44
  "mdUrl": "/docs/components/composer-attachments.md",
45
45
  "jsonUrl": "/r/components/composer-attachments.json",
46
+ "whenToUse": [
47
+ "Holding the attachment chips above the composer input."
48
+ ],
49
+ "whenNotToUse": [
50
+ "Controls that belong in the toolbar under the input."
51
+ ],
52
+ "commonMistakes": [
53
+ "Laying the chips out with a flex row of your own, which drops the wrapping the rail already provides."
54
+ ],
46
55
  "specimens": [
47
56
  {
48
57
  "title": "ComposerAttachments / ComposerAttachmentChip",
@@ -55,6 +64,5 @@
55
64
  "note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
56
65
  "interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
57
66
  }
58
- ],
59
- "todo": true
67
+ ]
60
68
  }
@@ -50,10 +50,20 @@
50
50
  ],
51
51
  "summary": "The bar itself: the paper the input, the attachments and the toolbar sit on.",
52
52
  "examples": [],
53
- "status": "todo-docs",
53
+ "status": "stable",
54
54
  "url": "/docs/components/composer-bar",
55
55
  "mdUrl": "/docs/components/composer-bar.md",
56
56
  "jsonUrl": "/r/components/composer-bar.json",
57
+ "whenToUse": [
58
+ "Wrapping the input, the attachment rail and the toolbar into one surface.",
59
+ "Signalling a drop target: `dragActive` tints the bar while a file is over it."
60
+ ],
61
+ "whenNotToUse": [
62
+ "A control meant to sit outside the composer surface."
63
+ ],
64
+ "commonMistakes": [
65
+ "Leaving `dragActive` unwired. The tint is the only feedback a drop target gets before the drop."
66
+ ],
57
67
  "specimens": [
58
68
  {
59
69
  "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
@@ -71,6 +81,5 @@
71
81
  "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
72
82
  "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
73
83
  }
74
- ],
75
- "todo": true
84
+ ]
76
85
  }