@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
@@ -203,10 +203,21 @@
203
203
  "language": "tsx"
204
204
  }
205
205
  ],
206
- "status": "todo-docs",
206
+ "status": "stable",
207
207
  "url": "/docs/components/threshold-rail",
208
208
  "mdUrl": "/docs/components/threshold-rail.md",
209
209
  "jsonUrl": "/r/components/threshold-rail.json",
210
+ "whenToUse": [
211
+ "Any threshold chosen *relative to a signal* — this is the one control where the level, the peak-hold needle and the trigger point are visible at once.",
212
+ "A band rather than a point: `lower` gives the second handle, and `minGap` keeps them apart."
213
+ ],
214
+ "whenNotToUse": [
215
+ "A number with no signal behind it. A `NumberField` holds it perfectly well."
216
+ ],
217
+ "commonMistakes": [
218
+ "Writing every drag to the model. Use `onCommit` for the settled value, the way `Slider` splits change from commit.",
219
+ "Rebuilding it per panel. It exists because three near-identical threshold editors did."
220
+ ],
210
221
  "specimens": [
211
222
  {
212
223
  "title": "ThresholdRail",
@@ -218,6 +229,5 @@
218
229
  "note": "A dual-handle rail with tone zones below and above, a level bar and a peak-hold needle.",
219
230
  "interaction": "each handle is a slider with its own name; both scale up while dragging, and `onCommit` fires once on release."
220
231
  }
221
- ],
222
- "todo": true
232
+ ]
223
233
  }
@@ -48,10 +48,21 @@
48
48
  "language": "tsx"
49
49
  }
50
50
  ],
51
- "status": "todo-docs",
51
+ "status": "stable",
52
52
  "url": "/docs/components/time-boundary",
53
53
  "mdUrl": "/docs/components/time-boundary.md",
54
54
  "jsonUrl": "/r/components/time-boundary.json",
55
+ "whenToUse": [
56
+ "A transcript assembled from a row union, where the boundary has to be a member of that union — one row, placed by the caller."
57
+ ],
58
+ "whenNotToUse": [
59
+ "A message list you want to insert its own rules into. That is `DaySeparator`, which takes the whole list and places the rules itself."
60
+ ],
61
+ "commonMistakes": [
62
+ "Expecting date arithmetic. `label` is pre-formatted — `Today`, `Yesterday`, `14 March` — because this family owns no locale.",
63
+ "Skipping `dateTime`. It renders the label inside a `time` element, which is what lets a test, a scraper or a deep link find the boundary without parsing the words a human reads.",
64
+ "Worrying that the label will be read twice. It is a `role=\"separator\"` carrying the label as its accessible name, with the visible text `aria-hidden`."
65
+ ],
55
66
  "specimens": [
56
67
  {
57
68
  "title": "TimeBoundary",
@@ -63,6 +74,5 @@
63
74
  "note": "One row, placed by the caller — which is the difference between this and DaySeparator, which takes a whole message list and inserts its own. A transcript assembled from a row union needs the boundary as a member of that union. It is a role=separator carrying its label as its name, with the text inside aria-hidden so a reader hears 'Today' once rather than twice, and the caller pre-formats the words because this family owns no locale.",
64
75
  "interaction": "none. It is a rule with a word on it, and nothing here takes focus."
65
76
  }
66
- ],
67
- "todo": true
77
+ ]
68
78
  }
@@ -65,7 +65,7 @@
65
65
  "--cue-text-label",
66
66
  "--cue-text-ui"
67
67
  ],
68
- "summary": "A typed time of day, segment by segment.",
68
+ "summary": "A typed time of day, segment by segment — the sibling of `DateField`.",
69
69
  "examples": [
70
70
  {
71
71
  "title": "Usage",
@@ -73,10 +73,22 @@
73
73
  "language": "tsx"
74
74
  }
75
75
  ],
76
- "status": "todo-docs",
76
+ "status": "stable",
77
77
  "url": "/docs/components/time-field",
78
78
  "mdUrl": "/docs/components/time-field.md",
79
79
  "jsonUrl": "/r/components/time-field.json",
80
+ "whenToUse": [
81
+ "The half of a schedule a calendar cannot express.",
82
+ "A control room: pass `hourCycle={24}` for a show clock, so the AM/PM segment is not one more thing to tab through."
83
+ ],
84
+ "whenNotToUse": [
85
+ "A date. Use `DateField`.",
86
+ "A duration. A time of day and a length are different quantities."
87
+ ],
88
+ "commonMistakes": [
89
+ "Passing a string. Values are `@internationalized/date` `Time` objects.",
90
+ "Leaving the 12-hour cycle in a 24-hour room, which adds a segment nobody there reads."
91
+ ],
80
92
  "specimens": [
81
93
  {
82
94
  "title": "TimeField",
@@ -88,6 +100,5 @@
88
100
  "note": "The same field, for a clock time. Granularity decides how many segments there are.",
89
101
  "interaction": "same segment stepping; 24-hour or 12-hour follows the locale, not a prop."
90
102
  }
91
- ],
92
- "todo": true
103
+ ]
93
104
  }
@@ -158,10 +158,21 @@
158
158
  "language": "tsx"
159
159
  }
160
160
  ],
161
- "status": "todo-docs",
161
+ "status": "stable",
162
162
  "url": "/docs/components/timeline-ruler",
163
163
  "mdUrl": "/docs/components/timeline-ruler.md",
164
164
  "jsonUrl": "/r/components/timeline-ruler.json",
165
+ "whenToUse": [
166
+ "Above any arrangement or timeline the user scrolls and zooms.",
167
+ "Anywhere the tick density must stay readable across zoom levels — `targetPx` is the spacing it aims for."
168
+ ],
169
+ "whenNotToUse": [
170
+ "A fixed, short timeline. Ticks you can hard-code need no ladder."
171
+ ],
172
+ "commonMistakes": [
173
+ "Multiplying the chosen interval after picking it from the ladder, which is what made the original four times sparser than the spacing it aimed for.",
174
+ "Setting the cull margin in beats. At a tight zoom fifty beats is an enormous overdraw — `bufferPx` is in pixels for that reason."
175
+ ],
165
176
  "specimens": [
166
177
  {
167
178
  "title": "TimelineRuler",
@@ -173,6 +184,5 @@
173
184
  "note": "Zoom-adaptive tick density, targeting roughly one tick per centimetre. The interval choice is a pure exported function, so it can be tested without a DOM.",
174
185
  "interaction": "none itself; it is the coordinate system a track editor draws under. `pxPerBeat` stays in pixels on purpose."
175
186
  }
176
- ],
177
- "todo": true
187
+ ]
178
188
  }
@@ -111,10 +111,21 @@
111
111
  "language": "tsx"
112
112
  }
113
113
  ],
114
- "status": "todo-docs",
114
+ "status": "stable",
115
115
  "url": "/docs/components/timeline",
116
116
  "mdUrl": "/docs/components/timeline.md",
117
117
  "jsonUrl": "/r/components/timeline.json",
118
+ "whenToUse": [
119
+ "Events whose order in time is the point, and where the gaps between them carry meaning.",
120
+ "A history the reader scans downward rather than searches."
121
+ ],
122
+ "whenNotToUse": [
123
+ "Records the reader needs to sort, filter or compare across columns. Use a data table.",
124
+ "A sequence the user is stepping through now. Use `Stepper`."
125
+ ],
126
+ "commonMistakes": [
127
+ "Using it for an unordered list, where the rail asserts a sequence that is not there."
128
+ ],
118
129
  "specimens": [
119
130
  {
120
131
  "title": "Timeline",
@@ -126,6 +137,5 @@
126
137
  "note": "An ordered list with tone markers taken from `StatusDot`, so a timeline and a status row agree on what amber means.",
127
138
  "interaction": "none. A timeline is a record."
128
139
  }
129
- ],
130
- "todo": true
140
+ ]
131
141
  }
@@ -77,10 +77,21 @@
77
77
  "language": "tsx"
78
78
  }
79
79
  ],
80
- "status": "todo-docs",
80
+ "status": "stable",
81
81
  "url": "/docs/components/title-bar",
82
82
  "mdUrl": "/docs/components/title-bar.md",
83
83
  "jsonUrl": "/r/components/title-bar.json",
84
+ "whenToUse": [
85
+ "A desktop-shaped surface with its own window chrome.",
86
+ "Anywhere the bar must be draggable as a window handle — that is what `platformDrag` is for."
87
+ ],
88
+ "whenNotToUse": [
89
+ "A page header inside a browser tab. Use `PageShell`'s header.",
90
+ "A panel's top bar. Use `PanelHeader`."
91
+ ],
92
+ "commonMistakes": [
93
+ "Putting interactive controls inside the drag region without exempting them, so a click starts a window drag instead of pressing the control."
94
+ ],
84
95
  "specimens": [
85
96
  {
86
97
  "title": "TitleBar",
@@ -92,6 +103,5 @@
92
103
  "note": "Window furniture, sized from the chrome rung rather than the control ladder.",
93
104
  "interaction": "the drag region is inert in a browser; `platformDrag` turns it on for Electron and Tauri."
94
105
  }
95
- ],
96
- "todo": true
106
+ ]
97
107
  }
@@ -56,10 +56,20 @@
56
56
  "language": "tsx"
57
57
  }
58
58
  ],
59
- "status": "todo-docs",
59
+ "status": "stable",
60
60
  "url": "/docs/components/todo-list",
61
61
  "mdUrl": "/docs/components/todo-list.md",
62
62
  "jsonUrl": "/r/components/todo-list.json",
63
+ "whenToUse": [
64
+ "A plan the agent rewrites as it goes — items added, reordered and completed in any order between renders."
65
+ ],
66
+ "whenNotToUse": [
67
+ "A checklist the user owns and ticks. This is the agent's list as it stands right now."
68
+ ],
69
+ "commonMistakes": [
70
+ "Diffing the previous list to preserve statuses. Each item carries its own status, so pass the list as it stands.",
71
+ "Passing `revision` when you are not counting rewrites. Omit it and the header shows a plain done/total count instead."
72
+ ],
63
73
  "specimens": [
64
74
  {
65
75
  "title": "TodoList",
@@ -71,6 +81,5 @@
71
81
  "note": "The agent's own working list, which is not the plan: it is rewritten mid-run as the job turns out to be bigger. Items carry their own status, so more than one can be active, and `revision` is what makes a rewrite legible rather than alarming.",
72
82
  "interaction": "none, and deliberately: a reader who could tick these off would be editing the agent's mind."
73
83
  }
74
- ],
75
- "todo": true
84
+ ]
76
85
  }
@@ -105,7 +105,7 @@
105
105
  "--cue-text-label",
106
106
  "--cue-text-ui"
107
107
  ],
108
- "summary": "A cluster of {@link Toggle }s sharing one pressed state.",
108
+ "summary": "A cluster of toggles sharing one pressed state — and it may be empty.",
109
109
  "examples": [
110
110
  {
111
111
  "title": "Usage",
@@ -113,10 +113,22 @@
113
113
  "language": "tsx"
114
114
  }
115
115
  ],
116
- "status": "todo-docs",
116
+ "status": "stable",
117
117
  "url": "/docs/components/toggle-group",
118
118
  "mdUrl": "/docs/components/toggle-group.md",
119
119
  "jsonUrl": "/r/components/toggle-group.json",
120
+ "whenToUse": [
121
+ "A filter bar, where 'no filter' must be reachable: pressing the pressed item unpresses it.",
122
+ "Several answers at once, with `multiple`."
123
+ ],
124
+ "whenNotToUse": [
125
+ "A view switcher or anything where the answer is always one of N. Use `SegmentedControl` — offering an empty state there is a bug.",
126
+ "Actions rather than a choice. Use `ButtonGroup`."
127
+ ],
128
+ "commonMistakes": [
129
+ "Choosing between this and `SegmentedControl` on looks. The difference is not cosmetic: only one of them can be empty.",
130
+ "Setting `size` on the children. The group publishes its density rung through context."
131
+ ],
120
132
  "specimens": [
121
133
  {
122
134
  "title": "Toggle / ToggleGroup",
@@ -129,6 +141,5 @@
129
141
  "note": "A button that stays pressed, and a set of them. `aria-pressed` carries the state.",
130
142
  "interaction": "hover tints the ground; pressed is accent-soft, on the same ruling as the active tab."
131
143
  }
132
- ],
133
- "todo": true
144
+ ]
134
145
  }
@@ -111,7 +111,7 @@
111
111
  "--cue-text-label",
112
112
  "--cue-text-ui"
113
113
  ],
114
- "summary": "A two-state button: solo, mute, snap-to-grid, \"show hidden\".",
114
+ "summary": "A two-state button: solo, mute, snap-to-grid, 'show hidden'.",
115
115
  "examples": [
116
116
  {
117
117
  "title": "Usage",
@@ -119,10 +119,22 @@
119
119
  "language": "tsx"
120
120
  }
121
121
  ],
122
- "status": "todo-docs",
122
+ "status": "stable",
123
123
  "url": "/docs/components/toggle",
124
124
  "mdUrl": "/docs/components/toggle.md",
125
125
  "jsonUrl": "/r/components/toggle.json",
126
+ "whenToUse": [
127
+ "A mode you switch from a toolbar, next to other buttons.",
128
+ "Anywhere the control should read as a button that stays down rather than a setting."
129
+ ],
130
+ "whenNotToUse": [
131
+ "A setting in a list. Use `Switch`, which reads as a physical throw and announces `aria-checked`.",
132
+ "One of N. Use `SegmentedControl`."
133
+ ],
134
+ "commonMistakes": [
135
+ "Reaching for `Switch` because both are two-state. The distinction is where it lives and what it announces: `aria-pressed` for a toggle, `aria-checked` for a switch.",
136
+ "Faking the pressed state on a plain `Button` with a class. Assistive technology hears nothing."
137
+ ],
126
138
  "specimens": [
127
139
  {
128
140
  "title": "Toggle / ToggleGroup",
@@ -135,6 +147,5 @@
135
147
  "note": "A button that stays pressed, and a set of them. `aria-pressed` carries the state.",
136
148
  "interaction": "hover tints the ground; pressed is accent-soft, on the same ruling as the active tab."
137
149
  }
138
- ],
139
- "todo": true
150
+ ]
140
151
  }
@@ -90,7 +90,7 @@
90
90
  "--cue-text-label",
91
91
  "--cue-text-micro"
92
92
  ],
93
- "summary": "The grouped colour rows.",
93
+ "summary": "The grouped colour rows — stateless by design.",
94
94
  "examples": [
95
95
  {
96
96
  "title": "Usage",
@@ -98,9 +98,18 @@
98
98
  "language": "tsx"
99
99
  }
100
100
  ],
101
- "status": "todo-docs",
101
+ "status": "stable",
102
102
  "url": "/docs/components/token-editor",
103
103
  "mdUrl": "/docs/components/token-editor.md",
104
104
  "jsonUrl": "/r/components/token-editor.json",
105
- "todo": true
105
+ "whenToUse": [
106
+ "Anywhere token rows are wanted: it renders the values it is handed and reports edits back.",
107
+ "Reusing the configurator's editing surface without adopting its override model."
108
+ ],
109
+ "whenNotToUse": [
110
+ "Owning state. It has none; the caller owns the override model."
111
+ ],
112
+ "commonMistakes": [
113
+ "Importing it expecting `react-aria-components` to come along. That is an **optional peer** — install it where you use these rows."
114
+ ]
106
115
  }
@@ -127,10 +127,21 @@
127
127
  "language": "tsx"
128
128
  }
129
129
  ],
130
- "status": "todo-docs",
130
+ "status": "stable",
131
131
  "url": "/docs/components/tool-call",
132
132
  "mdUrl": "/docs/components/tool-call.md",
133
133
  "jsonUrl": "/r/components/tool-call.json",
134
+ "whenToUse": [
135
+ "A single tool call in a transcript, collapsed to a row with its name, a query chip and a status."
136
+ ],
137
+ "whenNotToUse": [
138
+ "Several calls issued together, or a call that failed. The trigger here has two states — a spinner while `running`, a success check otherwise."
139
+ ],
140
+ "commonMistakes": [
141
+ "Passing objects to `request` and `result`. Both are strings shown in the expanded disclosure, so serialise before you pass.",
142
+ "Setting `activeLabel` to the same words as `label`. The active one is the verb shown with a shimmer while the tool runs — `Searching the docs` against `Searched`.",
143
+ "Owning `open` inside. It is required alongside `onOpenChange`, so the disclosure belongs to the caller."
144
+ ],
134
145
  "specimens": [
135
146
  {
136
147
  "title": "ToolCall",
@@ -142,6 +153,5 @@
142
153
  "note": "One invocation, with the request and the result behind a disclosure. While it runs the verb shimmers and the row is wider; when it settles the label swaps, the box shrinks to fit and a check lands. Both payloads are printed as text, never parsed.",
143
154
  "interaction": "the whole trigger row is the toggle, and it takes focus. The check fades in rather than appearing, so a settled call reads as having settled."
144
155
  }
145
- ],
146
- "todo": true
156
+ ]
147
157
  }
@@ -113,7 +113,7 @@
113
113
  "--cue-text-label",
114
114
  "--cue-text-ui"
115
115
  ],
116
- "summary": "One call failed.",
116
+ "summary": "One call failed: the error, the attempt count, and a retry that doesn't restart the turn.",
117
117
  "examples": [
118
118
  {
119
119
  "title": "Usage",
@@ -121,10 +121,21 @@
121
121
  "language": "tsx"
122
122
  }
123
123
  ],
124
- "status": "todo-docs",
124
+ "status": "stable",
125
125
  "url": "/docs/components/tool-error",
126
126
  "mdUrl": "/docs/components/tool-error.md",
127
127
  "jsonUrl": "/r/components/tool-error.json",
128
+ "whenToUse": [
129
+ "A single failed tool call inside a turn that can carry on — retry the call, or skip it and let the turn continue."
130
+ ],
131
+ "whenNotToUse": [
132
+ "A reworded, friendly error. `message` is the raw error, shown in mono rather than reworded."
133
+ ],
134
+ "commonMistakes": [
135
+ "Wiring `onRetry` to re-run the turn. It runs the call again without restarting it.",
136
+ "Leaving `retrying` false during the retry, so the control stays live instead of swapping for a spinner and disabling itself.",
137
+ "Passing `attempt` without a truthful `maxAttempts`. The pair is what tells the reader whether the runtime will try again."
138
+ ],
128
139
  "specimens": [
129
140
  {
130
141
  "title": "ToolError",
@@ -136,6 +147,5 @@
136
147
  "note": "One call failed, and the turn did not. The message is the raw error in mono rather than a reworded one, the attempt count is the runtime's, and Retry re-runs the call in place. Skip is disabled unless the host offers one, because a control that cannot do anything should say so.",
137
148
  "interaction": "Retry raises the attempt count here; Skip puts it back. While retrying, the control is a spinner and takes no clicks."
138
149
  }
139
- ],
140
- "todo": true
150
+ ]
141
151
  }
@@ -77,10 +77,20 @@
77
77
  "language": "tsx"
78
78
  }
79
79
  ],
80
- "status": "todo-docs",
80
+ "status": "stable",
81
81
  "url": "/docs/components/tool-group",
82
82
  "mdUrl": "/docs/components/tool-group.md",
83
83
  "jsonUrl": "/r/components/tool-group.json",
84
+ "whenToUse": [
85
+ "A parallel fan-out — `Read 4 files in parallel` — where the summary is enough until it is not."
86
+ ],
87
+ "whenNotToUse": [
88
+ "Calls that ran one after another for different reasons. This is about calls issued together, summarised as one line."
89
+ ],
90
+ "commonMistakes": [
91
+ "Writing your own count into `label`. The header summarises the calls itself: progress while any run, failures if any failed, otherwise the count.",
92
+ "Owning `open` inside. It is required, with `onOpenChange` reporting the toggle."
93
+ ],
84
94
  "specimens": [
85
95
  {
86
96
  "title": "ToolGroup",
@@ -92,6 +102,5 @@
92
102
  "note": "Calls that went out together, rolled up to one row. The summary counts rather than describes: progress while any are still out, the failure count if any failed, otherwise the total.",
93
103
  "interaction": "the header is one button with aria-expanded; the rows underneath are a list, not a menu."
94
104
  }
95
- ],
96
- "todo": true
105
+ ]
97
106
  }
@@ -119,7 +119,7 @@
119
119
  "--cue-text-body",
120
120
  "--cue-text-label"
121
121
  ],
122
- "summary": "A whole working session summarized as verbs, targets, and file stats.",
122
+ "summary": "A whole working session summarised as verbs, targets, and file stats.",
123
123
  "examples": [
124
124
  {
125
125
  "title": "Usage",
@@ -127,10 +127,21 @@
127
127
  "language": "tsx"
128
128
  }
129
129
  ],
130
- "status": "todo-docs",
130
+ "status": "stable",
131
131
  "url": "/docs/components/tool-timeline",
132
132
  "mdUrl": "/docs/components/tool-timeline.md",
133
133
  "jsonUrl": "/r/components/tool-timeline.json",
134
+ "whenToUse": [
135
+ "A session's worth of work under one trigger: verbs and chips as steps, with per-file addition and removal counts beneath them."
136
+ ],
137
+ "whenNotToUse": [
138
+ "A single live call. This is the session summary, with a resting label for after and a live one for during."
139
+ ],
140
+ "commonMistakes": [
141
+ "Passing the same string as `restingLabel` and `activeLabel`. One is `Worked for 12s` once streaming stops; the other is the full-size live label, `Working for 12s`.",
142
+ "Slicing `steps` to what has been revealed. `visibleSteps` is how many from the start are shown.",
143
+ "Leaving `stats` out. It is required, and it is the per-file added and removed counts listed under the steps."
144
+ ],
134
145
  "specimens": [
135
146
  {
136
147
  "title": "ToolTimeline",
@@ -142,6 +153,5 @@
142
153
  "note": "A whole working session folded into one line — `Read 4 files, ran 1 command` — that opens into the verbs, the things they were done to, and the files that ended up changed. It is the summary a transcript gets *after* the fact, where `ToolCall` is what it looks like during.",
143
154
  "interaction": "the trigger is a labelled button taking cue's focus ring; the chevron turns with the panel, which animates its own height through Base UI. While streaming the label shimmers and the live step's verb shimmers with it."
144
155
  }
145
- ],
146
- "todo": true
156
+ ]
147
157
  }
@@ -164,7 +164,7 @@
164
164
  "--cue-surface-2",
165
165
  "--cue-text-ui"
166
166
  ],
167
- "summary": "The strip of controls across the top of a view.",
167
+ "summary": "The strip of controls across the top of a view — one tab stop, arrow keys inside.",
168
168
  "examples": [
169
169
  {
170
170
  "title": "Usage",
@@ -172,10 +172,21 @@
172
172
  "language": "tsx"
173
173
  }
174
174
  ],
175
- "status": "todo-docs",
175
+ "status": "stable",
176
176
  "url": "/docs/components/toolbar",
177
177
  "mdUrl": "/docs/components/toolbar.md",
178
178
  "jsonUrl": "/r/components/toolbar.json",
179
+ "whenToUse": [
180
+ "Any row of controls acting on the view beneath it.",
181
+ "Anywhere a keyboard user should reach the bar once and move within it, rather than tabbing through every button."
182
+ ],
183
+ "whenNotToUse": [
184
+ "A page header. Use `PanelHeader` or `TitleBar`.",
185
+ "A set of choices. Use `SegmentedControl` or `ToggleGroup`."
186
+ ],
187
+ "commonMistakes": [
188
+ "Hand-rolling it as a flex row of buttons, which puts every button in the tab order and loses the ARIA toolbar pattern that is the entire point."
189
+ ],
179
190
  "specimens": [
180
191
  {
181
192
  "title": "Toolbar",
@@ -187,6 +198,5 @@
187
198
  "note": "Borderless text-colour feedback: a pressed tool changes ink, not ground. Boxed to 16rem below, the bar scrolls rather than clipping — it stays one chrome rung tall, because a second row would be stolen from the work area.",
188
199
  "interaction": "hover lifts the ink to `--cue-fg`; arrow keys move between tools and reach the ones off-screen, Tab leaves the toolbar."
189
200
  }
190
- ],
191
- "todo": true
201
+ ]
192
202
  }
@@ -64,10 +64,20 @@
64
64
  "language": "tsx"
65
65
  }
66
66
  ],
67
- "status": "todo-docs",
67
+ "status": "stable",
68
68
  "url": "/docs/components/trace-waterfall",
69
69
  "mdUrl": "/docs/components/trace-waterfall.md",
70
70
  "jsonUrl": "/r/components/trace-waterfall.json",
71
+ "whenToUse": [
72
+ "A run's spans on a shared axis, where the question is which part took the time."
73
+ ],
74
+ "whenNotToUse": [
75
+ "A tree you expect to be laid out from parent links. The list is flat, in start order, and nesting comes from each span's own depth."
76
+ ],
77
+ "commonMistakes": [
78
+ "Passing the widest span's duration as `totalMs`. Bars are positioned against the axis you give, not against the widest span, so a wrong total silently rescales every bar.",
79
+ "Sorting spans by duration. Start order is what makes a waterfall readable."
80
+ ],
71
81
  "specimens": [
72
82
  {
73
83
  "title": "TraceWaterfall",
@@ -79,6 +89,5 @@
79
89
  "note": "Where the run's time actually went. Bars are positioned against `totalMs` rather than against the widest span, which is the difference between a trace and a bar chart: a 20ms retry at the end stays 20ms wide.",
80
90
  "interaction": "none. Running spans pulse in the stream hue, failed ones are red, and both are spelled out in the row rather than only tinted."
81
91
  }
82
- ],
83
- "todo": true
92
+ ]
84
93
  }
@@ -78,10 +78,21 @@
78
78
  "language": "tsx"
79
79
  }
80
80
  ],
81
- "status": "todo-docs",
81
+ "status": "stable",
82
82
  "url": "/docs/components/tree-visibility-toggle",
83
83
  "mdUrl": "/docs/components/tree-visibility-toggle.md",
84
84
  "jsonUrl": "/r/components/tree-visibility-toggle.json",
85
+ "whenToUse": [
86
+ "A rig or scene graph where 'there but out of the way' is a real answer.",
87
+ "Anywhere ghosting keeps a reference visible while the user works behind it."
88
+ ],
89
+ "whenNotToUse": [
90
+ "A two-answer visibility flag. Use `Checkbox` or `Switch`; a third state nobody needs is a click nobody wants."
91
+ ],
92
+ "commonMistakes": [
93
+ "Collapsing ghost into hidden. That is what makes people toggle things off and lose their bearings — ghost is the state that earns the extra step.",
94
+ "Relying on the glyph alone. Pass `labels` so each state has a name."
95
+ ],
85
96
  "specimens": [
86
97
  {
87
98
  "title": "Tree",
@@ -94,6 +105,5 @@
94
105
  "note": "Roving tabindex, `└` indent guides, a hover-revealed control slot and the three-state visibility toggle.",
95
106
  "interaction": "arrow keys move and expand, Enter selects; the row controls appear on hover and stay put for keyboard users."
96
107
  }
97
- ],
98
- "todo": true
108
+ ]
99
109
  }
@@ -161,10 +161,22 @@
161
161
  "language": "tsx"
162
162
  }
163
163
  ],
164
- "status": "todo-docs",
164
+ "status": "stable",
165
165
  "url": "/docs/components/tree",
166
166
  "mdUrl": "/docs/components/tree.md",
167
167
  "jsonUrl": "/r/components/tree.json",
168
+ "whenToUse": [
169
+ "Nested structure the user expands, collapses and navigates by keyboard.",
170
+ "Large outlines — it is one tab stop with arrow keys inside, so eighty rows never mean eighty presses of Tab."
171
+ ],
172
+ "whenNotToUse": [
173
+ "A flat list. Use `Stack` of `Item`, or a table.",
174
+ "Navigation between routes. Use `Sidebar`."
175
+ ],
176
+ "commonMistakes": [
177
+ "Rebuilding it from nested `<ul>`s with click handlers. The cost is in three details together — roving tabindex, a flat DOM carrying `aria-level` / `aria-posinset` / `aria-setsize`, and the keyboard contract — and a hand-rolled version gets at most two.",
178
+ "Putting each row in the tab order, which is the defect the roving tabindex exists to prevent."
179
+ ],
168
180
  "specimens": [
169
181
  {
170
182
  "title": "Tree",
@@ -177,6 +189,5 @@
177
189
  "note": "Roving tabindex, `└` indent guides, a hover-revealed control slot and the three-state visibility toggle.",
178
190
  "interaction": "arrow keys move and expand, Enter selects; the row controls appear on hover and stay put for keyboard users."
179
191
  }
180
- ],
181
- "todo": true
192
+ ]
182
193
  }
@@ -113,10 +113,22 @@
113
113
  "language": "tsx"
114
114
  }
115
115
  ],
116
- "status": "todo-docs",
116
+ "status": "stable",
117
117
  "url": "/docs/components/turn-footer",
118
118
  "mdUrl": "/docs/components/turn-footer.md",
119
119
  "jsonUrl": "/r/components/turn-footer.json",
120
+ "whenToUse": [
121
+ "Under a settled turn, with only the controls the product actually has — passing no handler draws no button.",
122
+ "A read-only shared transcript: one `onCopy` and a timestamp, and nothing else is drawn."
123
+ ],
124
+ "whenNotToUse": [
125
+ "A row that should appear on hover. Revealing is a decision about the turn, not this row — two lines of CSS keyed off the turn's own hover state, and instant rather than a fade, which reads as lag."
126
+ ],
127
+ "commonMistakes": [
128
+ "Passing every handler because the four look like one set. They are not: a footer that drew disabled controls for what a product lacks would be a row of things nobody can press.",
129
+ "Setting `copied` on the press rather than on the clipboard write. The glyph crossfades to a check and stays there until the caller clears it.",
130
+ "Restating all four strings to localise two. `labels` is partial, merged over `TURN_ACTION_LABELS`."
131
+ ],
120
132
  "specimens": [
121
133
  {
122
134
  "title": "TurnFooter",
@@ -128,6 +140,5 @@
128
140
  "note": "The row under a finished turn: copy, reply, fork, and when it happened. Every control is opt-in, because the four are not one set — a read-only shared transcript has a copy button and nothing else, and a footer that drew disabled controls would be a row of things nobody can press. The timestamp is three levels at once: 2m ago at a glance, the exact time on the title where it costs nothing, and how long the work took beside it, which is the only one of the three that is about the agent rather than the clock.",
129
141
  "interaction": "four named icon buttons; copy crossfades to a check in place and renames itself Copied. The four names come from TURN_ACTION_LABELS and a partial override merges over it, so localising two of them does not mean restating the other three."
130
142
  }
131
- ],
132
- "todo": true
143
+ ]
133
144
  }