@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
@@ -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
  }
@@ -66,10 +66,21 @@
66
66
  "language": "tsx"
67
67
  }
68
68
  ],
69
- "status": "todo-docs",
69
+ "status": "stable",
70
70
  "url": "/docs/components/flow-graph",
71
71
  "mdUrl": "/docs/components/flow-graph.md",
72
72
  "jsonUrl": "/r/components/flow-graph.json",
73
+ "whenToUse": [
74
+ "Work that branches and rejoins, where a list would lose the shape.",
75
+ "A graph drawn progressively, where an edge stays dim until both of its ends have been reached."
76
+ ],
77
+ "whenNotToUse": [
78
+ "A graph you want laid out for you. Layout is explicit and the element runs no solver."
79
+ ],
80
+ "commonMistakes": [
81
+ "Leaving grid positions off the nodes. Every node carries its own, because nothing solves the layout.",
82
+ "Wondering why an edge is dim. An edge dims until both of its ends are visible, which `visibleCount` controls."
83
+ ],
73
84
  "specimens": [
74
85
  {
75
86
  "title": "FlowGraph",
@@ -81,6 +92,5 @@
81
92
  "note": "Work as a graph rather than a list, for the runs that fan out and rejoin — here the two trusses are patched in parallel and the render waits for both. Layout is explicit: every node carries its own column and row and the element runs no solver, which is what keeps a re-render from rearranging a diagram somebody was reading.",
82
93
  "interaction": "none. `visibleCount` is what makes the graph arrive a node at a time, and an edge stays dim until both of its ends have been reached."
83
94
  }
84
- ],
85
- "todo": true
95
+ ]
86
96
  }
@@ -17,10 +17,20 @@
17
17
  "tokensUsed": [],
18
18
  "summary": "A folder somebody made: a shelf of bookmarks, filed by hand.",
19
19
  "examples": [],
20
- "status": "todo-docs",
20
+ "status": "stable",
21
21
  "url": "/docs/components/folder-icon",
22
22
  "mdUrl": "/docs/components/folder-icon.md",
23
23
  "jsonUrl": "/r/components/folder-icon.json",
24
+ "whenToUse": [
25
+ "A collection a person curated deliberately."
26
+ ],
27
+ "whenNotToUse": [
28
+ "A result set a query returned. The tab is what says a person put these here on purpose.",
29
+ "An audience. Use `AudienceIcon` — its members are people, not artefacts."
30
+ ],
31
+ "commonMistakes": [
32
+ "Replacing it with a plain rounded box, which in this library is a panel, a card or a dialog — and which drops the one thing a folder has to say."
33
+ ],
24
34
  "specimens": [
25
35
  {
26
36
  "title": "The container icon set",
@@ -41,6 +51,5 @@
41
51
  "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
42
52
  "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
43
53
  }
44
- ],
45
- "todo": true
54
+ ]
46
55
  }
@@ -45,10 +45,19 @@
45
45
  ],
46
46
  "summary": "A fraction inside an expression — numerator, rule, denominator — set inline and aligned to the middle.",
47
47
  "examples": [],
48
- "status": "todo-docs",
48
+ "status": "stable",
49
49
  "url": "/docs/components/frac",
50
50
  "mdUrl": "/docs/components/frac.md",
51
51
  "jsonUrl": "/r/components/frac.json",
52
+ "whenToUse": [
53
+ "A fraction set inside a line of an expression."
54
+ ],
55
+ "whenNotToUse": [
56
+ "A display-sized equation of its own. This sets inline and aligns to the middle of the line."
57
+ ],
58
+ "commonMistakes": [
59
+ "Writing the fraction as text with a slash instead of passing `over` and `under`, which loses the rule and the middle alignment."
60
+ ],
52
61
  "specimens": [
53
62
  {
54
63
  "title": "MathBlock",
@@ -63,6 +72,5 @@
63
72
  "note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
64
73
  "interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
65
74
  }
66
- ],
67
- "todo": true
75
+ ]
68
76
  }
@@ -58,10 +58,21 @@
58
58
  ],
59
59
  "summary": "The wait before there is anything to show.",
60
60
  "examples": [],
61
- "status": "todo-docs",
61
+ "status": "stable",
62
62
  "url": "/docs/components/generation-loader",
63
63
  "mdUrl": "/docs/components/generation-loader.md",
64
64
  "jsonUrl": "/r/components/generation-loader.json",
65
+ "whenToUse": [
66
+ "The gap before the model has produced anything at all, under a shimmering status label.",
67
+ "A replay you can pause: the caller advances `tick`, so a paused replay pauses the loader too."
68
+ ],
69
+ "whenNotToUse": [
70
+ "Work with named stages and an estimate. This is the empty wait, not a progress bar."
71
+ ],
72
+ "commonMistakes": [
73
+ "Expecting it to animate on its own. `tick` drives both the pixel pattern and the elapsed seconds counter.",
74
+ "Leaving it on screen once content arrives. It is for the wait before there is anything to show."
75
+ ],
65
76
  "specimens": [
66
77
  {
67
78
  "title": "GenerationLoader",
@@ -73,6 +84,5 @@
73
84
  "note": "The wait before there is anything at all to show. Nine cells keep time under a shimmering label, driven by a tick the caller advances — so a paused replay pauses the loader too, which a CSS animation could never do. The three variants are three shapes for the same clock.",
74
85
  "interaction": "none. The matrix is aria-hidden; the label is the only thing a screen reader gets, which is the right amount."
75
86
  }
76
- ],
77
- "todo": true
87
+ ]
78
88
  }
@@ -97,7 +97,7 @@
97
97
  "variants": {},
98
98
  "defaultVariants": {},
99
99
  "tokensUsed": [],
100
- "summary": "The vocabulary a model composes at runtime.",
100
+ "summary": "The vocabulary a model composes at runtime: a JSON tree of intrinsic names, turned into elements.",
101
101
  "examples": [
102
102
  {
103
103
  "title": "Usage",
@@ -105,10 +105,23 @@
105
105
  "language": "tsx"
106
106
  }
107
107
  ],
108
- "status": "todo-docs",
108
+ "status": "stable",
109
109
  "url": "/docs/components/generative-ui",
110
110
  "mdUrl": "/docs/components/generative-ui.md",
111
111
  "jsonUrl": "/r/components/generative-ui.json",
112
+ "whenToUse": [
113
+ "Rendering a component tree a language model emitted as JSON, where there is no compile step between the two and there cannot be one.",
114
+ "A widget that has to draw inside somebody else's console: the stylesheet is plain `[data-aui]` CSS and the tree it draws carries no `class` attribute anywhere."
115
+ ],
116
+ "whenNotToUse": [
117
+ "A tree a programmer wrote. Every other component in the library is handed props at a call site, where a wrong one costs a type error.",
118
+ "Markdown you expect parsed. This subpath ships no parser and will not acquire one — pass `renderMarkdown`, which is shaped for `@cueplusplus/ui/elements/markdown`."
119
+ ],
120
+ "commonMistakes": [
121
+ "Casting the parsed tool result to `GenerativeNode` before passing it. `spec` is `unknown` on purpose, because a cast is a claim about the bytes that nobody is in a position to make.",
122
+ "Wrapping it in an error boundary and expecting throws. It never throws: an unknown `$type` draws an in-place notice and its siblings still render, a spec that is not a tree draws a legible error state rather than a blank box, and a tree past `GENERATIVE_MAX_DEPTH` stops and says so.",
123
+ "Passing `skin` and `fidelity` inside an `AgentSurface`, which has already stamped the subtree and whose values inherit through CSS with nothing threaded."
124
+ ],
112
125
  "specimens": [
113
126
  {
114
127
  "title": "GenerativeUI",
@@ -120,6 +133,5 @@
120
133
  "note": "The one component here nobody wrote props for. A model emits a tree of 27 intrinsic names as JSON and this draws it, with no compile step in between and none possible, so the specimens are the spec objects themselves: a dashboard the model composed out of facts, a chart and a table; a patch form whose confirm hands back every named field at once; and a chart on its own. The last two are wrong on purpose. A $type from a newer catalogue draws an in-place notice and its siblings still render; a spec that is not a tree at all draws a legible error rather than the blank box that reads as a message still streaming. Neither throws, which is the whole contract. It draws from plain [data-aui] CSS with no utilities and no icon or chart package behind it, because the console a model is talking to is usually somebody else's app.",
121
134
  "interaction": "every control is a real control and takes the house focus ring; text fires on blur rather than per keystroke, since $action is a message to the model. The form specimen is live: submit it and the model's own card gains a success alert with what the desk received."
122
135
  }
123
- ],
124
- "todo": true
136
+ ]
125
137
  }
@@ -112,10 +112,22 @@
112
112
  "language": "tsx"
113
113
  }
114
114
  ],
115
- "status": "todo-docs",
115
+ "status": "stable",
116
116
  "url": "/docs/components/grid",
117
117
  "mdUrl": "/docs/components/grid.md",
118
118
  "jsonUrl": "/r/components/grid.json",
119
+ "whenToUse": [
120
+ "A card grid, a tile wall, any set of peers laid out in both directions.",
121
+ "Responsive column counts without media queries: give `minItemWidth` and let it fit as many as it can."
122
+ ],
123
+ "whenNotToUse": [
124
+ "A single row or column. Use `Stack`.",
125
+ "A table. Use the data-table instruments, which carry the semantics a grid of divs cannot."
126
+ ],
127
+ "commonMistakes": [
128
+ "Setting `cols` and `minItemWidth` together and expecting both to apply.",
129
+ "Hand-picking the gap. It is a rung of the density ladder for the same reason `Stack`'s is — a card grid should tighten with the rest of the console."
130
+ ],
119
131
  "specimens": [
120
132
  {
121
133
  "title": "Grid",
@@ -127,6 +139,5 @@
127
139
  "note": "Fixed columns, or auto-fit from a minimum item width.",
128
140
  "interaction": "none."
129
141
  }
130
- ],
131
- "todo": true
142
+ ]
132
143
  }
@@ -102,10 +102,21 @@
102
102
  "language": "tsx"
103
103
  }
104
104
  ],
105
- "status": "todo-docs",
105
+ "status": "stable",
106
106
  "url": "/docs/components/group-bar",
107
107
  "mdUrl": "/docs/components/group-bar.md",
108
108
  "jsonUrl": "/r/components/group-bar.json",
109
+ "whenToUse": [
110
+ "A breakdown where the proportions are the reading and exact numbers are not.",
111
+ "Anywhere a stacked bar should carry no axis — the shape is the answer."
112
+ ],
113
+ "whenNotToUse": [
114
+ "Values that must be compared precisely. Use a table or a labelled chart.",
115
+ "A single value against a maximum. Use `Progress`."
116
+ ],
117
+ "commonMistakes": [
118
+ "Rendering zero-valued groups. Empty groups get no cell: a minimum width is what makes a two-pixel sliver visible, and a minimum width on a zero draws a group that is not there."
119
+ ],
109
120
  "specimens": [
110
121
  {
111
122
  "title": "GroupBar",
@@ -117,6 +128,5 @@
117
128
  "note": "The distribution strip: one flex cell per item, coloured by tone, with a legend that names each share.",
118
129
  "interaction": "none. It is a picture of a breakdown, and the legend is the text version of it."
119
130
  }
120
- ],
121
- "todo": true
131
+ ]
122
132
  }
@@ -89,10 +89,21 @@
89
89
  "language": "tsx"
90
90
  }
91
91
  ],
92
- "status": "todo-docs",
92
+ "status": "stable",
93
93
  "url": "/docs/components/guardrail-notice",
94
94
  "mdUrl": "/docs/components/guardrail-notice.md",
95
95
  "jsonUrl": "/r/components/guardrail-notice.json",
96
+ "whenToUse": [
97
+ "A refusal that should say where the line actually sits and offer the nearest things it can do."
98
+ ],
99
+ "whenNotToUse": [
100
+ "A failure the system could simply try again.",
101
+ "A refusal with no rule behind it. `policy` is a required short label for the rule that applied."
102
+ ],
103
+ "commonMistakes": [
104
+ "Writing an apology into `title`. It is the refusal in one line, stated plainly rather than apologetically.",
105
+ "Omitting `alternatives` to hide the section. Pass an empty array; it is a required prop."
106
+ ],
96
107
  "specimens": [
97
108
  {
98
109
  "title": "GuardrailNotice",
@@ -104,6 +115,5 @@
104
115
  "note": "A refusal in its own shape: what it will not do, why, the rule that applied, and the nearest things it *can* do. The alternatives are the whole point — a refusal that ends at 'no' hands the work back with nothing attached, and this one hands back three next moves.",
105
116
  "interaction": "each alternative is a button reporting its own text to `onPick`. With an empty list the section disappears rather than leaving an empty rule."
106
117
  }
107
- ],
108
- "todo": true
118
+ ]
109
119
  }
@@ -161,7 +161,7 @@
161
161
  "--cue-text-label",
162
162
  "--cue-text-ui"
163
163
  ],
164
- "summary": "A richer preview than a tooltip, revealed by hovering a link or a name: the fixture behind a profile string, the operator behind an initial.",
164
+ "summary": "A richer preview than a tooltip, revealed by hovering a link or a name.",
165
165
  "examples": [
166
166
  {
167
167
  "title": "Usage",
@@ -169,10 +169,21 @@
169
169
  "language": "tsx"
170
170
  }
171
171
  ],
172
- "status": "todo-docs",
172
+ "status": "stable",
173
173
  "url": "/docs/components/hover-card",
174
174
  "mdUrl": "/docs/components/hover-card.md",
175
175
  "jsonUrl": "/r/components/hover-card.json",
176
+ "whenToUse": [
177
+ "A preview the pointer can travel into — the fixture behind a profile string, the operator behind an initial.",
178
+ "Content with its own links or controls."
179
+ ],
180
+ "whenNotToUse": [
181
+ "A short description of a control. Use `Tooltip`, which is announced as the trigger's description.",
182
+ "Anything that must be reachable by keyboard alone. Hover is the trigger."
183
+ ],
184
+ "commonMistakes": [
185
+ "Using it as a big tooltip. It is deliberately not one: the card is reachable and its content is not announced as the trigger's description."
186
+ ],
176
187
  "specimens": [
177
188
  {
178
189
  "title": "HoverCard",
@@ -184,6 +195,5 @@
184
195
  "note": "A preview card: richer than a tooltip, and never the only way to reach the information.",
185
196
  "interaction": "opens on hover after a delay and on focus; the card itself is hoverable, so a link inside it is reachable."
186
197
  }
187
- ],
188
- "todo": true
198
+ ]
189
199
  }
@@ -86,10 +86,23 @@
86
86
  "language": "tsx"
87
87
  }
88
88
  ],
89
- "status": "todo-docs",
89
+ "status": "stable",
90
90
  "url": "/docs/components/icon-button",
91
91
  "mdUrl": "/docs/components/icon-button.md",
92
92
  "jsonUrl": "/r/components/icon-button.json",
93
+ "whenToUse": [
94
+ "A control whose meaning is carried by a familiar glyph in a place with no room for a label: a close, a copy, a kebab menu.",
95
+ "A dense toolbar where visible rims would be noise. The default `ghost` variant stays invisible until hovered."
96
+ ],
97
+ "whenNotToUse": [
98
+ "An action whose icon is not unambiguous on its own. Use `Button` with `icon` and real text.",
99
+ "A destructive action that deserves confirmation in place. Use `TwoStepButton`."
100
+ ],
101
+ "commonMistakes": [
102
+ "Treating `aria-label` as optional because the icon 'obviously' means close. It is required, and it is the only name the control has.",
103
+ "Putting a title or tooltip on the icon instead of labelling the button. The tooltip is a hint; the label is the accessible name.",
104
+ "Wrapping the icon in extra sizing markup. Pass the component to `icon` and it is rendered `aria-hidden` at the right rung."
105
+ ],
93
106
  "specimens": [
94
107
  {
95
108
  "title": "IconButton",
@@ -101,6 +114,5 @@
101
114
  "note": "A square button with a required accessible name. There is no unlabelled variant.",
102
115
  "interaction": "same ring as Button; the hit target stays at the control height even when the glyph shrinks."
103
116
  }
104
- ],
105
- "todo": true
117
+ ]
106
118
  }
@@ -53,10 +53,21 @@
53
53
  "language": "tsx"
54
54
  }
55
55
  ],
56
- "status": "todo-docs",
56
+ "status": "stable",
57
57
  "url": "/docs/components/image-generation",
58
58
  "mdUrl": "/docs/components/image-generation.md",
59
59
  "jsonUrl": "/r/components/image-generation.json",
60
+ "whenToUse": [
61
+ "An image being generated, where the frame should hold its size before there is anything in it.",
62
+ "A result that should stay tied to its prompt, which is printed under the frame."
63
+ ],
64
+ "whenNotToUse": [
65
+ "An image that already exists and has no generating phase."
66
+ ],
67
+ "commonMistakes": [
68
+ "Leaving `generating` true after the image lands, which keeps a pulsing dot grid over a finished picture.",
69
+ "Dropping the prompt. It is shown under the frame, and it is what ties the result back to what was asked."
70
+ ],
60
71
  "specimens": [
61
72
  {
62
73
  "title": "ImageGeneration",
@@ -68,6 +79,5 @@
68
79
  "note": "A dot grid holds the square while the image resolves out of a blur — the frame is the right size from the first frame, so nothing below it moves when the picture lands. While generating, the prompt is replaced by a shimmering label; when it settles, the prompt is what is left under the image.",
69
80
  "interaction": "regenerate is a labelled icon button. The grid and the image are both `aria-hidden`: the prompt underneath is the description, and a decorative placeholder should not be announced as a picture."
70
81
  }
71
- ],
72
- "todo": true
82
+ ]
73
83
  }
@@ -104,7 +104,7 @@
104
104
  "--cue-font-mono",
105
105
  "--cue-text-micro"
106
106
  ],
107
- "summary": "The 13px circular \"i\" badge: a footnote marker for a field, a column or a number whose definition is not obvious.",
107
+ "summary": "The 13px circular 'i' badge: a footnote marker for a field, a column or a number.",
108
108
  "examples": [
109
109
  {
110
110
  "title": "Usage",
@@ -112,10 +112,22 @@
112
112
  "language": "tsx"
113
113
  }
114
114
  ],
115
- "status": "todo-docs",
115
+ "status": "stable",
116
116
  "url": "/docs/components/info-tip",
117
117
  "mdUrl": "/docs/components/info-tip.md",
118
118
  "jsonUrl": "/r/components/info-tip.json",
119
+ "whenToUse": [
120
+ "A definition that is not obvious and does not deserve permanent space.",
121
+ "Anywhere the explanation must be reachable from the keyboard — it is a real `<button>`."
122
+ ],
123
+ "whenNotToUse": [
124
+ "Text the reader needs. Use `FieldDescription`; a footnote most people never open is the wrong home for a requirement.",
125
+ "A control's name. Use a label."
126
+ ],
127
+ "commonMistakes": [
128
+ "Rebuilding it as a `<span>` with a hover handler, which puts the explanation out of keyboard reach.",
129
+ "Filling it with a paragraph. It is a footnote marker, not a panel."
130
+ ],
119
131
  "specimens": [
120
132
  {
121
133
  "title": "Tooltip / InfoTip",
@@ -128,6 +140,5 @@
128
140
  "note": "A tooltip names a control; an InfoTip is the 13px `i` badge that explains one.",
129
141
  "interaction": "tooltips open on hover and on keyboard focus, and never on touch; the InfoTip badge is a real button."
130
142
  }
131
- ],
132
- "todo": true
143
+ ]
133
144
  }
@@ -70,10 +70,21 @@
70
70
  "language": "tsx"
71
71
  }
72
72
  ],
73
- "status": "todo-docs",
73
+ "status": "stable",
74
74
  "url": "/docs/components/inline-citation",
75
75
  "mdUrl": "/docs/components/inline-citation.md",
76
76
  "jsonUrl": "/r/components/inline-citation.json",
77
+ "whenToUse": [
78
+ "Numbered markers set in a sentence, each previewing the source behind it.",
79
+ "A preview that carries the source's domain, title and snippet without leaving the sentence."
80
+ ],
81
+ "whenNotToUse": [
82
+ "A standalone source card outside a sentence. These markers live inline."
83
+ ],
84
+ "commonMistakes": [
85
+ "Using `-1` for closed. `openIndex` is `number | null`, and `null` is the closed value.",
86
+ "Leaving `onOpenIndexChange` off. It is required, because which preview is open is state you hold rather than state the element keeps."
87
+ ],
77
88
  "specimens": [
78
89
  {
79
90
  "title": "InlineCitation",
@@ -85,6 +96,5 @@
85
96
  "note": "The marker inside the sentence, rather than the list under it: a numbered chip the paragraph flows around, and behind each one the page it stands on. `Sources` is the bibliography; this is the footnote, and the two are meant to be read together — the chip says a claim is attributable without spending a clause saying so.",
86
97
  "interaction": "each marker is a button, so the preview is reachable from a keyboard as well as a pointer; the open one inverts to the accent fill. The card is the family's one portal, and it carries the island stamp — opened inside an `AgentSurface`, it paints in that island's values rather than the document's."
87
98
  }
88
- ],
89
- "todo": true
99
+ ]
90
100
  }