@cueplusplus/ui 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/CHANGELOG.md +307 -0
  2. package/README.md +2 -19
  3. package/dist/index.d.ts +2 -2
  4. package/dist/layout/frames.d.ts +19 -1
  5. package/dist/layout/frames.js +21 -7
  6. package/dist/layout/index.d.ts +2 -2
  7. package/dist/primitives/chip.d.ts +1 -1
  8. package/dist/system/theme-provider.d.ts +46 -1
  9. package/dist/system/theme-provider.js +29 -3
  10. package/manifest/components/accordion.json +16 -4
  11. package/manifest/components/activity-graph.json +15 -3
  12. package/manifest/components/agent-card.json +15 -3
  13. package/manifest/components/agent-handoff.json +14 -3
  14. package/manifest/components/agent-mode-badge.json +12 -3
  15. package/manifest/components/agent-pile.json +13 -3
  16. package/manifest/components/agent-plan.json +13 -3
  17. package/manifest/components/agent-status.json +14 -3
  18. package/manifest/components/agent-surface.json +12 -3
  19. package/manifest/components/alert-dialog.json +14 -3
  20. package/manifest/components/animated-number.json +12 -3
  21. package/manifest/components/app-window-frame.json +13 -3
  22. package/manifest/components/approval-card.json +14 -3
  23. package/manifest/components/artifact-card.json +14 -3
  24. package/manifest/components/ask-box.json +13 -3
  25. package/manifest/components/audience-icon.json +11 -3
  26. package/manifest/components/autocomplete.json +15 -3
  27. package/manifest/components/avatar-group.json +15 -4
  28. package/manifest/components/avatar.json +16 -4
  29. package/manifest/components/background-inbox.json +14 -3
  30. package/manifest/components/band.json +14 -4
  31. package/manifest/components/breadcrumb.json +14 -3
  32. package/manifest/components/button-group.json +13 -3
  33. package/manifest/components/calendar.json +15 -4
  34. package/manifest/components/canvas-split-body.json +13 -3
  35. package/manifest/components/canvas-split-document.json +11 -3
  36. package/manifest/components/canvas-split-header.json +13 -3
  37. package/manifest/components/canvas-split-line.json +13 -3
  38. package/manifest/components/canvas-split-message.json +13 -3
  39. package/manifest/components/canvas-split-thread.json +11 -3
  40. package/manifest/components/canvas-split.json +13 -3
  41. package/manifest/components/card.json +14 -3
  42. package/manifest/components/carousel.json +12 -3
  43. package/manifest/components/catalogue-icon.json +11 -3
  44. package/manifest/components/channel-beta-icon.json +11 -3
  45. package/manifest/components/channel-matrix.json +11 -3
  46. package/manifest/components/channel-released-icon.json +11 -3
  47. package/manifest/components/chart-container.json +11 -3
  48. package/manifest/components/chart-ramp.json +12 -3
  49. package/manifest/components/chart-swatch.json +11 -3
  50. package/manifest/components/chart-tooltip-content.json +12 -4
  51. package/manifest/components/chart.json +14 -3
  52. package/manifest/components/chat-empty-state.json +13 -3
  53. package/manifest/components/chat-panel-assistant-message.json +11 -3
  54. package/manifest/components/chat-panel-composer.json +11 -3
  55. package/manifest/components/chat-panel-messages.json +11 -3
  56. package/manifest/components/chat-panel-typing.json +11 -3
  57. package/manifest/components/chat-panel-user-message.json +11 -3
  58. package/manifest/components/chat-panel.json +13 -3
  59. package/manifest/components/checkbox-group.json +15 -4
  60. package/manifest/components/checkpoint-history.json +13 -3
  61. package/manifest/components/clamp.json +12 -3
  62. package/manifest/components/cli-tool-icon.json +11 -3
  63. package/manifest/components/code-diff.json +14 -3
  64. package/manifest/components/code-runner.json +13 -3
  65. package/manifest/components/collapsible.json +13 -3
  66. package/manifest/components/color-area.json +12 -4
  67. package/manifest/components/color-field.json +12 -3
  68. package/manifest/components/color-picker.json +14 -4
  69. package/manifest/components/color-slider.json +12 -3
  70. package/manifest/components/color-swatch.json +13 -3
  71. package/manifest/components/colors-section.json +11 -3
  72. package/manifest/components/combobox.json +15 -4
  73. package/manifest/components/compaction-row.json +12 -3
  74. package/manifest/components/comparison-card.json +12 -3
  75. package/manifest/components/composer-actions.json +11 -3
  76. package/manifest/components/composer-attach-button.json +11 -3
  77. package/manifest/components/composer-attachment-chip.json +13 -3
  78. package/manifest/components/composer-attachments.json +11 -3
  79. package/manifest/components/composer-bar.json +12 -3
  80. package/manifest/components/composer-command-item.json +13 -3
  81. package/manifest/components/composer-context.json +13 -3
  82. package/manifest/components/composer-input.json +11 -3
  83. package/manifest/components/composer-menu-item.json +12 -3
  84. package/manifest/components/composer-menu.json +13 -3
  85. package/manifest/components/composer-model-item.json +13 -3
  86. package/manifest/components/composer-model-trigger.json +13 -3
  87. package/manifest/components/composer-person-item.json +13 -3
  88. package/manifest/components/composer-send.json +13 -3
  89. package/manifest/components/composer-toolbar.json +11 -3
  90. package/manifest/components/composer-voice-button.json +11 -3
  91. package/manifest/components/composer-voice.json +13 -3
  92. package/manifest/components/composer.json +14 -4
  93. package/manifest/components/computer-use.json +13 -3
  94. package/manifest/components/confidence-marker.json +11 -3
  95. package/manifest/components/connection-state.json +12 -3
  96. package/manifest/components/container.json +12 -3
  97. package/manifest/components/context-breakdown.json +12 -4
  98. package/manifest/components/context-menu.json +14 -4
  99. package/manifest/components/context-usage.json +14 -4
  100. package/manifest/components/conversation-search.json +13 -3
  101. package/manifest/components/copy-button.json +14 -3
  102. package/manifest/components/cost-meter.json +12 -3
  103. package/manifest/components/cue-portal-frame.json +12 -3
  104. package/manifest/components/data-table-pagination.json +13 -3
  105. package/manifest/components/data-table-toolbar.json +12 -3
  106. package/manifest/components/date-field.json +12 -3
  107. package/manifest/components/date-picker.json +13 -3
  108. package/manifest/components/date-range-picker.json +11 -3
  109. package/manifest/components/day-separator.json +12 -3
  110. package/manifest/components/delegation-card.json +14 -4
  111. package/manifest/components/density.json +12 -2
  112. package/manifest/components/description-list.json +15 -4
  113. package/manifest/components/diagram.json +13 -3
  114. package/manifest/components/disclosure.json +15 -4
  115. package/manifest/components/dmx-bar.json +12 -3
  116. package/manifest/components/dmx-strip.json +11 -3
  117. package/manifest/components/document-reference.json +13 -3
  118. package/manifest/components/draft-restore.json +13 -3
  119. package/manifest/components/drawer.json +13 -4
  120. package/manifest/components/edit-message.json +13 -3
  121. package/manifest/components/elements-command-palette.json +13 -3
  122. package/manifest/components/elements-composer.json +13 -3
  123. package/manifest/components/elements-data-table.json +11 -3
  124. package/manifest/components/elements-timeline.json +13 -3
  125. package/manifest/components/elicitation-form.json +13 -3
  126. package/manifest/components/empty-state-composer.json +11 -3
  127. package/manifest/components/empty-state-greeting.json +11 -3
  128. package/manifest/components/empty-state-suggestion.json +11 -3
  129. package/manifest/components/empty-state-suggestions.json +11 -3
  130. package/manifest/components/empty-state.json +15 -4
  131. package/manifest/components/end-of-turn-summary.json +14 -3
  132. package/manifest/components/env-var-input.json +15 -4
  133. package/manifest/components/error-state.json +13 -3
  134. package/manifest/components/export-dialog.json +10 -2
  135. package/manifest/components/eyebrow.json +14 -4
  136. package/manifest/components/feedback-dialog.json +13 -3
  137. package/manifest/components/field-description.json +15 -4
  138. package/manifest/components/field-error.json +15 -4
  139. package/manifest/components/field-label.json +15 -4
  140. package/manifest/components/file-tree.json +13 -3
  141. package/manifest/components/file-upload.json +14 -4
  142. package/manifest/components/flow-background.json +11 -3
  143. package/manifest/components/flow-controls.json +11 -3
  144. package/manifest/components/flow-graph.json +13 -3
  145. package/manifest/components/folder-icon.json +12 -3
  146. package/manifest/components/frac.json +11 -3
  147. package/manifest/components/frames.json +14 -0
  148. package/manifest/components/generation-loader.json +13 -3
  149. package/manifest/components/generative-ui.json +16 -4
  150. package/manifest/components/grid.json +14 -3
  151. package/manifest/components/group-bar.json +13 -3
  152. package/manifest/components/guardrail-notice.json +13 -3
  153. package/manifest/components/hover-card.json +14 -4
  154. package/manifest/components/icon-button.json +15 -3
  155. package/manifest/components/image-generation.json +13 -3
  156. package/manifest/components/info-tip.json +15 -4
  157. package/manifest/components/inline-citation.json +13 -3
  158. package/manifest/components/input-group.json +15 -4
  159. package/manifest/components/item.json +15 -4
  160. package/manifest/components/job-progress.json +14 -3
  161. package/manifest/components/kbd.json +14 -3
  162. package/manifest/components/launcher-bubble.json +14 -3
  163. package/manifest/components/link.json +13 -3
  164. package/manifest/components/live-region-announcer.json +16 -4
  165. package/manifest/components/log-viewer.json +15 -3
  166. package/manifest/components/map-answer.json +13 -3
  167. package/manifest/components/markdown-text.json +16 -4
  168. package/manifest/components/math-block.json +13 -3
  169. package/manifest/components/mcp-server-icon.json +12 -3
  170. package/manifest/components/mcp-server-panel.json +13 -3
  171. package/manifest/components/memory-chips.json +12 -3
  172. package/manifest/components/menubar.json +13 -3
  173. package/manifest/components/message-actions.json +14 -4
  174. package/manifest/components/message-attachments.json +12 -3
  175. package/manifest/components/message-branches.json +12 -3
  176. package/manifest/components/message-list.json +12 -3
  177. package/manifest/components/message-pair.json +12 -3
  178. package/manifest/components/message-queue.json +13 -3
  179. package/manifest/components/message-timing.json +13 -3
  180. package/manifest/components/message.json +12 -3
  181. package/manifest/components/mobile-composer.json +14 -3
  182. package/manifest/components/model-picker.json +12 -3
  183. package/manifest/components/multi-select.json +16 -4
  184. package/manifest/components/musical-time-input.json +11 -3
  185. package/manifest/components/navigation-menu.json +13 -3
  186. package/manifest/components/node-card.json +11 -3
  187. package/manifest/components/node-handle.json +11 -3
  188. package/manifest/components/number-field.json +15 -3
  189. package/manifest/components/number-ticker.json +12 -3
  190. package/manifest/components/onboarding.json +12 -3
  191. package/manifest/components/otp-field.json +14 -3
  192. package/manifest/components/page-shell.json +14 -4
  193. package/manifest/components/pagination.json +14 -3
  194. package/manifest/components/panel-header.json +14 -4
  195. package/manifest/components/password-input.json +15 -4
  196. package/manifest/components/permission-grant.json +13 -3
  197. package/manifest/components/permission-scopes.json +14 -3
  198. package/manifest/components/piano-keyboard.json +11 -3
  199. package/manifest/components/preset-section.json +11 -3
  200. package/manifest/components/progress.json +14 -3
  201. package/manifest/components/prompt-library.json +12 -3
  202. package/manifest/components/queue-dock.json +14 -3
  203. package/manifest/components/quota-banner.json +12 -3
  204. package/manifest/components/quote-reply.json +12 -3
  205. package/manifest/components/radio-group.json +15 -4
  206. package/manifest/components/radio.json +15 -4
  207. package/manifest/components/rating.json +15 -4
  208. package/manifest/components/read-aloud.json +13 -3
  209. package/manifest/components/reasoning-effort.json +12 -3
  210. package/manifest/components/reasoning-panel.json +13 -3
  211. package/manifest/components/recommendation-card.json +12 -3
  212. package/manifest/components/regenerate-menu.json +12 -3
  213. package/manifest/components/replay-player.json +14 -3
  214. package/manifest/components/research-report.json +12 -3
  215. package/manifest/components/resizable.json +13 -3
  216. package/manifest/components/retrieval-chunks.json +13 -3
  217. package/manifest/components/revert-dock.json +14 -3
  218. package/manifest/components/reviewable-diff.json +12 -3
  219. package/manifest/components/risk-badge.json +14 -3
  220. package/manifest/components/schedule-card.json +12 -3
  221. package/manifest/components/score-breakdown.json +13 -3
  222. package/manifest/components/scroll-anchor.json +12 -3
  223. package/manifest/components/scroll-area.json +13 -3
  224. package/manifest/components/scrollable-tabs-list.json +14 -4
  225. package/manifest/components/seam-cell.json +13 -4
  226. package/manifest/components/seam-grid.json +14 -3
  227. package/manifest/components/seam-list.json +13 -3
  228. package/manifest/components/search-input.json +15 -4
  229. package/manifest/components/section-header.json +14 -3
  230. package/manifest/components/segmented-control.json +15 -3
  231. package/manifest/components/separator.json +14 -3
  232. package/manifest/components/settings-panel.json +13 -3
  233. package/manifest/components/shape-section.json +11 -3
  234. package/manifest/components/shared-conversation.json +12 -3
  235. package/manifest/components/sheet.json +14 -4
  236. package/manifest/components/shimmer-label.json +12 -3
  237. package/manifest/components/sidebar.json +15 -4
  238. package/manifest/components/signal-edge.json +13 -4
  239. package/manifest/components/skeleton.json +16 -4
  240. package/manifest/components/skill-icon.json +12 -3
  241. package/manifest/components/slider.json +14 -3
  242. package/manifest/components/sources.json +12 -3
  243. package/manifest/components/sparkline.json +14 -4
  244. package/manifest/components/speaker-identity.json +11 -3
  245. package/manifest/components/spec-sheet.json +13 -4
  246. package/manifest/components/spectrum-visualizer.json +11 -3
  247. package/manifest/components/spinner.json +16 -4
  248. package/manifest/components/stack-icon.json +12 -3
  249. package/manifest/components/stack.json +14 -3
  250. package/manifest/components/stacks-matrix-icon.json +11 -3
  251. package/manifest/components/stat.json +14 -3
  252. package/manifest/components/status-dot.json +16 -4
  253. package/manifest/components/stepper.json +15 -4
  254. package/manifest/components/stopped-run.json +13 -4
  255. package/manifest/components/streaming-text.json +12 -3
  256. package/manifest/components/sub.json +11 -3
  257. package/manifest/components/subagent-list.json +13 -3
  258. package/manifest/components/suggestions.json +12 -3
  259. package/manifest/components/sup.json +11 -3
  260. package/manifest/components/swap-label.json +12 -3
  261. package/manifest/components/tags-input.json +15 -4
  262. package/manifest/components/tail-status.json +14 -3
  263. package/manifest/components/terminal-block.json +13 -3
  264. package/manifest/components/terminal-frame.json +14 -3
  265. package/manifest/components/textarea.json +15 -4
  266. package/manifest/components/theme-configurator.json +12 -3
  267. package/manifest/components/theme-provider.json +10 -0
  268. package/manifest/components/thinking-indicator.json +12 -3
  269. package/manifest/components/thread-list.json +12 -3
  270. package/manifest/components/thread-search.json +12 -3
  271. package/manifest/components/threshold-rail.json +13 -3
  272. package/manifest/components/time-boundary.json +13 -3
  273. package/manifest/components/time-field.json +15 -4
  274. package/manifest/components/timeline-ruler.json +13 -3
  275. package/manifest/components/timeline.json +13 -3
  276. package/manifest/components/title-bar.json +13 -3
  277. package/manifest/components/todo-list.json +12 -3
  278. package/manifest/components/toggle-group.json +15 -4
  279. package/manifest/components/toggle.json +15 -4
  280. package/manifest/components/token-editor.json +12 -3
  281. package/manifest/components/tool-call.json +13 -3
  282. package/manifest/components/tool-error.json +14 -4
  283. package/manifest/components/tool-group.json +12 -3
  284. package/manifest/components/tool-timeline.json +14 -4
  285. package/manifest/components/toolbar.json +14 -4
  286. package/manifest/components/trace-waterfall.json +12 -3
  287. package/manifest/components/tree-visibility-toggle.json +13 -3
  288. package/manifest/components/tree.json +14 -3
  289. package/manifest/components/turn-footer.json +14 -3
  290. package/manifest/components/two-step-button.json +14 -3
  291. package/manifest/components/typing-indicator.json +12 -3
  292. package/manifest/components/universe-grid.json +14 -4
  293. package/manifest/components/unread-divider.json +14 -4
  294. package/manifest/components/usage-chart.json +14 -3
  295. package/manifest/components/verdict-row.json +14 -3
  296. package/manifest/components/voice-conversation.json +13 -3
  297. package/manifest/components/web-preview.json +13 -3
  298. package/manifest/components/web-search.json +13 -3
  299. package/manifest/components/work-collapse.json +15 -4
  300. package/manifest/manifest.json +651 -651
  301. package/manifest/tokens.json +1 -1
  302. package/package.json +5 -5
@@ -110,10 +110,21 @@
110
110
  "language": "tsx"
111
111
  }
112
112
  ],
113
- "status": "todo-docs",
113
+ "status": "stable",
114
114
  "url": "/docs/components/elicitation-form",
115
115
  "mdUrl": "/docs/components/elicitation-form.md",
116
116
  "jsonUrl": "/r/components/elicitation-form.json",
117
+ "whenToUse": [
118
+ "A server that stopped part-way through a tool call and needs fields filled before it can continue."
119
+ ],
120
+ "whenNotToUse": [
121
+ "A form of your own design. `fields` is the schema the server sent, already resolved to display values.",
122
+ "A request for permission to run something rather than for data."
123
+ ],
124
+ "commonMistakes": [
125
+ "Leaving `state=\"request\"` after the user answered. Accepted and declined swap the action row for the outcome.",
126
+ "Rewriting `message` in your own voice. It is why the input is needed, in the server's words."
127
+ ],
117
128
  "specimens": [
118
129
  {
119
130
  "title": "ElicitationForm",
@@ -125,6 +136,5 @@
125
136
  "note": "A server pausing mid-tool-call to ask for the fields it still needs — MCP's elicitation, drawn. The fields arrive already resolved to display values, so the element renders a schema without ever having parsed one, and `state` swaps the two buttons for the outcome the moment the user answers. Declining is a first-class answer here, not a dismissal.",
126
137
  "interaction": "each field's control is chosen by its `kind` — a value chip, a row of options, or a switch — and the required ones are marked on the label rather than announced only on failure."
127
138
  }
128
- ],
129
- "todo": true
139
+ ]
130
140
  }
@@ -47,10 +47,19 @@
47
47
  ],
48
48
  "summary": "A composer-shaped invitation under the suggestions.",
49
49
  "examples": [],
50
- "status": "todo-docs",
50
+ "status": "stable",
51
51
  "url": "/docs/components/empty-state-composer",
52
52
  "mdUrl": "/docs/components/empty-state-composer.md",
53
53
  "jsonUrl": "/r/components/empty-state-composer.json",
54
+ "whenToUse": [
55
+ "The blank-thread screen whose real composer lives somewhere else."
56
+ ],
57
+ "whenNotToUse": [
58
+ "A working input. It is a display rather than one — `placeholder` is a string and send takes a handler."
59
+ ],
60
+ "commonMistakes": [
61
+ "Omitting `onSend` and expecting a live control. Without a handler the send control renders disabled."
62
+ ],
54
63
  "specimens": [
55
64
  {
56
65
  "title": "ChatEmptyState",
@@ -66,6 +75,5 @@
66
75
  "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
67
76
  "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
68
77
  }
69
- ],
70
- "todo": true
78
+ ]
71
79
  }
@@ -25,10 +25,19 @@
25
25
  ],
26
26
  "summary": "The one line at the top of a blank thread.",
27
27
  "examples": [],
28
- "status": "todo-docs",
28
+ "status": "stable",
29
29
  "url": "/docs/components/empty-state-greeting",
30
30
  "mdUrl": "/docs/components/empty-state-greeting.md",
31
31
  "jsonUrl": "/r/components/empty-state-greeting.json",
32
+ "whenToUse": [
33
+ "The single opening line on an empty thread."
34
+ ],
35
+ "whenNotToUse": [
36
+ "A second line of copy beneath it. This is the one a screen reader lands on."
37
+ ],
38
+ "commonMistakes": [
39
+ "Wrapping it in a heading of your own, which nests a heading inside a heading."
40
+ ],
32
41
  "specimens": [
33
42
  {
34
43
  "title": "ChatEmptyState",
@@ -44,6 +53,5 @@
44
53
  "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
45
54
  "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
46
55
  }
47
- ],
48
- "todo": true
56
+ ]
49
57
  }
@@ -36,10 +36,19 @@
36
36
  ],
37
37
  "summary": "One thing worth asking, as a pill.",
38
38
  "examples": [],
39
- "status": "todo-docs",
39
+ "status": "stable",
40
40
  "url": "/docs/components/empty-state-suggestion",
41
41
  "mdUrl": "/docs/components/empty-state-suggestion.md",
42
42
  "jsonUrl": "/r/components/empty-state-suggestion.json",
43
+ "whenToUse": [
44
+ "Each starter prompt offered on a blank thread."
45
+ ],
46
+ "whenNotToUse": [
47
+ "A standing control. It is a suggestion pill for the blank-thread screen."
48
+ ],
49
+ "commonMistakes": [
50
+ "Omitting `index`. It staggers the entrance so the pills arrive left to right rather than all at once."
51
+ ],
43
52
  "specimens": [
44
53
  {
45
54
  "title": "ChatEmptyState",
@@ -55,6 +64,5 @@
55
64
  "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
56
65
  "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
57
66
  }
58
- ],
59
- "todo": true
67
+ ]
60
68
  }
@@ -25,10 +25,19 @@
25
25
  ],
26
26
  "summary": "The row the suggestion pills wrap in.",
27
27
  "examples": [],
28
- "status": "todo-docs",
28
+ "status": "stable",
29
29
  "url": "/docs/components/empty-state-suggestions",
30
30
  "mdUrl": "/docs/components/empty-state-suggestions.md",
31
31
  "jsonUrl": "/r/components/empty-state-suggestions.json",
32
+ "whenToUse": [
33
+ "Holding the suggestion pills so they wrap as one row."
34
+ ],
35
+ "whenNotToUse": [
36
+ "Anything other than the suggestion pills."
37
+ ],
38
+ "commonMistakes": [
39
+ "Laying the pills out with a flex row of your own, which drops the wrapping the element already provides."
40
+ ],
32
41
  "specimens": [
33
42
  {
34
43
  "title": "ChatEmptyState",
@@ -44,6 +53,5 @@
44
53
  "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
45
54
  "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
46
55
  }
47
- ],
48
- "todo": true
56
+ ]
49
57
  }
@@ -83,7 +83,7 @@
83
83
  "--cue-text-emphasis",
84
84
  "--cue-text-ui"
85
85
  ],
86
- "summary": "The \"there is nothing here\" panel body.",
86
+ "summary": "The 'there is nothing here' panel body — a report, not an alarm.",
87
87
  "examples": [
88
88
  {
89
89
  "title": "Usage",
@@ -91,10 +91,22 @@
91
91
  "language": "tsx"
92
92
  }
93
93
  ],
94
- "status": "todo-docs",
94
+ "status": "stable",
95
95
  "url": "/docs/components/empty-state",
96
96
  "mdUrl": "/docs/components/empty-state.md",
97
97
  "jsonUrl": "/r/components/empty-state.json",
98
+ "whenToUse": [
99
+ "A list, table or panel with no rows, where the reader needs to know why and what to do next.",
100
+ "Anywhere an action would help: `action` is the slot for the one thing that fills the emptiness."
101
+ ],
102
+ "whenNotToUse": [
103
+ "An error. Emptiness is a state; a failure needs its own tone and a way to retry.",
104
+ "Loading. Use `Skeleton` or `Spinner` — an empty state says nothing is coming."
105
+ ],
106
+ "commonMistakes": [
107
+ "Colouring it to draw attention. It uses the muted ramp throughout and takes its emphasis from position; an alarming empty state reports a problem that is not there.",
108
+ "Putting the meaning in the icon. The icon is decorative — the title carries it, so a screen reader hears one sentence instead of a shrug."
109
+ ],
98
110
  "specimens": [
99
111
  {
100
112
  "title": "EmptyState",
@@ -106,6 +118,5 @@
106
118
  "note": "The standard empty copy, from lib/samples.tsx. Same words everywhere in the app.",
107
119
  "interaction": "the action is an ordinary Button and behaves like one."
108
120
  }
109
- ],
110
- "todo": true
121
+ ]
111
122
  }
@@ -69,10 +69,22 @@
69
69
  "language": "tsx"
70
70
  }
71
71
  ],
72
- "status": "todo-docs",
72
+ "status": "stable",
73
73
  "url": "/docs/components/end-of-turn-summary",
74
74
  "mdUrl": "/docs/components/end-of-turn-summary.md",
75
75
  "jsonUrl": "/r/components/end-of-turn-summary.json",
76
+ "whenToUse": [
77
+ "The closing line of a turn, saying what it came to.",
78
+ "A turn whose result is not a diff at all, using `label` to replace the built line: `2 cues written`, `Nothing to change`."
79
+ ],
80
+ "whenNotToUse": [
81
+ "Anywhere you want review, keep or reject buttons. It is a rollup, not a control — those belong to a bar above the composer that acts on the whole run.",
82
+ "A turn that read files and wrote nothing but which you want reported as two zeroes. It says `No files changed` and stops."
83
+ ],
84
+ "commonMistakes": [
85
+ "Adding per-turn action buttons beside it. A per-turn row with those buttons on it is a row that can be pressed after the next turn has already changed the same files.",
86
+ "Passing `additions={0}` and `deletions={0}` to force the counts out. The counts are drawn only when there are some."
87
+ ],
76
88
  "specimens": [
77
89
  {
78
90
  "title": "EndOfTurnSummary",
@@ -84,6 +96,5 @@
84
96
  "note": "What the turn came to, in one line. A rollup and not a control: review, keep and reject act on the whole run and belong above the composer, where they cannot be pressed after the next turn has already changed the same files. The + and − are CodeDiff's glyphs, so one transcript never shows two conventions for the same number, and a turn that changed nothing says so instead of saying it with two zeroes.",
85
97
  "interaction": "none. It is a sentence with two tinted numbers in it."
86
98
  }
87
- ],
88
- "todo": true
99
+ ]
89
100
  }
@@ -166,7 +166,7 @@
166
166
  "--cue-text-ui",
167
167
  "--cue-warn"
168
168
  ],
169
- "summary": "A config value that may be a literal *or* a reference to an environment variable — and looks unmistakably different in each case.",
169
+ "summary": "A config value that may be a literal or an `env(NAME)` reference — and looks unmistakably different in each case.",
170
170
  "examples": [
171
171
  {
172
172
  "title": "Usage",
@@ -174,10 +174,22 @@
174
174
  "language": "tsx"
175
175
  }
176
176
  ],
177
- "status": "todo-docs",
177
+ "status": "stable",
178
178
  "url": "/docs/components/env-var-input",
179
179
  "mdUrl": "/docs/components/env-var-input.md",
180
180
  "jsonUrl": "/r/components/env-var-input.json",
181
+ "whenToUse": [
182
+ "Any config screen where some values are secrets and some name where a secret comes from.",
183
+ "Anywhere the difference decides whether a value is safe to screenshot, commit or paste into a ticket."
184
+ ],
185
+ "whenNotToUse": [
186
+ "A secret typed directly with no indirection. Use `PasswordInput`.",
187
+ "Ordinary configuration with no environment indirection. Use `Input`."
188
+ ],
189
+ "commonMistakes": [
190
+ "Rendering references as ordinary text. The warn-toned pill is the entire point: a screen of identical text boxes gives no way to tell the key from the pointer to the key.",
191
+ "Treating `secret` as encryption. It masks a literal on screen; it does nothing to how the value is stored or sent."
192
+ ],
181
193
  "specimens": [
182
194
  {
183
195
  "title": "EnvVarInput",
@@ -189,6 +201,5 @@
189
201
  "note": "A literal value and an `env(NAME)` reference are different things, so they do not look the same: the reference swaps to an amber token pill.",
190
202
  "interaction": "the mode switch is a button; typing `env(` in the field is enough to flip it."
191
203
  }
192
- ],
193
- "todo": true
204
+ ]
194
205
  }
@@ -73,10 +73,21 @@
73
73
  "language": "tsx"
74
74
  }
75
75
  ],
76
- "status": "todo-docs",
76
+ "status": "stable",
77
77
  "url": "/docs/components/error-state",
78
78
  "mdUrl": "/docs/components/error-state.md",
79
79
  "jsonUrl": "/r/components/error-state.json",
80
+ "whenToUse": [
81
+ "A failed request inside a surface, where the retry should sit with the failure rather than interrupt."
82
+ ],
83
+ "whenNotToUse": [
84
+ "A failure with nothing to try again. `onRetry` is required.",
85
+ "A decision that must block everything until it is answered. This is deliberately not a modal."
86
+ ],
87
+ "commonMistakes": [
88
+ "Rendering your own spinner while retrying. `retrying` swaps the banner to a spinning Retrying status instead of the error.",
89
+ "Putting the whole message in `title`. `detail` is the supporting line that explains what went wrong."
90
+ ],
80
91
  "specimens": [
81
92
  {
82
93
  "title": "ErrorState",
@@ -88,6 +99,5 @@
88
99
  "note": "A failure banner, not a modal: it sits in the flow where the answer would have been, says what broke and what to do, and leaves the rest of the page alone. Retrying is a different element entirely rather than a disabled button — `role='alert'` while it is a failure, `role='status'` while it is trying again, which is the difference between interrupting a screen reader and not.",
89
100
  "interaction": "Retry is a named button that tints on hover. The retrying state has no control at all, because there is nothing to press while it works."
90
101
  }
91
- ],
92
- "todo": true
102
+ ]
93
103
  }
@@ -93,9 +93,17 @@
93
93
  "language": "tsx"
94
94
  }
95
95
  ],
96
- "status": "todo-docs",
96
+ "status": "stable",
97
97
  "url": "/docs/components/export-dialog",
98
98
  "mdUrl": "/docs/components/export-dialog.md",
99
99
  "jsonUrl": "/r/components/export-dialog.json",
100
- "todo": true
100
+ "whenToUse": [
101
+ "Handing a tuned theme to code, in whichever of the four shapes the consumer needs."
102
+ ],
103
+ "whenNotToUse": [
104
+ "Exporting anything but the configurator's overrides. All four outputs are generated from them."
105
+ ],
106
+ "commonMistakes": [
107
+ "Re-deriving a value before export. Nothing here re-derives: the CSS output is literally the stylesheet on the page, which is what makes it trustworthy."
108
+ ]
101
109
  }
@@ -31,7 +31,7 @@
31
31
  "--cue-space-2",
32
32
  "--cue-text-label"
33
33
  ],
34
- "summary": "The small accent kicker that sits above a title: `// PATCH`.",
34
+ "summary": "The small accent kicker above a title: `// PATCH`.",
35
35
  "examples": [
36
36
  {
37
37
  "title": "Usage",
@@ -39,10 +39,21 @@
39
39
  "language": "tsx"
40
40
  }
41
41
  ],
42
- "status": "todo-docs",
42
+ "status": "stable",
43
43
  "url": "/docs/components/eyebrow",
44
44
  "mdUrl": "/docs/components/eyebrow.md",
45
45
  "jsonUrl": "/r/components/eyebrow.json",
46
+ "whenToUse": [
47
+ "Naming the category a title belongs to, where the title alone would not say it.",
48
+ "Anywhere the accent should carry pure typography — this is the one place the system spends it that way."
49
+ ],
50
+ "whenNotToUse": [
51
+ "A status. Use `Chip`, which carries the tone vocabulary.",
52
+ "A second heading. An eyebrow is a kicker, not a level in the outline."
53
+ ],
54
+ "commonMistakes": [
55
+ "Typing the slashes into the text. They are `aria-hidden` and `select-none` for a reason — a screen reader should read \"patch\", and a copy-paste of the page should not carry punctuation that was only ever decoration."
56
+ ],
46
57
  "specimens": [
47
58
  {
48
59
  "title": "Eyebrow",
@@ -54,6 +65,5 @@
54
65
  "note": "The `//` motif from the brand site, in mono micro.",
55
66
  "interaction": "none."
56
67
  }
57
- ],
58
- "todo": true
68
+ ]
59
69
  }
@@ -113,10 +113,21 @@
113
113
  "language": "tsx"
114
114
  }
115
115
  ],
116
- "status": "todo-docs",
116
+ "status": "stable",
117
117
  "url": "/docs/components/feedback-dialog",
118
118
  "mdUrl": "/docs/components/feedback-dialog.md",
119
119
  "jsonUrl": "/r/components/feedback-dialog.json",
120
+ "whenToUse": [
121
+ "Collecting the reason behind a negative rating, with optional free text alongside it."
122
+ ],
123
+ "whenNotToUse": [
124
+ "A single-choice survey. More than one reason may be picked at once."
125
+ ],
126
+ "commonMistakes": [
127
+ "Writing long reason strings. Keep them short enough to scan in one line.",
128
+ "Rendering your own thank-you. `sent` replaces the whole form with an acknowledgement once the report is filed.",
129
+ "Requiring `note` before submit. The free-text detail is always optional."
130
+ ],
120
131
  "specimens": [
121
132
  {
122
133
  "title": "FeedbackDialog",
@@ -128,6 +139,5 @@
128
139
  "note": "A thumbs-down that asks why, so the signal arrives with a reason attached. The reasons are chips rather than a select because more than one is usually true, and the note is marked optional in the header — a feedback form that demands prose collects nothing. Sending replaces the whole form with an acknowledgement.",
129
140
  "interaction": "each chip is `aria-pressed`. The acknowledgement lives in a `status` live region mounted from the start and empty until it is not — a region created together with its text is the case a screen reader is free to miss."
130
141
  }
131
- ],
132
- "todo": true
142
+ ]
133
143
  }
@@ -35,7 +35,7 @@
35
35
  "--cue-text-label",
36
36
  "--cue-text-micro"
37
37
  ],
38
- "summary": "Quiet helper text under a control, published to assistive tech as the control's `aria-describedby` target.",
38
+ "summary": "Quiet helper text under a control, published as the control's `aria-describedby` target.",
39
39
  "examples": [
40
40
  {
41
41
  "title": "Usage",
@@ -43,10 +43,22 @@
43
43
  "language": "tsx"
44
44
  }
45
45
  ],
46
- "status": "todo-docs",
46
+ "status": "stable",
47
47
  "url": "/docs/components/field-description",
48
48
  "mdUrl": "/docs/components/field-description.md",
49
49
  "jsonUrl": "/r/components/field-description.json",
50
+ "whenToUse": [
51
+ "A constraint or a consequence the label cannot carry: the format expected, what the value affects.",
52
+ "Text that should be read out after the control's name rather than as part of it."
53
+ ],
54
+ "whenNotToUse": [
55
+ "An error. Use `FieldError` — a description is permanent and an error is a state.",
56
+ "A whole paragraph. If it needs that much, the field needs a different design."
57
+ ],
58
+ "commonMistakes": [
59
+ "Putting the requirement only here and not in validation, so a screen reader hears the rule but nothing enforces it.",
60
+ "Repeating the label in other words, which makes every field announce twice."
61
+ ],
50
62
  "specimens": [
51
63
  {
52
64
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -61,6 +73,5 @@
61
73
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
62
74
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
63
75
  }
64
- ],
65
- "todo": true
76
+ ]
66
77
  }
@@ -56,7 +56,7 @@
56
56
  "--cue-text-label",
57
57
  "--cue-text-micro"
58
58
  ],
59
- "summary": "The error line under a control.",
59
+ "summary": "The error line under a control. Driven by Standard Schema issues, or by native validity.",
60
60
  "examples": [
61
61
  {
62
62
  "title": "Usage",
@@ -64,10 +64,22 @@
64
64
  "language": "tsx"
65
65
  }
66
66
  ],
67
- "status": "todo-docs",
67
+ "status": "stable",
68
68
  "url": "/docs/components/field-error",
69
69
  "mdUrl": "/docs/components/field-error.md",
70
70
  "jsonUrl": "/r/components/field-error.json",
71
+ "whenToUse": [
72
+ "Showing a parse failure: pass `issues` from `schema.safeParse(x).issues` and the component owns visibility.",
73
+ "Keying off the browser's own `ValidityState`: pass `match` plus `children`."
74
+ ],
75
+ "whenNotToUse": [
76
+ "A permanent constraint. That is `FieldDescription`; an error should appear only when something is wrong.",
77
+ "A form-level failure. This belongs to one control."
78
+ ],
79
+ "commonMistakes": [
80
+ "Passing both `issues` and `match`. They are mutually exclusive by design — pick the source of truth.",
81
+ "Rendering it conditionally yourself when using `issues`. The component already decides when to show; wrapping it in your own guard fights it."
82
+ ],
71
83
  "specimens": [
72
84
  {
73
85
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -82,6 +94,5 @@
82
94
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
83
95
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
84
96
  }
85
- ],
86
- "todo": true
97
+ ]
87
98
  }
@@ -35,7 +35,7 @@
35
35
  "--cue-text-label",
36
36
  "--cue-text-micro"
37
37
  ],
38
- "summary": "The name of a field: mono, uppercase, tracked out, one rung below body text.",
38
+ "summary": "The name of a field: a real `<label>`, wired to its control.",
39
39
  "examples": [
40
40
  {
41
41
  "title": "Usage",
@@ -43,10 +43,22 @@
43
43
  "language": "tsx"
44
44
  }
45
45
  ],
46
- "status": "todo-docs",
46
+ "status": "stable",
47
47
  "url": "/docs/components/field-label",
48
48
  "mdUrl": "/docs/components/field-label.md",
49
49
  "jsonUrl": "/r/components/field-label.json",
50
+ "whenToUse": [
51
+ "Every control inside a `Field`. Clicking the label focuses — or toggles — the control it names.",
52
+ "Anywhere a visible name is wanted instead of an `aria-label`, which is the better default because sighted users need the name too."
53
+ ],
54
+ "whenNotToUse": [
55
+ "Helper text. Use `FieldDescription`, which becomes the `aria-describedby` target.",
56
+ "An error. Use `FieldError`."
57
+ ],
58
+ "commonMistakes": [
59
+ "Using a `<div>` styled to look like a label, which breaks click-to-focus and leaves the control unnamed.",
60
+ "Labelling a group of controls with one of these. A `RadioGroup` or `CheckboxGroup` needs a group name, not a label pointing at one member."
61
+ ],
50
62
  "specimens": [
51
63
  {
52
64
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -61,6 +73,5 @@
61
73
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
62
74
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
63
75
  }
64
- ],
65
- "todo": true
76
+ ]
66
77
  }
@@ -76,10 +76,21 @@
76
76
  "language": "tsx"
77
77
  }
78
78
  ],
79
- "status": "todo-docs",
79
+ "status": "stable",
80
80
  "url": "/docs/components/file-tree",
81
81
  "mdUrl": "/docs/components/file-tree.md",
82
82
  "jsonUrl": "/r/components/file-tree.json",
83
+ "whenToUse": [
84
+ "The full set of files a run changed, with per-file churn and a total across them.",
85
+ "A live run where files land one at a time, by raising `visibleCount`."
86
+ ],
87
+ "whenNotToUse": [
88
+ "One file's line-by-line change."
89
+ ],
90
+ "commonMistakes": [
91
+ "Passing nested `children` arrays. `nodes` is a flat list in display order and nesting comes from each node's depth.",
92
+ "Rendering the whole tree at once during a live run. `visibleCount` is what you raise as the run touches more files."
93
+ ],
83
94
  "specimens": [
84
95
  {
85
96
  "title": "FileTree",
@@ -91,6 +102,5 @@
91
102
  "note": "Everything a run touched, with the churn per file. The list is flat and the nesting is `depth`, which is what lets a row appear the moment the agent reports it rather than after its folder is complete.",
92
103
  "interaction": "rows highlight on hover to keep the eye on one line; nothing here is clickable, because the tree reports rather than navigates."
93
104
  }
94
- ],
95
- "todo": true
105
+ ]
96
106
  }
@@ -176,7 +176,7 @@
176
176
  "--cue-text-label",
177
177
  "--cue-text-ui"
178
178
  ],
179
- "summary": "A drop zone with a file list under it.",
179
+ "summary": "A drop zone with a file list under it — and the zone is a real button.",
180
180
  "examples": [
181
181
  {
182
182
  "title": "Usage",
@@ -184,10 +184,21 @@
184
184
  "language": "tsx"
185
185
  }
186
186
  ],
187
- "status": "todo-docs",
187
+ "status": "stable",
188
188
  "url": "/docs/components/file-upload",
189
189
  "mdUrl": "/docs/components/file-upload.md",
190
190
  "jsonUrl": "/r/components/file-upload.json",
191
+ "whenToUse": [
192
+ "Any upload. Dropping is the mouse affordance; pressing Enter on the focused zone opens the file dialog.",
193
+ "Uploads with rules: `accept`, `maxSize` and `maxFiles` are enforced before `onFilesAccepted`."
194
+ ],
195
+ "whenNotToUse": [
196
+ "A single file chosen rarely, where a plain button reads better than a target."
197
+ ],
198
+ "commonMistakes": [
199
+ "Rebuilding it as a `<div>` with a drop handler. A zone that only accepts drops is unusable without a pointer (WCAG 2.1.1), and it is the single most common defect in hand-rolled uploaders.",
200
+ "Handling only `onFilesAccepted`. Rejections are where the user learns the rule — `onFilesRejected` is not optional in practice."
201
+ ],
191
202
  "specimens": [
192
203
  {
193
204
  "title": "FileUpload",
@@ -199,6 +210,5 @@
199
210
  "note": "A drop zone that is also a button, so a keyboard can reach it. Rejections say which rule they broke.",
200
211
  "interaction": "the zone lights on drag-over; Enter or Space opens the file dialog."
201
212
  }
202
- ],
203
- "todo": true
213
+ ]
204
214
  }
@@ -28,10 +28,19 @@
28
28
  "language": "tsx"
29
29
  }
30
30
  ],
31
- "status": "todo-docs",
31
+ "status": "stable",
32
32
  "url": "/docs/components/flow-background",
33
33
  "mdUrl": "/docs/components/flow-background.md",
34
34
  "jsonUrl": "/r/components/flow-background.json",
35
+ "whenToUse": [
36
+ "Behind any flow canvas."
37
+ ],
38
+ "whenNotToUse": [
39
+ "Outside React Flow."
40
+ ],
41
+ "commonMistakes": [
42
+ "Passing `color`. Leave it unset — it writes `--xy-background-pattern-color-props`, which outranks the theme map, so passing a colour is how you opt *out* of theming rather than how you theme it."
43
+ ],
35
44
  "specimens": [
36
45
  {
37
46
  "title": "useFlowTheme / FlowControls / FlowBackground / SignalEdge",
@@ -45,6 +54,5 @@
45
54
  "note": "The hook returns the `--xy-*` token map plus stable `edgeTypes` and `defaultEdgeOptions` identities. Every part also publishes the map on its own root, so the group is correct before flow.css is imported and correct again after.",
46
55
  "interaction": "the controls capsule is an overlay surface; a live wire animates its dash overlay and stops under prefers-reduced-motion."
47
56
  }
48
- ],
49
- "todo": true
57
+ ]
50
58
  }
@@ -28,10 +28,19 @@
28
28
  "language": "tsx"
29
29
  }
30
30
  ],
31
- "status": "todo-docs",
31
+ "status": "stable",
32
32
  "url": "/docs/components/flow-controls",
33
33
  "mdUrl": "/docs/components/flow-controls.md",
34
34
  "jsonUrl": "/r/components/flow-controls.json",
35
+ "whenToUse": [
36
+ "On any flow canvas the user pans and zooms."
37
+ ],
38
+ "whenNotToUse": [
39
+ "As a general toolbar. Use `Toolbar`."
40
+ ],
41
+ "commonMistakes": [
42
+ "Moving the shape rules into a class. `border-radius` and `overflow` have no `--xy-*` hook, so the library's own rule would win — and `overflow: hidden` is what makes the first and last buttons take the capsule's corners instead of squaring them off."
43
+ ],
35
44
  "specimens": [
36
45
  {
37
46
  "title": "useFlowTheme / FlowControls / FlowBackground / SignalEdge",
@@ -45,6 +54,5 @@
45
54
  "note": "The hook returns the `--xy-*` token map plus stable `edgeTypes` and `defaultEdgeOptions` identities. Every part also publishes the map on its own root, so the group is correct before flow.css is imported and correct again after.",
46
55
  "interaction": "the controls capsule is an overlay surface; a live wire animates its dash overlay and stops under prefers-reduced-motion."
47
56
  }
48
- ],
49
- "todo": true
57
+ ]
50
58
  }