@cueplusplus/ui 0.8.0 → 0.10.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 +457 -0
  2. package/README.md +131 -0
  3. package/dist/chat/message-list.js +2 -1
  4. package/dist/configurator/_export.d.ts +1 -1
  5. package/dist/configurator/_export.js +53 -13
  6. package/dist/configurator/_overrides.d.ts +25 -6
  7. package/dist/configurator/_overrides.js +30 -17
  8. package/dist/configurator/configurator.js +8 -3
  9. package/dist/configurator/panel-sections.js +43 -13
  10. package/dist/elements/command-palette.js +1 -1
  11. package/dist/elements/flow-graph.js +2 -2
  12. package/dist/elements/markdown.js +1 -1
  13. package/dist/elements/surfaces.js +4 -3
  14. package/dist/index.d.ts +7 -3
  15. package/dist/index.js +5 -2
  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 +3 -2
  20. package/dist/layout/index.js +3 -2
  21. package/dist/midi/piano-keyboard.js +5 -1
  22. package/dist/primitives/button.d.ts +12 -0
  23. package/dist/styles.css +23 -1
  24. package/dist/system/density.d.ts +17 -8
  25. package/dist/system/density.js +39 -16
  26. package/dist/system/index.d.ts +5 -2
  27. package/dist/system/index.js +3 -1
  28. package/dist/system/overrides.d.ts +80 -0
  29. package/dist/system/overrides.js +277 -0
  30. package/dist/system/portal.d.ts +4 -2
  31. package/dist/system/portal.js +34 -3
  32. package/dist/system/prepaint.d.ts +58 -7
  33. package/dist/system/prepaint.js +72 -20
  34. package/dist/system/theme-provider.d.ts +133 -8
  35. package/dist/system/theme-provider.js +203 -72
  36. package/dist/system/theme-registry.d.ts +53 -0
  37. package/dist/system/theme-registry.js +66 -0
  38. package/dist/system/use-density.d.ts +13 -5
  39. package/dist/system/use-density.js +142 -13
  40. package/dist/system/use-theme.d.ts +5 -3
  41. package/dist/system/use-theme.js +5 -3
  42. package/dist/system/vocabulary.d.ts +15 -0
  43. package/dist/system/vocabulary.js +111 -0
  44. package/dist/theming/contrast.d.ts +2 -122
  45. package/dist/theming/contrast.js +2 -194
  46. package/dist/theming/create-theme.d.ts +37 -11
  47. package/dist/theming/create-theme.js +54 -17
  48. package/dist/theming/index.d.ts +3 -4
  49. package/dist/theming/index.js +3 -4
  50. package/dist/theming/serialize.d.ts +24 -11
  51. package/dist/theming/serialize.js +16 -18
  52. package/manifest/components/accordion.json +24 -6
  53. package/manifest/components/activity-graph.json +20 -5
  54. package/manifest/components/agent-card.json +37 -9
  55. package/manifest/components/agent-handoff.json +21 -5
  56. package/manifest/components/agent-mode-badge.json +22 -4
  57. package/manifest/components/agent-pile.json +38 -8
  58. package/manifest/components/agent-plan.json +9 -2
  59. package/manifest/components/agent-status.json +17 -3
  60. package/manifest/components/agent-surface.json +26 -11
  61. package/manifest/components/alert-dialog.json +29 -5
  62. package/manifest/components/animated-number.json +14 -6
  63. package/manifest/components/app-bar.json +66 -13
  64. package/manifest/components/app-shell.json +133 -31
  65. package/manifest/components/app-window-frame.json +28 -6
  66. package/manifest/components/approval-card.json +37 -7
  67. package/manifest/components/artifact-card.json +16 -4
  68. package/manifest/components/ask-box.json +99 -21
  69. package/manifest/components/audience-icon.json +1 -7
  70. package/manifest/components/autocomplete.json +80 -18
  71. package/manifest/components/avatar-group.json +13 -2
  72. package/manifest/components/avatar.json +22 -4
  73. package/manifest/components/background-inbox.json +9 -2
  74. package/manifest/components/bento.json +306 -0
  75. package/manifest/components/branch-picker.json +29 -7
  76. package/manifest/components/breadcrumb.json +13 -3
  77. package/manifest/components/button-group.json +21 -4
  78. package/manifest/components/button.json +41 -4
  79. package/manifest/components/canvas-split-body.json +4 -1
  80. package/manifest/components/canvas-split-header.json +17 -4
  81. package/manifest/components/canvas-split-line.json +4 -1
  82. package/manifest/components/canvas-split-message.json +8 -1
  83. package/manifest/components/card.json +14 -3
  84. package/manifest/components/carousel.json +54 -12
  85. package/manifest/components/catalogue-icon.json +1 -7
  86. package/manifest/components/channel-beta-icon.json +1 -7
  87. package/manifest/components/channel-matrix.json +80 -15
  88. package/manifest/components/channel-released-icon.json +1 -7
  89. package/manifest/components/chart-container.json +26 -10
  90. package/manifest/components/chart-ramp.json +13 -3
  91. package/manifest/components/chart-swatch.json +9 -2
  92. package/manifest/components/chart-tooltip-content.json +31 -7
  93. package/manifest/components/chart.json +30 -6
  94. package/manifest/components/chat-panel-composer.json +9 -2
  95. package/manifest/components/checkbox-group.json +4 -2
  96. package/manifest/components/checkbox.json +17 -4
  97. package/manifest/components/checkpoint-history.json +13 -3
  98. package/manifest/components/chip.json +35 -5
  99. package/manifest/components/clamp.json +30 -7
  100. package/manifest/components/cli-tool-icon.json +1 -7
  101. package/manifest/components/code-diff.json +20 -5
  102. package/manifest/components/code-runner.json +32 -6
  103. package/manifest/components/collapsible.json +16 -4
  104. package/manifest/components/color-area.json +4 -1
  105. package/manifest/components/color-field.json +13 -3
  106. package/manifest/components/color-picker.json +75 -17
  107. package/manifest/components/color-slider.json +12 -3
  108. package/manifest/components/color-swatch.json +13 -2
  109. package/manifest/components/colors-section.json +10 -7
  110. package/manifest/components/combobox.json +81 -18
  111. package/manifest/components/command-palette.json +57 -13
  112. package/manifest/components/compaction-row.json +35 -7
  113. package/manifest/components/comparison-card.json +17 -4
  114. package/manifest/components/composer-attachment-chip.json +9 -2
  115. package/manifest/components/composer-bar.json +4 -1
  116. package/manifest/components/composer-command-item.json +8 -2
  117. package/manifest/components/composer-context.json +4 -1
  118. package/manifest/components/composer-input.json +5 -1
  119. package/manifest/components/composer-menu-item.json +4 -1
  120. package/manifest/components/composer-menu.json +12 -2
  121. package/manifest/components/composer-model-item.json +8 -2
  122. package/manifest/components/composer-model-trigger.json +8 -2
  123. package/manifest/components/composer-person-item.json +8 -2
  124. package/manifest/components/composer-send.json +8 -2
  125. package/manifest/components/composer-voice-button.json +4 -1
  126. package/manifest/components/composer-voice.json +8 -2
  127. package/manifest/components/composer.json +76 -17
  128. package/manifest/components/computer-use.json +17 -4
  129. package/manifest/components/confidence-marker.json +13 -3
  130. package/manifest/components/connection-state.json +23 -4
  131. package/manifest/components/container.json +14 -2
  132. package/manifest/components/context-breakdown.json +8 -2
  133. package/manifest/components/context-menu.json +16 -4
  134. package/manifest/components/context-usage.json +16 -4
  135. package/manifest/components/conversation-search.json +22 -5
  136. package/manifest/components/copy-button.json +32 -7
  137. package/manifest/components/cost-meter.json +12 -3
  138. package/manifest/components/cue-logotype.json +17 -3
  139. package/manifest/components/cue-mark.json +17 -3
  140. package/manifest/components/cue-portal-frame.json +14 -4
  141. package/manifest/components/data-row.json +21 -7
  142. package/manifest/components/data-table-pagination.json +18 -4
  143. package/manifest/components/data-table-toolbar.json +30 -7
  144. package/manifest/components/data-tree.json +42 -9
  145. package/manifest/components/date-field.json +13 -2
  146. package/manifest/components/date-picker.json +81 -19
  147. package/manifest/components/date-range-picker.json +81 -19
  148. package/manifest/components/day-separator.json +4 -1
  149. package/manifest/components/delegation-card.json +64 -12
  150. package/manifest/components/density.json +25 -5
  151. package/manifest/components/description-list.json +8 -1
  152. package/manifest/components/diagram.json +33 -7
  153. package/manifest/components/dialog.json +29 -6
  154. package/manifest/components/disclosure.json +31 -7
  155. package/manifest/components/dmx-bar.json +16 -4
  156. package/manifest/components/dmx-strip.json +20 -5
  157. package/manifest/components/document-reference.json +21 -5
  158. package/manifest/components/draft-restore.json +18 -4
  159. package/manifest/components/drawer.json +30 -6
  160. package/manifest/components/dropdown-menu.json +55 -10
  161. package/manifest/components/edit-message.json +32 -7
  162. package/manifest/components/elements-command-palette.json +27 -6
  163. package/manifest/components/elements-data-table.json +9 -2
  164. package/manifest/components/elements-timeline.json +8 -2
  165. package/manifest/components/elicitation-form.json +31 -6
  166. package/manifest/components/empty-state-composer.json +9 -2
  167. package/manifest/components/empty-state-suggestion.json +4 -1
  168. package/manifest/components/empty-state.json +25 -5
  169. package/manifest/components/end-of-turn-summary.json +16 -4
  170. package/manifest/components/env-var-input.json +54 -12
  171. package/manifest/components/error-state.json +17 -4
  172. package/manifest/components/export-dialog.json +27 -11
  173. package/manifest/components/eyebrow.json +4 -1
  174. package/manifest/components/feedback-dialog.json +33 -7
  175. package/manifest/components/field-description.json +4 -1
  176. package/manifest/components/field-error.json +13 -3
  177. package/manifest/components/field-label.json +4 -1
  178. package/manifest/components/field.json +4 -1
  179. package/manifest/components/file-tree.json +16 -4
  180. package/manifest/components/file-upload.json +58 -13
  181. package/manifest/components/flow-graph.json +12 -3
  182. package/manifest/components/folder-icon.json +1 -7
  183. package/manifest/components/footer.json +24 -4
  184. package/manifest/components/frac.json +10 -2
  185. package/manifest/components/generation-loader.json +17 -3
  186. package/manifest/components/generative-ui.json +39 -7
  187. package/manifest/components/grid.json +56 -5
  188. package/manifest/components/group-bar.json +25 -6
  189. package/manifest/components/guardrail-notice.json +22 -5
  190. package/manifest/components/hover-card.json +45 -8
  191. package/manifest/components/icon-button.json +22 -4
  192. package/manifest/components/image-generation.json +8 -2
  193. package/manifest/components/info-tip.json +42 -7
  194. package/manifest/components/inline-citation.json +14 -3
  195. package/manifest/components/input-group.json +24 -5
  196. package/manifest/components/input.json +13 -3
  197. package/manifest/components/item.json +42 -8
  198. package/manifest/components/job-progress.json +25 -6
  199. package/manifest/components/launcher-bubble.json +32 -7
  200. package/manifest/components/ledger.json +87 -19
  201. package/manifest/components/link.json +16 -3
  202. package/manifest/components/live-region-announcer.json +21 -5
  203. package/manifest/components/log-viewer.json +42 -10
  204. package/manifest/components/map-answer.json +17 -4
  205. package/manifest/components/markdown-text.json +36 -5
  206. package/manifest/components/math-block.json +12 -3
  207. package/manifest/components/mcp-server-icon.json +1 -7
  208. package/manifest/components/mcp-server-panel.json +18 -4
  209. package/manifest/components/memory-chips.json +9 -2
  210. package/manifest/components/menubar.json +33 -7
  211. package/manifest/components/message-actions.json +32 -7
  212. package/manifest/components/message-attachments.json +9 -2
  213. package/manifest/components/message-branches.json +14 -3
  214. package/manifest/components/message-list.json +27 -6
  215. package/manifest/components/message-pair.json +25 -5
  216. package/manifest/components/message-queue.json +13 -3
  217. package/manifest/components/message-timing.json +8 -2
  218. package/manifest/components/message.json +41 -9
  219. package/manifest/components/meter.json +43 -7
  220. package/manifest/components/mobile-composer.json +47 -10
  221. package/manifest/components/model-picker.json +13 -3
  222. package/manifest/components/multi-select.json +78 -17
  223. package/manifest/components/musical-time-input.json +34 -8
  224. package/manifest/components/navigation-menu.json +54 -12
  225. package/manifest/components/node-card.json +42 -7
  226. package/manifest/components/node-handle.json +17 -2
  227. package/manifest/components/number-field.json +28 -6
  228. package/manifest/components/number-ticker.json +8 -2
  229. package/manifest/components/onboarding.json +18 -4
  230. package/manifest/components/otp-field.json +43 -10
  231. package/manifest/components/page-shell.json +35 -6
  232. package/manifest/components/pagination.json +21 -5
  233. package/manifest/components/panel-header.json +15 -3
  234. package/manifest/components/password-input.json +38 -8
  235. package/manifest/components/permission-grant.json +28 -5
  236. package/manifest/components/permission-scopes.json +57 -12
  237. package/manifest/components/piano-keyboard.json +38 -9
  238. package/manifest/components/plussie.json +34 -5
  239. package/manifest/components/popover.json +45 -8
  240. package/manifest/components/preset-section.json +14 -8
  241. package/manifest/components/progress.json +25 -6
  242. package/manifest/components/prompt-library.json +27 -6
  243. package/manifest/components/queue-dock.json +36 -8
  244. package/manifest/components/quota-banner.json +25 -6
  245. package/manifest/components/quote-reply.json +29 -7
  246. package/manifest/components/radio-group.json +12 -2
  247. package/manifest/components/radio.json +17 -3
  248. package/manifest/components/rating.json +60 -13
  249. package/manifest/components/read-aloud.json +35 -8
  250. package/manifest/components/reasoning-effort.json +17 -4
  251. package/manifest/components/reasoning-panel.json +33 -8
  252. package/manifest/components/recommendation-card.json +35 -10
  253. package/manifest/components/regenerate-menu.json +22 -5
  254. package/manifest/components/replay-player.json +29 -7
  255. package/manifest/components/research-report.json +12 -3
  256. package/manifest/components/resizable.json +4 -1
  257. package/manifest/components/retrieval-chunks.json +16 -4
  258. package/manifest/components/revert-dock.json +61 -14
  259. package/manifest/components/reviewable-diff.json +23 -5
  260. package/manifest/components/risk-badge.json +18 -3
  261. package/manifest/components/row.json +17 -4
  262. package/manifest/components/schedule-card.json +25 -6
  263. package/manifest/components/score-breakdown.json +20 -5
  264. package/manifest/components/scroll-anchor.json +13 -3
  265. package/manifest/components/scroll-area.json +31 -8
  266. package/manifest/components/scrollable-tabs-list.json +12 -4
  267. package/manifest/components/scrub-input.json +84 -18
  268. package/manifest/components/seam-cell.json +19 -3
  269. package/manifest/components/seam-grid.json +12 -3
  270. package/manifest/components/search-input.json +49 -10
  271. package/manifest/components/section-header.json +36 -8
  272. package/manifest/components/segmented-control.json +50 -11
  273. package/manifest/components/select.json +74 -16
  274. package/manifest/components/separator.json +4 -1
  275. package/manifest/components/settings-panel.json +41 -9
  276. package/manifest/components/shape-section.json +10 -7
  277. package/manifest/components/shared-conversation.json +21 -5
  278. package/manifest/components/sheet.json +29 -6
  279. package/manifest/components/shimmer-label.json +4 -2
  280. package/manifest/components/sidebar.json +60 -13
  281. package/manifest/components/skill-icon.json +1 -7
  282. package/manifest/components/slider.json +22 -5
  283. package/manifest/components/sources.json +17 -4
  284. package/manifest/components/sparkline.json +17 -4
  285. package/manifest/components/speaker-identity.json +4 -1
  286. package/manifest/components/spec-sheet.json +16 -4
  287. package/manifest/components/spectrum-visualizer.json +41 -10
  288. package/manifest/components/spinner.json +12 -2
  289. package/manifest/components/stack-icon.json +1 -7
  290. package/manifest/components/stack.json +54 -7
  291. package/manifest/components/stacks-matrix-icon.json +1 -7
  292. package/manifest/components/stat.json +28 -4
  293. package/manifest/components/status-bar.json +50 -9
  294. package/manifest/components/status-dot.json +23 -4
  295. package/manifest/components/stepper.json +22 -5
  296. package/manifest/components/stopped-run.json +19 -4
  297. package/manifest/components/streaming-text.json +12 -3
  298. package/manifest/components/subagent-list.json +21 -5
  299. package/manifest/components/suggestions.json +27 -5
  300. package/manifest/components/swap-label.json +18 -4
  301. package/manifest/components/switch.json +18 -3
  302. package/manifest/components/table-scroll-region.json +4 -1
  303. package/manifest/components/table.json +54 -11
  304. package/manifest/components/tabs.json +16 -5
  305. package/manifest/components/tags-input.json +79 -17
  306. package/manifest/components/tail-status.json +37 -8
  307. package/manifest/components/terminal-block.json +25 -5
  308. package/manifest/components/terminal-frame.json +34 -8
  309. package/manifest/components/textarea.json +8 -3
  310. package/manifest/components/theme-configurator.json +47 -14
  311. package/manifest/components/theme-provider.json +97 -18
  312. package/manifest/components/thinking-indicator.json +8 -2
  313. package/manifest/components/thread-list.json +13 -3
  314. package/manifest/components/thread-search.json +22 -5
  315. package/manifest/components/threshold-rail.json +77 -14
  316. package/manifest/components/time-boundary.json +8 -2
  317. package/manifest/components/time-field.json +13 -2
  318. package/manifest/components/timeline-ruler.json +51 -12
  319. package/manifest/components/timeline.json +19 -3
  320. package/manifest/components/title-bar.json +19 -4
  321. package/manifest/components/toast.json +12 -3
  322. package/manifest/components/todo-list.json +8 -2
  323. package/manifest/components/toggle-group.json +33 -7
  324. package/manifest/components/toggle.json +23 -4
  325. package/manifest/components/token-editor.json +26 -10
  326. package/manifest/components/tool-call-card.json +83 -16
  327. package/manifest/components/tool-call.json +37 -9
  328. package/manifest/components/tool-error.json +34 -8
  329. package/manifest/components/tool-group.json +17 -4
  330. package/manifest/components/tool-timeline.json +37 -9
  331. package/manifest/components/toolbar.json +37 -8
  332. package/manifest/components/tooltip.json +41 -7
  333. package/manifest/components/trace-waterfall.json +12 -3
  334. package/manifest/components/tree-visibility-toggle.json +18 -3
  335. package/manifest/components/tree.json +52 -11
  336. package/manifest/components/turn-footer.json +36 -8
  337. package/manifest/components/two-step-button.json +46 -9
  338. package/manifest/components/typing-indicator.json +8 -1
  339. package/manifest/components/universe-grid.json +37 -10
  340. package/manifest/components/unread-divider.json +4 -1
  341. package/manifest/components/usage-chart.json +46 -9
  342. package/manifest/components/verdict-row.json +20 -5
  343. package/manifest/components/voice-conversation.json +37 -7
  344. package/manifest/components/web-preview.json +23 -5
  345. package/manifest/components/web-search.json +20 -5
  346. package/manifest/components/work-collapse.json +30 -7
  347. package/manifest/fixtures.json +106 -0
  348. package/manifest/manifest.json +449 -310
  349. package/manifest/tokens.json +122 -12
  350. package/package.json +16 -6
  351. package/dist/theming/_presets.d.ts +0 -11
  352. package/dist/theming/_presets.js +0 -678
@@ -56,14 +56,20 @@
56
56
  "type": "boolean",
57
57
  "required": false,
58
58
  "defaultValue": "false",
59
- "description": "The row responds to a pointer and to focus: the row-hover wash, a pointer\ncursor across the whole row, and an inset focus ring. Defaults to `false`.\n\nOpt-in rather than automatic, because a table of figures nobody can click\nthat lit up under the pointer would be promising an interaction it does not\nhave. Wiring the row up to actually do something — a click handler, a\nkeyboard path to the same thing — stays the caller's job; this is the paint.\n\n**The focus ring ships with it, because the caller's half is what makes the\nrow focusable.** A `<tr>` cannot take focus on its own, so the moment a\ncaller gives one a `tabIndex` to run\n{@link activateRowFromKeyDown } against, a keyboard user can reach and\nactivate a row that shows nothing — a WCAG 2.4.7 failure the pointer user\nnever sees. The ring is *inset* (`-outline-offset-2`), the same ruling as\n`Row` and `DataRow.Root`: these tables live in clipped panes and scroll\nregions, where an outset ring on the first or last row is cut off by the\npane's own rim. `outline-solid` rides along with every `outline-<n>` here\nbecause Tailwind v4 leaves `--tw-outline-style` unset otherwise and the\nring never paints — `test/focus-ring.test.ts` is what keeps the pair\ntogether."
59
+ "description": "The row responds to a pointer and to focus: the row-hover wash, a pointer\ncursor across the whole row, and an inset focus ring. Defaults to `false`.\n\nOpt-in rather than automatic, because a table of figures nobody can click\nthat lit up under the pointer would be promising an interaction it does not\nhave. Wiring the row up to actually do something — a click handler, a\nkeyboard path to the same thing — stays the caller's job; this is the paint.\n\n**The focus ring ships with it, because the caller's half is what makes the\nrow focusable.** A `<tr>` cannot take focus on its own, so the moment a\ncaller gives one a `tabIndex` to run\n{@link activateRowFromKeyDown } against, a keyboard user can reach and\nactivate a row that shows nothing — a WCAG 2.4.7 failure the pointer user\nnever sees. The ring is *inset* (`-outline-offset-2`), the same ruling as\n`Row` and `DataRow.Root`: these tables live in clipped panes and scroll\nregions, where an outset ring on the first or last row is cut off by the\npane's own rim. `outline-solid` rides along with every `outline-<n>` here\nbecause Tailwind v4 leaves `--tw-outline-style` unset otherwise and the\nring never paints — `test/focus-ring.test.ts` is what keeps the pair\ntogether.",
60
+ "control": {
61
+ "kind": "boolean"
62
+ }
60
63
  },
61
64
  {
62
65
  "name": "selected",
63
66
  "type": "boolean",
64
67
  "required": false,
65
68
  "defaultValue": "false",
66
- "description": "Draw the row as picked out of the table. Defaults to `false`.\n\nSets `data-selected`, which is what the tint and the hover-revealed\n`DataRow.Actions` inside the row both key off — so a hand-written\n`<tr data-selected>` in a data-driven body gets exactly the same treatment."
69
+ "description": "Draw the row as picked out of the table. Defaults to `false`.\n\nSets `data-selected`, which is what the tint and the hover-revealed\n`DataRow.Actions` inside the row both key off — so a hand-written\n`<tr data-selected>` in a data-driven body gets exactly the same treatment.",
70
+ "control": {
71
+ "kind": "boolean"
72
+ }
67
73
  }
68
74
  ],
69
75
  "typeReferences": [
@@ -80,42 +86,70 @@
80
86
  "type": "number",
81
87
  "required": true,
82
88
  "defaultValue": null,
83
- "description": "How many columns the divider spans. Required: it must equal the table's\ncolumn count, or the group's cell stops covering the row and the columns\nbelow it shift by one."
89
+ "description": "How many columns the divider spans. Required: it must equal the table's\ncolumn count, or the group's cell stops covering the row and the columns\nbelow it shift by one.",
90
+ "control": {
91
+ "kind": "number"
92
+ }
84
93
  },
85
94
  {
86
95
  "name": "label",
87
96
  "type": "ReactNode",
88
97
  "required": true,
89
98
  "defaultValue": null,
90
- "description": "What the group is called."
99
+ "description": "What the group is called.",
100
+ "control": {
101
+ "kind": "node",
102
+ "fixture": "children.text"
103
+ }
91
104
  },
92
105
  {
93
106
  "name": "headingLevel",
94
107
  "type": "4 | 2 | 3 | 5 | 6",
95
108
  "required": false,
96
109
  "defaultValue": null,
97
- "description": "Make the label slot a real heading element. Defaults to `undefined` — no\nheading, and the label stays the `<span>` it has always been.\n\n**Set this rather than passing a heading as `label`.** The label slot wraps\nwhatever it is given, so an `<h2>` handed in as `label` lands *inside* a\n`<span>` — which renders, and exposes the heading, and does not validate: a\n`<span>` is phrasing content and may not contain a heading. With this prop\nthe wrapper *is* the heading (`<h2 data-slot=\"table-group-label\">`), so\nthere is nothing to nest.\n\nA heading inside a `<th>` is valid — `<th>` takes flow content — and it is\nuseful: a screen-reader user navigates a long grouped table by heading, and\nwithout one the group names are reachable only by walking the rows. The\n`scope=\"rowgroup\"` association is untouched either way; this adds the\ndivider to the document outline, it does not change what the cell heads.\n\nLevels run `2`–`6` because the outline has to describe the real nesting of\nthe page the table sits in, not the table's own idea of itself — the same\nruling as {@link LedgerTierProps.headingLevel }. There is no `1`: a group\ndivider is never the title of the document."
110
+ "description": "Make the label slot a real heading element. Defaults to `undefined` — no\nheading, and the label stays the `<span>` it has always been.\n\n**Set this rather than passing a heading as `label`.** The label slot wraps\nwhatever it is given, so an `<h2>` handed in as `label` lands *inside* a\n`<span>` — which renders, and exposes the heading, and does not validate: a\n`<span>` is phrasing content and may not contain a heading. With this prop\nthe wrapper *is* the heading (`<h2 data-slot=\"table-group-label\">`), so\nthere is nothing to nest.\n\nA heading inside a `<th>` is valid — `<th>` takes flow content — and it is\nuseful: a screen-reader user navigates a long grouped table by heading, and\nwithout one the group names are reachable only by walking the rows. The\n`scope=\"rowgroup\"` association is untouched either way; this adds the\ndivider to the document outline, it does not change what the cell heads.\n\nLevels run `2`–`6` because the outline has to describe the real nesting of\nthe page the table sits in, not the table's own idea of itself — the same\nruling as {@link LedgerTierProps.headingLevel }. There is no `1`: a group\ndivider is never the title of the document.",
111
+ "control": {
112
+ "kind": "enum",
113
+ "members": [
114
+ 4,
115
+ 2,
116
+ 3,
117
+ 5,
118
+ 6
119
+ ],
120
+ "min": 2,
121
+ "max": 6
122
+ }
98
123
  },
99
124
  {
100
125
  "name": "count",
101
126
  "type": "number",
102
127
  "required": false,
103
128
  "defaultValue": null,
104
- "description": "How many rows the group holds, printed beside its name."
129
+ "description": "How many rows the group holds, printed beside its name.",
130
+ "control": {
131
+ "kind": "number"
132
+ }
105
133
  },
106
134
  {
107
135
  "name": "sticky",
108
136
  "type": "boolean",
109
137
  "required": false,
110
138
  "defaultValue": "false",
111
- "description": "Dock the divider under the header band while the group's rows scroll past.\nDefaults to `false`.\n\nThe offset is the custom property `--cue-table-group-top` (default `0`):\nhow far down the divider docks is the rendered height of the sticky header\nabove it, which depends on the density and type the caller configured. Set\nit on the table — `className=\"[--cue-table-group-top:2rem]\"` — rather than\nmeasuring at runtime."
139
+ "description": "Dock the divider under the header band while the group's rows scroll past.\nDefaults to `false`.\n\nThe offset is the custom property `--cue-table-group-top` (default `0`):\nhow far down the divider docks is the rendered height of the sticky header\nabove it, which depends on the density and type the caller configured. Set\nit on the table — `className=\"[--cue-table-group-top:2rem]\"` — rather than\nmeasuring at runtime.",
140
+ "control": {
141
+ "kind": "boolean"
142
+ }
112
143
  },
113
144
  {
114
145
  "name": "className",
115
146
  "type": "string",
116
147
  "required": false,
117
148
  "defaultValue": null,
118
- "description": "Classes for the divider's *cell*, not its row.\n\nThe `<tr>` paints nothing — the ground, the type and the sticky offset all\nlive on the `<th>` that spans it, and a background on the row would sit\nbehind the cell's own. Every other prop, and the ref, go to the row."
149
+ "description": "Classes for the divider's *cell*, not its row.\n\nThe `<tr>` paints nothing — the ground, the type and the sticky offset all\nlive on the `<th>` that spans it, and a background on the row would sit\nbehind the cell's own. Every other prop, and the ref, go to the row.",
150
+ "control": {
151
+ "kind": "string"
152
+ }
119
153
  }
120
154
  ],
121
155
  "typeReferences": [
@@ -132,14 +166,20 @@
132
166
  "type": "boolean",
133
167
  "required": false,
134
168
  "defaultValue": "false",
135
- "description": "Right-align this column and set it in tabular figures."
169
+ "description": "Right-align this column and set it in tabular figures.",
170
+ "control": {
171
+ "kind": "boolean"
172
+ }
136
173
  },
137
174
  {
138
175
  "name": "sticky",
139
176
  "type": "boolean",
140
177
  "required": false,
141
178
  "defaultValue": "false",
142
- "description": "Dock the header band to the top of the scroll container while the rows\nscroll under it. Defaults to `false`.\n\nSet it on the cells, not on the `<tr>`: sticky on a table row is honoured\ninconsistently across engines, and the cell is the reliable baseline\neverywhere."
179
+ "description": "Dock the header band to the top of the scroll container while the rows\nscroll under it. Defaults to `false`.\n\nSet it on the cells, not on the `<tr>`: sticky on a table row is honoured\ninconsistently across engines, and the cell is the reliable baseline\neverywhere.",
180
+ "control": {
181
+ "kind": "boolean"
182
+ }
143
183
  }
144
184
  ],
145
185
  "typeReferences": [
@@ -156,7 +196,10 @@
156
196
  "type": "boolean",
157
197
  "required": false,
158
198
  "defaultValue": "false",
159
- "description": "Right-align this cell and set it in tabular figures."
199
+ "description": "Right-align this cell and set it in tabular figures.",
200
+ "control": {
201
+ "kind": "boolean"
202
+ }
160
203
  }
161
204
  ],
162
205
  "typeReferences": [
@@ -25,7 +25,10 @@
25
25
  "type": "string",
26
26
  "required": false,
27
27
  "defaultValue": null,
28
- "description": "Extra classes for the tabs frame."
28
+ "description": "Extra classes for the tabs frame.",
29
+ "control": {
30
+ "kind": "string"
31
+ }
29
32
  }
30
33
  ],
31
34
  "typeReferences": [
@@ -42,7 +45,10 @@
42
45
  "type": "string",
43
46
  "required": false,
44
47
  "defaultValue": null,
45
- "description": "Extra classes for the strip."
48
+ "description": "Extra classes for the strip.",
49
+ "control": {
50
+ "kind": "string"
51
+ }
46
52
  }
47
53
  ],
48
54
  "typeReferences": [
@@ -59,7 +65,10 @@
59
65
  "type": "string",
60
66
  "required": false,
61
67
  "defaultValue": null,
62
- "description": "Extra classes for the tab button."
68
+ "description": "Extra classes for the tab button.",
69
+ "control": {
70
+ "kind": "string"
71
+ }
63
72
  }
64
73
  ],
65
74
  "typeReferences": [
@@ -76,7 +85,10 @@
76
85
  "type": "string",
77
86
  "required": false,
78
87
  "defaultValue": null,
79
- "description": "Extra classes for the panel."
88
+ "description": "Extra classes for the panel.",
89
+ "control": {
90
+ "kind": "string"
91
+ }
80
92
  }
81
93
  ],
82
94
  "typeReferences": [
@@ -89,7 +101,6 @@
89
101
  "tokensUsed": [
90
102
  "--cue-accent",
91
103
  "--cue-border",
92
- "--cue-chrome-toolbar",
93
104
  "--cue-control-md",
94
105
  "--cue-edge-fade",
95
106
  "--cue-fg",
@@ -12,119 +12,181 @@
12
12
  "type": "readonly string[]",
13
13
  "required": false,
14
14
  "defaultValue": null,
15
- "description": "The tags. Use with `onValueChange` for a controlled field."
15
+ "description": "The tags. Use with `onValueChange` for a controlled field.",
16
+ "control": {
17
+ "kind": "array",
18
+ "fixture": "agent.transcript"
19
+ }
16
20
  },
17
21
  {
18
22
  "name": "defaultValue",
19
23
  "type": "readonly string[]",
20
24
  "required": false,
21
25
  "defaultValue": null,
22
- "description": "Initial tags for an uncontrolled field."
26
+ "description": "Initial tags for an uncontrolled field.",
27
+ "control": {
28
+ "kind": "array",
29
+ "fixture": "agent.transcript"
30
+ }
23
31
  },
24
32
  {
25
33
  "name": "onValueChange",
26
34
  "type": "((value: string[]) => void)",
27
35
  "required": false,
28
36
  "defaultValue": null,
29
- "description": "Called with the full list after every add or remove."
37
+ "description": "Called with the full list after every add or remove.",
38
+ "control": {
39
+ "kind": "callback",
40
+ "fixture": "callback.log"
41
+ }
30
42
  },
31
43
  {
32
44
  "name": "suggestions",
33
45
  "type": "readonly string[]",
34
46
  "required": false,
35
47
  "defaultValue": null,
36
- "description": "Optional known tags, offered in a popup as the user types. Free-form entry\nworks with or without them — a suggestion is a shortcut, never a constraint."
48
+ "description": "Optional known tags, offered in a popup as the user types. Free-form entry\nworks with or without them — a suggestion is a shortcut, never a constraint.",
49
+ "control": {
50
+ "kind": "array",
51
+ "fixture": "agent.transcript"
52
+ }
37
53
  },
38
54
  {
39
55
  "name": "placeholder",
40
56
  "type": "string",
41
57
  "required": false,
42
58
  "defaultValue": null,
43
- "description": "Shown while there are no tags."
59
+ "description": "Shown while there are no tags.",
60
+ "control": {
61
+ "kind": "string"
62
+ }
44
63
  },
45
64
  {
46
65
  "name": "size",
47
66
  "type": "\"sm\" | \"md\" | \"lg\"",
48
67
  "required": false,
49
68
  "defaultValue": "md",
50
- "description": "Rung of the control ladder. Defaults to `\"md\"`."
69
+ "description": "Rung of the control ladder. Defaults to `\"md\"`.",
70
+ "control": {
71
+ "kind": "enum",
72
+ "members": [
73
+ "sm",
74
+ "md",
75
+ "lg"
76
+ ]
77
+ }
51
78
  },
52
79
  {
53
80
  "name": "separators",
54
81
  "type": "readonly string[]",
55
82
  "required": false,
56
83
  "defaultValue": "[\",\"]",
57
- "description": "Extra keys that commit the pending tag, on top of Enter. Defaults to `[\",\"]`\n— the separator every \"type a list\" field in the wild accepts."
84
+ "description": "Extra keys that commit the pending tag, on top of Enter. Defaults to `[\",\"]`\n— the separator every \"type a list\" field in the wild accepts.",
85
+ "control": {
86
+ "kind": "array",
87
+ "fixture": "agent.transcript"
88
+ }
58
89
  },
59
90
  {
60
91
  "name": "max",
61
92
  "type": "number",
62
93
  "required": false,
63
94
  "defaultValue": null,
64
- "description": "Refuse further tags past this many."
95
+ "description": "Refuse further tags past this many.",
96
+ "control": {
97
+ "kind": "number"
98
+ }
65
99
  },
66
100
  {
67
101
  "name": "disabled",
68
102
  "type": "boolean",
69
103
  "required": false,
70
104
  "defaultValue": null,
71
- "description": "Prevent entry and grey the field out."
105
+ "description": "Prevent entry and grey the field out.",
106
+ "control": {
107
+ "kind": "boolean"
108
+ }
72
109
  },
73
110
  {
74
111
  "name": "name",
75
112
  "type": "string",
76
113
  "required": false,
77
114
  "defaultValue": null,
78
- "description": "Name for the hidden input, when the field is part of a form."
115
+ "description": "Name for the hidden input, when the field is part of a form.",
116
+ "control": {
117
+ "kind": "string"
118
+ }
79
119
  },
80
120
  {
81
121
  "name": "id",
82
122
  "type": "string",
83
123
  "required": false,
84
124
  "defaultValue": null,
85
- "description": "Id forwarded to the text input."
125
+ "description": "Id forwarded to the text input.",
126
+ "control": {
127
+ "kind": "string"
128
+ }
86
129
  },
87
130
  {
88
131
  "name": "aria-label",
89
132
  "type": "string",
90
133
  "required": false,
91
134
  "defaultValue": null,
92
- "description": "Accessible name for the input, when no {@link FieldLabel } names it."
135
+ "description": "Accessible name for the input, when no {@link FieldLabel } names it.",
136
+ "control": {
137
+ "kind": "string"
138
+ }
93
139
  },
94
140
  {
95
141
  "name": "aria-labelledby",
96
142
  "type": "string",
97
143
  "required": false,
98
144
  "defaultValue": null,
99
- "description": "Id of the element naming the input."
145
+ "description": "Id of the element naming the input.",
146
+ "control": {
147
+ "kind": "string"
148
+ }
100
149
  },
101
150
  {
102
151
  "name": "removeLabel",
103
152
  "type": "((tag: string) => string)",
104
153
  "required": false,
105
154
  "defaultValue": "(tag) => `Remove ${tag}`",
106
- "description": "Accessible name for a tag's remove button. Defaults to\n``(tag) => `Remove ${tag}` ``."
155
+ "description": "Accessible name for a tag's remove button. Defaults to\n``(tag) => `Remove ${tag}` ``.",
156
+ "control": {
157
+ "kind": "callback",
158
+ "fixture": "callback.log"
159
+ }
107
160
  },
108
161
  {
109
162
  "name": "className",
110
163
  "type": "string",
111
164
  "required": false,
112
165
  "defaultValue": null,
113
- "description": "Extra classes for the field."
166
+ "description": "Extra classes for the field.",
167
+ "control": {
168
+ "kind": "string"
169
+ }
114
170
  },
115
171
  {
116
172
  "name": "popupClassName",
117
173
  "type": "string",
118
174
  "required": false,
119
175
  "defaultValue": null,
120
- "description": "Extra classes for the popup surface."
176
+ "description": "Extra classes for the popup surface.",
177
+ "control": {
178
+ "kind": "string"
179
+ }
121
180
  },
122
181
  {
123
182
  "name": "sideOffset",
124
183
  "type": "number",
125
184
  "required": false,
126
185
  "defaultValue": "4",
127
- "description": "Distance in px between the field and the popup. Defaults to `4`."
186
+ "description": "Distance in px between the field and the popup. Defaults to `4`.",
187
+ "control": {
188
+ "kind": "number"
189
+ }
128
190
  }
129
191
  ],
130
192
  "typeReferences": [],
@@ -14,56 +14,85 @@
14
14
  "type": "string",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "What is happening, in two or three words: `Running commands`,\n`Searching the codebase`. `TAIL_ACTIONS` is the shipped vocabulary and this\nprop is a plain string, so a product with its own verbs is not stuck with\nthese ten."
17
+ "description": "What is happening, in two or three words: `Running commands`,\n`Searching the codebase`. `TAIL_ACTIONS` is the shipped vocabulary and this\nprop is a plain string, so a product with its own verbs is not stuck with\nthese ten.",
18
+ "control": {
19
+ "kind": "string"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "detail",
21
24
  "type": "string",
22
25
  "required": false,
23
26
  "defaultValue": null,
24
- "description": "The thing the action is happening to — a path, a query, a topic. Truncates\non its own so the action never has to; a sidebar transcript is 280px wide\nand a status line that elides its verb has said nothing."
27
+ "description": "The thing the action is happening to — a path, a query, a topic. Truncates\non its own so the action never has to; a sidebar transcript is 280px wide\nand a status line that elides its verb has said nothing.",
28
+ "control": {
29
+ "kind": "string"
30
+ }
25
31
  },
26
32
  {
27
33
  "name": "active",
28
34
  "type": "boolean",
29
35
  "required": false,
30
36
  "defaultValue": "true",
31
- "description": "Whether the action is still going. `true` by default, because this row is\nthe live one; turn it off for `Idle`, `Interrupted` and `Aborted`, which\nstops the sweep and empties the spinner's slot without moving the text."
37
+ "description": "Whether the action is still going. `true` by default, because this row is\nthe live one; turn it off for `Idle`, `Interrupted` and `Aborted`, which\nstops the sweep and empties the spinner's slot without moving the text.",
38
+ "control": {
39
+ "kind": "boolean"
40
+ }
32
41
  },
33
42
  {
34
43
  "name": "updatesInPlace",
35
44
  "type": "boolean",
36
45
  "required": false,
37
46
  "defaultValue": "true",
38
- "description": "Whether a new `action` animates into the row that is already there, or\nsimply replaces the text.\n\nCursor's flag, and the reason it needs one: a narration line that changes\nevery few hundred milliseconds should read as one row being updated, while\na line that means something *different* should read as a new row. `true`\n(the default) keys the label on its own text so each new action fades in\nwhere the last one was; `false` leaves it unkeyed, and the words change\nwith no motion at all. A reduced-motion reader gets the second behaviour\neither way."
47
+ "description": "Whether a new `action` animates into the row that is already there, or\nsimply replaces the text.\n\nCursor's flag, and the reason it needs one: a narration line that changes\nevery few hundred milliseconds should read as one row being updated, while\na line that means something *different* should read as a new row. `true`\n(the default) keys the label on its own text so each new action fades in\nwhere the last one was; `false` leaves it unkeyed, and the words change\nwith no motion at all. A reduced-motion reader gets the second behaviour\neither way.",
48
+ "control": {
49
+ "kind": "boolean"
50
+ }
39
51
  },
40
52
  {
41
53
  "name": "priority",
42
54
  "type": "\"normal\" | \"attention\"",
43
55
  "required": false,
44
56
  "defaultValue": "normal",
45
- "description": "How loudly this row is speaking. See {@link TailPriority}."
57
+ "description": "How loudly this row is speaking. See {@link TailPriority}.",
58
+ "control": {
59
+ "kind": "enum",
60
+ "members": [
61
+ "normal",
62
+ "attention"
63
+ ]
64
+ }
46
65
  },
47
66
  {
48
67
  "name": "onCancel",
49
68
  "type": "(() => void)",
50
69
  "required": false,
51
70
  "defaultValue": null,
52
- "description": "Stop the run. The inline control exists only when this is given — Cursor's\nrule, and the right one: a Cancel that cannot cancel is worse than no\nCancel."
71
+ "description": "Stop the run. The inline control exists only when this is given — Cursor's\nrule, and the right one: a Cancel that cannot cancel is worse than no\nCancel.",
72
+ "control": {
73
+ "kind": "callback",
74
+ "fixture": "callback.log"
75
+ }
53
76
  },
54
77
  {
55
78
  "name": "cancelLabel",
56
79
  "type": "string",
57
80
  "required": false,
58
81
  "defaultValue": "Cancel",
59
- "description": "What the stop control is called. `Cancel` is Cursor's word; opencode uses\n`Interrupt` and `Stop` for the same button."
82
+ "description": "What the stop control is called. `Cancel` is Cursor's word; opencode uses\n`Interrupt` and `Stop` for the same button.",
83
+ "control": {
84
+ "kind": "string"
85
+ }
60
86
  },
61
87
  {
62
88
  "name": "announce",
63
89
  "type": "boolean",
64
90
  "required": false,
65
91
  "defaultValue": null,
66
- "description": "Whether this row is a live region — whether a screen reader is told each\ntime the action changes.\n\n**Answers itself by default, and that default is the interesting part.**\nLeft alone the row speaks when it is the only thing that can, and goes\nquiet the moment a {@link LiveRegionAnnouncer } is mounted anywhere on the\npage: the announcer's table covers the same transitions this row narrates,\nso a console with both — the ordinary composition — would otherwise have\nevery state read out twice, out of step, because the two regions update at\ndifferent moments.\n\nThe row is the one that defers because the announcer is the better speaker:\nit is a queue, spaced and depth-limited and paused while the page is hidden\nor a modal has the reader, and it is mounted empty and left mounted, which\nis the only way a live region is reliably announced. This row changes\nseveral times a second and comes and goes with the run.\n\nSet it explicitly to overrule that — `true` for a console whose announcer\nis fed something other than these actions, `false` for one that narrates\nthe foot of the transcript some other way. An explicit answer always wins."
92
+ "description": "Whether this row is a live region — whether a screen reader is told each\ntime the action changes.\n\n**Answers itself by default, and that default is the interesting part.**\nLeft alone the row speaks when it is the only thing that can, and goes\nquiet the moment a {@link LiveRegionAnnouncer } is mounted anywhere on the\npage: the announcer's table covers the same transitions this row narrates,\nso a console with both — the ordinary composition — would otherwise have\nevery state read out twice, out of step, because the two regions update at\ndifferent moments.\n\nThe row is the one that defers because the announcer is the better speaker:\nit is a queue, spaced and depth-limited and paused while the page is hidden\nor a modal has the reader, and it is mounted empty and left mounted, which\nis the only way a live region is reliably announced. This row changes\nseveral times a second and comes and goes with the run.\n\nSet it explicitly to overrule that — `true` for a console whose announcer\nis fed something other than these actions, `false` for one that narrates\nthe foot of the transcript some other way. An explicit answer always wins.",
93
+ "control": {
94
+ "kind": "boolean"
95
+ }
67
96
  }
68
97
  ],
69
98
  "typeReferences": [
@@ -14,35 +14,55 @@
14
14
  "type": "string",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "Command string shown in the terminal header."
17
+ "description": "Command string shown in the terminal header.",
18
+ "control": {
19
+ "kind": "string"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "lines",
21
24
  "type": "readonly string[]",
22
25
  "required": true,
23
26
  "defaultValue": null,
24
- "description": "Output lines available to stream into the body."
27
+ "description": "Output lines available to stream into the body.",
28
+ "control": {
29
+ "kind": "array",
30
+ "fixture": "agent.transcript"
31
+ }
25
32
  },
26
33
  {
27
34
  "name": "visibleCount",
28
35
  "type": "number",
29
36
  "required": true,
30
37
  "defaultValue": null,
31
- "description": "How many output lines from the start are currently shown."
38
+ "description": "How many output lines from the start are currently shown.",
39
+ "control": {
40
+ "kind": "number"
41
+ }
32
42
  },
33
43
  {
34
44
  "name": "done",
35
45
  "type": "boolean",
36
46
  "required": true,
37
47
  "defaultValue": null,
38
- "description": "When true the header shows exit 0; otherwise a spinner keeps spinning."
48
+ "description": "When true the header shows exit 0; otherwise a spinner keeps spinning.",
49
+ "control": {
50
+ "kind": "boolean"
51
+ }
39
52
  },
40
53
  {
41
54
  "name": "variant",
42
55
  "type": "\"paper\" | \"ink\"",
43
56
  "required": false,
44
57
  "defaultValue": "paper",
45
- "description": "paper matches the surrounding surfaces; ink renders the classic dark terminal slab."
58
+ "description": "paper matches the surrounding surfaces; ink renders the classic dark terminal slab.",
59
+ "control": {
60
+ "kind": "enum",
61
+ "members": [
62
+ "paper",
63
+ "ink"
64
+ ]
65
+ }
46
66
  }
47
67
  ],
48
68
  "typeReferences": [
@@ -12,56 +12,82 @@
12
12
  "type": "ReactNode",
13
13
  "required": false,
14
14
  "defaultValue": null,
15
- "description": "Name above the transcript — a log file, a host, a task."
15
+ "description": "Name above the transcript — a log file, a host, a task.",
16
+ "control": {
17
+ "kind": "node",
18
+ "fixture": "children.text"
19
+ }
16
20
  },
17
21
  {
18
22
  "name": "lines",
19
23
  "type": "readonly TerminalFrameLine[]",
20
24
  "required": false,
21
25
  "defaultValue": null,
22
- "description": "Static transcript. Rendered as a preamble when `simulate` is also set."
26
+ "description": "Static transcript. Rendered as a preamble when `simulate` is also set.",
27
+ "control": {
28
+ "kind": "array"
29
+ }
23
30
  },
24
31
  {
25
32
  "name": "prompt",
26
33
  "type": "string",
27
34
  "required": false,
28
35
  "defaultValue": "$",
29
- "description": "The prompt glyph in front of a command line. Defaults to `\"$\"`."
36
+ "description": "The prompt glyph in front of a command line. Defaults to `\"$\"`.",
37
+ "control": {
38
+ "kind": "string"
39
+ }
30
40
  },
31
41
  {
32
42
  "name": "copy",
33
43
  "type": "boolean",
34
44
  "required": false,
35
45
  "defaultValue": "false",
36
- "description": "Show a `CopyButton` in the title bar for the commands in the transcript."
46
+ "description": "Show a `CopyButton` in the title bar for the commands in the transcript.",
47
+ "control": {
48
+ "kind": "boolean"
49
+ }
37
50
  },
38
51
  {
39
52
  "name": "copyValue",
40
53
  "type": "string",
41
54
  "required": false,
42
55
  "defaultValue": null,
43
- "description": "What the copy button puts on the clipboard. Defaults to the command lines, one per line."
56
+ "description": "What the copy button puts on the clipboard. Defaults to the command lines, one per line.",
57
+ "control": {
58
+ "kind": "string"
59
+ }
44
60
  },
45
61
  {
46
62
  "name": "simulate",
47
63
  "type": "TerminalScript",
48
64
  "required": false,
49
65
  "defaultValue": null,
50
- "description": "Play the transcript out as a typed session.\n\nPass a stable reference (a module constant, or memoised) — the player\nrestarts whenever this prop changes identity. Under\n`prefers-reduced-motion` the finished transcript renders instantly and no\ntimer is ever scheduled."
66
+ "description": "Play the transcript out as a typed session.\n\nPass a stable reference (a module constant, or memoised) — the player\nrestarts whenever this prop changes identity. Under\n`prefers-reduced-motion` the finished transcript renders instantly and no\ntimer is ever scheduled.",
67
+ "control": {
68
+ "kind": "opaque"
69
+ }
51
70
  },
52
71
  {
53
72
  "name": "height",
54
73
  "type": "number",
55
74
  "required": false,
56
75
  "defaultValue": null,
57
- "description": "Fixed body height in px at the 16px root. Leave unset to grow with the content."
76
+ "description": "Fixed body height in px at the 16px root. Leave unset to grow with the content.",
77
+ "control": {
78
+ "kind": "number"
79
+ }
58
80
  },
59
81
  {
60
82
  "name": "children",
61
83
  "type": "ReactNode",
62
84
  "required": false,
63
85
  "defaultValue": null,
64
- "description": "Extra content under the transcript — an input row, a hint strip."
86
+ "description": "Extra content under the transcript — an input row, a hint strip.",
87
+ "control": {
88
+ "kind": "node",
89
+ "fixture": "children.text"
90
+ }
65
91
  }
66
92
  ],
67
93
  "typeReferences": [