@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
@@ -70,7 +70,7 @@
70
70
  "--cue-text-body",
71
71
  "--cue-warn"
72
72
  ],
73
- "summary": "Where the window went, what share each part of it took, and what that cost.",
73
+ "summary": "Where the window went, what share each part took, and what that cost.",
74
74
  "examples": [
75
75
  {
76
76
  "title": "Usage",
@@ -78,10 +78,21 @@
78
78
  "language": "tsx"
79
79
  }
80
80
  ],
81
- "status": "todo-docs",
81
+ "status": "stable",
82
82
  "url": "/docs/components/context-usage",
83
83
  "mdUrl": "/docs/components/context-usage.md",
84
84
  "jsonUrl": "/r/components/context-usage.json",
85
+ "whenToUse": [
86
+ "Answering 'why did it forget the thing I said an hour ago' with *the venue's documents are 38k of it* rather than a number going up.",
87
+ "Anywhere the cost belongs beside the shape — the bar, the table and the stat rows are three readings of one thing."
88
+ ],
89
+ "whenNotToUse": [
90
+ "A limit alone. A context limit tells a reader nothing they can act on.",
91
+ "The breakdown without the bill. Use `ContextBreakdown`."
92
+ ],
93
+ "commonMistakes": [
94
+ "Rebuilding the breakdown as a grid of divs. It is a real table with real column headers, because three columns of numbers whose meaning is carried by the header is exactly what a table is for."
95
+ ],
85
96
  "specimens": [
86
97
  {
87
98
  "title": "ContextUsage",
@@ -93,6 +104,5 @@
93
104
  "note": "Where the window went, what share each part took, and what that cost — Cursor's tray, opencode's labels and Claude Code's table, which between them are a complete spec. The breakdown is a real table with real column headers because three columns of numbers whose meaning lives in the heading above them is exactly what a table is for. A category that names no tone takes the next hue in the family's rotation, so five rows are legible without the caller choosing five colours that fight.",
94
105
  "interaction": "none. The bar is aria-hidden — every figure in it is written out in the table under it — and pressure is stated on the element as `data-pressure`, so a console can style the whole card from one attribute rather than from a threshold of its own."
95
106
  }
96
- ],
97
- "todo": true
107
+ ]
98
108
  }
@@ -91,10 +91,21 @@
91
91
  "language": "tsx"
92
92
  }
93
93
  ],
94
- "status": "todo-docs",
94
+ "status": "stable",
95
95
  "url": "/docs/components/conversation-search",
96
96
  "mdUrl": "/docs/components/conversation-search.md",
97
97
  "jsonUrl": "/r/components/conversation-search.json",
98
+ "whenToUse": [
99
+ "Searching a long transcript, where the hits should be visible on the scroll rail and not only in a list."
100
+ ],
101
+ "whenNotToUse": [
102
+ "Searching across threads rather than inside one."
103
+ ],
104
+ "commonMistakes": [
105
+ "Looking up surrounding text per hit. Each `SearchHit` carries its own, so nothing needs fetching to render the preview.",
106
+ "Expecting `onStep` to hand you a new index. It is called with -1 or 1 and you wrap the index yourself.",
107
+ "Re-clamping `activeIndex` when the results narrow. It is already clamped to the current hit set, so narrowing cannot strand it out of range."
108
+ ],
98
109
  "specimens": [
99
110
  {
100
111
  "title": "ConversationSearch",
@@ -106,6 +117,5 @@
106
117
  "note": "Find inside one long thread, with every hit marked down the scrollbar so the shape of the answer is visible before you walk it. Each hit carries its own surrounding text, so the preview needs no lookup back into the transcript — which is what lets a search box render before the thread it is searching has loaded.",
107
118
  "interaction": "the counter and the rail agree because `activeIndex` is clamped to the current hit set: narrowing the results cannot strand the marker out of range. Stepping is `-1` and `1`; wrapping is the caller's."
108
119
  }
109
- ],
110
- "todo": true
120
+ ]
111
121
  }
@@ -98,10 +98,22 @@
98
98
  "language": "tsx"
99
99
  }
100
100
  ],
101
- "status": "todo-docs",
101
+ "status": "stable",
102
102
  "url": "/docs/components/copy-button",
103
103
  "mdUrl": "/docs/components/copy-button.md",
104
104
  "jsonUrl": "/r/components/copy-button.json",
105
+ "whenToUse": [
106
+ "Any value the reader is meant to take elsewhere: an id, a token, a command.",
107
+ "Anywhere the confirmation must be heard as well as seen — the label lives in an `aria-live` region."
108
+ ],
109
+ "whenNotToUse": [
110
+ "A whole document or a selection. That is the browser's copy, not a button."
111
+ ],
112
+ "commonMistakes": [
113
+ "Replacing the label swap with a toast. At console density a toast for 'copied an id' is heavier than the action itself.",
114
+ "Confirming on a colour change alone, which is never announced (WCAG 1.4.1).",
115
+ "Treating a failed copy as success. Both the async clipboard and the fallback can fail, and `onCopyError` is how you find out."
116
+ ],
105
117
  "specimens": [
106
118
  {
107
119
  "title": "CopyButton",
@@ -113,6 +125,5 @@
113
125
  "note": "Copies, then says so for a beat. The confirmation is text, not a colour change.",
114
126
  "interaction": "the label swaps to the copied state and reverts after the timeout; the accessible name swaps with it."
115
127
  }
116
- ],
117
- "todo": true
128
+ ]
118
129
  }
@@ -64,10 +64,20 @@
64
64
  "language": "tsx"
65
65
  }
66
66
  ],
67
- "status": "todo-docs",
67
+ "status": "stable",
68
68
  "url": "/docs/components/cost-meter",
69
69
  "mdUrl": "/docs/components/cost-meter.md",
70
70
  "jsonUrl": "/r/components/cost-meter.json",
71
+ "whenToUse": [
72
+ "Any surface where spend is a fact the user acts on.",
73
+ "Multi-model runs, where the split is the interesting part."
74
+ ],
75
+ "whenNotToUse": [
76
+ "Context pressure. Use `ContextUsage` — tokens held and money spent are different questions."
77
+ ],
78
+ "commonMistakes": [
79
+ "Showing the run cost with no session total, which removes the only context that makes it mean anything."
80
+ ],
71
81
  "specimens": [
72
82
  {
73
83
  "title": "CostMeter",
@@ -79,6 +89,5 @@
79
89
  "note": "What the run spent, against what the session has spent — two numbers, then the arithmetic under them. Every figure arrives pre-formatted: the element does no currency maths and no rounding, so a bench and a billing page cannot disagree about what `$3.12` means.",
80
90
  "interaction": "none. `share` drives the bar and the lines are given largest-first, so the bar reads left to right in the same order as the rows."
81
91
  }
82
- ],
83
- "todo": true
92
+ ]
84
93
  }
@@ -49,7 +49,7 @@
49
49
  "--cue-font-sans",
50
50
  "--cue-font-scale"
51
51
  ],
52
- "summary": "Inline version of the portal contract, for portals whose container cannot be chosen (a third-party overlay, or content already portaled by something else).",
52
+ "summary": "Inline version of the portal contract, for portals whose container you cannot choose.",
53
53
  "examples": [
54
54
  {
55
55
  "title": "Usage",
@@ -57,9 +57,18 @@
57
57
  "language": "tsx"
58
58
  }
59
59
  ],
60
- "status": "todo-docs",
60
+ "status": "stable",
61
61
  "url": "/docs/components/cue-portal-frame",
62
62
  "mdUrl": "/docs/components/cue-portal-frame.md",
63
63
  "jsonUrl": "/r/components/cue-portal-frame.json",
64
- "todo": true
64
+ "whenToUse": [
65
+ "A third-party overlay, or content already portalled by something else, that must still carry the theme, density, font, mode and style stamps."
66
+ ],
67
+ "whenNotToUse": [
68
+ "A portal you control. Prefer the `useCuePortalProps` hook — this exists for the case where you cannot reach the container."
69
+ ],
70
+ "commonMistakes": [
71
+ "Reaching for it first. It is the fallback, not the default, and wrapping in `display: contents` where the hook would do is one more element for nothing.",
72
+ "Stamping only `data-theme`. The contract is the whole set — theme, density, font, mode, style, skin, fidelity, font scale and overrides — or a portal renders half-themed."
73
+ ]
65
74
  }
@@ -76,10 +76,21 @@
76
76
  "language": "tsx"
77
77
  }
78
78
  ],
79
- "status": "todo-docs",
79
+ "status": "stable",
80
80
  "url": "/docs/components/data-table-pagination",
81
81
  "mdUrl": "/docs/components/data-table-pagination.md",
82
82
  "jsonUrl": "/r/components/data-table-pagination.json",
83
+ "whenToUse": [
84
+ "Any paged table.",
85
+ "Tables that get sorted to put the interesting row at one end — first and last exist because stepping there one page at a time is not a navigation strategy."
86
+ ],
87
+ "whenNotToUse": [
88
+ "A table short enough to scroll.",
89
+ "A non-table list. Use `Pagination`."
90
+ ],
91
+ "commonMistakes": [
92
+ "Rebuilding the buttons as bare glyphs. Every one is an `IconButton` with a real accessible name — an arrow alone announces as nothing."
93
+ ],
83
94
  "specimens": [
84
95
  {
85
96
  "title": "DataTable recipe",
@@ -92,6 +103,5 @@
92
103
  "note": "Not a component: `useCueTable` wires four TanStack v9 features, `DataTableToolbar` and `DataTablePagination` supply the chrome, and the markup stays at the call site. Rendered through the same Table above.",
93
104
  "interaction": "the header cells are buttons that toggle sorting; the pager disables at the ends rather than hiding."
94
105
  }
95
- ],
96
- "todo": true
106
+ ]
97
107
  }
@@ -106,10 +106,20 @@
106
106
  "language": "tsx"
107
107
  }
108
108
  ],
109
- "status": "todo-docs",
109
+ "status": "stable",
110
110
  "url": "/docs/components/data-table-toolbar",
111
111
  "mdUrl": "/docs/components/data-table-toolbar.md",
112
112
  "jsonUrl": "/r/components/data-table-toolbar.json",
113
+ "whenToUse": [
114
+ "Any filterable table.",
115
+ "Anywhere the reader needs to tell an empty table from an over-tight filter — that is what `count`/`total` is for."
116
+ ],
117
+ "whenNotToUse": [
118
+ "A table with nothing to filter or act on."
119
+ ],
120
+ "commonMistakes": [
121
+ "Leaving out the count. '12/340' beside a filter box is the difference between 'the table is empty' and 'the filter is too tight', and it is the first thing a hand-rolled toolbar drops."
122
+ ],
113
123
  "specimens": [
114
124
  {
115
125
  "title": "DataTable recipe",
@@ -122,6 +132,5 @@
122
132
  "note": "Not a component: `useCueTable` wires four TanStack v9 features, `DataTableToolbar` and `DataTablePagination` supply the chrome, and the markup stays at the call site. Rendered through the same Table above.",
123
133
  "interaction": "the header cells are buttons that toggle sorting; the pager disables at the ends rather than hiding."
124
134
  }
125
- ],
126
- "todo": true
135
+ ]
127
136
  }
@@ -73,10 +73,20 @@
73
73
  "language": "tsx"
74
74
  }
75
75
  ],
76
- "status": "todo-docs",
76
+ "status": "stable",
77
77
  "url": "/docs/components/date-field",
78
78
  "mdUrl": "/docs/components/date-field.md",
79
79
  "jsonUrl": "/r/components/date-field.json",
80
+ "whenToUse": [
81
+ "A date the user already knows. Typing is faster than three clicks.",
82
+ "Anywhere `03/04` must not be ambiguous — segments cannot produce it."
83
+ ],
84
+ "whenNotToUse": [
85
+ "A date the user needs to *find*. Use `DatePicker`, which shows the month."
86
+ ],
87
+ "commonMistakes": [
88
+ "Rebuilding it from three number inputs, which loses locale-aware segment order, overflow between segments and the `spinbutton` ARIA."
89
+ ],
80
90
  "specimens": [
81
91
  {
82
92
  "title": "DateField",
@@ -88,6 +98,5 @@
88
98
  "note": "Typed, one segment at a time, with no calendar. Values are `@internationalized/date` objects, which can hold a day without a timezone attached.",
89
99
  "interaction": "each segment is a `spinbutton`: arrow keys step it, typing overflows into the next one."
90
100
  }
91
- ],
92
- "todo": true
101
+ ]
93
102
  }
@@ -235,10 +235,21 @@
235
235
  "language": "tsx"
236
236
  }
237
237
  ],
238
- "status": "todo-docs",
238
+ "status": "stable",
239
239
  "url": "/docs/components/date-picker",
240
240
  "mdUrl": "/docs/components/date-picker.md",
241
241
  "jsonUrl": "/r/components/date-picker.json",
242
+ "whenToUse": [
243
+ "A date the user wants to see in context — weekends, a month's shape.",
244
+ "Anywhere the trigger must line up with the inputs beside it: it is a control-chassis button at every density."
245
+ ],
246
+ "whenNotToUse": [
247
+ "A known date. Use `DateField`.",
248
+ "A span. Use `DateRangePicker`."
249
+ ],
250
+ "commonMistakes": [
251
+ "Rendering the calendar outside the kit's `Popover`, which drops it out of the portal contract and renders it at the wrong theme and density."
252
+ ],
242
253
  "specimens": [
243
254
  {
244
255
  "title": "DatePicker",
@@ -250,6 +261,5 @@
250
261
  "note": "The calendar inside a popover, on the form chassis. The trigger prints the formatted date, or the placeholder when there is none.",
251
262
  "interaction": "the popup is portalled through the stamping contract, so it keeps the theme and density of the island it was opened from."
252
263
  }
253
- ],
254
- "todo": true
264
+ ]
255
265
  }
@@ -235,10 +235,19 @@
235
235
  "language": "tsx"
236
236
  }
237
237
  ],
238
- "status": "todo-docs",
238
+ "status": "stable",
239
239
  "url": "/docs/components/date-range-picker",
240
240
  "mdUrl": "/docs/components/date-range-picker.md",
241
241
  "jsonUrl": "/r/components/date-range-picker.json",
242
+ "whenToUse": [
243
+ "A from/to range — a report window, a run of shows."
244
+ ],
245
+ "whenNotToUse": [
246
+ "One day. Use `DatePicker`."
247
+ ],
248
+ "commonMistakes": [
249
+ "Expecting it to dismiss like `DatePicker`. A range takes two clicks, so the popup stays open through the first and the caller hears about both — close it from `onValueChange` when `to` arrives if a one-shot flow suits the page."
250
+ ],
242
251
  "specimens": [
243
252
  {
244
253
  "title": "DateRangePicker",
@@ -250,6 +259,5 @@
250
259
  "note": "Two days in one control, formatted as one string.",
251
260
  "interaction": "the first click sets the start, the second the end; clicking before the start restarts the range."
252
261
  }
253
- ],
254
- "todo": true
262
+ ]
255
263
  }
@@ -43,10 +43,20 @@
43
43
  "language": "tsx"
44
44
  }
45
45
  ],
46
- "status": "todo-docs",
46
+ "status": "stable",
47
47
  "url": "/docs/components/day-separator",
48
48
  "mdUrl": "/docs/components/day-separator.md",
49
49
  "jsonUrl": "/r/components/day-separator.json",
50
+ "whenToUse": [
51
+ "Threads long enough that 'when' stops being obvious."
52
+ ],
53
+ "whenNotToUse": [
54
+ "A compaction. Use `CompactionRow`.",
55
+ "A short conversation, where every message is clearly from the same sitting."
56
+ ],
57
+ "commonMistakes": [
58
+ "Stamping every message with a full date, which is the noise this replaces."
59
+ ],
50
60
  "specimens": [
51
61
  {
52
62
  "title": "DaySeparator",
@@ -58,6 +68,5 @@
58
68
  "note": "Chronology in a thread long enough to have some: a rule wherever the day changes, and per-message times that only appear when you go looking. The caller pre-formats both — the element compares the day strings and does no date arithmetic at all.",
59
69
  "interaction": "hover a turn and its timestamp fades up beside it. The rules are decorative; nothing here is a control."
60
70
  }
61
- ],
62
- "todo": true
71
+ ]
63
72
  }
@@ -168,7 +168,7 @@
168
168
  "--cue-text-micro",
169
169
  "--cue-text-ui"
170
170
  ],
171
- "summary": "One delegation, folded into a card.",
171
+ "summary": "One delegation, folded into a card: who was asked, what for, and their transcript behind a disclosure.",
172
172
  "examples": [
173
173
  {
174
174
  "title": "Usage",
@@ -176,10 +176,21 @@
176
176
  "language": "tsx"
177
177
  }
178
178
  ],
179
- "status": "todo-docs",
179
+ "status": "stable",
180
180
  "url": "/docs/components/delegation-card",
181
181
  "mdUrl": "/docs/components/delegation-card.md",
182
182
  "jsonUrl": "/r/components/delegation-card.json",
183
+ "whenToUse": [
184
+ "Any multi-agent run. A tree rendered flat is what turns a transcript into noise.",
185
+ "Anywhere nesting depth must stay legible — the rail takes the sub-agent's colour."
186
+ ],
187
+ "whenNotToUse": [
188
+ "A single-agent conversation. Use `Message`."
189
+ ],
190
+ "commonMistakes": [
191
+ "Rendering sub-agent turns inline beside the parent's, which loses which turns belong to whom and how deep they are.",
192
+ "Opening every delegation by default, which undoes the fold."
193
+ ],
183
194
  "specimens": [
184
195
  {
185
196
  "title": "DelegationCard",
@@ -191,6 +202,5 @@
191
202
  "note": "A nested transcript with a per-agent left rail in that agent's colour. Collapsible, because a delegation is usually a detail.",
192
203
  "interaction": "the header row is the toggle; the status is spelled out as well as tinted."
193
204
  }
194
- ],
195
- "todo": true
205
+ ]
196
206
  }
@@ -85,9 +85,19 @@
85
85
  "language": "tsx"
86
86
  }
87
87
  ],
88
- "status": "todo-docs",
88
+ "status": "stable",
89
89
  "url": "/docs/components/density",
90
90
  "mdUrl": "/docs/components/density.md",
91
91
  "jsonUrl": "/r/components/density.json",
92
- "todo": true
92
+ "whenToUse": [
93
+ "A region that should be denser or roomier than the page around it — a compact table inside a comfortable page.",
94
+ "Anywhere nesting must be free: it renders a plain `<div>` and the geometry properties inherit down, so no JS runs."
95
+ ],
96
+ "whenNotToUse": [
97
+ "The whole document. Set density on the provider.",
98
+ "One control's height. Use that control's `size`."
99
+ ],
100
+ "commonMistakes": [
101
+ "Reading the React context to style something. The DOM attributes are the source of truth; the context exists for the rare JS reads like portal stamping."
102
+ ]
93
103
  }
@@ -69,12 +69,24 @@
69
69
  "--cue-text-label",
70
70
  "--cue-text-ui"
71
71
  ],
72
- "summary": "The `<dl>` family: {@link DescriptionListRoot}, `Term` and `Detail`.",
72
+ "summary": "The `<dl>` family: a root, `Term` and `Detail`.",
73
73
  "examples": [],
74
- "status": "todo-docs",
74
+ "status": "stable",
75
75
  "url": "/docs/components/description-list",
76
76
  "mdUrl": "/docs/components/description-list.md",
77
77
  "jsonUrl": "/r/components/description-list.json",
78
+ "whenToUse": [
79
+ "Name/value pairs that belong together: metadata, a settings summary, a specification.",
80
+ "Anywhere the pairing should exist in the accessibility tree rather than only in the layout."
81
+ ],
82
+ "whenNotToUse": [
83
+ "Tabular data with more than one value per row. Use a table.",
84
+ "A form. A description list shows values; it does not edit them."
85
+ ],
86
+ "commonMistakes": [
87
+ "Faking it with a two-column `Grid`, which loses the `<dl>` semantics that make the pairing real.",
88
+ "Putting a `Detail` with no `Term`, which leaves a value nothing names."
89
+ ],
78
90
  "specimens": [
79
91
  {
80
92
  "title": "DescriptionList",
@@ -86,6 +98,5 @@
86
98
  "note": "Two layouts: inline pairs for a sidebar, stacked for a page.",
87
99
  "interaction": "none."
88
100
  }
89
- ],
90
- "todo": true
101
+ ]
91
102
  }
@@ -106,10 +106,21 @@
106
106
  "language": "tsx"
107
107
  }
108
108
  ],
109
- "status": "todo-docs",
109
+ "status": "stable",
110
110
  "url": "/docs/components/diagram",
111
111
  "mdUrl": "/docs/components/diagram.md",
112
112
  "jsonUrl": "/r/components/diagram.json",
113
+ "whenToUse": [
114
+ "A rendered graphic that needs a titled frame with zoom, reset and expand around it.",
115
+ "A drawing small enough to sit inline but worth opening full screen, through `onExpand`."
116
+ ],
117
+ "whenNotToUse": [
118
+ "Markup you want the element to parse. It never parses or injects markup itself, so whatever renders your chart stays your choice."
119
+ ],
120
+ "commonMistakes": [
121
+ "Expecting the zoom controls to clamp. `onZoomIn` and `onZoomOut` only report the press — clamp the range yourself.",
122
+ "Passing `zoom` as a percentage. 1 is fit, and the header prints the percentage for you."
123
+ ],
113
124
  "specimens": [
114
125
  {
115
126
  "title": "Diagram",
@@ -121,6 +132,5 @@
121
132
  "note": "A drawn answer with a viewport around it: zoom, reset, full-bleed. The graphic is yours — the element supplies the frame, the percentage readout and the transform, and never parses or renders anything itself.",
122
133
  "interaction": "four named icon buttons; expand disables itself when no handler is given, which is the honest state for a bench with nowhere to expand to. The scale transition stops under reduced motion."
123
134
  }
124
- ],
125
- "todo": true
135
+ ]
126
136
  }
@@ -106,7 +106,7 @@
106
106
  "--cue-text-micro",
107
107
  "--cue-text-ui"
108
108
  ],
109
- "summary": "The \"advanced\" idiom: a chromeless `▸ advanced` toggle over the fields most users never touch.",
109
+ "summary": "The 'advanced' idiom: a chromeless `▸ advanced` toggle over the fields most users never touch.",
110
110
  "examples": [
111
111
  {
112
112
  "title": "Usage",
@@ -114,10 +114,22 @@
114
114
  "language": "tsx"
115
115
  }
116
116
  ],
117
- "status": "todo-docs",
117
+ "status": "stable",
118
118
  "url": "/docs/components/disclosure",
119
119
  "mdUrl": "/docs/components/disclosure.md",
120
120
  "jsonUrl": "/r/components/disclosure.json",
121
+ "whenToUse": [
122
+ "Optional fields inside a form — the ones that matter to a few people and would otherwise lengthen the page for everyone.",
123
+ "Anywhere the toggle should read as an annotation on the form rather than a division of it."
124
+ ],
125
+ "whenNotToUse": [
126
+ "A section that peers with the sections around it. Use `Collapsible`.",
127
+ "Content the user is expected to read. Progressive disclosure hides it; if it matters, show it."
128
+ ],
129
+ "commonMistakes": [
130
+ "Reaching for `Collapsible` instead. It is deliberately not one: giving these fields a summary row that looks like a section header is what makes forms read as twice as long as they are.",
131
+ "Dressing it up with a rim or a fill. It is drawn as quietly as the system can draw anything — one triangle and micro caption ink."
132
+ ],
121
133
  "specimens": [
122
134
  {
123
135
  "title": "Disclosure",
@@ -129,6 +141,5 @@
129
141
  "note": "The `advanced` idiom: a chromeless mono `▸ label` toggle for the settings most people never open.",
130
142
  "interaction": "the caret rotates; nothing else moves."
131
143
  }
132
- ],
133
- "todo": true
144
+ ]
134
145
  }
@@ -87,10 +87,20 @@
87
87
  "language": "tsx"
88
88
  }
89
89
  ],
90
- "status": "todo-docs",
90
+ "status": "stable",
91
91
  "url": "/docs/components/dmx-bar",
92
92
  "mdUrl": "/docs/components/dmx-bar.md",
93
93
  "jsonUrl": "/r/components/dmx-bar.json",
94
+ "whenToUse": [
95
+ "A live universe readout that must stay cheap enough to leave running at wire rate.",
96
+ "Under a node in a routing graph, where the shape of the output is the reading."
97
+ ],
98
+ "whenNotToUse": [
99
+ "Per-channel inspection. Use `ChannelMatrix`."
100
+ ],
101
+ "commonMistakes": [
102
+ "Re-rendering it from React state per frame. The whole design is about what happens *between* frames."
103
+ ],
94
104
  "specimens": [
95
105
  {
96
106
  "title": "DmxBar",
@@ -102,6 +112,5 @@
102
112
  "note": "The whole universe as one 512×1 texture, scaled up with `image-rendering: pixelated` on a true-black ground. Interpolating between two channels would draw levels nobody sent.",
103
113
  "interaction": "hovering reports `CH n · v` through a portaled readout, positioned by percentage so it survives a scaled container; the number is written to a span through a ref rather than re-rendering at 40 Hz."
104
114
  }
105
- ],
106
- "todo": true
115
+ ]
107
116
  }
@@ -97,10 +97,19 @@
97
97
  "language": "tsx"
98
98
  }
99
99
  ],
100
- "status": "todo-docs",
100
+ "status": "stable",
101
101
  "url": "/docs/components/dmx-strip",
102
102
  "mdUrl": "/docs/components/dmx-strip.md",
103
103
  "jsonUrl": "/r/components/dmx-strip.json",
104
+ "whenToUse": [
105
+ "Marketing and docs, where the device should look alive without a wire behind it."
106
+ ],
107
+ "whenNotToUse": [
108
+ "Real output. Use `DmxBar`, which draws actual channel data."
109
+ ],
110
+ "commonMistakes": [
111
+ "Presenting it as live data. It is a model of a plausible rig — the same canvas the bridge uses, driven by a simulation."
112
+ ],
104
113
  "specimens": [
105
114
  {
106
115
  "title": "DmxStrip",
@@ -112,6 +121,5 @@
112
121
  "note": "A seeded fixture simulation: mulberry32 from the `seed` prop, so the same seed draws the same rig every time. Values ramp rather than jump.",
113
122
  "interaction": "the readout updates through a ref; under prefers-reduced-motion the strip paints one static frame instead of animating."
114
123
  }
115
- ],
116
- "todo": true
124
+ ]
117
125
  }
@@ -88,10 +88,21 @@
88
88
  "language": "tsx"
89
89
  }
90
90
  ],
91
- "status": "todo-docs",
91
+ "status": "stable",
92
92
  "url": "/docs/components/document-reference",
93
93
  "mdUrl": "/docs/components/document-reference.md",
94
94
  "jsonUrl": "/r/components/document-reference.json",
95
+ "whenToUse": [
96
+ "Showing which passages of a source the answer drew on, each pinned to a page.",
97
+ "Sending the reader to the page an anchor sits on, through `onJump`."
98
+ ],
99
+ "whenNotToUse": [
100
+ "A source with no page structure. `pages` and per-page anchors are the shape of the element."
101
+ ],
102
+ "commonMistakes": [
103
+ "Assuming every page highlights something. A page with no anchor highlights nothing.",
104
+ "Expecting `onJump` to move `activePage` for you. It reports the page to open; the state stays yours."
105
+ ],
95
106
  "specimens": [
96
107
  {
97
108
  "title": "DocumentReference",
@@ -103,6 +114,5 @@
103
114
  "note": "One document the answer leans on, with the passages it quoted and the page each is on. Several anchors can cite one page — two of these are both page 31 — so the current one is marked by `aria-current` rather than by matching the number, which is what stops the wrong row lighting up.",
104
115
  "interaction": "every quote is a button that reports its page to `onJump`; the active row takes the recessed field ground, the others only on hover."
105
116
  }
106
- ],
107
- "todo": true
117
+ ]
108
118
  }
@@ -76,10 +76,21 @@
76
76
  "language": "tsx"
77
77
  }
78
78
  ],
79
- "status": "todo-docs",
79
+ "status": "stable",
80
80
  "url": "/docs/components/draft-restore",
81
81
  "mdUrl": "/docs/components/draft-restore.md",
82
82
  "jsonUrl": "/r/components/draft-restore.json",
83
+ "whenToUse": [
84
+ "Returning to a thread that has unsent composer text saved against it.",
85
+ "A one-line preview of that text with when it was last touched beside it."
86
+ ],
87
+ "whenNotToUse": [
88
+ "A long draft you want shown in full. `draft` is truncated to one line."
89
+ ],
90
+ "commonMistakes": [
91
+ "Passing a timestamp to `savedAt`. It is printed as given, so pre-format it.",
92
+ "Wiring only `onRestore`. Without `onDiscard` the prompt has no way to go away for good."
93
+ ],
83
94
  "specimens": [
84
95
  {
85
96
  "title": "DraftRestore",
@@ -91,6 +102,5 @@
91
102
  "note": "Come back to a thread and the sentence you never sent is still sitting there. One line of what it was, when it was saved, and the two answers anybody ever has for it. `savedAt` is pre-formatted like every other time in this family — the element does no date maths, so a server-rendered draft and a client-rendered one cannot disagree.",
92
103
  "interaction": "restore is a worded button and discard is a labelled icon (`Discard the draft`): the destructive one is the one that has to be aimed at."
93
104
  }
94
- ],
95
- "todo": true
105
+ ]
96
106
  }