@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
@@ -60,10 +60,21 @@
60
60
  ],
61
61
  "summary": "A slash command in the menu: its icon, `/name`, what it does, and the return key on the active row.",
62
62
  "examples": [],
63
- "status": "todo-docs",
63
+ "status": "stable",
64
64
  "url": "/docs/components/composer-command-item",
65
65
  "mdUrl": "/docs/components/composer-command-item.md",
66
66
  "jsonUrl": "/r/components/composer-command-item.json",
67
+ "whenToUse": [
68
+ "Each slash command offered in the composer menu.",
69
+ "The row Enter would run, which is the one that carries the return key."
70
+ ],
71
+ "whenNotToUse": [
72
+ "An entry that is not a runnable command. `command` takes a `ComposerCommand`."
73
+ ],
74
+ "commonMistakes": [
75
+ "Marking more than one row `active`. It is the row Enter would run, so exactly one carries it.",
76
+ "Drawing the return key hint yourself. It already appears on the active row."
77
+ ],
67
78
  "specimens": [
68
79
  {
69
80
  "title": "ComposerMenu / useSlashMatches / useMentionMatches",
@@ -80,6 +91,5 @@
80
91
  "note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
81
92
  "interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
82
93
  }
83
- ],
84
- "todo": true
94
+ ]
85
95
  }
@@ -51,10 +51,21 @@
51
51
  ],
52
52
  "summary": "The context-window dial in the toolbar, with the breakdown on hover or focus.",
53
53
  "examples": [],
54
- "status": "todo-docs",
54
+ "status": "stable",
55
55
  "url": "/docs/components/composer-context",
56
56
  "mdUrl": "/docs/components/composer-context.md",
57
57
  "jsonUrl": "/r/components/composer-context.json",
58
+ "whenToUse": [
59
+ "Showing how much of the context window has gone, and where, from the composer toolbar.",
60
+ "A usage readout that has to stay reachable by keyboard, since the breakdown opens on hover or focus."
61
+ ],
62
+ "whenNotToUse": [
63
+ "A generic progress meter. It is shaped around a `ComposerUsage` breakdown."
64
+ ],
65
+ "commonMistakes": [
66
+ "Adding a warning threshold of your own. It turns danger-coloured past 85%, which is the point where the next long tool result starts costing the conversation its own history.",
67
+ "Treating the dial as decoration and putting the breakdown out of keyboard reach. It opens on hover or focus."
68
+ ],
58
69
  "specimens": [
59
70
  {
60
71
  "title": "ComposerContext",
@@ -66,6 +77,5 @@
66
77
  "note": "The context window as a dial small enough to leave in the toolbar, with the arithmetic behind it on hover or focus. It turns the danger hue past 85% — the point where the next long tool result starts costing the conversation its own history rather than its headroom. Everything is in thousands of tokens and nothing is rounded here: the element divides, the caller counts.",
67
78
  "interaction": "the dial is a labelled button (`Context usage`) and the breakdown opens on hover *or* focus-within, so it is reachable from the keyboard without a click target that does nothing."
68
79
  }
69
- ],
70
- "todo": true
80
+ ]
71
81
  }
@@ -51,10 +51,19 @@
51
51
  ],
52
52
  "summary": "The text field.",
53
53
  "examples": [],
54
- "status": "todo-docs",
54
+ "status": "stable",
55
55
  "url": "/docs/components/composer-input",
56
56
  "mdUrl": "/docs/components/composer-input.md",
57
57
  "jsonUrl": "/r/components/composer-input.json",
58
+ "whenToUse": [
59
+ "The message field of a composer, where Enter submits."
60
+ ],
61
+ "whenNotToUse": [
62
+ "A field inside a multi-step form. Enter here sends the message."
63
+ ],
64
+ "commonMistakes": [
65
+ "Adding your own Enter handler on top of it. Submission is already guarded against IME composition, so accepting a candidate does not send — a hand-rolled handler loses that."
66
+ ],
58
67
  "specimens": [
59
68
  {
60
69
  "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
@@ -72,6 +81,5 @@
72
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.",
73
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."
74
83
  }
75
- ],
76
- "todo": true
84
+ ]
77
85
  }
@@ -50,10 +50,20 @@
50
50
  ],
51
51
  "summary": "One row of a `ComposerMenu`, and the chassis the command, person and model rows are built on.",
52
52
  "examples": [],
53
- "status": "todo-docs",
53
+ "status": "stable",
54
54
  "url": "/docs/components/composer-menu-item",
55
55
  "mdUrl": "/docs/components/composer-menu-item.md",
56
56
  "jsonUrl": "/r/components/composer-menu-item.json",
57
+ "whenToUse": [
58
+ "A row in a `ComposerMenu` that none of the built rows already covers."
59
+ ],
60
+ "whenNotToUse": [
61
+ "A command, a person or a model row, which are already built on this chassis."
62
+ ],
63
+ "commonMistakes": [
64
+ "Using `active` for selection. It says where the keyboard is, not what has been chosen.",
65
+ "Rebuilding the command, person or model rows from scratch. They are already built on this chassis."
66
+ ],
57
67
  "specimens": [
58
68
  {
59
69
  "title": "ComposerMenu / useSlashMatches / useMentionMatches",
@@ -70,6 +80,5 @@
70
80
  "note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
71
81
  "interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
72
82
  }
73
- ],
74
- "todo": true
83
+ ]
75
84
  }
@@ -64,10 +64,21 @@
64
64
  ],
65
65
  "summary": "The popover the slash and mention menus are drawn in, anchored above the bar.",
66
66
  "examples": [],
67
- "status": "todo-docs",
67
+ "status": "stable",
68
68
  "url": "/docs/components/composer-menu",
69
69
  "mdUrl": "/docs/components/composer-menu.md",
70
70
  "jsonUrl": "/r/components/composer-menu.json",
71
+ "whenToUse": [
72
+ "Drawing the slash or mention menu over the composer.",
73
+ "Hanging the menu from either edge, with `align`."
74
+ ],
75
+ "whenNotToUse": [
76
+ "A menu that must unmount when closed. Closed is animated out, not unmounted.",
77
+ "A menu that should hang below the input. It is anchored above the bar."
78
+ ],
79
+ "commonMistakes": [
80
+ "Conditionally rendering it instead of toggling `open`. It animates open rather than mounting, so the caret never moves under it."
81
+ ],
71
82
  "specimens": [
72
83
  {
73
84
  "title": "ComposerMenu / useSlashMatches / useMentionMatches",
@@ -84,6 +95,5 @@
84
95
  "note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
85
96
  "interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
86
97
  }
87
- ],
88
- "todo": true
98
+ ]
89
99
  }
@@ -61,10 +61,21 @@
61
61
  ],
62
62
  "summary": "One model in the menu, with its metadata and a tick on the chosen one.",
63
63
  "examples": [],
64
- "status": "todo-docs",
64
+ "status": "stable",
65
65
  "url": "/docs/components/composer-model-item",
66
66
  "mdUrl": "/docs/components/composer-model-item.md",
67
67
  "jsonUrl": "/r/components/composer-model-item.json",
68
+ "whenToUse": [
69
+ "Each model offered in the composer's model menu.",
70
+ "Showing each model's metadata beside its name, rather than in a second column."
71
+ ],
72
+ "whenNotToUse": [
73
+ "A row whose entry is not a `ComposerModel`."
74
+ ],
75
+ "commonMistakes": [
76
+ "Drawing your own tick beside the current model. `selected` draws it.",
77
+ "Using `selected` as the keyboard cursor. It marks the model in use."
78
+ ],
68
79
  "specimens": [
69
80
  {
70
81
  "title": "ComposerModelTrigger / ComposerModelItem",
@@ -77,6 +88,5 @@
77
88
  "note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
78
89
  "interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
79
90
  }
80
- ],
81
- "todo": true
91
+ ]
82
92
  }
@@ -60,10 +60,21 @@
60
60
  ],
61
61
  "summary": "The model name in the toolbar, which opens the model menu.",
62
62
  "examples": [],
63
- "status": "todo-docs",
63
+ "status": "stable",
64
64
  "url": "/docs/components/composer-model-trigger",
65
65
  "mdUrl": "/docs/components/composer-model-trigger.md",
66
66
  "jsonUrl": "/r/components/composer-model-trigger.json",
67
+ "whenToUse": [
68
+ "The toolbar control that opens the model menu, labelled with the selected model.",
69
+ "A trigger that has to be announced correctly, since it carries `aria-expanded` from `open`."
70
+ ],
71
+ "whenNotToUse": [
72
+ "A control that opens nothing. It carries `aria-expanded` for the menu it opens."
73
+ ],
74
+ "commonMistakes": [
75
+ "Leaving `open` stale. It is announced as `aria-expanded`, so a wrong value lies to a screen reader.",
76
+ "Setting `aria-expanded` yourself. The trigger already carries it, from `open`."
77
+ ],
67
78
  "specimens": [
68
79
  {
69
80
  "title": "ComposerModelTrigger / ComposerModelItem",
@@ -76,6 +87,5 @@
76
87
  "note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
77
88
  "interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
78
89
  }
79
- ],
80
- "todo": true
90
+ ]
81
91
  }
@@ -61,10 +61,21 @@
61
61
  ],
62
62
  "summary": "A mentionable person in the menu: their initial, their name, and whether they are an agent or a human.",
63
63
  "examples": [],
64
- "status": "todo-docs",
64
+ "status": "stable",
65
65
  "url": "/docs/components/composer-person-item",
66
66
  "mdUrl": "/docs/components/composer-person-item.md",
67
67
  "jsonUrl": "/r/components/composer-person-item.json",
68
+ "whenToUse": [
69
+ "Each mentionable person or agent offered in the composer menu.",
70
+ "A mention list that mixes agents and humans, since the row says which one it is."
71
+ ],
72
+ "whenNotToUse": [
73
+ "An entry that is not a `ComposerPerson`."
74
+ ],
75
+ "commonMistakes": [
76
+ "Marking several rows `active`. It is the row Enter would pick, so only one has it.",
77
+ "Rendering your own initial beside the name. The row already draws one."
78
+ ],
68
79
  "specimens": [
69
80
  {
70
81
  "title": "ComposerMenu / useSlashMatches / useMentionMatches",
@@ -81,6 +92,5 @@
81
92
  "note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
82
93
  "interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
83
94
  }
84
- ],
85
- "todo": true
95
+ ]
86
96
  }
@@ -60,10 +60,21 @@
60
60
  ],
61
61
  "summary": "Send, which becomes stop while the model is streaming.",
62
62
  "examples": [],
63
- "status": "todo-docs",
63
+ "status": "stable",
64
64
  "url": "/docs/components/composer-send",
65
65
  "mdUrl": "/docs/components/composer-send.md",
66
66
  "jsonUrl": "/r/components/composer-send.json",
67
+ "whenToUse": [
68
+ "The send control of a composer, which doubles as stop while a reply streams.",
69
+ "An empty input, where `idle` dims the control because there is nothing to send."
70
+ ],
71
+ "whenNotToUse": [
72
+ "A second, separate stop button. The arrow and the square are the same control."
73
+ ],
74
+ "commonMistakes": [
75
+ "Swapping in your own stop button when streaming starts. The arrow and the square cross-fade rather than swap.",
76
+ "Leaving `idle` false on an empty input, which keeps the button bright when there is nothing to send."
77
+ ],
67
78
  "specimens": [
68
79
  {
69
80
  "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
@@ -81,6 +92,5 @@
81
92
  "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.",
82
93
  "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."
83
94
  }
84
- ],
85
- "todo": true
95
+ ]
86
96
  }
@@ -39,10 +39,19 @@
39
39
  ],
40
40
  "summary": "The row under the input, which holds the two `ComposerActions` clusters.",
41
41
  "examples": [],
42
- "status": "todo-docs",
42
+ "status": "stable",
43
43
  "url": "/docs/components/composer-toolbar",
44
44
  "mdUrl": "/docs/components/composer-toolbar.md",
45
45
  "jsonUrl": "/r/components/composer-toolbar.json",
46
+ "whenToUse": [
47
+ "The control row beneath the composer input."
48
+ ],
49
+ "whenNotToUse": [
50
+ "Anything above the input, such as the attachment rail."
51
+ ],
52
+ "commonMistakes": [
53
+ "Putting controls straight into the toolbar. It holds two `ComposerActions` clusters, and the controls go inside them."
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
  }
@@ -50,10 +50,19 @@
50
50
  ],
51
51
  "summary": "The microphone, which becomes a filled stop while recording.",
52
52
  "examples": [],
53
- "status": "todo-docs",
53
+ "status": "stable",
54
54
  "url": "/docs/components/composer-voice-button",
55
55
  "mdUrl": "/docs/components/composer-voice-button.md",
56
56
  "jsonUrl": "/r/components/composer-voice-button.json",
57
+ "whenToUse": [
58
+ "The toolbar control that opens and closes the microphone."
59
+ ],
60
+ "whenNotToUse": [
61
+ "A separate stop control. The same button becomes a filled stop while `active`."
62
+ ],
63
+ "commonMistakes": [
64
+ "Swapping the icon yourself when recording starts. `active` already turns the microphone into a filled stop."
65
+ ],
57
66
  "specimens": [
58
67
  {
59
68
  "title": "ComposerVoice / ComposerVoiceButton",
@@ -66,6 +75,5 @@
66
75
  "note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
67
76
  "interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
68
77
  }
69
- ],
70
- "todo": true
78
+ ]
71
79
  }
@@ -60,10 +60,21 @@
60
60
  ],
61
61
  "summary": "What replaces the input while the microphone is open: a level meter, a running clock while recording, and a shimmering `Transcribing` once it stops.",
62
62
  "examples": [],
63
- "status": "todo-docs",
63
+ "status": "stable",
64
64
  "url": "/docs/components/composer-voice",
65
65
  "mdUrl": "/docs/components/composer-voice.md",
66
66
  "jsonUrl": "/r/components/composer-voice.json",
67
+ "whenToUse": [
68
+ "The recording state of a voice composer, in place of the text input.",
69
+ "The transcribing state after recording stops, which is `recording={false}`."
70
+ ],
71
+ "whenNotToUse": [
72
+ "The resting composer. `recording={false}` is the transcribing state, not the resting one — unmount it instead."
73
+ ],
74
+ "commonMistakes": [
75
+ "Expecting it to keep its own time. `seconds` drives both the clock and the meter, so the caller owns the tick.",
76
+ "Reading `recording={false}` as idle, which leaves a shimmering Transcribing on screen with nothing to transcribe."
77
+ ],
67
78
  "specimens": [
68
79
  {
69
80
  "title": "ComposerVoice / ComposerVoiceButton",
@@ -76,6 +87,5 @@
76
87
  "note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
77
88
  "interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
78
89
  }
79
- ],
80
- "todo": true
90
+ ]
81
91
  }
@@ -210,7 +210,7 @@
210
210
  "--cue-text-micro",
211
211
  "--cue-text-ui"
212
212
  ],
213
- "summary": "The thing you type into: an auto-growing textarea, a send affordance, and slots for everything a host wants to hang off them.",
213
+ "summary": "The thing you type into: an auto-growing textarea, a send affordance, and slots to hang things off.",
214
214
  "examples": [
215
215
  {
216
216
  "title": "Usage",
@@ -218,10 +218,21 @@
218
218
  "language": "tsx"
219
219
  }
220
220
  ],
221
- "status": "todo-docs",
221
+ "status": "stable",
222
222
  "url": "/docs/components/composer",
223
223
  "mdUrl": "/docs/components/composer.md",
224
224
  "jsonUrl": "/r/components/composer.json",
225
+ "whenToUse": [
226
+ "Any chat or prompt input.",
227
+ "Anywhere a running request must be interruptible: `busy` plus `onStop` turns send into stop."
228
+ ],
229
+ "whenNotToUse": [
230
+ "A form field. Use `Textarea` inside a `Field`."
231
+ ],
232
+ "commonMistakes": [
233
+ "Capping it to one line. It grows rather than scrolls on purpose — a box that hides the second half of what you wrote is the most-complained-about part of every chat UI.",
234
+ "Leaving `onStop` unwired while passing `busy`, which shows a stop affordance that does nothing."
235
+ ],
225
236
  "specimens": [
226
237
  {
227
238
  "title": "Composer",
@@ -233,6 +244,5 @@
233
244
  "note": "An auto-growing textarea at the large control height, with an attachment slot, a toolbar slot and a Stop that reports rather than decides.",
234
245
  "interaction": "Enter sends by default, mod+Enter when configured the other way; Shift+Enter always inserts a newline."
235
246
  }
236
- ],
237
- "todo": true
247
+ ]
238
248
  }
@@ -78,10 +78,21 @@
78
78
  "language": "tsx"
79
79
  }
80
80
  ],
81
- "status": "todo-docs",
81
+ "status": "stable",
82
82
  "url": "/docs/components/computer-use",
83
83
  "mdUrl": "/docs/components/computer-use.md",
84
84
  "jsonUrl": "/r/components/computer-use.json",
85
+ "whenToUse": [
86
+ "A live session an agent is operating, wrapped around whatever you use for the viewport.",
87
+ "Showing the ordered actions taken, with the current one called out."
88
+ ],
89
+ "whenNotToUse": [
90
+ "A session with no viewport to show. `children` is required, and it is the thing being driven."
91
+ ],
92
+ "commonMistakes": [
93
+ "Trimming `steps` down to the current one. The two before `activeIndex` stay as a fading trail.",
94
+ "Expecting the element to supply the stream. You hand it the viewport yourself — a video stream, a screenshot, an iframe."
95
+ ],
85
96
  "specimens": [
86
97
  {
87
98
  "title": "ComputerUse",
@@ -93,6 +104,5 @@
93
104
  "note": "The screen the agent is driving, with a cursor trail behind it and the current action named underneath. The two steps before the live one stay as fading dots, which is what turns a jumping pointer into a path you can follow. The viewport is `children` — a screenshot, a video stream, a sandboxed iframe — so the element frames it and isolates nothing of its own.",
94
105
  "interaction": "none, and deliberately: this is a view of a session, not a remote control. The cursor and its trail are `aria-hidden`; the action row underneath is what a screen reader gets."
95
106
  }
96
- ],
97
- "todo": true
107
+ ]
98
108
  }
@@ -66,10 +66,19 @@
66
66
  "language": "tsx"
67
67
  }
68
68
  ],
69
- "status": "todo-docs",
69
+ "status": "stable",
70
70
  "url": "/docs/components/confidence-marker",
71
71
  "mdUrl": "/docs/components/confidence-marker.md",
72
72
  "jsonUrl": "/r/components/confidence-marker.json",
73
+ "whenToUse": [
74
+ "Generated prose where the reader must know which sentences are grounded."
75
+ ],
76
+ "whenNotToUse": [
77
+ "Citations. Use `InlineCitation` — where a claim came from and how confident it is are different questions."
78
+ ],
79
+ "commonMistakes": [
80
+ "Marking only the guesses, which leaves the reader unable to tell an unmarked sourced claim from an unmarked unchecked one."
81
+ ],
73
82
  "specimens": [
74
83
  {
75
84
  "title": "ConfidenceMarker",
@@ -81,6 +90,5 @@
81
90
  "note": "Which clause came from a source, which was worked out, and which is a guess — drawn as three underlines rather than three colours of text, so the sentence still reads as a sentence. The basis appears under it on hover, in a row that is always reserved so nothing below moves.",
82
91
  "interaction": "each clause is a button that responds to hover *and* focus, so the basis is reachable from a keyboard. The chip carries role='status' and is referenced by `aria-describedby`."
83
92
  }
84
- ],
85
- "todo": true
93
+ ]
86
94
  }
@@ -83,10 +83,20 @@
83
83
  "language": "tsx"
84
84
  }
85
85
  ],
86
- "status": "todo-docs",
86
+ "status": "stable",
87
87
  "url": "/docs/components/connection-state",
88
88
  "mdUrl": "/docs/components/connection-state.md",
89
89
  "jsonUrl": "/r/components/connection-state.json",
90
+ "whenToUse": [
91
+ "Any streamed run, so a dropped socket does not read as a dead run.",
92
+ "Anywhere the user should know work continued — `resumedTokens` is what proves it."
93
+ ],
94
+ "whenNotToUse": [
95
+ "A failed request with nothing to resume. That is an error, not a reconnection."
96
+ ],
97
+ "commonMistakes": [
98
+ "Showing a generic 'disconnected' state. The point is that the run did not stop; a message that implies it did makes people start over."
99
+ ],
90
100
  "specimens": [
91
101
  {
92
102
  "title": "ConnectionState",
@@ -98,6 +108,5 @@
98
108
  "note": "The socket drops; the run does not. Four phases, and the useful one is `online` — it renders nothing at all, so the element can stay mounted at the top of a transcript and simply have nothing to say most of the time. `dropped` offers a reconnect, `reconnecting` counts attempts, and `resumed` says how much of the stream was recovered.",
99
109
  "interaction": "Reconnect is a plain named button. Nothing here retries on its own — the phase is the caller's, so a page can back off however it likes."
100
110
  }
101
- ],
102
- "todo": true
111
+ ]
103
112
  }
@@ -55,10 +55,20 @@
55
55
  "language": "tsx"
56
56
  }
57
57
  ],
58
- "status": "todo-docs",
58
+ "status": "stable",
59
59
  "url": "/docs/components/container",
60
60
  "mdUrl": "/docs/components/container.md",
61
61
  "jsonUrl": "/r/components/container.json",
62
+ "whenToUse": [
63
+ "A page that already has its own heading — a route opening with a `TitleBar`, or a section inside a shell — where all you need is the measure."
64
+ ],
65
+ "whenNotToUse": [
66
+ "A page that needs a header too. Use `PageShell`, which is this plus one.",
67
+ "A full-bleed surface. The gutters are the point; wrapping and then cancelling them is a sign the shell is wrong."
68
+ ],
69
+ "commonMistakes": [
70
+ "Nesting one inside another, which applies the gutters twice and narrows the measure without anyone choosing to."
71
+ ],
62
72
  "specimens": [
63
73
  {
64
74
  "title": "Container",
@@ -70,6 +80,5 @@
70
80
  "note": "Three measures. The one place a max-width is allowed to be hardcoded, because a measure is typographic, not thematic.",
71
81
  "interaction": "none."
72
82
  }
73
- ],
74
- "todo": true
83
+ ]
75
84
  }
@@ -44,7 +44,7 @@
44
44
  "--cue-text-body",
45
45
  "--cue-warn"
46
46
  ],
47
- "summary": "Where the window actually went: prompt, tools, files, conversation, and what's left.",
47
+ "summary": "Where the window actually went: prompt, tools, files, conversation, and what is left.",
48
48
  "examples": [
49
49
  {
50
50
  "title": "Usage",
@@ -52,10 +52,19 @@
52
52
  "language": "tsx"
53
53
  }
54
54
  ],
55
- "status": "todo-docs",
55
+ "status": "stable",
56
56
  "url": "/docs/components/context-breakdown",
57
57
  "mdUrl": "/docs/components/context-breakdown.md",
58
58
  "jsonUrl": "/r/components/context-breakdown.json",
59
+ "whenToUse": [
60
+ "Showing the shape of context use without the cost argument around it."
61
+ ],
62
+ "whenNotToUse": [
63
+ "A full accounting with cost. Use `ContextUsage`."
64
+ ],
65
+ "commonMistakes": [
66
+ "Omitting `limit`, which leaves the segments with nothing to be a share of."
67
+ ],
59
68
  "specimens": [
60
69
  {
61
70
  "title": "ContextBreakdown",
@@ -67,6 +76,5 @@
67
76
  "note": "Where the window actually went, which is the question a context limit never answers on its own. Headroom is derived rather than passed — it is whatever the segments left — and the header turns warn once they pass 85 per cent of the limit. The tint is the caller's: the same class paints the bar slice and its legend dot, so the two cannot drift apart.",
68
77
  "interaction": "none. The legend dots are `aria-hidden`; the label beside each one carries the meaning."
69
78
  }
70
- ],
71
- "todo": true
79
+ ]
72
80
  }
@@ -106,7 +106,7 @@
106
106
  "--cue-text-label",
107
107
  "--cue-text-ui"
108
108
  ],
109
- "summary": "The menu a right click raises: row actions on a cue list, fixture actions on the patch grid, node actions on a canvas.",
109
+ "summary": "The menu a right click raises: row actions on a cue list, node actions on a canvas.",
110
110
  "examples": [
111
111
  {
112
112
  "title": "Usage",
@@ -114,10 +114,21 @@
114
114
  "language": "tsx"
115
115
  }
116
116
  ],
117
- "status": "todo-docs",
117
+ "status": "stable",
118
118
  "url": "/docs/components/context-menu",
119
119
  "mdUrl": "/docs/components/context-menu.md",
120
120
  "jsonUrl": "/r/components/context-menu.json",
121
+ "whenToUse": [
122
+ "Actions that belong to the thing under the pointer.",
123
+ "Anywhere the same actions should also be reachable another way — a right click is not discoverable on its own."
124
+ ],
125
+ "whenNotToUse": [
126
+ "The only path to an action. Keyboard users never right-click.",
127
+ "Navigation. Use links."
128
+ ],
129
+ "commonMistakes": [
130
+ "Restyling the rows. They *are* `DropdownMenu`'s rows, re-exported rather than re-skinned — a user should never be able to tell from a row how they got to it."
131
+ ],
121
132
  "specimens": [
122
133
  {
123
134
  "title": "ContextMenu",
@@ -129,6 +140,5 @@
129
140
  "note": "The same menu surface, opened by a right-click on a region rather than by a button.",
130
141
  "interaction": "the Menu key and Shift+F10 open it from the keyboard, which is the part most implementations forget."
131
142
  }
132
- ],
133
- "todo": true
143
+ ]
134
144
  }