@cueplusplus/ui 0.9.0 → 0.11.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 (330) hide show
  1. package/CHANGELOG.md +337 -0
  2. package/README.md +197 -9
  3. package/dist/chrome/index.d.ts +2 -1
  4. package/dist/chrome/index.js +3 -2
  5. package/dist/chrome/inspector.d.ts +61 -0
  6. package/dist/chrome/inspector.js +121 -0
  7. package/dist/forms/input.d.ts +12 -0
  8. package/dist/forms/textarea.d.ts +12 -0
  9. package/dist/forms/toggle.d.ts +6 -0
  10. package/dist/index.d.ts +7 -3
  11. package/dist/index.js +8 -3
  12. package/dist/instruments/code-block.d.ts +35 -0
  13. package/dist/instruments/code-block.js +173 -0
  14. package/dist/instruments/index.d.ts +2 -1
  15. package/dist/instruments/index.js +2 -1
  16. package/dist/instruments/meter.d.ts +5 -1
  17. package/dist/layout/bento.d.ts +144 -0
  18. package/dist/layout/bento.js +266 -0
  19. package/dist/layout/index.d.ts +4 -2
  20. package/dist/layout/index.js +4 -2
  21. package/dist/layout/preview.d.ts +110 -0
  22. package/dist/layout/preview.js +459 -0
  23. package/dist/primitives/button.d.ts +12 -0
  24. package/dist/primitives/chip.d.ts +1 -1
  25. package/dist/system/index.d.ts +2 -2
  26. package/dist/system/index.js +2 -1
  27. package/dist/system/overrides.d.ts +38 -1
  28. package/dist/system/overrides.js +40 -1
  29. package/manifest/components/accordion.json +24 -6
  30. package/manifest/components/activity-graph.json +20 -5
  31. package/manifest/components/agent-card.json +37 -9
  32. package/manifest/components/agent-handoff.json +21 -5
  33. package/manifest/components/agent-mode-badge.json +22 -4
  34. package/manifest/components/agent-pile.json +38 -8
  35. package/manifest/components/agent-plan.json +9 -2
  36. package/manifest/components/agent-status.json +17 -3
  37. package/manifest/components/agent-surface.json +26 -11
  38. package/manifest/components/alert-dialog.json +29 -5
  39. package/manifest/components/animated-number.json +14 -6
  40. package/manifest/components/app-bar.json +66 -13
  41. package/manifest/components/app-shell.json +133 -31
  42. package/manifest/components/app-window-frame.json +28 -6
  43. package/manifest/components/approval-card.json +37 -7
  44. package/manifest/components/artifact-card.json +16 -4
  45. package/manifest/components/ask-box.json +99 -21
  46. package/manifest/components/audience-icon.json +1 -7
  47. package/manifest/components/autocomplete.json +80 -18
  48. package/manifest/components/avatar-group.json +13 -2
  49. package/manifest/components/avatar.json +22 -4
  50. package/manifest/components/background-inbox.json +9 -2
  51. package/manifest/components/bento.json +306 -0
  52. package/manifest/components/branch-picker.json +29 -7
  53. package/manifest/components/breadcrumb.json +13 -3
  54. package/manifest/components/button-group.json +21 -4
  55. package/manifest/components/button.json +41 -4
  56. package/manifest/components/canvas-split-body.json +4 -1
  57. package/manifest/components/canvas-split-header.json +17 -4
  58. package/manifest/components/canvas-split-line.json +4 -1
  59. package/manifest/components/canvas-split-message.json +8 -1
  60. package/manifest/components/card.json +14 -3
  61. package/manifest/components/carousel.json +54 -12
  62. package/manifest/components/catalogue-icon.json +1 -7
  63. package/manifest/components/channel-beta-icon.json +1 -7
  64. package/manifest/components/channel-matrix.json +80 -15
  65. package/manifest/components/channel-released-icon.json +1 -7
  66. package/manifest/components/chart-container.json +26 -10
  67. package/manifest/components/chart-ramp.json +13 -3
  68. package/manifest/components/chart-swatch.json +9 -2
  69. package/manifest/components/chart-tooltip-content.json +31 -7
  70. package/manifest/components/chart.json +30 -6
  71. package/manifest/components/chat-panel-composer.json +9 -2
  72. package/manifest/components/checkbox-group.json +4 -2
  73. package/manifest/components/checkbox.json +17 -4
  74. package/manifest/components/checkpoint-history.json +13 -3
  75. package/manifest/components/chip.json +35 -5
  76. package/manifest/components/clamp.json +30 -7
  77. package/manifest/components/cli-tool-icon.json +1 -7
  78. package/manifest/components/code-block.json +106 -0
  79. package/manifest/components/code-diff.json +20 -5
  80. package/manifest/components/code-runner.json +32 -6
  81. package/manifest/components/collapsible.json +16 -4
  82. package/manifest/components/color-area.json +4 -1
  83. package/manifest/components/color-field.json +13 -3
  84. package/manifest/components/color-picker.json +75 -17
  85. package/manifest/components/color-slider.json +12 -3
  86. package/manifest/components/color-swatch.json +13 -2
  87. package/manifest/components/colors-section.json +8 -4
  88. package/manifest/components/combobox.json +81 -18
  89. package/manifest/components/command-palette.json +57 -13
  90. package/manifest/components/compaction-row.json +35 -7
  91. package/manifest/components/comparison-card.json +17 -4
  92. package/manifest/components/composer-attachment-chip.json +9 -2
  93. package/manifest/components/composer-bar.json +4 -1
  94. package/manifest/components/composer-command-item.json +8 -2
  95. package/manifest/components/composer-context.json +4 -1
  96. package/manifest/components/composer-input.json +5 -1
  97. package/manifest/components/composer-menu-item.json +4 -1
  98. package/manifest/components/composer-menu.json +12 -2
  99. package/manifest/components/composer-model-item.json +8 -2
  100. package/manifest/components/composer-model-trigger.json +8 -2
  101. package/manifest/components/composer-person-item.json +8 -2
  102. package/manifest/components/composer-send.json +8 -2
  103. package/manifest/components/composer-voice-button.json +4 -1
  104. package/manifest/components/composer-voice.json +8 -2
  105. package/manifest/components/composer.json +76 -17
  106. package/manifest/components/computer-use.json +17 -4
  107. package/manifest/components/confidence-marker.json +13 -3
  108. package/manifest/components/connection-state.json +23 -4
  109. package/manifest/components/container.json +14 -2
  110. package/manifest/components/context-breakdown.json +8 -2
  111. package/manifest/components/context-menu.json +16 -4
  112. package/manifest/components/context-usage.json +16 -4
  113. package/manifest/components/conversation-search.json +22 -5
  114. package/manifest/components/copy-button.json +32 -7
  115. package/manifest/components/cost-meter.json +12 -3
  116. package/manifest/components/cue-logotype.json +17 -3
  117. package/manifest/components/cue-mark.json +17 -3
  118. package/manifest/components/cue-portal-frame.json +13 -3
  119. package/manifest/components/data-row.json +21 -7
  120. package/manifest/components/data-table-pagination.json +18 -4
  121. package/manifest/components/data-table-toolbar.json +30 -7
  122. package/manifest/components/data-tree.json +42 -9
  123. package/manifest/components/date-field.json +13 -2
  124. package/manifest/components/date-picker.json +81 -19
  125. package/manifest/components/date-range-picker.json +81 -19
  126. package/manifest/components/day-separator.json +4 -1
  127. package/manifest/components/delegation-card.json +64 -12
  128. package/manifest/components/density.json +24 -4
  129. package/manifest/components/description-list.json +8 -1
  130. package/manifest/components/diagram.json +33 -7
  131. package/manifest/components/dialog.json +29 -6
  132. package/manifest/components/disclosure.json +31 -7
  133. package/manifest/components/dmx-bar.json +16 -4
  134. package/manifest/components/dmx-strip.json +20 -5
  135. package/manifest/components/document-reference.json +21 -5
  136. package/manifest/components/draft-restore.json +18 -4
  137. package/manifest/components/drawer.json +30 -6
  138. package/manifest/components/dropdown-menu.json +55 -10
  139. package/manifest/components/edit-message.json +32 -7
  140. package/manifest/components/elements-command-palette.json +27 -6
  141. package/manifest/components/elements-data-table.json +9 -2
  142. package/manifest/components/elements-timeline.json +8 -2
  143. package/manifest/components/elicitation-form.json +31 -6
  144. package/manifest/components/empty-state-composer.json +9 -2
  145. package/manifest/components/empty-state-suggestion.json +4 -1
  146. package/manifest/components/empty-state.json +25 -5
  147. package/manifest/components/end-of-turn-summary.json +16 -4
  148. package/manifest/components/env-var-input.json +54 -12
  149. package/manifest/components/error-state.json +17 -4
  150. package/manifest/components/export-dialog.json +27 -8
  151. package/manifest/components/eyebrow.json +4 -1
  152. package/manifest/components/feedback-dialog.json +33 -7
  153. package/manifest/components/field-description.json +4 -1
  154. package/manifest/components/field-error.json +13 -3
  155. package/manifest/components/field-label.json +4 -1
  156. package/manifest/components/field.json +4 -1
  157. package/manifest/components/file-tree.json +16 -4
  158. package/manifest/components/file-upload.json +58 -13
  159. package/manifest/components/flow-graph.json +12 -3
  160. package/manifest/components/folder-icon.json +1 -7
  161. package/manifest/components/footer.json +24 -4
  162. package/manifest/components/frac.json +10 -2
  163. package/manifest/components/generation-loader.json +17 -3
  164. package/manifest/components/generative-ui.json +39 -7
  165. package/manifest/components/grid.json +56 -5
  166. package/manifest/components/group-bar.json +25 -6
  167. package/manifest/components/guardrail-notice.json +22 -5
  168. package/manifest/components/hover-card.json +45 -8
  169. package/manifest/components/icon-button.json +22 -4
  170. package/manifest/components/image-generation.json +8 -2
  171. package/manifest/components/info-tip.json +42 -7
  172. package/manifest/components/inline-citation.json +14 -3
  173. package/manifest/components/input-group.json +24 -5
  174. package/manifest/components/input.json +33 -3
  175. package/manifest/components/inspector.json +199 -0
  176. package/manifest/components/item.json +42 -8
  177. package/manifest/components/job-progress.json +25 -6
  178. package/manifest/components/launcher-bubble.json +32 -7
  179. package/manifest/components/ledger.json +87 -19
  180. package/manifest/components/link.json +16 -3
  181. package/manifest/components/live-region-announcer.json +21 -5
  182. package/manifest/components/log-viewer.json +42 -10
  183. package/manifest/components/map-answer.json +17 -4
  184. package/manifest/components/markdown-text.json +36 -5
  185. package/manifest/components/math-block.json +12 -3
  186. package/manifest/components/mcp-server-icon.json +1 -7
  187. package/manifest/components/mcp-server-panel.json +18 -4
  188. package/manifest/components/memory-chips.json +9 -2
  189. package/manifest/components/menubar.json +33 -7
  190. package/manifest/components/message-actions.json +32 -7
  191. package/manifest/components/message-attachments.json +9 -2
  192. package/manifest/components/message-branches.json +14 -3
  193. package/manifest/components/message-list.json +27 -6
  194. package/manifest/components/message-pair.json +25 -5
  195. package/manifest/components/message-queue.json +13 -3
  196. package/manifest/components/message-timing.json +8 -2
  197. package/manifest/components/message.json +41 -9
  198. package/manifest/components/meter.json +43 -7
  199. package/manifest/components/mobile-composer.json +47 -10
  200. package/manifest/components/model-picker.json +13 -3
  201. package/manifest/components/multi-select.json +78 -17
  202. package/manifest/components/musical-time-input.json +34 -8
  203. package/manifest/components/navigation-menu.json +54 -12
  204. package/manifest/components/node-card.json +42 -7
  205. package/manifest/components/node-handle.json +17 -2
  206. package/manifest/components/number-field.json +28 -6
  207. package/manifest/components/number-ticker.json +8 -2
  208. package/manifest/components/onboarding.json +18 -4
  209. package/manifest/components/otp-field.json +43 -10
  210. package/manifest/components/page-shell.json +35 -6
  211. package/manifest/components/pagination.json +21 -5
  212. package/manifest/components/panel-header.json +15 -3
  213. package/manifest/components/password-input.json +58 -8
  214. package/manifest/components/permission-grant.json +28 -5
  215. package/manifest/components/permission-scopes.json +57 -12
  216. package/manifest/components/piano-keyboard.json +38 -9
  217. package/manifest/components/plussie.json +34 -5
  218. package/manifest/components/popover.json +45 -8
  219. package/manifest/components/preset-section.json +12 -5
  220. package/manifest/components/preview.json +202 -0
  221. package/manifest/components/progress.json +25 -6
  222. package/manifest/components/prompt-library.json +27 -6
  223. package/manifest/components/queue-dock.json +36 -8
  224. package/manifest/components/quota-banner.json +25 -6
  225. package/manifest/components/quote-reply.json +29 -7
  226. package/manifest/components/radio-group.json +12 -2
  227. package/manifest/components/radio.json +17 -3
  228. package/manifest/components/rating.json +60 -13
  229. package/manifest/components/read-aloud.json +35 -8
  230. package/manifest/components/reasoning-effort.json +17 -4
  231. package/manifest/components/reasoning-panel.json +33 -8
  232. package/manifest/components/recommendation-card.json +35 -10
  233. package/manifest/components/regenerate-menu.json +22 -5
  234. package/manifest/components/replay-player.json +29 -7
  235. package/manifest/components/research-report.json +12 -3
  236. package/manifest/components/resizable.json +4 -1
  237. package/manifest/components/retrieval-chunks.json +16 -4
  238. package/manifest/components/revert-dock.json +61 -14
  239. package/manifest/components/reviewable-diff.json +23 -5
  240. package/manifest/components/risk-badge.json +18 -3
  241. package/manifest/components/row.json +17 -4
  242. package/manifest/components/schedule-card.json +25 -6
  243. package/manifest/components/score-breakdown.json +20 -5
  244. package/manifest/components/scroll-anchor.json +13 -3
  245. package/manifest/components/scroll-area.json +31 -8
  246. package/manifest/components/scrollable-tabs-list.json +12 -4
  247. package/manifest/components/scrub-input.json +84 -18
  248. package/manifest/components/seam-cell.json +19 -3
  249. package/manifest/components/seam-grid.json +12 -3
  250. package/manifest/components/search-input.json +69 -10
  251. package/manifest/components/section-header.json +36 -8
  252. package/manifest/components/segmented-control.json +50 -11
  253. package/manifest/components/select.json +74 -16
  254. package/manifest/components/separator.json +4 -1
  255. package/manifest/components/settings-panel.json +41 -9
  256. package/manifest/components/shape-section.json +8 -4
  257. package/manifest/components/shared-conversation.json +21 -5
  258. package/manifest/components/sheet.json +29 -6
  259. package/manifest/components/shimmer-label.json +4 -2
  260. package/manifest/components/sidebar.json +60 -13
  261. package/manifest/components/skill-icon.json +1 -7
  262. package/manifest/components/slider.json +22 -5
  263. package/manifest/components/sources.json +17 -4
  264. package/manifest/components/sparkline.json +17 -4
  265. package/manifest/components/speaker-identity.json +4 -1
  266. package/manifest/components/spec-sheet.json +16 -4
  267. package/manifest/components/spectrum-visualizer.json +41 -10
  268. package/manifest/components/spinner.json +12 -2
  269. package/manifest/components/stack-icon.json +1 -7
  270. package/manifest/components/stack.json +54 -7
  271. package/manifest/components/stacks-matrix-icon.json +1 -7
  272. package/manifest/components/stat.json +28 -4
  273. package/manifest/components/status-bar.json +50 -9
  274. package/manifest/components/status-dot.json +23 -4
  275. package/manifest/components/stepper.json +22 -5
  276. package/manifest/components/stopped-run.json +19 -4
  277. package/manifest/components/streaming-text.json +12 -3
  278. package/manifest/components/subagent-list.json +21 -5
  279. package/manifest/components/suggestions.json +27 -5
  280. package/manifest/components/swap-label.json +18 -4
  281. package/manifest/components/switch.json +18 -3
  282. package/manifest/components/table-scroll-region.json +4 -1
  283. package/manifest/components/table.json +54 -11
  284. package/manifest/components/tabs.json +16 -5
  285. package/manifest/components/tags-input.json +79 -17
  286. package/manifest/components/tail-status.json +37 -8
  287. package/manifest/components/terminal-block.json +25 -5
  288. package/manifest/components/terminal-frame.json +34 -8
  289. package/manifest/components/textarea.json +28 -3
  290. package/manifest/components/theme-configurator.json +47 -11
  291. package/manifest/components/theme-provider.json +79 -15
  292. package/manifest/components/thinking-indicator.json +8 -2
  293. package/manifest/components/thread-list.json +13 -3
  294. package/manifest/components/thread-search.json +22 -5
  295. package/manifest/components/threshold-rail.json +77 -14
  296. package/manifest/components/time-boundary.json +8 -2
  297. package/manifest/components/time-field.json +13 -2
  298. package/manifest/components/timeline-ruler.json +51 -12
  299. package/manifest/components/timeline.json +19 -3
  300. package/manifest/components/title-bar.json +19 -4
  301. package/manifest/components/toast.json +12 -3
  302. package/manifest/components/todo-list.json +8 -2
  303. package/manifest/components/toggle-group.json +33 -7
  304. package/manifest/components/toggle.json +33 -4
  305. package/manifest/components/token-editor.json +26 -7
  306. package/manifest/components/tool-call-card.json +83 -16
  307. package/manifest/components/tool-call.json +37 -9
  308. package/manifest/components/tool-error.json +34 -8
  309. package/manifest/components/tool-group.json +17 -4
  310. package/manifest/components/tool-timeline.json +37 -9
  311. package/manifest/components/toolbar.json +37 -8
  312. package/manifest/components/tooltip.json +41 -7
  313. package/manifest/components/trace-waterfall.json +12 -3
  314. package/manifest/components/tree-visibility-toggle.json +18 -3
  315. package/manifest/components/tree.json +52 -11
  316. package/manifest/components/turn-footer.json +36 -8
  317. package/manifest/components/two-step-button.json +46 -9
  318. package/manifest/components/typing-indicator.json +8 -1
  319. package/manifest/components/universe-grid.json +37 -10
  320. package/manifest/components/unread-divider.json +4 -1
  321. package/manifest/components/usage-chart.json +46 -9
  322. package/manifest/components/verdict-row.json +20 -5
  323. package/manifest/components/voice-conversation.json +37 -7
  324. package/manifest/components/web-preview.json +23 -5
  325. package/manifest/components/web-search.json +20 -5
  326. package/manifest/components/work-collapse.json +30 -7
  327. package/manifest/fixtures.json +111 -0
  328. package/manifest/manifest.json +354 -297
  329. package/manifest/tokens.json +2 -2
  330. package/package.json +8 -7
@@ -12,98 +12,163 @@
12
12
  "type": "readonly ThemeManifest[]",
13
13
  "required": false,
14
14
  "defaultValue": null,
15
- "description": "The registry: an ordered array of theme manifests, the first of which is\nthe default theme.\n\nA prop rather than a side effect, so the server render and the client\nrender are handed the same array and nothing depends on which module an app\nhappened to import first. Each entry is a `manifest.json` from a\n`@cueplusplus/theme-<name>` package; this library never discovers a theme by\nitself, because which themes a product ships is an application decision.\n\nOptional for one release, defaulting to `[]` with a development warning. An\napp that registers nothing gets the base axes and no registry: any\nwell-formed name is accepted as a theme (so a visitor's stored preference\nstill restores on first paint), density and font validate against the base\nladder and pairings, and `useTheme().manifest` is `null`. What it *paints*\nis a separate question with a separate answer — whichever `[data-theme]`\nblocks its stylesheets declare, which is the blank base only when none of\nthem declares the stamped name.\n\nA nested provider that passes none inherits the ambient registry.\n\nOne disclosure to be aware of: {@link prepaintScript } inlines the\nregistered **names** — and each theme's `supportsLight` flag, and the names\nof any rung or pairing it adds — into the blocking script in every page's\nHTML, because first paint has to judge a stored preference before any\nmodule loads. No colours, no geometry, no package names, and only what an\napp passes here. But an app that registers\na per-customer theme is publishing that customer's name to every visitor\nwho views source, so register per-customer themes per response rather than\nglobally."
15
+ "description": "The registry: an ordered array of theme manifests, the first of which is\nthe default theme.\n\nA prop rather than a side effect, so the server render and the client\nrender are handed the same array and nothing depends on which module an app\nhappened to import first. Each entry is a `manifest.json` from a\n`@cueplusplus/theme-<name>` package; this library never discovers a theme by\nitself, because which themes a product ships is an application decision.\n\nOptional for one release, defaulting to `[]` with a development warning. An\napp that registers nothing gets the base axes and no registry: any\nwell-formed name is accepted as a theme (so a visitor's stored preference\nstill restores on first paint), density and font validate against the base\nladder and pairings, and `useTheme().manifest` is `null`. What it *paints*\nis a separate question with a separate answer — whichever `[data-theme]`\nblocks its stylesheets declare, which is the blank base only when none of\nthem declares the stamped name.\n\nA nested provider that passes none inherits the ambient registry.\n\nOne disclosure to be aware of: {@link prepaintScript } inlines the\nregistered **names** — and each theme's `supportsLight` flag, and the names\nof any rung or pairing it adds — into the blocking script in every page's\nHTML, because first paint has to judge a stored preference before any\nmodule loads. No colours, no geometry, no package names, and only what an\napp passes here. But an app that registers\na per-customer theme is publishing that customer's name to every visitor\nwho views source, so register per-customer themes per response rather than\nglobally.",
16
+ "control": {
17
+ "kind": "array"
18
+ }
16
19
  },
17
20
  {
18
21
  "name": "theme",
19
22
  "type": "string",
20
23
  "required": false,
21
24
  "defaultValue": null,
22
- "description": "Initial theme preset. Defaults to the first registered manifest's name, or\n`\"cue\"` with nothing registered. Changing it after mount adopts the new value."
25
+ "description": "Initial theme preset. Defaults to the first registered manifest's name, or\n`\"cue\"` with nothing registered. Changing it after mount adopts the new value.",
26
+ "control": {
27
+ "kind": "string"
28
+ }
23
29
  },
24
30
  {
25
31
  "name": "density",
26
32
  "type": "\"normal\" | \"large\" | \"compact\" | \"ultra-compact\" | \"ultra-large\"",
27
33
  "required": false,
28
34
  "defaultValue": null,
29
- "description": "Initial density level.\n\nDefaults to the rung the active theme's manifest names in\n`densities.default`, and to `\"compact\"` when it names none — spec §5's\nrule, and the same one `resolve()` applies when no rung is wanted, so a\ntheme opens on the rung it prefers whether it is read from JS or painted\nby its own stylesheet. Naming a rung here overrides that for every theme:\na consumer who named one named it deliberately.\n\nChanging it after mount adopts the new value; dropping it does not — a\nparent that stops naming a rung is not asking to move back to the theme's."
35
+ "description": "Initial density level.\n\nDefaults to the rung the active theme's manifest names in\n`densities.default`, and to `\"compact\"` when it names none — spec §5's\nrule, and the same one `resolve()` applies when no rung is wanted, so a\ntheme opens on the rung it prefers whether it is read from JS or painted\nby its own stylesheet. Naming a rung here overrides that for every theme:\na consumer who named one named it deliberately.\n\nChanging it after mount adopts the new value; dropping it does not — a\nparent that stops naming a rung is not asking to move back to the theme's.",
36
+ "control": {
37
+ "kind": "enum",
38
+ "members": [
39
+ "normal",
40
+ "large",
41
+ "compact",
42
+ "ultra-compact",
43
+ "ultra-large"
44
+ ]
45
+ }
30
46
  },
31
47
  {
32
48
  "name": "mode",
33
49
  "type": "\"system\" | \"dark\" | \"light\"",
34
50
  "required": false,
35
51
  "defaultValue": "dark",
36
- "description": "Initial mode. Defaults to `\"dark\"`; `\"system\"` tracks `prefers-color-scheme`."
52
+ "description": "Initial mode. Defaults to `\"dark\"`; `\"system\"` tracks `prefers-color-scheme`.",
53
+ "control": {
54
+ "kind": "enum",
55
+ "members": [
56
+ "system",
57
+ "dark",
58
+ "light"
59
+ ]
60
+ }
37
61
  },
38
62
  {
39
63
  "name": "font",
40
64
  "type": "\"source\" | \"system\" | \"geist\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\"",
41
65
  "required": false,
42
66
  "defaultValue": null,
43
- "description": "Initial font pairing.\n\nDefaults to the pairing the active theme's manifest names in\n`fontPairings.default` — §5's rule, the density prop's rule one axis over\n— and to `\"system\"` when it names none: the platform's own faces, nothing\ndownloaded, and the theme keeps whatever monospace it authored.\n\nA pairing that needs delivering is a set of *names*: this library ships no\nfont files, and a pairing nobody delivers falls through its stack to the\nplatform rather than failing. See `FONT_PAIRINGS[font].faces` for the\ncustom properties an app assigns to make one resolve.\n\n**Root-level only.** There is no font island: a nested provider forwards\nthis axis to the root, ignores this prop, and its `setFont` drives the root.\nA page that changed face halfway down is a page with a bug, and a specimen\nthat genuinely wants one — a picker row, a docs page showing all eight —\nneeds nothing from this library but `data-font` on a `<div>`."
67
+ "description": "Initial font pairing.\n\nDefaults to the pairing the active theme's manifest names in\n`fontPairings.default` — §5's rule, the density prop's rule one axis over\n— and to `\"system\"` when it names none: the platform's own faces, nothing\ndownloaded, and the theme keeps whatever monospace it authored.\n\nA pairing that needs delivering is a set of *names*: this library ships no\nfont files, and a pairing nobody delivers falls through its stack to the\nplatform rather than failing. See `FONT_PAIRINGS[font].faces` for the\ncustom properties an app assigns to make one resolve.\n\n**Root-level only.** There is no font island: a nested provider forwards\nthis axis to the root, ignores this prop, and its `setFont` drives the root.\nA page that changed face halfway down is a page with a bug, and a specimen\nthat genuinely wants one — a picker row, a docs page showing all eight —\nneeds nothing from this library but `data-font` on a `<div>`.",
68
+ "control": {
69
+ "kind": "enum",
70
+ "members": [
71
+ "source",
72
+ "system",
73
+ "geist",
74
+ "inter",
75
+ "plex",
76
+ "roboto",
77
+ "apple",
78
+ "office"
79
+ ]
80
+ }
44
81
  },
45
82
  {
46
83
  "name": "fontScale",
47
84
  "type": "number",
48
85
  "required": false,
49
86
  "defaultValue": "1",
50
- "description": "Multiplier on every text token, published as `--cue-font-scale`. Defaults to `1`."
87
+ "description": "Multiplier on every text token, published as `--cue-font-scale`. Defaults to `1`.",
88
+ "control": {
89
+ "kind": "number"
90
+ }
51
91
  },
52
92
  {
53
93
  "name": "fontFamilies",
54
94
  "type": "FontFamilies",
55
95
  "required": false,
56
96
  "defaultValue": null,
57
- "description": "Optional app-owned font stacks, published as inline CUE font custom properties."
97
+ "description": "Optional app-owned font stacks, published as inline CUE font custom properties.",
98
+ "control": {
99
+ "kind": "opaque"
100
+ }
58
101
  },
59
102
  {
60
103
  "name": "overrides",
61
104
  "type": "TokenOverrides",
62
105
  "required": false,
63
106
  "defaultValue": null,
64
- "description": "Typed token edits layered over the active theme: colours per mode, geometry\nper rung, and the three font stacks.\n\nFor the band of edits that sit below \"publish a theme package\": one accent\nfor a tenant, a stack the app already loads, a rung with two more pixels in\na touch build. Anything larger belongs in a `@cueplusplus/theme-<name>`\npackage, where a build measures it; anything smaller than this is a\n`!important` in a stray stylesheet, which outranks the token layer\neverywhere at once.\n\n**Colours and fonts are inline on this element**, so they inherit down the\nsubtree, beat every stylesheet without `!important`, and are re-stamped\nonto portal containers — which mount on `<body>` and inherit nothing from\nhere. They do not leak *out* of this provider: a nested provider's colour\nedit is scoped to its own subtree, and to portals opened from inside it.\n\n**Densities are one document-scoped `<style>` element**, because a rung is\nselected by attribute rather than inherited, and because\n`useControlHeight()`'s measuring probe hangs off `document.body`, where\na subtree-scoped rule would not reach it — leaving the measured height and\nthe painted control disagreeing by exactly the override. The consequence is\nworth knowing before you nest one: a nested provider's `densities` edit\nreaches the whole page, exactly as a theme's own rung rules do. Colours and\nfonts in the same object do not.\n\nAnd it cuts the other way as well, which is the half that surprises: two\nproviders editing the same rung produce two document-scoped rules of equal\nspecificity, so the **later** one in document order wins everywhere — and\nthe later one is the outer provider's, because a nested provider renders\ninside it. A nested `densities` edit does not merely leak out; an ancestor\nthat edits the same rung overrules it *inside the nested subtree too*. If\nan island needs geometry of its own, it needs a rung of its own — a name no\nancestor is editing — not the same rung with different numbers.\n\nIts rules are `[data-density=\"x\"][data-density=\"x\"]` — (0,2,0), tying a\ntheme's own `[data-theme=\"t\"] [data-density=\"x\"]` and winning on source\norder — so the precedence is: **`overrides`, then the configurator's\npersisted snapshot, then the theme, then base.**\n\n**A font override shadows the pairing for this subtree.** `data-font` is\nthe document's axis and this element deliberately never restates it (see\nthe note by `stamp` below), but `overrides.fonts` writes the resolved\n`--cue-font-*` properties directly, which is a stronger claim than the\nattribute and is the point: this is how an app says \"this product's face,\nwhatever pairing the visitor picked\".\n\nIn development the resulting palette is measured, and any required contrast\npair the edit broke — or made worse — is named on the console."
107
+ "description": "Typed token edits layered over the active theme: colours per mode, geometry\nper rung, and the three font stacks.\n\nFor the band of edits that sit below \"publish a theme package\": one accent\nfor a tenant, a stack the app already loads, a rung with two more pixels in\na touch build. Anything larger belongs in a `@cueplusplus/theme-<name>`\npackage, where a build measures it; anything smaller than this is a\n`!important` in a stray stylesheet, which outranks the token layer\neverywhere at once.\n\n**Colours and fonts are inline on this element**, so they inherit down the\nsubtree, beat every stylesheet without `!important`, and are re-stamped\nonto portal containers — which mount on `<body>` and inherit nothing from\nhere. They do not leak *out* of this provider: a nested provider's colour\nedit is scoped to its own subtree, and to portals opened from inside it.\n\n**Densities are one document-scoped `<style>` element**, because a rung is\nselected by attribute rather than inherited, and because\n`useControlHeight()`'s measuring probe hangs off `document.body`, where\na subtree-scoped rule would not reach it — leaving the measured height and\nthe painted control disagreeing by exactly the override. The consequence is\nworth knowing before you nest one: a nested provider's `densities` edit\nreaches the whole page, exactly as a theme's own rung rules do. Colours and\nfonts in the same object do not.\n\nAnd it cuts the other way as well, which is the half that surprises: two\nproviders editing the same rung produce two document-scoped rules of equal\nspecificity, so the **later** one in document order wins everywhere — and\nthe later one is the outer provider's, because a nested provider renders\ninside it. A nested `densities` edit does not merely leak out; an ancestor\nthat edits the same rung overrules it *inside the nested subtree too*. If\nan island needs geometry of its own, it needs a rung of its own — a name no\nancestor is editing — not the same rung with different numbers.\n\nIts rules are `[data-density=\"x\"][data-density=\"x\"]` — (0,2,0), tying a\ntheme's own `[data-theme=\"t\"] [data-density=\"x\"]` and winning on source\norder — so the precedence is: **`overrides`, then the configurator's\npersisted snapshot, then the theme, then base.**\n\n**A font override shadows the pairing for this subtree.** `data-font` is\nthe document's axis and this element deliberately never restates it (see\nthe note by `stamp` below), but `overrides.fonts` writes the resolved\n`--cue-font-*` properties directly, which is a stronger claim than the\nattribute and is the point: this is how an app says \"this product's face,\nwhatever pairing the visitor picked\".\n\nIn development the resulting palette is measured, and any required contrast\npair the edit broke — or made worse — is named on the console.",
108
+ "control": {
109
+ "kind": "opaque"
110
+ }
65
111
  },
66
112
  {
67
113
  "name": "storageKey",
68
114
  "type": "string",
69
115
  "required": false,
70
116
  "defaultValue": "cue-ui",
71
- "description": "localStorage key holding `{ theme, density, font, mode }`. Defaults to `\"cue-ui\"`.\nOnly the outermost provider reads or writes it — a nested provider is an\nisland whose explicit props are the point, not a second preference store."
117
+ "description": "localStorage key holding `{ theme, density, font, mode }`. Defaults to `\"cue-ui\"`.\nOnly the outermost provider reads or writes it — a nested provider is an\nisland whose explicit props are the point, not a second preference store.",
118
+ "control": {
119
+ "kind": "string"
120
+ }
72
121
  },
73
122
  {
74
123
  "name": "persistPreferences",
75
124
  "type": "boolean",
76
125
  "required": false,
77
126
  "defaultValue": "true",
78
- "description": "Restore and write root preferences in localStorage. Defaults to `true`."
127
+ "description": "Restore and write root preferences in localStorage. Defaults to `true`.",
128
+ "control": {
129
+ "kind": "boolean"
130
+ }
79
131
  },
80
132
  {
81
133
  "name": "asChild",
82
134
  "type": "boolean",
83
135
  "required": false,
84
136
  "defaultValue": "false",
85
- "description": "Stamp the single child element instead of rendering a wrapper `<div>`."
137
+ "description": "Stamp the single child element instead of rendering a wrapper `<div>`.",
138
+ "control": {
139
+ "kind": "boolean"
140
+ }
86
141
  },
87
142
  {
88
143
  "name": "className",
89
144
  "type": "string",
90
145
  "required": false,
91
146
  "defaultValue": null,
92
- "description": "Extra classes for the provider root."
147
+ "description": "Extra classes for the provider root.",
148
+ "control": {
149
+ "kind": "string"
150
+ }
93
151
  },
94
152
  {
95
153
  "name": "style",
96
154
  "type": "CSSProperties",
97
155
  "required": false,
98
156
  "defaultValue": null,
99
- "description": "Inline styles for the provider root, merged after the token style."
157
+ "description": "Inline styles for the provider root, merged after the token style.",
158
+ "control": {
159
+ "kind": "opaque"
160
+ }
100
161
  },
101
162
  {
102
163
  "name": "children",
103
164
  "type": "ReactNode",
104
165
  "required": false,
105
166
  "defaultValue": null,
106
- "description": "The application subtree."
167
+ "description": "The application subtree.",
168
+ "control": {
169
+ "kind": "node",
170
+ "fixture": "children.text"
171
+ }
107
172
  }
108
173
  ],
109
174
  "typeReferences": [],
@@ -112,7 +177,6 @@
112
177
  "variants": {},
113
178
  "defaultVariants": {},
114
179
  "tokensUsed": [
115
- "--cue-font-",
116
180
  "--cue-font-mono",
117
181
  "--cue-font-sans",
118
182
  "--cue-font-scale"
@@ -12,14 +12,20 @@
12
12
  "type": "string",
13
13
  "required": true,
14
14
  "defaultValue": null,
15
- "description": "What the agent is doing right now. Swapping it replays the entrance animation."
15
+ "description": "What the agent is doing right now. Swapping it replays the entrance animation.",
16
+ "control": {
17
+ "kind": "string"
18
+ }
16
19
  },
17
20
  {
18
21
  "name": "elapsed",
19
22
  "type": "string",
20
23
  "required": false,
21
24
  "defaultValue": null,
22
- "description": "Elapsed time rendered in mono next to the label. Omit to hide the timer."
25
+ "description": "Elapsed time rendered in mono next to the label. Omit to hide the timer.",
26
+ "control": {
27
+ "kind": "string"
28
+ }
23
29
  }
24
30
  ],
25
31
  "typeReferences": [
@@ -14,21 +14,31 @@
14
14
  "type": "readonly ThreadItem[]",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "Conversation rows with title, time, and optional unread mark."
17
+ "description": "Conversation rows with title, time, and optional unread mark.",
18
+ "control": {
19
+ "kind": "array"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "activeIndex",
21
24
  "type": "number",
22
25
  "required": true,
23
26
  "defaultValue": null,
24
- "description": "Index of the currently selected thread. An index outside the list selects nothing."
27
+ "description": "Index of the currently selected thread. An index outside the list selects nothing.",
28
+ "control": {
29
+ "kind": "number"
30
+ }
25
31
  },
26
32
  {
27
33
  "name": "onActiveIndexChange",
28
34
  "type": "((index: number) => void)",
29
35
  "required": false,
30
36
  "defaultValue": null,
31
- "description": "Called when the user clicks a thread row."
37
+ "description": "Called when the user clicks a thread row.",
38
+ "control": {
39
+ "kind": "callback",
40
+ "fixture": "callback.log"
41
+ }
32
42
  }
33
43
  ],
34
44
  "typeReferences": [
@@ -14,35 +14,52 @@
14
14
  "type": "readonly SearchableThread[]",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "All threads. Filtering matches title and preview together."
17
+ "description": "All threads. Filtering matches title and preview together.",
18
+ "control": {
19
+ "kind": "array"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "query",
21
24
  "type": "string",
22
25
  "required": true,
23
26
  "defaultValue": null,
24
- "description": "Current search text."
27
+ "description": "Current search text.",
28
+ "control": {
29
+ "kind": "string"
30
+ }
25
31
  },
26
32
  {
27
33
  "name": "activeId",
28
34
  "type": "string",
29
35
  "required": true,
30
36
  "defaultValue": null,
31
- "description": "Which thread is open."
37
+ "description": "Which thread is open.",
38
+ "control": {
39
+ "kind": "string"
40
+ }
32
41
  },
33
42
  {
34
43
  "name": "onQueryChange",
35
44
  "type": "((query: string) => void)",
36
45
  "required": false,
37
46
  "defaultValue": null,
38
- "description": "Called as the search is typed."
47
+ "description": "Called as the search is typed.",
48
+ "control": {
49
+ "kind": "callback",
50
+ "fixture": "callback.log"
51
+ }
39
52
  },
40
53
  {
41
54
  "name": "onSelect",
42
55
  "type": "((id: string) => void)",
43
56
  "required": false,
44
57
  "defaultValue": null,
45
- "description": "Called when a thread is opened."
58
+ "description": "Called when a thread is opened.",
59
+ "control": {
60
+ "kind": "callback",
61
+ "fixture": "callback.log"
62
+ }
46
63
  }
47
64
  ],
48
65
  "typeReferences": [
@@ -12,98 +12,161 @@
12
12
  "type": "number",
13
13
  "required": true,
14
14
  "defaultValue": null,
15
- "description": "The (upper) threshold, `0`–`1`. Always controlled."
15
+ "description": "The (upper) threshold, `0`–`1`. Always controlled.",
16
+ "control": {
17
+ "kind": "number"
18
+ }
16
19
  },
17
20
  {
18
21
  "name": "onChange",
19
22
  "type": "(value: number) => void",
20
23
  "required": true,
21
24
  "defaultValue": null,
22
- "description": "Called with the next upper threshold."
25
+ "description": "Called with the next upper threshold.",
26
+ "control": {
27
+ "kind": "callback",
28
+ "fixture": "callback.log"
29
+ }
23
30
  },
24
31
  {
25
32
  "name": "lower",
26
33
  "type": "number",
27
34
  "required": false,
28
35
  "defaultValue": null,
29
- "description": "The lower threshold. Supplying it turns the rail into a window."
36
+ "description": "The lower threshold. Supplying it turns the rail into a window.",
37
+ "control": {
38
+ "kind": "number"
39
+ }
30
40
  },
31
41
  {
32
42
  "name": "onLowerChange",
33
43
  "type": "((value: number) => void)",
34
44
  "required": false,
35
45
  "defaultValue": null,
36
- "description": "Called with the next lower threshold."
46
+ "description": "Called with the next lower threshold.",
47
+ "control": {
48
+ "kind": "callback",
49
+ "fixture": "callback.log"
50
+ }
37
51
  },
38
52
  {
39
53
  "name": "onCommit",
40
54
  "type": "((thresholds: { upper: number; lower?: number; }) => void)",
41
55
  "required": false,
42
56
  "defaultValue": null,
43
- "description": "Called once per finished gesture with both thresholds: pointer-up after a\ndrag, or each key step. Hang undo entries and network writes here —\n`onChange` fires on every frame of a drag."
57
+ "description": "Called once per finished gesture with both thresholds: pointer-up after a\ndrag, or each key step. Hang undo entries and network writes here —\n`onChange` fires on every frame of a drag.",
58
+ "control": {
59
+ "kind": "callback",
60
+ "fixture": "callback.log"
61
+ }
44
62
  },
45
63
  {
46
64
  "name": "level",
47
65
  "type": "number",
48
66
  "required": false,
49
67
  "defaultValue": null,
50
- "description": "Live signal level, `0`–`1`, drawn as a fill. Absent draws no fill."
68
+ "description": "Live signal level, `0`–`1`, drawn as a fill. Absent draws no fill.",
69
+ "control": {
70
+ "kind": "number"
71
+ }
51
72
  },
52
73
  {
53
74
  "name": "peak",
54
75
  "type": "number | null",
55
76
  "required": false,
56
77
  "defaultValue": null,
57
- "description": "Peak-hold position, `0`–`1`. `null` or absent draws no needle."
78
+ "description": "Peak-hold position, `0`–`1`. `null` or absent draws no needle.",
79
+ "control": {
80
+ "kind": "number",
81
+ "nullable": true
82
+ }
58
83
  },
59
84
  {
60
85
  "name": "step",
61
86
  "type": "number",
62
87
  "required": false,
63
88
  "defaultValue": "0.01",
64
- "description": "Grid the handles snap to. Defaults to `0.01`."
89
+ "description": "Grid the handles snap to. Defaults to `0.01`.",
90
+ "control": {
91
+ "kind": "number"
92
+ }
65
93
  },
66
94
  {
67
95
  "name": "minGap",
68
96
  "type": "number",
69
97
  "required": false,
70
98
  "defaultValue": "0.01",
71
- "description": "Closest the two handles may get. Defaults to `0.01`."
99
+ "description": "Closest the two handles may get. Defaults to `0.01`.",
100
+ "control": {
101
+ "kind": "number"
102
+ }
72
103
  },
73
104
  {
74
105
  "name": "belowTone",
75
106
  "type": "\"danger\" | \"accent\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
76
107
  "required": false,
77
108
  "defaultValue": "danger",
78
- "description": "Ink for the zones outside the window. Defaults to `\"danger\"`."
109
+ "description": "Ink for the zones outside the window. Defaults to `\"danger\"`.",
110
+ "control": {
111
+ "kind": "enum",
112
+ "members": [
113
+ "danger",
114
+ "accent",
115
+ "busy",
116
+ "ok",
117
+ "warn",
118
+ "info"
119
+ ]
120
+ }
79
121
  },
80
122
  {
81
123
  "name": "aboveTone",
82
124
  "type": "\"danger\" | \"accent\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
83
125
  "required": false,
84
126
  "defaultValue": "ok",
85
- "description": "Ink for the armed zone. Defaults to `\"ok\"`."
127
+ "description": "Ink for the armed zone. Defaults to `\"ok\"`.",
128
+ "control": {
129
+ "kind": "enum",
130
+ "members": [
131
+ "danger",
132
+ "accent",
133
+ "busy",
134
+ "ok",
135
+ "warn",
136
+ "info"
137
+ ]
138
+ }
86
139
  },
87
140
  {
88
141
  "name": "disabled",
89
142
  "type": "boolean",
90
143
  "required": false,
91
144
  "defaultValue": "false",
92
- "description": "Refuse every gesture."
145
+ "description": "Refuse every gesture.",
146
+ "control": {
147
+ "kind": "boolean"
148
+ }
93
149
  },
94
150
  {
95
151
  "name": "label",
96
152
  "type": "string",
97
153
  "required": false,
98
154
  "defaultValue": "Threshold",
99
- "description": "What is being thresholded. Names the handles. Defaults to `\"Threshold\"`."
155
+ "description": "What is being thresholded. Names the handles. Defaults to `\"Threshold\"`.",
156
+ "control": {
157
+ "kind": "string"
158
+ }
100
159
  },
101
160
  {
102
161
  "name": "formatValue",
103
162
  "type": "((value: number) => string)",
104
163
  "required": false,
105
164
  "defaultValue": "(fraction) => `${Math.round(fraction * 100)}%`",
106
- "description": "Format a value for the handle's spoken text. Defaults to `\"62%\"`."
165
+ "description": "Format a value for the handle's spoken text. Defaults to `\"62%\"`.",
166
+ "control": {
167
+ "kind": "callback",
168
+ "fixture": "callback.log"
169
+ }
107
170
  }
108
171
  ],
109
172
  "typeReferences": [
@@ -12,14 +12,20 @@
12
12
  "type": "string",
13
13
  "required": false,
14
14
  "defaultValue": null,
15
- "description": "The label, pre-formatted: `Today`, `Yesterday`, `14 March`. This family\ndoes no date arithmetic and owns no locale — the caller knows which one the\nconsole is in, and `DaySeparator` next door takes its days the same way."
15
+ "description": "The label, pre-formatted: `Today`, `Yesterday`, `14 March`. This family\ndoes no date arithmetic and owns no locale — the caller knows which one the\nconsole is in, and `DaySeparator` next door takes its days the same way.",
16
+ "control": {
17
+ "kind": "string"
18
+ }
16
19
  },
17
20
  {
18
21
  "name": "dateTime",
19
22
  "type": "string",
20
23
  "required": false,
21
24
  "defaultValue": null,
22
- "description": "The machine-readable instant, rendering the label inside a `<time>`. Worth\ngiving: it is what lets a test, a scraper or a deep link find the boundary\nwithout parsing the words a human reads."
25
+ "description": "The machine-readable instant, rendering the label inside a `<time>`. Worth\ngiving: it is what lets a test, a scraper or a deep link find the boundary\nwithout parsing the words a human reads.",
26
+ "control": {
27
+ "kind": "string"
28
+ }
23
29
  }
24
30
  ],
25
31
  "typeReferences": [
@@ -14,14 +14,25 @@
14
14
  "type": "\"sm\" | \"md\" | \"lg\"",
15
15
  "required": false,
16
16
  "defaultValue": null,
17
- "description": "Rung of the control ladder. Defaults to `\"md\"`."
17
+ "description": "Rung of the control ladder. Defaults to `\"md\"`.",
18
+ "control": {
19
+ "kind": "enum",
20
+ "members": [
21
+ "sm",
22
+ "md",
23
+ "lg"
24
+ ]
25
+ }
18
26
  },
19
27
  {
20
28
  "name": "inputClassName",
21
29
  "type": "ClassNameOrFunction<DateInputRenderProps>",
22
30
  "required": false,
23
31
  "defaultValue": null,
24
- "description": "Extra classes for the segment group itself."
32
+ "description": "Extra classes for the segment group itself.",
33
+ "control": {
34
+ "kind": "opaque"
35
+ }
25
36
  }
26
37
  ],
27
38
  "typeReferences": [