@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
@@ -166,7 +166,7 @@
166
166
  "--cue-text-ui",
167
167
  "--cue-warn"
168
168
  ],
169
- "summary": "A config value that may be a literal *or* a reference to an environment variable — and looks unmistakably different in each case.",
169
+ "summary": "A config value that may be a literal or an `env(NAME)` reference — and looks unmistakably different in each case.",
170
170
  "examples": [
171
171
  {
172
172
  "title": "Usage",
@@ -174,10 +174,22 @@
174
174
  "language": "tsx"
175
175
  }
176
176
  ],
177
- "status": "todo-docs",
177
+ "status": "stable",
178
178
  "url": "/docs/components/env-var-input",
179
179
  "mdUrl": "/docs/components/env-var-input.md",
180
180
  "jsonUrl": "/r/components/env-var-input.json",
181
+ "whenToUse": [
182
+ "Any config screen where some values are secrets and some name where a secret comes from.",
183
+ "Anywhere the difference decides whether a value is safe to screenshot, commit or paste into a ticket."
184
+ ],
185
+ "whenNotToUse": [
186
+ "A secret typed directly with no indirection. Use `PasswordInput`.",
187
+ "Ordinary configuration with no environment indirection. Use `Input`."
188
+ ],
189
+ "commonMistakes": [
190
+ "Rendering references as ordinary text. The warn-toned pill is the entire point: a screen of identical text boxes gives no way to tell the key from the pointer to the key.",
191
+ "Treating `secret` as encryption. It masks a literal on screen; it does nothing to how the value is stored or sent."
192
+ ],
181
193
  "specimens": [
182
194
  {
183
195
  "title": "EnvVarInput",
@@ -189,6 +201,5 @@
189
201
  "note": "A literal value and an `env(NAME)` reference are different things, so they do not look the same: the reference swaps to an amber token pill.",
190
202
  "interaction": "the mode switch is a button; typing `env(` in the field is enough to flip it."
191
203
  }
192
- ],
193
- "todo": true
204
+ ]
194
205
  }
@@ -73,10 +73,21 @@
73
73
  "language": "tsx"
74
74
  }
75
75
  ],
76
- "status": "todo-docs",
76
+ "status": "stable",
77
77
  "url": "/docs/components/error-state",
78
78
  "mdUrl": "/docs/components/error-state.md",
79
79
  "jsonUrl": "/r/components/error-state.json",
80
+ "whenToUse": [
81
+ "A failed request inside a surface, where the retry should sit with the failure rather than interrupt."
82
+ ],
83
+ "whenNotToUse": [
84
+ "A failure with nothing to try again. `onRetry` is required.",
85
+ "A decision that must block everything until it is answered. This is deliberately not a modal."
86
+ ],
87
+ "commonMistakes": [
88
+ "Rendering your own spinner while retrying. `retrying` swaps the banner to a spinning Retrying status instead of the error.",
89
+ "Putting the whole message in `title`. `detail` is the supporting line that explains what went wrong."
90
+ ],
80
91
  "specimens": [
81
92
  {
82
93
  "title": "ErrorState",
@@ -88,6 +99,5 @@
88
99
  "note": "A failure banner, not a modal: it sits in the flow where the answer would have been, says what broke and what to do, and leaves the rest of the page alone. Retrying is a different element entirely rather than a disabled button — `role='alert'` while it is a failure, `role='status'` while it is trying again, which is the difference between interrupting a screen reader and not.",
89
100
  "interaction": "Retry is a named button that tints on hover. The retrying state has no control at all, because there is nothing to press while it works."
90
101
  }
91
- ],
92
- "todo": true
102
+ ]
93
103
  }
@@ -83,7 +83,8 @@
83
83
  "--cue-space-4",
84
84
  "--cue-sunken",
85
85
  "--cue-text-label",
86
- "--cue-text-micro"
86
+ "--cue-text-micro",
87
+ "--cue-tracking-caps"
87
88
  ],
88
89
  "summary": "The export dialog: CSS, DTCG tokens, a `createTheme()` call and a shadcn `registry:theme` item.",
89
90
  "examples": [
@@ -93,9 +94,17 @@
93
94
  "language": "tsx"
94
95
  }
95
96
  ],
96
- "status": "todo-docs",
97
+ "status": "stable",
97
98
  "url": "/docs/components/export-dialog",
98
99
  "mdUrl": "/docs/components/export-dialog.md",
99
100
  "jsonUrl": "/r/components/export-dialog.json",
100
- "todo": true
101
+ "whenToUse": [
102
+ "Handing a tuned theme to code, in whichever of the four shapes the consumer needs."
103
+ ],
104
+ "whenNotToUse": [
105
+ "Exporting anything but the configurator's overrides. All four outputs are generated from them."
106
+ ],
107
+ "commonMistakes": [
108
+ "Re-deriving a value before export. Nothing here re-derives: the CSS output is literally the stylesheet on the page, which is what makes it trustworthy."
109
+ ]
101
110
  }
@@ -29,9 +29,10 @@
29
29
  "--cue-accent",
30
30
  "--cue-font-mono",
31
31
  "--cue-space-2",
32
- "--cue-text-label"
32
+ "--cue-text-label",
33
+ "--cue-tracking-caps-loose"
33
34
  ],
34
- "summary": "The small accent kicker that sits above a title: `// PATCH`.",
35
+ "summary": "The small accent kicker above a title: `// PATCH`.",
35
36
  "examples": [
36
37
  {
37
38
  "title": "Usage",
@@ -39,10 +40,21 @@
39
40
  "language": "tsx"
40
41
  }
41
42
  ],
42
- "status": "todo-docs",
43
+ "status": "stable",
43
44
  "url": "/docs/components/eyebrow",
44
45
  "mdUrl": "/docs/components/eyebrow.md",
45
46
  "jsonUrl": "/r/components/eyebrow.json",
47
+ "whenToUse": [
48
+ "Naming the category a title belongs to, where the title alone would not say it.",
49
+ "Anywhere the accent should carry pure typography — this is the one place the system spends it that way."
50
+ ],
51
+ "whenNotToUse": [
52
+ "A status. Use `Chip`, which carries the tone vocabulary.",
53
+ "A second heading. An eyebrow is a kicker, not a level in the outline."
54
+ ],
55
+ "commonMistakes": [
56
+ "Typing the slashes into the text. They are `aria-hidden` and `select-none` for a reason — a screen reader should read \"patch\", and a copy-paste of the page should not carry punctuation that was only ever decoration."
57
+ ],
46
58
  "specimens": [
47
59
  {
48
60
  "title": "Eyebrow",
@@ -54,6 +66,5 @@
54
66
  "note": "The `//` motif from the brand site, in mono micro.",
55
67
  "interaction": "none."
56
68
  }
57
- ],
58
- "todo": true
69
+ ]
59
70
  }
@@ -113,10 +113,21 @@
113
113
  "language": "tsx"
114
114
  }
115
115
  ],
116
- "status": "todo-docs",
116
+ "status": "stable",
117
117
  "url": "/docs/components/feedback-dialog",
118
118
  "mdUrl": "/docs/components/feedback-dialog.md",
119
119
  "jsonUrl": "/r/components/feedback-dialog.json",
120
+ "whenToUse": [
121
+ "Collecting the reason behind a negative rating, with optional free text alongside it."
122
+ ],
123
+ "whenNotToUse": [
124
+ "A single-choice survey. More than one reason may be picked at once."
125
+ ],
126
+ "commonMistakes": [
127
+ "Writing long reason strings. Keep them short enough to scan in one line.",
128
+ "Rendering your own thank-you. `sent` replaces the whole form with an acknowledgement once the report is filed.",
129
+ "Requiring `note` before submit. The free-text detail is always optional."
130
+ ],
120
131
  "specimens": [
121
132
  {
122
133
  "title": "FeedbackDialog",
@@ -128,6 +139,5 @@
128
139
  "note": "A thumbs-down that asks why, so the signal arrives with a reason attached. The reasons are chips rather than a select because more than one is usually true, and the note is marked optional in the header — a feedback form that demands prose collects nothing. Sending replaces the whole form with an acknowledgement.",
129
140
  "interaction": "each chip is `aria-pressed`. The acknowledgement lives in a `status` live region mounted from the start and empty until it is not — a region created together with its text is the case a screen reader is free to miss."
130
141
  }
131
- ],
132
- "todo": true
142
+ ]
133
143
  }
@@ -33,9 +33,10 @@
33
33
  "--cue-space-1",
34
34
  "--cue-space-2",
35
35
  "--cue-text-label",
36
- "--cue-text-micro"
36
+ "--cue-text-micro",
37
+ "--cue-tracking-caps-tight"
37
38
  ],
38
- "summary": "Quiet helper text under a control, published to assistive tech as the control's `aria-describedby` target.",
39
+ "summary": "Quiet helper text under a control, published as the control's `aria-describedby` target.",
39
40
  "examples": [
40
41
  {
41
42
  "title": "Usage",
@@ -43,10 +44,22 @@
43
44
  "language": "tsx"
44
45
  }
45
46
  ],
46
- "status": "todo-docs",
47
+ "status": "stable",
47
48
  "url": "/docs/components/field-description",
48
49
  "mdUrl": "/docs/components/field-description.md",
49
50
  "jsonUrl": "/r/components/field-description.json",
51
+ "whenToUse": [
52
+ "A constraint or a consequence the label cannot carry: the format expected, what the value affects.",
53
+ "Text that should be read out after the control's name rather than as part of it."
54
+ ],
55
+ "whenNotToUse": [
56
+ "An error. Use `FieldError` — a description is permanent and an error is a state.",
57
+ "A whole paragraph. If it needs that much, the field needs a different design."
58
+ ],
59
+ "commonMistakes": [
60
+ "Putting the requirement only here and not in validation, so a screen reader hears the rule but nothing enforces it.",
61
+ "Repeating the label in other words, which makes every field announce twice."
62
+ ],
50
63
  "specimens": [
51
64
  {
52
65
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -61,6 +74,5 @@
61
74
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
62
75
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
63
76
  }
64
- ],
65
- "todo": true
77
+ ]
66
78
  }
@@ -54,9 +54,10 @@
54
54
  "--cue-space-1",
55
55
  "--cue-space-2",
56
56
  "--cue-text-label",
57
- "--cue-text-micro"
57
+ "--cue-text-micro",
58
+ "--cue-tracking-caps-tight"
58
59
  ],
59
- "summary": "The error line under a control.",
60
+ "summary": "The error line under a control. Driven by Standard Schema issues, or by native validity.",
60
61
  "examples": [
61
62
  {
62
63
  "title": "Usage",
@@ -64,10 +65,22 @@
64
65
  "language": "tsx"
65
66
  }
66
67
  ],
67
- "status": "todo-docs",
68
+ "status": "stable",
68
69
  "url": "/docs/components/field-error",
69
70
  "mdUrl": "/docs/components/field-error.md",
70
71
  "jsonUrl": "/r/components/field-error.json",
72
+ "whenToUse": [
73
+ "Showing a parse failure: pass `issues` from `schema.safeParse(x).issues` and the component owns visibility.",
74
+ "Keying off the browser's own `ValidityState`: pass `match` plus `children`."
75
+ ],
76
+ "whenNotToUse": [
77
+ "A permanent constraint. That is `FieldDescription`; an error should appear only when something is wrong.",
78
+ "A form-level failure. This belongs to one control."
79
+ ],
80
+ "commonMistakes": [
81
+ "Passing both `issues` and `match`. They are mutually exclusive by design — pick the source of truth.",
82
+ "Rendering it conditionally yourself when using `issues`. The component already decides when to show; wrapping it in your own guard fights it."
83
+ ],
71
84
  "specimens": [
72
85
  {
73
86
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -82,6 +95,5 @@
82
95
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
83
96
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
84
97
  }
85
- ],
86
- "todo": true
98
+ ]
87
99
  }
@@ -33,9 +33,10 @@
33
33
  "--cue-space-1",
34
34
  "--cue-space-2",
35
35
  "--cue-text-label",
36
- "--cue-text-micro"
36
+ "--cue-text-micro",
37
+ "--cue-tracking-caps-tight"
37
38
  ],
38
- "summary": "The name of a field: mono, uppercase, tracked out, one rung below body text.",
39
+ "summary": "The name of a field: a real `<label>`, wired to its control.",
39
40
  "examples": [
40
41
  {
41
42
  "title": "Usage",
@@ -43,10 +44,22 @@
43
44
  "language": "tsx"
44
45
  }
45
46
  ],
46
- "status": "todo-docs",
47
+ "status": "stable",
47
48
  "url": "/docs/components/field-label",
48
49
  "mdUrl": "/docs/components/field-label.md",
49
50
  "jsonUrl": "/r/components/field-label.json",
51
+ "whenToUse": [
52
+ "Every control inside a `Field`. Clicking the label focuses — or toggles — the control it names.",
53
+ "Anywhere a visible name is wanted instead of an `aria-label`, which is the better default because sighted users need the name too."
54
+ ],
55
+ "whenNotToUse": [
56
+ "Helper text. Use `FieldDescription`, which becomes the `aria-describedby` target.",
57
+ "An error. Use `FieldError`."
58
+ ],
59
+ "commonMistakes": [
60
+ "Using a `<div>` styled to look like a label, which breaks click-to-focus and leaves the control unnamed.",
61
+ "Labelling a group of controls with one of these. A `RadioGroup` or `CheckboxGroup` needs a group name, not a label pointing at one member."
62
+ ],
50
63
  "specimens": [
51
64
  {
52
65
  "title": "Field / FieldLabel / FieldDescription / FieldError",
@@ -61,6 +74,5 @@
61
74
  "note": "The labelling wrapper. Base UI generates the ids, so the label names the control with no htmlFor bookkeeping, and `invalid` stamps the whole subtree.",
62
75
  "interaction": "clicking the label focuses the control; the error line is announced when it appears."
63
76
  }
64
- ],
65
- "todo": true
77
+ ]
66
78
  }
@@ -33,7 +33,8 @@
33
33
  "--cue-space-1",
34
34
  "--cue-space-2",
35
35
  "--cue-text-label",
36
- "--cue-text-micro"
36
+ "--cue-text-micro",
37
+ "--cue-tracking-caps-tight"
37
38
  ],
38
39
  "summary": "The label, description and validation wrapper a form control belongs in.",
39
40
  "examples": [
@@ -76,10 +76,21 @@
76
76
  "language": "tsx"
77
77
  }
78
78
  ],
79
- "status": "todo-docs",
79
+ "status": "stable",
80
80
  "url": "/docs/components/file-tree",
81
81
  "mdUrl": "/docs/components/file-tree.md",
82
82
  "jsonUrl": "/r/components/file-tree.json",
83
+ "whenToUse": [
84
+ "The full set of files a run changed, with per-file churn and a total across them.",
85
+ "A live run where files land one at a time, by raising `visibleCount`."
86
+ ],
87
+ "whenNotToUse": [
88
+ "One file's line-by-line change."
89
+ ],
90
+ "commonMistakes": [
91
+ "Passing nested `children` arrays. `nodes` is a flat list in display order and nesting comes from each node's depth.",
92
+ "Rendering the whole tree at once during a live run. `visibleCount` is what you raise as the run touches more files."
93
+ ],
83
94
  "specimens": [
84
95
  {
85
96
  "title": "FileTree",
@@ -91,6 +102,5 @@
91
102
  "note": "Everything a run touched, with the churn per file. The list is flat and the nesting is `depth`, which is what lets a row appear the moment the agent reports it rather than after its folder is complete.",
92
103
  "interaction": "rows highlight on hover to keep the eye on one line; nothing here is clickable, because the tree reports rather than navigates."
93
104
  }
94
- ],
95
- "todo": true
105
+ ]
96
106
  }
@@ -176,7 +176,7 @@
176
176
  "--cue-text-label",
177
177
  "--cue-text-ui"
178
178
  ],
179
- "summary": "A drop zone with a file list under it.",
179
+ "summary": "A drop zone with a file list under it — and the zone is a real button.",
180
180
  "examples": [
181
181
  {
182
182
  "title": "Usage",
@@ -184,10 +184,21 @@
184
184
  "language": "tsx"
185
185
  }
186
186
  ],
187
- "status": "todo-docs",
187
+ "status": "stable",
188
188
  "url": "/docs/components/file-upload",
189
189
  "mdUrl": "/docs/components/file-upload.md",
190
190
  "jsonUrl": "/r/components/file-upload.json",
191
+ "whenToUse": [
192
+ "Any upload. Dropping is the mouse affordance; pressing Enter on the focused zone opens the file dialog.",
193
+ "Uploads with rules: `accept`, `maxSize` and `maxFiles` are enforced before `onFilesAccepted`."
194
+ ],
195
+ "whenNotToUse": [
196
+ "A single file chosen rarely, where a plain button reads better than a target."
197
+ ],
198
+ "commonMistakes": [
199
+ "Rebuilding it as a `<div>` with a drop handler. A zone that only accepts drops is unusable without a pointer (WCAG 2.1.1), and it is the single most common defect in hand-rolled uploaders.",
200
+ "Handling only `onFilesAccepted`. Rejections are where the user learns the rule — `onFilesRejected` is not optional in practice."
201
+ ],
191
202
  "specimens": [
192
203
  {
193
204
  "title": "FileUpload",
@@ -199,6 +210,5 @@
199
210
  "note": "A drop zone that is also a button, so a keyboard can reach it. Rejections say which rule they broke.",
200
211
  "interaction": "the zone lights on drag-over; Enter or Space opens the file dialog."
201
212
  }
202
- ],
203
- "todo": true
213
+ ]
204
214
  }
@@ -28,10 +28,19 @@
28
28
  "language": "tsx"
29
29
  }
30
30
  ],
31
- "status": "todo-docs",
31
+ "status": "stable",
32
32
  "url": "/docs/components/flow-background",
33
33
  "mdUrl": "/docs/components/flow-background.md",
34
34
  "jsonUrl": "/r/components/flow-background.json",
35
+ "whenToUse": [
36
+ "Behind any flow canvas."
37
+ ],
38
+ "whenNotToUse": [
39
+ "Outside React Flow."
40
+ ],
41
+ "commonMistakes": [
42
+ "Passing `color`. Leave it unset — it writes `--xy-background-pattern-color-props`, which outranks the theme map, so passing a colour is how you opt *out* of theming rather than how you theme it."
43
+ ],
35
44
  "specimens": [
36
45
  {
37
46
  "title": "useFlowTheme / FlowControls / FlowBackground / SignalEdge",
@@ -45,6 +54,5 @@
45
54
  "note": "The hook returns the `--xy-*` token map plus stable `edgeTypes` and `defaultEdgeOptions` identities. Every part also publishes the map on its own root, so the group is correct before flow.css is imported and correct again after.",
46
55
  "interaction": "the controls capsule is an overlay surface; a live wire animates its dash overlay and stops under prefers-reduced-motion."
47
56
  }
48
- ],
49
- "todo": true
57
+ ]
50
58
  }
@@ -28,10 +28,19 @@
28
28
  "language": "tsx"
29
29
  }
30
30
  ],
31
- "status": "todo-docs",
31
+ "status": "stable",
32
32
  "url": "/docs/components/flow-controls",
33
33
  "mdUrl": "/docs/components/flow-controls.md",
34
34
  "jsonUrl": "/r/components/flow-controls.json",
35
+ "whenToUse": [
36
+ "On any flow canvas the user pans and zooms."
37
+ ],
38
+ "whenNotToUse": [
39
+ "As a general toolbar. Use `Toolbar`."
40
+ ],
41
+ "commonMistakes": [
42
+ "Moving the shape rules into a class. `border-radius` and `overflow` have no `--xy-*` hook, so the library's own rule would win — and `overflow: hidden` is what makes the first and last buttons take the capsule's corners instead of squaring them off."
43
+ ],
35
44
  "specimens": [
36
45
  {
37
46
  "title": "useFlowTheme / FlowControls / FlowBackground / SignalEdge",
@@ -45,6 +54,5 @@
45
54
  "note": "The hook returns the `--xy-*` token map plus stable `edgeTypes` and `defaultEdgeOptions` identities. Every part also publishes the map on its own root, so the group is correct before flow.css is imported and correct again after.",
46
55
  "interaction": "the controls capsule is an overlay surface; a live wire animates its dash overlay and stops under prefers-reduced-motion."
47
56
  }
48
- ],
49
- "todo": true
57
+ ]
50
58
  }
@@ -66,10 +66,21 @@
66
66
  "language": "tsx"
67
67
  }
68
68
  ],
69
- "status": "todo-docs",
69
+ "status": "stable",
70
70
  "url": "/docs/components/flow-graph",
71
71
  "mdUrl": "/docs/components/flow-graph.md",
72
72
  "jsonUrl": "/r/components/flow-graph.json",
73
+ "whenToUse": [
74
+ "Work that branches and rejoins, where a list would lose the shape.",
75
+ "A graph drawn progressively, where an edge stays dim until both of its ends have been reached."
76
+ ],
77
+ "whenNotToUse": [
78
+ "A graph you want laid out for you. Layout is explicit and the element runs no solver."
79
+ ],
80
+ "commonMistakes": [
81
+ "Leaving grid positions off the nodes. Every node carries its own, because nothing solves the layout.",
82
+ "Wondering why an edge is dim. An edge dims until both of its ends are visible, which `visibleCount` controls."
83
+ ],
73
84
  "specimens": [
74
85
  {
75
86
  "title": "FlowGraph",
@@ -81,6 +92,5 @@
81
92
  "note": "Work as a graph rather than a list, for the runs that fan out and rejoin — here the two trusses are patched in parallel and the render waits for both. Layout is explicit: every node carries its own column and row and the element runs no solver, which is what keeps a re-render from rearranging a diagram somebody was reading.",
82
93
  "interaction": "none. `visibleCount` is what makes the graph arrive a node at a time, and an edge stays dim until both of its ends have been reached."
83
94
  }
84
- ],
85
- "todo": true
95
+ ]
86
96
  }
@@ -17,10 +17,20 @@
17
17
  "tokensUsed": [],
18
18
  "summary": "A folder somebody made: a shelf of bookmarks, filed by hand.",
19
19
  "examples": [],
20
- "status": "todo-docs",
20
+ "status": "stable",
21
21
  "url": "/docs/components/folder-icon",
22
22
  "mdUrl": "/docs/components/folder-icon.md",
23
23
  "jsonUrl": "/r/components/folder-icon.json",
24
+ "whenToUse": [
25
+ "A collection a person curated deliberately."
26
+ ],
27
+ "whenNotToUse": [
28
+ "A result set a query returned. The tab is what says a person put these here on purpose.",
29
+ "An audience. Use `AudienceIcon` — its members are people, not artefacts."
30
+ ],
31
+ "commonMistakes": [
32
+ "Replacing it with a plain rounded box, which in this library is a panel, a card or a dialog — and which drops the one thing a folder has to say."
33
+ ],
24
34
  "specimens": [
25
35
  {
26
36
  "title": "The container icon set",
@@ -41,6 +51,5 @@
41
51
  "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
42
52
  "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
43
53
  }
44
- ],
45
- "todo": true
54
+ ]
46
55
  }
@@ -65,6 +65,7 @@
65
65
  "defaultVariants": {},
66
66
  "tokensUsed": [
67
67
  "--cue-band-rule",
68
+ "--cue-band-rule-color",
68
69
  "--cue-band-y",
69
70
  "--cue-border",
70
71
  "--cue-fg-subtle",
@@ -45,10 +45,19 @@
45
45
  ],
46
46
  "summary": "A fraction inside an expression — numerator, rule, denominator — set inline and aligned to the middle.",
47
47
  "examples": [],
48
- "status": "todo-docs",
48
+ "status": "stable",
49
49
  "url": "/docs/components/frac",
50
50
  "mdUrl": "/docs/components/frac.md",
51
51
  "jsonUrl": "/r/components/frac.json",
52
+ "whenToUse": [
53
+ "A fraction set inside a line of an expression."
54
+ ],
55
+ "whenNotToUse": [
56
+ "A display-sized equation of its own. This sets inline and aligns to the middle of the line."
57
+ ],
58
+ "commonMistakes": [
59
+ "Writing the fraction as text with a slash instead of passing `over` and `under`, which loses the rule and the middle alignment."
60
+ ],
52
61
  "specimens": [
53
62
  {
54
63
  "title": "MathBlock",
@@ -63,6 +72,5 @@
63
72
  "note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
64
73
  "interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
65
74
  }
66
- ],
67
- "todo": true
75
+ ]
68
76
  }
@@ -158,7 +158,8 @@
158
158
  "--cue-border",
159
159
  "--cue-fg-subtle",
160
160
  "--cue-font-mono",
161
- "--cue-hair-strong",
161
+ "--cue-paint-screen",
162
+ "--cue-paint-screen-size",
162
163
  "--cue-radius-control",
163
164
  "--cue-radius-surface",
164
165
  "--cue-space-2",
@@ -58,10 +58,21 @@
58
58
  ],
59
59
  "summary": "The wait before there is anything to show.",
60
60
  "examples": [],
61
- "status": "todo-docs",
61
+ "status": "stable",
62
62
  "url": "/docs/components/generation-loader",
63
63
  "mdUrl": "/docs/components/generation-loader.md",
64
64
  "jsonUrl": "/r/components/generation-loader.json",
65
+ "whenToUse": [
66
+ "The gap before the model has produced anything at all, under a shimmering status label.",
67
+ "A replay you can pause: the caller advances `tick`, so a paused replay pauses the loader too."
68
+ ],
69
+ "whenNotToUse": [
70
+ "Work with named stages and an estimate. This is the empty wait, not a progress bar."
71
+ ],
72
+ "commonMistakes": [
73
+ "Expecting it to animate on its own. `tick` drives both the pixel pattern and the elapsed seconds counter.",
74
+ "Leaving it on screen once content arrives. It is for the wait before there is anything to show."
75
+ ],
65
76
  "specimens": [
66
77
  {
67
78
  "title": "GenerationLoader",
@@ -73,6 +84,5 @@
73
84
  "note": "The wait before there is anything at all to show. Nine cells keep time under a shimmering label, driven by a tick the caller advances — so a paused replay pauses the loader too, which a CSS animation could never do. The three variants are three shapes for the same clock.",
74
85
  "interaction": "none. The matrix is aria-hidden; the label is the only thing a screen reader gets, which is the right amount."
75
86
  }
76
- ],
77
- "todo": true
87
+ ]
78
88
  }
@@ -97,7 +97,7 @@
97
97
  "variants": {},
98
98
  "defaultVariants": {},
99
99
  "tokensUsed": [],
100
- "summary": "The vocabulary a model composes at runtime.",
100
+ "summary": "The vocabulary a model composes at runtime: a JSON tree of intrinsic names, turned into elements.",
101
101
  "examples": [
102
102
  {
103
103
  "title": "Usage",
@@ -105,10 +105,23 @@
105
105
  "language": "tsx"
106
106
  }
107
107
  ],
108
- "status": "todo-docs",
108
+ "status": "stable",
109
109
  "url": "/docs/components/generative-ui",
110
110
  "mdUrl": "/docs/components/generative-ui.md",
111
111
  "jsonUrl": "/r/components/generative-ui.json",
112
+ "whenToUse": [
113
+ "Rendering a component tree a language model emitted as JSON, where there is no compile step between the two and there cannot be one.",
114
+ "A widget that has to draw inside somebody else's console: the stylesheet is plain `[data-aui]` CSS and the tree it draws carries no `class` attribute anywhere."
115
+ ],
116
+ "whenNotToUse": [
117
+ "A tree a programmer wrote. Every other component in the library is handed props at a call site, where a wrong one costs a type error.",
118
+ "Markdown you expect parsed. This subpath ships no parser and will not acquire one — pass `renderMarkdown`, which is shaped for `@cueplusplus/ui/elements/markdown`."
119
+ ],
120
+ "commonMistakes": [
121
+ "Casting the parsed tool result to `GenerativeNode` before passing it. `spec` is `unknown` on purpose, because a cast is a claim about the bytes that nobody is in a position to make.",
122
+ "Wrapping it in an error boundary and expecting throws. It never throws: an unknown `$type` draws an in-place notice and its siblings still render, a spec that is not a tree draws a legible error state rather than a blank box, and a tree past `GENERATIVE_MAX_DEPTH` stops and says so.",
123
+ "Passing `skin` and `fidelity` inside an `AgentSurface`, which has already stamped the subtree and whose values inherit through CSS with nothing threaded."
124
+ ],
112
125
  "specimens": [
113
126
  {
114
127
  "title": "GenerativeUI",
@@ -120,6 +133,5 @@
120
133
  "note": "The one component here nobody wrote props for. A model emits a tree of 27 intrinsic names as JSON and this draws it, with no compile step in between and none possible, so the specimens are the spec objects themselves: a dashboard the model composed out of facts, a chart and a table; a patch form whose confirm hands back every named field at once; and a chart on its own. The last two are wrong on purpose. A $type from a newer catalogue draws an in-place notice and its siblings still render; a spec that is not a tree at all draws a legible error rather than the blank box that reads as a message still streaming. Neither throws, which is the whole contract. It draws from plain [data-aui] CSS with no utilities and no icon or chart package behind it, because the console a model is talking to is usually somebody else's app.",
121
134
  "interaction": "every control is a real control and takes the house focus ring; text fires on blur rather than per keystroke, since $action is a message to the model. The form specimen is live: submit it and the model's own card gains a success alert with what the desk received."
122
135
  }
123
- ],
124
- "todo": true
136
+ ]
125
137
  }