@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
@@ -0,0 +1,199 @@
1
+ {
2
+ "name": "Inspector",
3
+ "slug": "inspector",
4
+ "group": "chrome",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": false,
8
+ "description": "The shape a settings panel, a properties sidebar and a wrench menu share:\ntitled sections of label-and-control rows, with a footer.\n\nLayout and nothing else — the controls are the library's own. A section is\na group headed by a `SectionHeader`; a row is a label then its control, one\ncolumn in a narrow container and two from 18rem; the footer holds a quiet\nnote and one action.\n\n**Static markup — no hooks, no `\"use client\"`**, so a server page can draw\none. Labels are strings for the same reason: a row with no `htmlFor` lays its\nlabel on its control as `aria-label`, rather than pointing at an id nobody\nhas generated. The row itself carries no role.",
9
+ "props": [],
10
+ "typeReferences": [],
11
+ "subcomponents": [
12
+ "Root",
13
+ "Section",
14
+ "Row",
15
+ "Footer"
16
+ ],
17
+ "parts": [
18
+ {
19
+ "name": "Root",
20
+ "usage": "Inspector.Root",
21
+ "description": "The inspector's frame: a size container, so each row's columns follow the\ninspector's own width — a popover's, a sidebar's — and not the viewport's.\nIt holds the sections, then the footer.",
22
+ "props": [
23
+ {
24
+ "name": "children",
25
+ "type": "ReactNode",
26
+ "required": false,
27
+ "defaultValue": null,
28
+ "description": "The sections, then the footer.",
29
+ "control": {
30
+ "kind": "node",
31
+ "fixture": "children.text"
32
+ }
33
+ }
34
+ ],
35
+ "typeReferences": [
36
+ "React.ComponentPropsWithoutRef<\"div\">"
37
+ ]
38
+ },
39
+ {
40
+ "name": "Section",
41
+ "usage": "Inspector.Section",
42
+ "description": "One titled group of rows: a `SectionHeader` carrying its `label`, and a group named by the same words.",
43
+ "props": [
44
+ {
45
+ "name": "label",
46
+ "type": "string",
47
+ "required": true,
48
+ "defaultValue": null,
49
+ "description": "The section's title — \"Variants\", \"Stage\". Drawn by a `SectionHeader` and read as the group's name.",
50
+ "control": {
51
+ "kind": "string"
52
+ }
53
+ },
54
+ {
55
+ "name": "children",
56
+ "type": "ReactNode",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "The section's rows.",
60
+ "control": {
61
+ "kind": "node",
62
+ "fixture": "children.text"
63
+ }
64
+ }
65
+ ],
66
+ "typeReferences": [
67
+ "React.ComponentPropsWithoutRef<\"div\">"
68
+ ]
69
+ },
70
+ {
71
+ "name": "Row",
72
+ "usage": "Inspector.Row",
73
+ "description": "One label and its control: one column in a narrow inspector, two from 18rem.\nWith `htmlFor` the label is a `<label>` for that control; without it the\nlabel is laid on the control as its `aria-label`, unless the control already\nnames itself. The row carries no role.",
74
+ "props": [
75
+ {
76
+ "name": "label",
77
+ "type": "string",
78
+ "required": true,
79
+ "defaultValue": null,
80
+ "description": "What the control sets — \"Size\", \"Theme\". Drawn before it, and read as its\nname: a `<label>` for it when `htmlFor` is given, and otherwise laid on\nthe control as `aria-label`, unless the control already names itself.",
81
+ "control": {
82
+ "kind": "string"
83
+ }
84
+ },
85
+ {
86
+ "name": "htmlFor",
87
+ "type": "string",
88
+ "required": false,
89
+ "defaultValue": null,
90
+ "description": "The control's `id`, when it takes one: the label then becomes a `<label>` for it.",
91
+ "control": {
92
+ "kind": "string"
93
+ }
94
+ },
95
+ {
96
+ "name": "children",
97
+ "type": "ReactNode",
98
+ "required": false,
99
+ "defaultValue": null,
100
+ "description": "The control — one element, any of the library's own. A row names a single control.",
101
+ "control": {
102
+ "kind": "node",
103
+ "fixture": "children.text"
104
+ }
105
+ }
106
+ ],
107
+ "typeReferences": [
108
+ "React.ComponentPropsWithoutRef<\"div\">"
109
+ ]
110
+ },
111
+ {
112
+ "name": "Footer",
113
+ "usage": "Inspector.Footer",
114
+ "description": "The inspector's closing strip: a quiet `note` on the left and one `action` on the right, each drawn only when given.",
115
+ "props": [
116
+ {
117
+ "name": "note",
118
+ "type": "ReactNode",
119
+ "required": false,
120
+ "defaultValue": null,
121
+ "description": "A quiet line on the left: which preset this is, or that none matches.",
122
+ "control": {
123
+ "kind": "node",
124
+ "fixture": "children.text"
125
+ }
126
+ },
127
+ {
128
+ "name": "action",
129
+ "type": "ReactNode",
130
+ "required": false,
131
+ "defaultValue": null,
132
+ "description": "The footer's one action, on the right — by convention a small `Button`.",
133
+ "control": {
134
+ "kind": "node",
135
+ "fixture": "children.text"
136
+ }
137
+ }
138
+ ],
139
+ "typeReferences": [
140
+ "React.ComponentPropsWithoutRef<\"div\">"
141
+ ]
142
+ }
143
+ ],
144
+ "variants": {},
145
+ "defaultVariants": {},
146
+ "tokensUsed": [
147
+ "--cue-border",
148
+ "--cue-fg-muted",
149
+ "--cue-fg-subtle",
150
+ "--cue-font-mono",
151
+ "--cue-space-2",
152
+ "--cue-space-3",
153
+ "--cue-space-4",
154
+ "--cue-text-label",
155
+ "--cue-text-ui"
156
+ ],
157
+ "summary": "Titled sections of label-and-control rows, with a footer: the layout of a settings panel, a properties sidebar or a wrench menu.",
158
+ "examples": [
159
+ {
160
+ "title": "A wrench menu",
161
+ "code": "<Inspector.Root>\n <Inspector.Section label=\"Variants\">\n <Inspector.Row label=\"Size\">\n <SegmentedControl aria-label=\"Size\" items={sizes} defaultValue=\"md\" />\n </Inspector.Row>\n <Inspector.Row label=\"Label\" htmlFor=\"label\">\n <Input id=\"label\" defaultValue=\"Take cue\" />\n </Inspector.Row>\n </Inspector.Section>\n <Inspector.Footer note=\"preset · button-hero\" action={<Button size=\"sm\">Reset</Button>} />\n</Inspector.Root>",
162
+ "language": "tsx"
163
+ },
164
+ {
165
+ "title": "Usage",
166
+ "code": "<Inspector.Root>\n <Inspector.Section label=\"Variants\">\n <Inspector.Row label=\"Size\"><SegmentedControl items={sizes} /></Inspector.Row>\n <Inspector.Row label=\"Label\" htmlFor=\"label\"><Input id=\"label\" /></Inspector.Row>\n </Inspector.Section>\n <Inspector.Footer note=\"preset · button-hero\" action={<Button size=\"sm\">Reset</Button>} />\n</Inspector.Root>",
167
+ "language": "tsx"
168
+ }
169
+ ],
170
+ "status": "stable",
171
+ "url": "/docs/components/inspector",
172
+ "mdUrl": "/docs/components/inspector.md",
173
+ "jsonUrl": "/r/components/inspector.json",
174
+ "whenToUse": [
175
+ "A popover or sidebar that edits several properties of one thing, grouped under a few headings.",
176
+ "Any panel whose rows are a label and a control — the controls stay the library's own; this lays them out."
177
+ ],
178
+ "whenNotToUse": [
179
+ "A form someone submits. That is `Field` and its family, which carry validation and descriptions an inspector row does not.",
180
+ "A list of records. That is `Panel` with `Row`."
181
+ ],
182
+ "commonMistakes": [
183
+ "Leaving a text input's row without `htmlFor`. The row then lays its words on the input as `aria-label`, which names it but gives it no `<label>` to click — give the input an `id` and the row `htmlFor`.",
184
+ "Putting two controls in one row. A row names one control; two controls are two rows.",
185
+ "Nesting sections. An inspector is one level of headings; a section inside a section is a second panel."
186
+ ],
187
+ "specimens": [
188
+ {
189
+ "title": "Inspector",
190
+ "group": "chrome",
191
+ "components": [
192
+ "Inspector"
193
+ ],
194
+ "code": "<div className=\"w-full max-w-[20rem] rounded-(--radius-surface) border border-border bg-surface-2\">\n <Inspector.Root>\n {/*\n Data first, Variants second: `seedFromSpecimen` (`@repo/docgen`)\n takes each prop's first tag-order value across the whole bench,\n per prop name and not per row, so `defaults@Inspector.Row`'s\n `label` and `htmlFor` have to come off the same row to name a\n coherent pair — and `htmlFor` is only ever set on this one, the\n only row whose control is a single labelable element. Putting\n it first makes it that row for both props at once. Reordering\n Size and Icon ahead of it would seed `label: \"Size\"` (the first\n `Inspector.Row` tag) beside this row's `htmlFor`, pointing a\n `<label for>` at an id that scope's control never renders.\n */}\n <Inspector.Section label=\"Data\">\n <Inspector.Row label=\"Label\" htmlFor=\"inspector-bench-label\">\n <Input id=\"inspector-bench-label\" defaultValue=\"Take cue\" />\n </Inspector.Row>\n </Inspector.Section>\n <Inspector.Section label=\"Variants\">\n <Inspector.Row label=\"Size\">\n <SegmentedControl\n aria-label=\"Size\"\n size=\"sm\"\n items={[\n { value: \"sm\", label: \"sm\" },\n { value: \"md\", label: \"md\" },\n { value: \"lg\", label: \"lg\" },\n ]}\n defaultValue=\"md\"\n />\n </Inspector.Row>\n <Inspector.Row label=\"Icon\">\n <Switch aria-label=\"Icon\" defaultChecked />\n </Inspector.Row>\n </Inspector.Section>\n <Inspector.Footer\n note=\"preset · button-hero\"\n action={\n <Button size=\"sm\" variant=\"secondary\">\n Reset\n </Button>\n }\n />\n </Inspector.Root>\n</div>",
195
+ "note": "Titled sections of label-and-control rows, with a footer — the shape of a settings panel, a properties sidebar and the docs' wrench menu. Layout only: the controls are the ones you already use.",
196
+ "interaction": "nothing of its own takes focus. Each row's control is a real one: a row given `htmlFor` labels its control with a `<label>`, and one without lays its label on the control as `aria-label`. A row is never a group of its own."
197
+ }
198
+ ]
199
+ }
@@ -12,56 +12,90 @@
12
12
  "type": "ReactNode",
13
13
  "required": false,
14
14
  "defaultValue": null,
15
- "description": "Leading slot: an icon, an avatar, a status dot."
15
+ "description": "Leading slot: an icon, an avatar, a status dot.",
16
+ "control": {
17
+ "kind": "node",
18
+ "fixture": "children.text"
19
+ }
16
20
  },
17
21
  {
18
22
  "name": "title",
19
23
  "type": "ReactNode",
20
24
  "required": false,
21
25
  "defaultValue": null,
22
- "description": "The item's name — one line, truncated rather than wrapped."
26
+ "description": "The item's name — one line, truncated rather than wrapped.",
27
+ "control": {
28
+ "kind": "node",
29
+ "fixture": "children.text"
30
+ }
23
31
  },
24
32
  {
25
33
  "name": "description",
26
34
  "type": "ReactNode",
27
35
  "required": false,
28
36
  "defaultValue": null,
29
- "description": "One supporting line under the title, a rung smaller and muted."
37
+ "description": "One supporting line under the title, a rung smaller and muted.",
38
+ "control": {
39
+ "kind": "node",
40
+ "fixture": "children.text"
41
+ }
30
42
  },
31
43
  {
32
44
  "name": "actions",
33
45
  "type": "ReactNode",
34
46
  "required": false,
35
47
  "defaultValue": null,
36
- "description": "Trailing slot: a value, a chip, a control.\n\nDo not combine with `interactive` — the whole item is then a `<button>`,\nand a button may not contain another one. Put the controls beside the item\ninstead, or drop `interactive` and make the title itself the link."
48
+ "description": "Trailing slot: a value, a chip, a control.\n\nDo not combine with `interactive` — the whole item is then a `<button>`,\nand a button may not contain another one. Put the controls beside the item\ninstead, or drop `interactive` and make the title itself the link.",
49
+ "control": {
50
+ "kind": "node",
51
+ "fixture": "children.text"
52
+ }
37
53
  },
38
54
  {
39
55
  "name": "variant",
40
56
  "type": "\"plain\" | \"outline\" | \"soft\"",
41
57
  "required": false,
42
58
  "defaultValue": null,
43
- "description": "Which framing to paint. Defaults to `\"plain\"`."
59
+ "description": "Which framing to paint. Defaults to `\"plain\"`.",
60
+ "control": {
61
+ "kind": "enum",
62
+ "members": [
63
+ "plain",
64
+ "outline",
65
+ "soft"
66
+ ]
67
+ }
44
68
  },
45
69
  {
46
70
  "name": "interactive",
47
71
  "type": "boolean",
48
72
  "required": false,
49
73
  "defaultValue": "false",
50
- "description": "Render as a `<button>` with hover feedback and a focus ring instead of a\nstatic `<div>`. Use for items that select, open or toggle something."
74
+ "description": "Render as a `<button>` with hover feedback and a focus ring instead of a\nstatic `<div>`. Use for items that select, open or toggle something.",
75
+ "control": {
76
+ "kind": "boolean"
77
+ }
51
78
  },
52
79
  {
53
80
  "name": "disabled",
54
81
  "type": "boolean",
55
82
  "required": false,
56
83
  "defaultValue": null,
57
- "description": "Disable the interactive form. Ignored when `interactive` is not set."
84
+ "description": "Disable the interactive form. Ignored when `interactive` is not set.",
85
+ "control": {
86
+ "kind": "boolean"
87
+ }
58
88
  },
59
89
  {
60
90
  "name": "children",
61
91
  "type": "ReactNode",
62
92
  "required": false,
63
93
  "defaultValue": null,
64
- "description": "Extra content between the text column and the action slot."
94
+ "description": "Extra content between the text column and the action slot.",
95
+ "control": {
96
+ "kind": "node",
97
+ "fixture": "children.text"
98
+ }
65
99
  }
66
100
  ],
67
101
  "typeReferences": [
@@ -14,42 +14,61 @@
14
14
  "type": "string",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "What the job is doing."
17
+ "description": "What the job is doing.",
18
+ "control": {
19
+ "kind": "string"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "stages",
21
24
  "type": "readonly JobStage[]",
22
25
  "required": true,
23
26
  "defaultValue": null,
24
- "description": "Stages with relative weights, so a long install does not read the same as a fast\nclone."
27
+ "description": "Stages with relative weights, so a long install does not read the same as a fast\nclone.",
28
+ "control": {
29
+ "kind": "array"
30
+ }
25
31
  },
26
32
  {
27
33
  "name": "stageIndex",
28
34
  "type": "number",
29
35
  "required": true,
30
36
  "defaultValue": null,
31
- "description": "Which stage is running. Passing stages.length marks the job finished, and the bar\nnever runs past its track."
37
+ "description": "Which stage is running. Passing stages.length marks the job finished, and the bar\nnever runs past its track.",
38
+ "control": {
39
+ "kind": "number"
40
+ }
32
41
  },
33
42
  {
34
43
  "name": "stageProgress",
35
44
  "type": "number",
36
45
  "required": true,
37
46
  "defaultValue": null,
38
- "description": "Progress inside the current stage, 0 to 1."
47
+ "description": "Progress inside the current stage, 0 to 1.",
48
+ "control": {
49
+ "kind": "number"
50
+ }
39
51
  },
40
52
  {
41
53
  "name": "eta",
42
54
  "type": "string",
43
55
  "required": true,
44
56
  "defaultValue": null,
45
- "description": "Pre-formatted estimate. Replaced by done once finished."
57
+ "description": "Pre-formatted estimate. Replaced by done once finished.",
58
+ "control": {
59
+ "kind": "string"
60
+ }
46
61
  },
47
62
  {
48
63
  "name": "onCancel",
49
64
  "type": "(() => void)",
50
65
  "required": false,
51
66
  "defaultValue": null,
52
- "description": "Called to stop the job. Hidden once it finishes."
67
+ "description": "Called to stop the job. Hidden once it finishes.",
68
+ "control": {
69
+ "kind": "callback",
70
+ "fixture": "callback.log"
71
+ }
53
72
  }
54
73
  ],
55
74
  "typeReferences": [
@@ -14,49 +14,74 @@
14
14
  "type": "boolean",
15
15
  "required": true,
16
16
  "defaultValue": null,
17
- "description": "Whether the panel is showing. The trigger icon crossfades either way."
17
+ "description": "Whether the panel is showing. The trigger icon crossfades either way.",
18
+ "control": {
19
+ "kind": "boolean"
20
+ }
18
21
  },
19
22
  {
20
23
  "name": "unread",
21
24
  "type": "number",
22
25
  "required": true,
23
26
  "defaultValue": null,
24
- "description": "Badge count on the closed bubble. Hidden at zero and while open."
27
+ "description": "Badge count on the closed bubble. Hidden at zero and while open.",
28
+ "control": {
29
+ "kind": "number"
30
+ }
25
31
  },
26
32
  {
27
33
  "name": "greeting",
28
34
  "type": "string",
29
35
  "required": true,
30
36
  "defaultValue": null,
31
- "description": "Opening line in the panel."
37
+ "description": "Opening line in the panel.",
38
+ "control": {
39
+ "kind": "string"
40
+ }
32
41
  },
33
42
  {
34
43
  "name": "prompts",
35
44
  "type": "readonly string[]",
36
45
  "required": true,
37
46
  "defaultValue": null,
38
- "description": "Ways in, so the first message does not have to be invented."
47
+ "description": "Ways in, so the first message does not have to be invented.",
48
+ "control": {
49
+ "kind": "array",
50
+ "fixture": "agent.transcript"
51
+ }
39
52
  },
40
53
  {
41
54
  "name": "onToggle",
42
55
  "type": "(() => void)",
43
56
  "required": false,
44
57
  "defaultValue": null,
45
- "description": "Called when the bubble is pressed."
58
+ "description": "Called when the bubble is pressed.",
59
+ "control": {
60
+ "kind": "callback",
61
+ "fixture": "callback.log"
62
+ }
46
63
  },
47
64
  {
48
65
  "name": "onPick",
49
66
  "type": "((prompt: string) => void)",
50
67
  "required": false,
51
68
  "defaultValue": null,
52
- "description": "Called when a starter prompt is chosen."
69
+ "description": "Called when a starter prompt is chosen.",
70
+ "control": {
71
+ "kind": "callback",
72
+ "fixture": "callback.log"
73
+ }
53
74
  },
54
75
  {
55
76
  "name": "onStart",
56
77
  "type": "(() => void)",
57
78
  "required": false,
58
79
  "defaultValue": null,
59
- "description": "Called from the Start a conversation action, for opening an empty thread."
80
+ "description": "Called from the Start a conversation action, for opening an empty thread.",
81
+ "control": {
82
+ "kind": "callback",
83
+ "fixture": "callback.log"
84
+ }
60
85
  }
61
86
  ],
62
87
  "typeReferences": [