@cueplusplus/ui 0.14.0 → 0.15.0

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 (352) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/dist/agent-runtime/tool-call-card.js +1 -1
  3. package/dist/chat/message.js +1 -1
  4. package/dist/chrome/band.js +10 -4
  5. package/dist/chrome/eyebrow.js +1 -1
  6. package/dist/chrome/footer.js +1 -1
  7. package/dist/chrome/section-header.js +1 -1
  8. package/dist/configurator/configurator.js +1 -1
  9. package/dist/configurator/export-dialog.js +1 -1
  10. package/dist/configurator/panel-sections.js +1 -1
  11. package/dist/configurator/token-editor.js +1 -1
  12. package/dist/date/calendar.js +2 -2
  13. package/dist/elements/context-usage.js +3 -3
  14. package/dist/elements/transcript-rules.js +1 -1
  15. package/dist/forms/field.js +1 -1
  16. package/dist/forms/slider.js +1 -1
  17. package/dist/instruments/code-block.js +1 -1
  18. package/dist/instruments/ledger.js +1 -1
  19. package/dist/instruments/progress.js +1 -1
  20. package/dist/instruments/stat.js +1 -1
  21. package/dist/instruments/table.js +2 -2
  22. package/dist/instruments/terminal-frame.js +1 -1
  23. package/dist/layout/_ground.js +1 -1
  24. package/dist/layout/collapsible.js +1 -1
  25. package/dist/layout/description-list.js +1 -1
  26. package/dist/layout/preview.d.ts +13 -1
  27. package/dist/layout/preview.js +16 -9
  28. package/dist/layout/sidebar.js +1 -1
  29. package/dist/layout/stepper.js +1 -1
  30. package/dist/overlays/_surface.d.ts +1 -1
  31. package/dist/overlays/_surface.js +1 -1
  32. package/dist/overlays/command-palette.js +1 -1
  33. package/dist/overlays/toast.js +1 -1
  34. package/dist/primitives/chip.d.ts +1 -1
  35. package/dist/primitives/chip.js +2 -2
  36. package/dist/system/density.d.ts +11 -2
  37. package/dist/system/density.js +29 -9
  38. package/dist/system/portal.js +8 -2
  39. package/dist/system/prepaint.d.ts +18 -1
  40. package/dist/system/prepaint.js +8 -2
  41. package/dist/system/theme-provider.d.ts +42 -5
  42. package/dist/system/theme-provider.js +84 -19
  43. package/dist/system/vocabulary.d.ts +1 -1
  44. package/dist/system/vocabulary.js +14 -2
  45. package/manifest/components/accordion.json +16 -4
  46. package/manifest/components/activity-graph.json +15 -3
  47. package/manifest/components/agent-card.json +15 -3
  48. package/manifest/components/agent-handoff.json +14 -3
  49. package/manifest/components/agent-mode-badge.json +12 -3
  50. package/manifest/components/agent-pile.json +13 -3
  51. package/manifest/components/agent-plan.json +13 -3
  52. package/manifest/components/agent-status.json +14 -3
  53. package/manifest/components/agent-surface.json +12 -3
  54. package/manifest/components/alert-dialog.json +16 -4
  55. package/manifest/components/animated-number.json +12 -3
  56. package/manifest/components/app-window-frame.json +13 -3
  57. package/manifest/components/approval-card.json +14 -3
  58. package/manifest/components/artifact-card.json +14 -3
  59. package/manifest/components/ask-box.json +13 -3
  60. package/manifest/components/audience-icon.json +11 -3
  61. package/manifest/components/autocomplete.json +17 -4
  62. package/manifest/components/avatar-group.json +15 -4
  63. package/manifest/components/avatar.json +16 -4
  64. package/manifest/components/background-inbox.json +14 -3
  65. package/manifest/components/band.json +15 -5
  66. package/manifest/components/breadcrumb.json +14 -3
  67. package/manifest/components/button-group.json +13 -3
  68. package/manifest/components/calendar.json +18 -5
  69. package/manifest/components/canvas-split-body.json +13 -3
  70. package/manifest/components/canvas-split-document.json +11 -3
  71. package/manifest/components/canvas-split-header.json +13 -3
  72. package/manifest/components/canvas-split-line.json +13 -3
  73. package/manifest/components/canvas-split-message.json +13 -3
  74. package/manifest/components/canvas-split-thread.json +11 -3
  75. package/manifest/components/canvas-split.json +13 -3
  76. package/manifest/components/card.json +14 -3
  77. package/manifest/components/carousel.json +12 -3
  78. package/manifest/components/catalogue-icon.json +11 -3
  79. package/manifest/components/channel-beta-icon.json +11 -3
  80. package/manifest/components/channel-matrix.json +13 -4
  81. package/manifest/components/channel-released-icon.json +11 -3
  82. package/manifest/components/chart-container.json +11 -3
  83. package/manifest/components/chart-ramp.json +12 -3
  84. package/manifest/components/chart-swatch.json +11 -3
  85. package/manifest/components/chart-tooltip-content.json +14 -5
  86. package/manifest/components/chart.json +14 -3
  87. package/manifest/components/chat-empty-state.json +13 -3
  88. package/manifest/components/chat-panel-assistant-message.json +11 -3
  89. package/manifest/components/chat-panel-composer.json +11 -3
  90. package/manifest/components/chat-panel-messages.json +11 -3
  91. package/manifest/components/chat-panel-typing.json +11 -3
  92. package/manifest/components/chat-panel-user-message.json +11 -3
  93. package/manifest/components/chat-panel.json +13 -3
  94. package/manifest/components/checkbox-group.json +15 -4
  95. package/manifest/components/checkpoint-history.json +13 -3
  96. package/manifest/components/chip.json +1 -0
  97. package/manifest/components/clamp.json +12 -3
  98. package/manifest/components/cli-tool-icon.json +11 -3
  99. package/manifest/components/code-block.json +2 -1
  100. package/manifest/components/code-diff.json +14 -3
  101. package/manifest/components/code-runner.json +13 -3
  102. package/manifest/components/collapsible.json +15 -4
  103. package/manifest/components/color-area.json +12 -4
  104. package/manifest/components/color-field.json +12 -3
  105. package/manifest/components/color-picker.json +14 -4
  106. package/manifest/components/color-slider.json +12 -3
  107. package/manifest/components/color-swatch.json +13 -3
  108. package/manifest/components/colors-section.json +13 -4
  109. package/manifest/components/combobox.json +17 -5
  110. package/manifest/components/command-palette.json +2 -1
  111. package/manifest/components/compaction-row.json +12 -3
  112. package/manifest/components/comparison-card.json +12 -3
  113. package/manifest/components/composer-actions.json +11 -3
  114. package/manifest/components/composer-attach-button.json +11 -3
  115. package/manifest/components/composer-attachment-chip.json +13 -3
  116. package/manifest/components/composer-attachments.json +11 -3
  117. package/manifest/components/composer-bar.json +12 -3
  118. package/manifest/components/composer-command-item.json +13 -3
  119. package/manifest/components/composer-context.json +13 -3
  120. package/manifest/components/composer-input.json +11 -3
  121. package/manifest/components/composer-menu-item.json +12 -3
  122. package/manifest/components/composer-menu.json +13 -3
  123. package/manifest/components/composer-model-item.json +13 -3
  124. package/manifest/components/composer-model-trigger.json +13 -3
  125. package/manifest/components/composer-person-item.json +13 -3
  126. package/manifest/components/composer-send.json +13 -3
  127. package/manifest/components/composer-toolbar.json +11 -3
  128. package/manifest/components/composer-voice-button.json +11 -3
  129. package/manifest/components/composer-voice.json +13 -3
  130. package/manifest/components/composer.json +14 -4
  131. package/manifest/components/computer-use.json +13 -3
  132. package/manifest/components/confidence-marker.json +11 -3
  133. package/manifest/components/connection-state.json +12 -3
  134. package/manifest/components/container.json +12 -3
  135. package/manifest/components/context-breakdown.json +12 -4
  136. package/manifest/components/context-menu.json +16 -5
  137. package/manifest/components/context-usage.json +15 -4
  138. package/manifest/components/conversation-search.json +13 -3
  139. package/manifest/components/copy-button.json +14 -3
  140. package/manifest/components/cost-meter.json +12 -3
  141. package/manifest/components/cue-portal-frame.json +12 -3
  142. package/manifest/components/data-table-pagination.json +13 -3
  143. package/manifest/components/data-table-toolbar.json +12 -3
  144. package/manifest/components/date-field.json +12 -3
  145. package/manifest/components/date-picker.json +13 -3
  146. package/manifest/components/date-range-picker.json +11 -3
  147. package/manifest/components/day-separator.json +12 -3
  148. package/manifest/components/delegation-card.json +14 -4
  149. package/manifest/components/density.json +25 -2
  150. package/manifest/components/description-list.json +17 -5
  151. package/manifest/components/diagram.json +13 -3
  152. package/manifest/components/dialog.json +2 -1
  153. package/manifest/components/disclosure.json +17 -5
  154. package/manifest/components/dmx-bar.json +14 -4
  155. package/manifest/components/dmx-strip.json +13 -4
  156. package/manifest/components/document-reference.json +13 -3
  157. package/manifest/components/draft-restore.json +13 -3
  158. package/manifest/components/drawer.json +15 -5
  159. package/manifest/components/dropdown-menu.json +2 -1
  160. package/manifest/components/edit-message.json +13 -3
  161. package/manifest/components/elements-command-palette.json +13 -3
  162. package/manifest/components/elements-composer.json +13 -3
  163. package/manifest/components/elements-data-table.json +11 -3
  164. package/manifest/components/elements-timeline.json +13 -3
  165. package/manifest/components/elicitation-form.json +13 -3
  166. package/manifest/components/empty-state-composer.json +11 -3
  167. package/manifest/components/empty-state-greeting.json +11 -3
  168. package/manifest/components/empty-state-suggestion.json +11 -3
  169. package/manifest/components/empty-state-suggestions.json +11 -3
  170. package/manifest/components/empty-state.json +15 -4
  171. package/manifest/components/end-of-turn-summary.json +14 -3
  172. package/manifest/components/env-var-input.json +15 -4
  173. package/manifest/components/error-state.json +13 -3
  174. package/manifest/components/export-dialog.json +12 -3
  175. package/manifest/components/eyebrow.json +16 -5
  176. package/manifest/components/feedback-dialog.json +13 -3
  177. package/manifest/components/field-description.json +17 -5
  178. package/manifest/components/field-error.json +17 -5
  179. package/manifest/components/field-label.json +17 -5
  180. package/manifest/components/field.json +2 -1
  181. package/manifest/components/file-tree.json +13 -3
  182. package/manifest/components/file-upload.json +14 -4
  183. package/manifest/components/flow-background.json +11 -3
  184. package/manifest/components/flow-controls.json +11 -3
  185. package/manifest/components/flow-graph.json +13 -3
  186. package/manifest/components/folder-icon.json +12 -3
  187. package/manifest/components/footer.json +1 -0
  188. package/manifest/components/frac.json +11 -3
  189. package/manifest/components/frames.json +2 -1
  190. package/manifest/components/generation-loader.json +13 -3
  191. package/manifest/components/generative-ui.json +16 -4
  192. package/manifest/components/grid.json +14 -3
  193. package/manifest/components/group-bar.json +13 -3
  194. package/manifest/components/guardrail-notice.json +13 -3
  195. package/manifest/components/hover-card.json +16 -5
  196. package/manifest/components/icon-button.json +15 -3
  197. package/manifest/components/image-generation.json +13 -3
  198. package/manifest/components/info-tip.json +15 -4
  199. package/manifest/components/inline-citation.json +13 -3
  200. package/manifest/components/input-group.json +15 -4
  201. package/manifest/components/item.json +15 -4
  202. package/manifest/components/job-progress.json +14 -3
  203. package/manifest/components/kbd.json +14 -3
  204. package/manifest/components/launcher-bubble.json +14 -3
  205. package/manifest/components/ledger.json +2 -1
  206. package/manifest/components/link.json +13 -3
  207. package/manifest/components/live-region-announcer.json +16 -4
  208. package/manifest/components/log-viewer.json +15 -3
  209. package/manifest/components/map-answer.json +13 -3
  210. package/manifest/components/markdown-text.json +16 -4
  211. package/manifest/components/math-block.json +13 -3
  212. package/manifest/components/mcp-server-icon.json +12 -3
  213. package/manifest/components/mcp-server-panel.json +13 -3
  214. package/manifest/components/memory-chips.json +12 -3
  215. package/manifest/components/menubar.json +15 -4
  216. package/manifest/components/message-actions.json +14 -4
  217. package/manifest/components/message-attachments.json +12 -3
  218. package/manifest/components/message-branches.json +12 -3
  219. package/manifest/components/message-list.json +12 -3
  220. package/manifest/components/message-pair.json +12 -3
  221. package/manifest/components/message-queue.json +13 -3
  222. package/manifest/components/message-timing.json +13 -3
  223. package/manifest/components/message.json +14 -4
  224. package/manifest/components/mobile-composer.json +14 -3
  225. package/manifest/components/model-picker.json +12 -3
  226. package/manifest/components/multi-select.json +18 -5
  227. package/manifest/components/musical-time-input.json +11 -3
  228. package/manifest/components/navigation-menu.json +15 -4
  229. package/manifest/components/node-card.json +11 -3
  230. package/manifest/components/node-handle.json +11 -3
  231. package/manifest/components/number-field.json +15 -3
  232. package/manifest/components/number-ticker.json +12 -3
  233. package/manifest/components/onboarding.json +12 -3
  234. package/manifest/components/otp-field.json +14 -3
  235. package/manifest/components/page-shell.json +14 -4
  236. package/manifest/components/pagination.json +14 -3
  237. package/manifest/components/panel-header.json +14 -4
  238. package/manifest/components/password-input.json +15 -4
  239. package/manifest/components/permission-grant.json +13 -3
  240. package/manifest/components/permission-scopes.json +14 -3
  241. package/manifest/components/piano-keyboard.json +11 -3
  242. package/manifest/components/popover.json +2 -1
  243. package/manifest/components/preset-section.json +13 -4
  244. package/manifest/components/preview.json +15 -1
  245. package/manifest/components/progress.json +16 -4
  246. package/manifest/components/prompt-library.json +12 -3
  247. package/manifest/components/queue-dock.json +14 -3
  248. package/manifest/components/quota-banner.json +12 -3
  249. package/manifest/components/quote-reply.json +12 -3
  250. package/manifest/components/radio-group.json +15 -4
  251. package/manifest/components/radio.json +15 -4
  252. package/manifest/components/rating.json +15 -4
  253. package/manifest/components/read-aloud.json +13 -3
  254. package/manifest/components/reasoning-effort.json +12 -3
  255. package/manifest/components/reasoning-panel.json +13 -3
  256. package/manifest/components/recommendation-card.json +12 -3
  257. package/manifest/components/regenerate-menu.json +12 -3
  258. package/manifest/components/replay-player.json +14 -3
  259. package/manifest/components/research-report.json +12 -3
  260. package/manifest/components/resizable.json +13 -3
  261. package/manifest/components/retrieval-chunks.json +13 -3
  262. package/manifest/components/revert-dock.json +14 -3
  263. package/manifest/components/reviewable-diff.json +12 -3
  264. package/manifest/components/risk-badge.json +14 -3
  265. package/manifest/components/schedule-card.json +12 -3
  266. package/manifest/components/score-breakdown.json +13 -3
  267. package/manifest/components/scroll-anchor.json +12 -3
  268. package/manifest/components/scroll-area.json +13 -3
  269. package/manifest/components/scrollable-tabs-list.json +14 -4
  270. package/manifest/components/seam-cell.json +13 -4
  271. package/manifest/components/seam-grid.json +14 -3
  272. package/manifest/components/seam-list.json +13 -3
  273. package/manifest/components/search-input.json +15 -4
  274. package/manifest/components/section-header.json +16 -4
  275. package/manifest/components/segmented-control.json +15 -3
  276. package/manifest/components/separator.json +14 -3
  277. package/manifest/components/settings-panel.json +13 -3
  278. package/manifest/components/shape-section.json +13 -4
  279. package/manifest/components/shared-conversation.json +12 -3
  280. package/manifest/components/sheet.json +16 -5
  281. package/manifest/components/shimmer-label.json +12 -3
  282. package/manifest/components/sidebar.json +17 -5
  283. package/manifest/components/signal-edge.json +13 -4
  284. package/manifest/components/skeleton.json +16 -4
  285. package/manifest/components/skill-icon.json +12 -3
  286. package/manifest/components/slider.json +16 -4
  287. package/manifest/components/sources.json +12 -3
  288. package/manifest/components/sparkline.json +14 -4
  289. package/manifest/components/speaker-identity.json +11 -3
  290. package/manifest/components/spec-sheet.json +13 -4
  291. package/manifest/components/spectrum-visualizer.json +11 -3
  292. package/manifest/components/spinner.json +16 -4
  293. package/manifest/components/stack-icon.json +12 -3
  294. package/manifest/components/stack.json +14 -3
  295. package/manifest/components/stacks-matrix-icon.json +11 -3
  296. package/manifest/components/stat.json +15 -3
  297. package/manifest/components/status-dot.json +16 -4
  298. package/manifest/components/stepper.json +17 -5
  299. package/manifest/components/stopped-run.json +13 -4
  300. package/manifest/components/streaming-text.json +12 -3
  301. package/manifest/components/sub.json +11 -3
  302. package/manifest/components/subagent-list.json +13 -3
  303. package/manifest/components/suggestions.json +12 -3
  304. package/manifest/components/sup.json +11 -3
  305. package/manifest/components/swap-label.json +12 -3
  306. package/manifest/components/table-scroll-region.json +2 -1
  307. package/manifest/components/table.json +2 -1
  308. package/manifest/components/tags-input.json +17 -5
  309. package/manifest/components/tail-status.json +14 -3
  310. package/manifest/components/terminal-block.json +13 -3
  311. package/manifest/components/terminal-frame.json +15 -3
  312. package/manifest/components/textarea.json +15 -4
  313. package/manifest/components/theme-configurator.json +14 -4
  314. package/manifest/components/theme-provider.json +14 -1
  315. package/manifest/components/thinking-indicator.json +12 -3
  316. package/manifest/components/thread-list.json +12 -3
  317. package/manifest/components/thread-search.json +12 -3
  318. package/manifest/components/threshold-rail.json +13 -3
  319. package/manifest/components/time-boundary.json +15 -4
  320. package/manifest/components/time-field.json +15 -4
  321. package/manifest/components/timeline-ruler.json +13 -3
  322. package/manifest/components/timeline.json +13 -3
  323. package/manifest/components/title-bar.json +13 -3
  324. package/manifest/components/toast.json +2 -0
  325. package/manifest/components/todo-list.json +12 -3
  326. package/manifest/components/toggle-group.json +15 -4
  327. package/manifest/components/toggle.json +15 -4
  328. package/manifest/components/token-editor.json +14 -4
  329. package/manifest/components/tool-call-card.json +2 -1
  330. package/manifest/components/tool-call.json +13 -3
  331. package/manifest/components/tool-error.json +14 -4
  332. package/manifest/components/tool-group.json +12 -3
  333. package/manifest/components/tool-timeline.json +14 -4
  334. package/manifest/components/toolbar.json +14 -4
  335. package/manifest/components/tooltip.json +2 -1
  336. package/manifest/components/trace-waterfall.json +12 -3
  337. package/manifest/components/tree-visibility-toggle.json +13 -3
  338. package/manifest/components/tree.json +14 -3
  339. package/manifest/components/turn-footer.json +14 -3
  340. package/manifest/components/two-step-button.json +14 -3
  341. package/manifest/components/typing-indicator.json +12 -3
  342. package/manifest/components/universe-grid.json +14 -4
  343. package/manifest/components/unread-divider.json +16 -5
  344. package/manifest/components/usage-chart.json +14 -3
  345. package/manifest/components/verdict-row.json +14 -3
  346. package/manifest/components/voice-conversation.json +13 -3
  347. package/manifest/components/web-preview.json +13 -3
  348. package/manifest/components/web-search.json +13 -3
  349. package/manifest/components/work-collapse.json +15 -4
  350. package/manifest/manifest.json +667 -667
  351. package/manifest/tokens.json +29 -2
  352. package/package.json +2 -2
@@ -28,9 +28,10 @@
28
28
  "tokensUsed": [
29
29
  "--cue-accent",
30
30
  "--cue-border",
31
- "--cue-fg-subtle"
31
+ "--cue-fg-subtle",
32
+ "--cue-tracking-caps"
32
33
  ],
33
- "summary": "The rule that says \"you have read down to here\": an accented line with its label at the end.",
34
+ "summary": "The rule that says you have read down to here: an accented line with its label at the end.",
34
35
  "examples": [
35
36
  {
36
37
  "title": "Usage",
@@ -38,10 +39,21 @@
38
39
  "language": "tsx"
39
40
  }
40
41
  ],
41
- "status": "todo-docs",
42
+ "status": "stable",
42
43
  "url": "/docs/components/unread-divider",
43
44
  "mdUrl": "/docs/components/unread-divider.md",
44
45
  "jsonUrl": "/r/components/unread-divider.json",
46
+ "whenToUse": [
47
+ "Marking where a reader was in a transcript. The caller decides where it goes and when it leaves."
48
+ ],
49
+ "whenNotToUse": [
50
+ "A marker that follows the last-seen message. One that chased it would vanish the moment it appeared, which is why this takes no messages, no counts and no scroll position."
51
+ ],
52
+ "commonMistakes": [
53
+ "Expecting it to move itself or to know anything about scrolling. The row is only ever the mark.",
54
+ "Writing a sentence into `label`. It defaults to `New` — one word, because the row is a place marker and not an announcement, and the sentence a reader wants is the one below the rule.",
55
+ "Centring it or neutralising its colour. It is accented and asymmetric so it can never be mistaken for a `TimeBoundary` two rows above it."
56
+ ],
45
57
  "specimens": [
46
58
  {
47
59
  "title": "UnreadDivider",
@@ -53,6 +65,5 @@
53
65
  "note": "The second rule Cursor's row union has and no catalogue ships: where you had read down to. It takes no messages, no count and no scroll position, because the one rule it must obey is that it does not move while you read — a divider that chased the last-seen message would vanish the moment it appeared. Accented and asymmetric, so it can never be mistaken for a time boundary two rows above it.",
54
66
  "interaction": "none, deliberately. The mark is the whole component; when it leaves is the caller's decision."
55
67
  }
56
- ],
57
- "todo": true
68
+ ]
58
69
  }
@@ -142,10 +142,22 @@
142
142
  "language": "tsx"
143
143
  }
144
144
  ],
145
- "status": "todo-docs",
145
+ "status": "stable",
146
146
  "url": "/docs/components/usage-chart",
147
147
  "mdUrl": "/docs/components/usage-chart.md",
148
148
  "jsonUrl": "/r/components/usage-chart.json",
149
+ "whenToUse": [
150
+ "Usage against a limit, where the ceiling is the reading.",
151
+ "Anywhere a gap in the data must show as a gap — `gapMs` is what keeps a missing hour from being drawn as a straight line through it."
152
+ ],
153
+ "whenNotToUse": [
154
+ "General charting. Reach for a real chart library when you need axes, legends and several series.",
155
+ "A value with no ceiling. Half the honesty here comes from the fixed axis."
156
+ ],
157
+ "commonMistakes": [
158
+ "Auto-scaling the y axis, which makes a flat 3% look identical to a flat 95%.",
159
+ "Adding a charting dependency for this shape. One line and five gridlines is a large price, and a library draws none of the three rules that make this honest."
160
+ ],
149
161
  "specimens": [
150
162
  {
151
163
  "title": "UsageChart",
@@ -157,6 +169,5 @@
157
169
  "note": "A dependency-free SVG chart pinned to 0–100, with gap-aware path segmentation: a hole in the data is a hole in the line, not a straight edge across it.",
158
170
  "interaction": "hover draws a crosshair at the nearest point and a tooltip chip; the whole chart carries a text summary for readers who get no hover."
159
171
  }
160
- ],
161
- "todo": true
172
+ ]
162
173
  }
@@ -86,10 +86,22 @@
86
86
  "language": "tsx"
87
87
  }
88
88
  ],
89
- "status": "todo-docs",
89
+ "status": "stable",
90
90
  "url": "/docs/components/verdict-row",
91
91
  "mdUrl": "/docs/components/verdict-row.md",
92
92
  "jsonUrl": "/r/components/verdict-row.json",
93
+ "whenToUse": [
94
+ "Any scorer with an answer — a critic model, a test run, a linter. `title` defaults to `Verification` rather than `Critic` precisely so the same row fits all three.",
95
+ "The problems a scorer thinks are likely, each with how sure it is. Order is the caller's, and most likely first reads best."
96
+ ],
97
+ "whenNotToUse": [
98
+ "A score that does not live on a 0-1 scale. `score` is `0`-`1` and clamped, and a non-finite score is worth no stars."
99
+ ],
100
+ "commonMistakes": [
101
+ "Sanitising the score before passing it. Scores arrive from a model, so `NaN`, `Infinity` and out-of-range values are normal traffic and all of them clamp — the row will not render `NaN out of 5`.",
102
+ "Restyling the tone from a prop. `data-verdict` carries it, from OpenHands' thresholds (`ok` at 0.6, `warn` at 0.4, `danger` below), and the issue chips take theirs from the probability (`danger` at 0.7, `warn` at 0.5).",
103
+ "Worrying the stars will be read out one at a time. They are one `role=\"img\"` with the rating as its accessible name."
104
+ ],
93
105
  "specimens": [
94
106
  {
95
107
  "title": "VerdictRow",
@@ -101,6 +113,5 @@
101
113
  "note": "What the run thought of its own work, attached to the turn that did it. A finished turn says what it changed and how long it took; whether it is any good is the question the reader actually has, and every runtime that runs a critic, a test suite or a self-review already has an answer. The scorer is unnamed on purpose — the same row fits a critic model, a linter and a second pair of eyes. The stars are the shape and the percentage is the number, because 0.58 against 0.62 is a decision and rounding it away hides the thing that moved the colour.",
102
114
  "interaction": "none, but every number is defended: scores arrive from a model over a network, so NaN, Infinity and out-of-range values all clamp rather than reaching the DOM. The rating is one role=img with `Rated 4 out of 5` as its name, not five glyphs read out one at a time."
103
115
  }
104
- ],
105
- "todo": true
116
+ ]
106
117
  }
@@ -121,10 +121,21 @@
121
121
  "language": "tsx"
122
122
  }
123
123
  ],
124
- "status": "todo-docs",
124
+ "status": "stable",
125
125
  "url": "/docs/components/voice-conversation",
126
126
  "mdUrl": "/docs/components/voice-conversation.md",
127
127
  "jsonUrl": "/r/components/voice-conversation.json",
128
+ "whenToUse": [
129
+ "A live voice session, with `amplitude` fed from the analyser node — only `listening` and `speaking` react to it."
130
+ ],
131
+ "whenNotToUse": [
132
+ "Playback of a finished answer. This is the call itself, with `connecting`, `listening`, `thinking` and `speaking` as its modes."
133
+ ],
134
+ "commonMistakes": [
135
+ "Clamping `amplitude` before passing it. It is 0 to 1 and clamped internally.",
136
+ "Expecting the orb to interrupt in every mode. It is inert except while the assistant is speaking, so the caption only offers the interrupt when one is possible.",
137
+ "Driving `muted` from the hardware alone. It marks the mic control as engaged and swaps the hint, and `onToggleMute` reports the press."
138
+ ],
128
139
  "specimens": [
129
140
  {
130
141
  "title": "VoiceConversation",
@@ -136,6 +147,5 @@
136
147
  "note": "A live call as a surface of its own: the orb tracks your voice, the caption names the turn, and the transcript follows underneath. Only `listening` and `speaking` react to amplitude — a connecting or thinking orb pulses on its own, because pretending to track a level nobody is producing is a lie the eye catches. The transcript keeps a minimum height so the card does not grow as the call goes on.",
137
148
  "interaction": "the orb is only pressable while the assistant is speaking, and the hint under the caption says so (`Tap to interrupt`) — an inert orb offers nothing rather than looking pressable and doing nothing."
138
149
  }
139
- ],
140
- "todo": true
150
+ ]
141
151
  }
@@ -85,10 +85,21 @@
85
85
  "language": "tsx"
86
86
  }
87
87
  ],
88
- "status": "todo-docs",
88
+ "status": "stable",
89
89
  "url": "/docs/components/web-preview",
90
90
  "mdUrl": "/docs/components/web-preview.md",
91
91
  "jsonUrl": "/r/components/web-preview.json",
92
+ "whenToUse": [
93
+ "Framing a sandboxed preview an agent produced, with the sandbox origin in the bar so the isolation is legible."
94
+ ],
95
+ "whenNotToUse": [
96
+ "Anything that needs this component to provide isolation. It renders `children` as given and enforces none of its own — the caller passes an already-sandboxed frame."
97
+ ],
98
+ "commonMistakes": [
99
+ "Showing your own host in `origin`. Show the sandbox origin; displaying it does not create the isolation, and the wrong one misstates it.",
100
+ "Passing inline markup as `children` in production, where the child should be a sandboxed iframe.",
101
+ "Leaving `loading` true after the sandbox is up, so the frame stays faded behind a shimmering status."
102
+ ],
92
103
  "specimens": [
93
104
  {
94
105
  "title": "WebPreview",
@@ -100,6 +111,5 @@
100
111
  "note": "Chrome around a page the agent opened: origin, reload, open-in-new. It renders whatever you hand it and isolates nothing of its own — an `iframe` here has to arrive already sandboxed, and that is the caller's job, not the element's.",
101
112
  "interaction": "reload and open-in-new are named buttons; while `loading` the reload glyph spins, the frame is hidden from assistive tech, and a shimmering label sits in its place."
102
113
  }
103
- ],
104
- "todo": true
114
+ ]
105
115
  }
@@ -88,10 +88,21 @@
88
88
  "language": "tsx"
89
89
  }
90
90
  ],
91
- "status": "todo-docs",
91
+ "status": "stable",
92
92
  "url": "/docs/components/web-search",
93
93
  "mdUrl": "/docs/components/web-search.md",
94
94
  "jsonUrl": "/r/components/web-search.json",
95
+ "whenToUse": [
96
+ "A web search inside a turn, with result cards revealed as they are read."
97
+ ],
98
+ "whenNotToUse": [
99
+ "Scored passages behind a retrieval answer. This shows result cards for a query and ranks nothing."
100
+ ],
101
+ "commonMistakes": [
102
+ "Appending to `results` as they arrive instead of moving `visibleResults`. The array is everything available to reveal.",
103
+ "Leaving `cycle` constant between searches. It is the identity key that remounts the list so the entrance animation can replay.",
104
+ "Leaving `searching` true once results have landed, so the shimmering Searching label keeps replacing the result count."
105
+ ],
95
106
  "specimens": [
96
107
  {
97
108
  "title": "WebSearch",
@@ -103,6 +114,5 @@
103
114
  "note": "The query as a pill, then the pages landing under it one at a time as they are read. It is the counterpart to `RetrievalChunks`: the same shape of answer, from outside rather than from the corpus, and the same rule that the caller advances the count.",
104
115
  "interaction": "none. `cycle` keys the rows, so a new search re-runs the entrance instead of mutating three lines in place."
105
116
  }
106
- ],
107
- "todo": true
117
+ ]
108
118
  }
@@ -97,7 +97,7 @@
97
97
  "--cue-surface-1",
98
98
  "--cue-text-ui"
99
99
  ],
100
- "summary": "A finished run, folded into one row: `Worked for 4m 12s and made 14 tool calls`.",
100
+ "summary": "A finished run, folded into one row: worked for so long and made so many tool calls.",
101
101
  "examples": [
102
102
  {
103
103
  "title": "Usage",
@@ -105,10 +105,22 @@
105
105
  "language": "tsx"
106
106
  }
107
107
  ],
108
- "status": "todo-docs",
108
+ "status": "stable",
109
109
  "url": "/docs/components/work-collapse",
110
110
  "mdUrl": "/docs/components/work-collapse.md",
111
111
  "jsonUrl": "/r/components/work-collapse.json",
112
+ "whenToUse": [
113
+ "Fourteen rows of tool calls and reasoning nobody needs any more, folded to one line — still there, one click away, in their original order.",
114
+ "A collapsed run that is still going: `running` puts the label in the present tense and runs the sweep, so a folded live run cannot claim to be finished."
115
+ ],
116
+ "whenNotToUse": [
117
+ "Saying what is happening while it happens. That is `TailStatus`, of which this is the counterpart."
118
+ ],
119
+ "commonMistakes": [
120
+ "Wrapping the children in a rail, an indent or a border. The expanded body draws none deliberately: the rows inside already carry their own nesting when they open, and a second level makes a transcript that steps rightwards every time it explains itself.",
121
+ "Owning `open` inside. It is a prop, so a scripted replay is a caller changing it; a component that owned the disclosure could not be replayed at all.",
122
+ "Trying to compose a category summary out of `durationMs` and `toolCalls`. Pass `label` instead - `Explored 3 files, ran 5 commands` is a sentence no formatter over a duration and a count could produce."
123
+ ],
112
124
  "specimens": [
113
125
  {
114
126
  "title": "WorkCollapse",
@@ -120,6 +132,5 @@
120
132
  "note": "Fourteen rows of work, folded into the one sentence a reader wants: Worked for 4m 12s and made 14 tool calls. It is the counterpart to TailStatus — that one narrates while it happens, this one is what the narration becomes once nobody needs it — and the open body deliberately draws no rail and no indent, because the rows inside already nest themselves when they open. formatWorkLabel has an answer for every combination including the empty one, since a trigger labelled undefined is a row nobody can decide whether to open.",
121
133
  "interaction": "the summary line is the whole trigger and carries aria-expanded. Open it and the calls come back at transcript level, each still its own disclosure; a live run keeps the present tense and sweeps the label instead."
122
134
  }
123
- ],
124
- "todo": true
135
+ ]
125
136
  }