@cueplusplus/ui 0.15.0 → 0.17.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 (508) hide show
  1. package/CHANGELOG.md +1083 -0
  2. package/README.md +26 -0
  3. package/dist/agent-runtime/tool-call-card.js +7 -3
  4. package/dist/brand/_chassis.d.ts +1 -1
  5. package/dist/brand/cue-mark.d.ts +1 -1
  6. package/dist/brand/cue-mark.js +1 -1
  7. package/dist/charts/ramps.js +1 -1
  8. package/dist/chat/agent-pile.js +2 -1
  9. package/dist/chat/ask-box.js +4 -3
  10. package/dist/chat/delegation-card.js +3 -2
  11. package/dist/chat/message-list.js +4 -2
  12. package/dist/chat/message.js +17 -7
  13. package/dist/chrome/_edge-scroller.js +2 -1
  14. package/dist/chrome/_status-bar.js +9 -3
  15. package/dist/chrome/_tabs-scroll.d.ts +17 -1
  16. package/dist/chrome/_tabs-scroll.js +20 -3
  17. package/dist/chrome/app-bar.js +10 -3
  18. package/dist/chrome/app-shell.js +2 -1
  19. package/dist/chrome/band.d.ts +18 -12
  20. package/dist/chrome/band.js +19 -31
  21. package/dist/chrome/eyebrow.d.ts +13 -5
  22. package/dist/chrome/eyebrow.js +18 -7
  23. package/dist/chrome/footer.d.ts +5 -0
  24. package/dist/chrome/footer.js +14 -3
  25. package/dist/chrome/navigation-menu.js +4 -2
  26. package/dist/chrome/page-shell.js +8 -5
  27. package/dist/chrome/panel.d.ts +5 -2
  28. package/dist/chrome/panel.js +9 -4
  29. package/dist/chrome/row.js +6 -3
  30. package/dist/chrome/scroll-area.js +2 -1
  31. package/dist/chrome/section-header.js +13 -4
  32. package/dist/chrome/segmented-control.js +12 -3
  33. package/dist/chrome/status-bar.js +2 -1
  34. package/dist/chrome/tabs.js +11 -3
  35. package/dist/chrome/toolbar.js +2 -1
  36. package/dist/chrome/tree.js +3 -2
  37. package/dist/color/_thumb.js +9 -3
  38. package/dist/color/color-area.js +1 -1
  39. package/dist/color/color-field.d.ts +2 -1
  40. package/dist/color/color-picker.d.ts +2 -1
  41. package/dist/color/color-swatch.js +1 -1
  42. package/dist/configurator/_overrides.js +13 -4
  43. package/dist/configurator/configurator.js +4 -1
  44. package/dist/configurator/export-dialog.js +5 -2
  45. package/dist/configurator/panel-sections.js +6 -2
  46. package/dist/configurator/token-editor.js +4 -1
  47. package/dist/date/calendar.js +12 -8
  48. package/dist/date/date-field.d.ts +2 -1
  49. package/dist/date/date-picker.d.ts +2 -1
  50. package/dist/date/date-range-picker.d.ts +2 -1
  51. package/dist/date/time-field.d.ts +2 -1
  52. package/dist/dmx/channel-matrix.js +3 -2
  53. package/dist/dmx/dmx-bar.js +1 -1
  54. package/dist/dmx/dmx-strip.js +1 -1
  55. package/dist/dmx/universe-grid.js +3 -2
  56. package/dist/elements/activity-graph.js +3 -3
  57. package/dist/elements/agent-card.js +3 -3
  58. package/dist/elements/approval-card.js +3 -3
  59. package/dist/elements/artifact-card.js +2 -2
  60. package/dist/elements/background-inbox.js +2 -2
  61. package/dist/elements/canvas-split.js +2 -2
  62. package/dist/elements/chart.js +1 -1
  63. package/dist/elements/chat-panel.js +2 -2
  64. package/dist/elements/checkpoint-history.js +2 -2
  65. package/dist/elements/clamp.js +2 -1
  66. package/dist/elements/code-diff.js +1 -1
  67. package/dist/elements/code-runner.js +1 -1
  68. package/dist/elements/command-palette.js +6 -5
  69. package/dist/elements/comparison-card.js +2 -2
  70. package/dist/elements/composer.js +9 -8
  71. package/dist/elements/computer-use.js +1 -1
  72. package/dist/elements/confidence-marker.js +2 -1
  73. package/dist/elements/connection-state.js +1 -1
  74. package/dist/elements/context-breakdown.js +1 -1
  75. package/dist/elements/context-usage.js +1 -1
  76. package/dist/elements/conversation-search.js +4 -3
  77. package/dist/elements/cost-meter.js +1 -1
  78. package/dist/elements/data-table.js +2 -2
  79. package/dist/elements/day-separator.js +1 -1
  80. package/dist/elements/diagram.js +1 -1
  81. package/dist/elements/document-reference.js +3 -3
  82. package/dist/elements/draft-restore.js +1 -1
  83. package/dist/elements/edit-message.js +4 -3
  84. package/dist/elements/elements.css +26 -5
  85. package/dist/elements/elicitation-form.js +3 -3
  86. package/dist/elements/empty-state.js +2 -1
  87. package/dist/elements/error-state.js +1 -1
  88. package/dist/elements/feedback-dialog.js +4 -3
  89. package/dist/elements/file-tree.js +2 -2
  90. package/dist/elements/flow-graph.js +2 -2
  91. package/dist/elements/guardrail-notice.js +3 -3
  92. package/dist/elements/image-generation.js +1 -1
  93. package/dist/elements/inline-citation.js +3 -3
  94. package/dist/elements/job-progress.js +3 -3
  95. package/dist/elements/launcher-bubble.js +2 -2
  96. package/dist/elements/loading-state.js +1 -1
  97. package/dist/elements/map-answer.js +3 -2
  98. package/dist/elements/markdown.js +5 -4
  99. package/dist/elements/math-block.js +1 -1
  100. package/dist/elements/mcp-server-panel.js +3 -3
  101. package/dist/elements/message-attachment.js +4 -4
  102. package/dist/elements/message-pair.js +1 -1
  103. package/dist/elements/message-queue.js +2 -2
  104. package/dist/elements/mobile-composer.js +4 -3
  105. package/dist/elements/model-picker.js +3 -3
  106. package/dist/elements/onboarding.js +2 -2
  107. package/dist/elements/permission-grant.js +2 -2
  108. package/dist/elements/permission-scopes.js +5 -4
  109. package/dist/elements/prompt-library.js +7 -6
  110. package/dist/elements/queue-dock.js +4 -3
  111. package/dist/elements/quota-banner.js +1 -1
  112. package/dist/elements/quote-reply.js +1 -1
  113. package/dist/elements/read-aloud.js +2 -2
  114. package/dist/elements/reasoning-panel.js +2 -1
  115. package/dist/elements/recommendation-card.d.ts +1 -1
  116. package/dist/elements/recommendation-card.js +2 -2
  117. package/dist/elements/regenerate-menu.js +2 -2
  118. package/dist/elements/research-report.js +1 -1
  119. package/dist/elements/retrieval-chunks.js +1 -1
  120. package/dist/elements/revert-dock.js +5 -4
  121. package/dist/elements/reviewable-diff.js +1 -1
  122. package/dist/elements/schedule-card.js +3 -3
  123. package/dist/elements/score-breakdown.js +1 -1
  124. package/dist/elements/scroll-anchor.js +2 -2
  125. package/dist/elements/settings-panel.js +3 -2
  126. package/dist/elements/shared-conversation.js +2 -2
  127. package/dist/elements/sources.js +4 -3
  128. package/dist/elements/speaker-identity.js +1 -1
  129. package/dist/elements/spec-sheet.js +1 -1
  130. package/dist/elements/streaming-text.js +1 -1
  131. package/dist/elements/subagent-list.js +2 -2
  132. package/dist/elements/suggestions.js +1 -1
  133. package/dist/elements/surfaces.d.ts +1 -1
  134. package/dist/elements/surfaces.js +2 -1
  135. package/dist/elements/tail-status.js +1 -1
  136. package/dist/elements/terminal-block.js +1 -1
  137. package/dist/elements/thread-list.js +1 -1
  138. package/dist/elements/thread-search.js +5 -4
  139. package/dist/elements/timeline.js +1 -1
  140. package/dist/elements/todo-list.js +2 -2
  141. package/dist/elements/tool-call.js +4 -3
  142. package/dist/elements/tool-error.js +2 -2
  143. package/dist/elements/tool-group.js +1 -1
  144. package/dist/elements/tool-timeline.js +4 -3
  145. package/dist/elements/trace-waterfall.js +1 -1
  146. package/dist/elements/verdict-row.js +2 -2
  147. package/dist/elements/voice-conversation.js +3 -2
  148. package/dist/elements/web-preview.js +1 -1
  149. package/dist/elements/web-search.js +2 -2
  150. package/dist/elements/work-collapse.js +2 -1
  151. package/dist/flow/node-card.js +3 -2
  152. package/dist/flow/use-flow-theme.js +2 -1
  153. package/dist/forms/_chassis-size.d.ts +22 -0
  154. package/dist/forms/_chassis.d.ts +28 -15
  155. package/dist/forms/_chassis.js +34 -8
  156. package/dist/forms/_listbox.js +8 -5
  157. package/dist/forms/autocomplete.d.ts +2 -1
  158. package/dist/forms/checkbox.js +8 -2
  159. package/dist/forms/combobox.d.ts +2 -1
  160. package/dist/forms/env-var-input.d.ts +2 -1
  161. package/dist/forms/env-var-input.js +3 -2
  162. package/dist/forms/field.d.ts +2 -1
  163. package/dist/forms/field.js +15 -4
  164. package/dist/forms/file-upload.js +3 -2
  165. package/dist/forms/index.d.ts +2 -1
  166. package/dist/forms/input-group.d.ts +2 -1
  167. package/dist/forms/input.d.ts +2 -1
  168. package/dist/forms/multi-select.d.ts +2 -1
  169. package/dist/forms/number-field.js +2 -1
  170. package/dist/forms/otp-field.d.ts +2 -1
  171. package/dist/forms/password-input.d.ts +2 -1
  172. package/dist/forms/password-input.js +4 -2
  173. package/dist/forms/radio-group.js +6 -2
  174. package/dist/forms/rating.js +2 -1
  175. package/dist/forms/scrub-input.d.ts +2 -1
  176. package/dist/forms/scrub-input.js +2 -1
  177. package/dist/forms/search-input.d.ts +2 -1
  178. package/dist/forms/search-input.js +2 -1
  179. package/dist/forms/select.d.ts +2 -1
  180. package/dist/forms/select.js +6 -2
  181. package/dist/forms/slider.js +6 -2
  182. package/dist/forms/switch.js +6 -2
  183. package/dist/forms/tags-input.d.ts +2 -1
  184. package/dist/forms/textarea.js +2 -1
  185. package/dist/forms/toggle-group.d.ts +1 -1
  186. package/dist/forms/toggle.d.ts +1 -1
  187. package/dist/forms/toggle.js +3 -1
  188. package/dist/index.d.ts +4 -3
  189. package/dist/index.js +2 -2
  190. package/dist/instruments/_data-row.js +2 -1
  191. package/dist/instruments/app-window-frame.js +1 -1
  192. package/dist/instruments/code-block.js +8 -2
  193. package/dist/instruments/group-bar.js +1 -1
  194. package/dist/instruments/ledger.js +6 -2
  195. package/dist/instruments/log-viewer.js +5 -3
  196. package/dist/instruments/progress.js +5 -2
  197. package/dist/instruments/seam-grid.js +5 -3
  198. package/dist/instruments/stat.js +10 -3
  199. package/dist/instruments/table.js +28 -10
  200. package/dist/instruments/terminal-frame.js +4 -2
  201. package/dist/instruments/usage-chart.js +1 -1
  202. package/dist/layout/_collapse.js +6 -1
  203. package/dist/layout/bento.js +7 -4
  204. package/dist/layout/breadcrumb.js +7 -3
  205. package/dist/layout/card.js +14 -6
  206. package/dist/layout/carousel.js +3 -2
  207. package/dist/layout/collapsible.js +5 -1
  208. package/dist/layout/container.js +2 -1
  209. package/dist/layout/description-list.js +4 -1
  210. package/dist/layout/frames.js +11 -5
  211. package/dist/layout/item.js +3 -2
  212. package/dist/layout/link.d.ts +16 -0
  213. package/dist/layout/link.js +22 -3
  214. package/dist/layout/pagination.js +2 -1
  215. package/dist/layout/preview.d.ts +32 -12
  216. package/dist/layout/preview.js +149 -40
  217. package/dist/layout/resizable.js +2 -1
  218. package/dist/layout/sidebar.js +11 -3
  219. package/dist/layout/stepper.js +6 -2
  220. package/dist/lib/cn.js +29 -2
  221. package/dist/midi/musical-time-input.d.ts +2 -1
  222. package/dist/midi/piano-keyboard.js +3 -2
  223. package/dist/midi/spectrum-visualizer.js +1 -1
  224. package/dist/midi/threshold-rail.js +2 -1
  225. package/dist/midi/timeline-ruler.js +1 -1
  226. package/dist/overlays/_surface.d.ts +72 -12
  227. package/dist/overlays/_surface.js +86 -12
  228. package/dist/overlays/command-palette.js +9 -5
  229. package/dist/overlays/dialog.d.ts +5 -0
  230. package/dist/overlays/dialog.js +6 -1
  231. package/dist/overlays/info-tip.js +2 -1
  232. package/dist/overlays/menubar.js +3 -1
  233. package/dist/overlays/popover.js +2 -1
  234. package/dist/overlays/toast.js +6 -2
  235. package/dist/overlays/tooltip.js +4 -1
  236. package/dist/primitives/button.d.ts +15 -0
  237. package/dist/primitives/button.js +40 -10
  238. package/dist/primitives/chip.d.ts +20 -2
  239. package/dist/primitives/chip.js +39 -17
  240. package/dist/primitives/kbd.d.ts +6 -0
  241. package/dist/primitives/kbd.js +10 -1
  242. package/dist/primitives/skeleton.js +1 -1
  243. package/dist/system/_focus-ring-field.js +29 -0
  244. package/dist/system/_focus-ring.js +125 -0
  245. package/dist/system/_paint-elevation.js +9 -0
  246. package/dist/system/_paint-glass.js +46 -0
  247. package/dist/system/_paint-glow.js +51 -0
  248. package/dist/system/_paint-ground-pattern.js +30 -0
  249. package/dist/system/_paint-rest-shade.js +32 -0
  250. package/dist/system/_paint-rim.js +59 -0
  251. package/dist/system/_paint-stroke-sunken.js +19 -0
  252. package/dist/system/_paint-stroke-surface-1.js +19 -0
  253. package/dist/system/_paint-stroke-surface-2.js +40 -0
  254. package/dist/system/_paint-texture.js +56 -0
  255. package/dist/system/_style-app-bar.js +65 -0
  256. package/dist/system/_style-band.js +57 -0
  257. package/dist/system/_style-body-leading.js +21 -0
  258. package/dist/system/_style-body-size.js +30 -0
  259. package/dist/system/_style-body-weight.js +24 -0
  260. package/dist/system/_style-body.js +27 -0
  261. package/dist/system/_style-caption.js +19 -0
  262. package/dist/system/_style-card-pad.js +43 -0
  263. package/dist/system/_style-check.js +33 -0
  264. package/dist/system/_style-chip.js +103 -0
  265. package/dist/system/_style-code.js +13 -0
  266. package/dist/system/_style-collapse.js +14 -0
  267. package/dist/system/_style-control-face.js +29 -0
  268. package/dist/system/_style-control-label.js +22 -0
  269. package/dist/system/_style-control-step.js +22 -0
  270. package/dist/system/_style-control.js +76 -0
  271. package/dist/system/_style-data-face.js +28 -0
  272. package/dist/system/_style-description.js +23 -0
  273. package/dist/system/_style-eyebrow.js +43 -0
  274. package/dist/system/_style-footer-rule.js +47 -0
  275. package/dist/system/_style-gutter.js +17 -0
  276. package/dist/system/_style-help-ink.js +14 -0
  277. package/dist/system/_style-help.js +29 -0
  278. package/dist/system/_style-input-face.js +34 -0
  279. package/dist/system/_style-kbd.js +46 -0
  280. package/dist/system/_style-label-case.js +36 -0
  281. package/dist/system/_style-label-face.js +32 -0
  282. package/dist/system/_style-label-ink.js +29 -0
  283. package/dist/system/_style-label-leading.js +14 -0
  284. package/dist/system/_style-label-size.js +36 -0
  285. package/dist/system/_style-label-tracking.js +45 -0
  286. package/dist/system/_style-label-weight.js +40 -0
  287. package/dist/system/_style-lede.js +49 -0
  288. package/dist/system/_style-link.js +46 -0
  289. package/dist/system/_style-menu.js +30 -0
  290. package/dist/system/_style-nav-item.js +41 -0
  291. package/dist/system/_style-nav-voice.js +43 -0
  292. package/dist/system/_style-option.js +42 -0
  293. package/dist/system/_style-overlay-title.js +35 -0
  294. package/dist/system/_style-page-title.js +48 -0
  295. package/dist/system/_style-popover-pad.js +13 -0
  296. package/dist/system/_style-quiet-ink.js +13 -0
  297. package/dist/system/_style-row-pad.js +13 -0
  298. package/dist/system/_style-seam.js +43 -0
  299. package/dist/system/_style-section-rule.js +26 -0
  300. package/dist/system/_style-segment.js +30 -0
  301. package/dist/system/_style-segmented-control.js +86 -0
  302. package/dist/system/_style-selected.js +36 -0
  303. package/dist/system/_style-stage-marks.js +26 -0
  304. package/dist/system/_style-tab.js +71 -0
  305. package/dist/system/_style-textarea.js +21 -0
  306. package/dist/system/_style-title.js +37 -0
  307. package/dist/system/_style-tooltip.js +17 -0
  308. package/dist/system/density.d.ts +15 -5
  309. package/dist/system/density.js +188 -25
  310. package/dist/system/index.d.ts +2 -2
  311. package/dist/system/index.js +2 -2
  312. package/dist/system/overrides.d.ts +1 -0
  313. package/dist/system/overrides.js +151 -3
  314. package/dist/system/portal.d.ts +3 -2
  315. package/dist/system/portal.js +22 -10
  316. package/dist/system/prepaint.d.ts +21 -5
  317. package/dist/system/prepaint.js +3 -1
  318. package/dist/system/published.d.ts +1 -0
  319. package/dist/system/published.js +131 -0
  320. package/dist/system/theme-provider.d.ts +168 -60
  321. package/dist/system/theme-provider.js +375 -79
  322. package/dist/system/theme-registry.d.ts +2 -1
  323. package/dist/system/theme-registry.js +27 -10
  324. package/dist/system/use-density.js +4 -3
  325. package/dist/system/use-theme.d.ts +5 -2
  326. package/dist/system/use-theme.js +7 -4
  327. package/dist/system/vocabulary.js +2 -2
  328. package/dist/theming/create-theme.js +12 -6
  329. package/dist/theming/serialize.d.ts +34 -2
  330. package/dist/theming/serialize.js +86 -4
  331. package/manifest/components/accordion.json +7 -1
  332. package/manifest/components/agent-pile.json +3 -0
  333. package/manifest/components/alert-dialog.json +38 -1
  334. package/manifest/components/app-bar.json +23 -2
  335. package/manifest/components/app-shell.json +5 -0
  336. package/manifest/components/ask-box.json +3 -1
  337. package/manifest/components/autocomplete.json +49 -1
  338. package/manifest/components/band.json +14 -3
  339. package/manifest/components/bento.json +12 -1
  340. package/manifest/components/breadcrumb.json +8 -1
  341. package/manifest/components/button.json +31 -3
  342. package/manifest/components/calendar.json +7 -0
  343. package/manifest/components/card.json +28 -1
  344. package/manifest/components/carousel.json +4 -1
  345. package/manifest/components/channel-matrix.json +40 -1
  346. package/manifest/components/chart-tooltip-content.json +38 -1
  347. package/manifest/components/chat-empty-state.json +3 -1
  348. package/manifest/components/checkbox-group.json +14 -0
  349. package/manifest/components/checkbox.json +14 -0
  350. package/manifest/components/chip.json +16 -1
  351. package/manifest/components/clamp.json +3 -1
  352. package/manifest/components/code-block.json +10 -1
  353. package/manifest/components/collapsible.json +13 -2
  354. package/manifest/components/color-area.json +4 -2
  355. package/manifest/components/color-field.json +14 -0
  356. package/manifest/components/color-picker.json +14 -0
  357. package/manifest/components/color-slider.json +3 -1
  358. package/manifest/components/colors-section.json +9 -1
  359. package/manifest/components/combobox.json +49 -1
  360. package/manifest/components/command-palette.json +37 -1
  361. package/manifest/components/composer-actions.json +3 -0
  362. package/manifest/components/composer-attach-button.json +3 -0
  363. package/manifest/components/composer-attachment-chip.json +3 -0
  364. package/manifest/components/composer-attachments.json +3 -0
  365. package/manifest/components/composer-bar.json +3 -0
  366. package/manifest/components/composer-command-item.json +3 -0
  367. package/manifest/components/composer-context.json +3 -0
  368. package/manifest/components/composer-input.json +3 -0
  369. package/manifest/components/composer-menu-item.json +3 -0
  370. package/manifest/components/composer-menu.json +3 -0
  371. package/manifest/components/composer-model-item.json +3 -0
  372. package/manifest/components/composer-model-trigger.json +3 -0
  373. package/manifest/components/composer-person-item.json +3 -0
  374. package/manifest/components/composer-send.json +3 -0
  375. package/manifest/components/composer-toolbar.json +3 -0
  376. package/manifest/components/composer-voice-button.json +3 -0
  377. package/manifest/components/composer-voice.json +3 -0
  378. package/manifest/components/composer.json +14 -0
  379. package/manifest/components/confidence-marker.json +3 -1
  380. package/manifest/components/container.json +2 -1
  381. package/manifest/components/context-menu.json +38 -1
  382. package/manifest/components/conversation-search.json +3 -1
  383. package/manifest/components/cue-mark.json +2 -2
  384. package/manifest/components/cue-portal-frame.json +1 -1
  385. package/manifest/components/data-row.json +3 -1
  386. package/manifest/components/data-tree.json +3 -1
  387. package/manifest/components/date-field.json +14 -0
  388. package/manifest/components/date-picker.json +14 -0
  389. package/manifest/components/date-range-picker.json +14 -0
  390. package/manifest/components/delegation-card.json +3 -1
  391. package/manifest/components/density.json +21 -7
  392. package/manifest/components/description-list.json +6 -1
  393. package/manifest/components/dialog.json +39 -1
  394. package/manifest/components/disclosure.json +13 -2
  395. package/manifest/components/dmx-bar.json +37 -1
  396. package/manifest/components/dmx-strip.json +37 -1
  397. package/manifest/components/drawer.json +38 -1
  398. package/manifest/components/dropdown-menu.json +38 -1
  399. package/manifest/components/edit-message.json +3 -1
  400. package/manifest/components/elements-command-palette.json +3 -1
  401. package/manifest/components/elements-composer.json +3 -0
  402. package/manifest/components/empty-state-composer.json +3 -1
  403. package/manifest/components/empty-state-greeting.json +3 -1
  404. package/manifest/components/empty-state-suggestion.json +3 -1
  405. package/manifest/components/empty-state-suggestions.json +3 -1
  406. package/manifest/components/env-var-input.json +14 -1
  407. package/manifest/components/export-dialog.json +6 -1
  408. package/manifest/components/eyebrow.json +13 -2
  409. package/manifest/components/feedback-dialog.json +3 -0
  410. package/manifest/components/field-description.json +14 -0
  411. package/manifest/components/field-error.json +14 -0
  412. package/manifest/components/field-label.json +15 -1
  413. package/manifest/components/field.json +14 -0
  414. package/manifest/components/file-upload.json +3 -0
  415. package/manifest/components/footer.json +14 -1
  416. package/manifest/components/frames.json +14 -1
  417. package/manifest/components/hover-card.json +38 -1
  418. package/manifest/components/info-tip.json +3 -0
  419. package/manifest/components/input-group.json +14 -0
  420. package/manifest/components/input.json +14 -0
  421. package/manifest/components/item.json +3 -1
  422. package/manifest/components/kbd.json +10 -1
  423. package/manifest/components/ledger.json +9 -2
  424. package/manifest/components/link.json +10 -0
  425. package/manifest/components/log-viewer.json +10 -0
  426. package/manifest/components/map-answer.json +3 -1
  427. package/manifest/components/markdown-text.json +3 -0
  428. package/manifest/components/menubar.json +41 -2
  429. package/manifest/components/message-list.json +10 -0
  430. package/manifest/components/message.json +6 -1
  431. package/manifest/components/mobile-composer.json +3 -1
  432. package/manifest/components/multi-select.json +49 -1
  433. package/manifest/components/musical-time-input.json +14 -0
  434. package/manifest/components/navigation-menu.json +41 -1
  435. package/manifest/components/node-card.json +3 -0
  436. package/manifest/components/number-field.json +14 -1
  437. package/manifest/components/otp-field.json +13 -0
  438. package/manifest/components/page-shell.json +14 -0
  439. package/manifest/components/pagination.json +3 -0
  440. package/manifest/components/panel-header.json +12 -0
  441. package/manifest/components/panel.json +13 -1
  442. package/manifest/components/password-input.json +14 -1
  443. package/manifest/components/permission-scopes.json +3 -1
  444. package/manifest/components/piano-keyboard.json +3 -0
  445. package/manifest/components/popover.json +39 -1
  446. package/manifest/components/preset-section.json +9 -1
  447. package/manifest/components/preview.json +30 -10
  448. package/manifest/components/progress.json +6 -1
  449. package/manifest/components/prompt-library.json +3 -1
  450. package/manifest/components/queue-dock.json +3 -1
  451. package/manifest/components/radio-group.json +8 -0
  452. package/manifest/components/radio.json +8 -0
  453. package/manifest/components/rating.json +4 -1
  454. package/manifest/components/reasoning-panel.json +3 -1
  455. package/manifest/components/recommendation-card.json +1 -1
  456. package/manifest/components/resizable.json +4 -1
  457. package/manifest/components/revert-dock.json +3 -1
  458. package/manifest/components/row.json +5 -1
  459. package/manifest/components/scroll-area.json +4 -2
  460. package/manifest/components/scrollable-tabs-list.json +19 -0
  461. package/manifest/components/scrub-input.json +14 -1
  462. package/manifest/components/seam-cell.json +1 -0
  463. package/manifest/components/seam-grid.json +1 -0
  464. package/manifest/components/seam-list.json +5 -1
  465. package/manifest/components/search-input.json +14 -1
  466. package/manifest/components/section-header.json +15 -2
  467. package/manifest/components/segmented-control.json +17 -0
  468. package/manifest/components/select.json +28 -0
  469. package/manifest/components/settings-panel.json +3 -0
  470. package/manifest/components/shape-section.json +9 -1
  471. package/manifest/components/sheet.json +38 -1
  472. package/manifest/components/shimmer-label.json +3 -0
  473. package/manifest/components/sidebar.json +19 -2
  474. package/manifest/components/slider.json +8 -0
  475. package/manifest/components/sources.json +3 -1
  476. package/manifest/components/stat.json +9 -0
  477. package/manifest/components/status-bar.json +4 -0
  478. package/manifest/components/stepper.json +8 -0
  479. package/manifest/components/swap-label.json +3 -0
  480. package/manifest/components/switch.json +8 -0
  481. package/manifest/components/table-scroll-region.json +20 -2
  482. package/manifest/components/table.json +20 -2
  483. package/manifest/components/tabs.json +20 -1
  484. package/manifest/components/tags-input.json +49 -1
  485. package/manifest/components/terminal-frame.json +3 -0
  486. package/manifest/components/textarea.json +16 -0
  487. package/manifest/components/theme-configurator.json +38 -1
  488. package/manifest/components/theme-provider.json +37 -19
  489. package/manifest/components/thread-search.json +3 -1
  490. package/manifest/components/threshold-rail.json +3 -0
  491. package/manifest/components/time-field.json +14 -0
  492. package/manifest/components/toast.json +39 -0
  493. package/manifest/components/toggle-group.json +1 -19
  494. package/manifest/components/toggle.json +3 -5
  495. package/manifest/components/token-editor.json +6 -1
  496. package/manifest/components/tool-call-card.json +9 -2
  497. package/manifest/components/tool-call.json +3 -1
  498. package/manifest/components/tool-timeline.json +3 -1
  499. package/manifest/components/toolbar.json +4 -1
  500. package/manifest/components/tooltip.json +40 -1
  501. package/manifest/components/tree-visibility-toggle.json +3 -0
  502. package/manifest/components/tree.json +3 -0
  503. package/manifest/components/universe-grid.json +3 -0
  504. package/manifest/components/voice-conversation.json +3 -0
  505. package/manifest/components/work-collapse.json +3 -1
  506. package/manifest/manifest.json +205 -185
  507. package/manifest/tokens.json +260 -4
  508. package/package.json +6 -6
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { ShimmerLabel, field, floating, ghostButton, iconSwap, iconSwapIn, iconSwapOut, inkButton, mono, paper } from "./surfaces.js";
4
5
  import { clamp, pct } from "./range.js";
5
6
  import { useMemo } from "react";
@@ -114,7 +115,7 @@ function ComposerBar({ dragActive = false, className, ...props }) {
114
115
  return /* @__PURE__ */ jsx("div", {
115
116
  "data-slot": "composer-bar",
116
117
  "data-drag-active": dragActive || void 0,
117
- className: cn(paper, "flex w-full flex-col gap-2 rounded-(--radius-overlay) p-2.5 transition-colors", dragActive && "bg-stream/10", className),
118
+ className: cn(paper, "flex w-full flex-col gap-2 rounded-overlay p-2.5 transition-colors", dragActive && "bg-stream/10", className),
118
119
  ...props
119
120
  });
120
121
  }
@@ -126,7 +127,7 @@ function ComposerMenu({ open, align = "start", className, ...props }) {
126
127
  return /* @__PURE__ */ jsx("div", {
127
128
  "data-slot": "composer-menu",
128
129
  "data-open": open || void 0,
129
- className: cn(floating, "absolute bottom-full z-10 mb-2 flex w-72 flex-col gap-0.5 rounded-(--radius-overlay) p-1.5", align === "start" ? "start-0 origin-bottom-left" : "end-0 origin-bottom-right", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", open ? "scale-100 opacity-100" : "pointer-events-none scale-[0.97] opacity-0", className),
130
+ className: cn(floating, "absolute bottom-full z-10 mb-2 flex w-72 flex-col gap-0.5 rounded-overlay p-1.5", align === "start" ? "start-0 origin-bottom-left" : "end-0 origin-bottom-right", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", open ? "scale-100 opacity-100" : "pointer-events-none scale-[0.97] opacity-0", className),
130
131
  ...props
131
132
  });
132
133
  }
@@ -139,7 +140,7 @@ function ComposerMenuItem({ active = false, className, ...props }) {
139
140
  type: "button",
140
141
  "data-slot": "composer-menu-item",
141
142
  "data-active": active || void 0,
142
- className: cn("flex w-full items-center gap-2.5 rounded-(--radius-surface) px-2.5 py-2 text-(length:--cue-text-body) transition-colors", active ? field : "hover:bg-surface-1", className),
143
+ className: cn("flex w-full items-center gap-2.5 rounded-surface px-2.5 py-2 text-(length:--cue-text-body) transition-colors", active ? field : "hover:bg-surface-1", className),
143
144
  ...props
144
145
  });
145
146
  }
@@ -162,7 +163,7 @@ function ComposerCommandItem({ command, active, ...props }) {
162
163
  children: command.description
163
164
  }),
164
165
  active && /* @__PURE__ */ jsx("kbd", {
165
- className: "bg-surface-2 text-fg-muted rounded-(--radius-control) px-1 font-mono text-(length:--cue-text-micro)",
166
+ className: "bg-surface-2 text-fg-muted rounded-control px-1 font-mono text-(length:--cue-text-micro)",
166
167
  children: "↵"
167
168
  })
168
169
  ]
@@ -210,11 +211,11 @@ function ComposerAttachmentChip({ attachment, onRemove, className, ...props }) {
210
211
  return /* @__PURE__ */ jsxs("div", {
211
212
  "data-slot": "composer-attachment",
212
213
  "data-state": attachment.state,
213
- className: cn(field, "relative flex items-center gap-2.5 overflow-hidden rounded-(--radius-surface) py-1.5 ps-1.5 pe-2.5", className),
214
+ className: cn(field, "relative flex items-center gap-2.5 overflow-hidden rounded-surface py-1.5 ps-1.5 pe-2.5", className),
214
215
  ...props,
215
216
  children: [
216
217
  /* @__PURE__ */ jsx("span", {
217
- className: "bg-surface-2 text-fg-muted flex size-8 shrink-0 items-center justify-center rounded-(--radius-surface)",
218
+ className: "bg-surface-2 text-fg-muted flex size-8 shrink-0 items-center justify-center rounded-surface",
218
219
  children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
219
220
  }),
220
221
  /* @__PURE__ */ jsxs("span", {
@@ -258,7 +259,7 @@ function ComposerInput({ onSubmit, onKeyDown, className, ...props }) {
258
259
  if (event.key !== "Enter" || event.nativeEvent.isComposing) return;
259
260
  onSubmit?.();
260
261
  },
261
- className: cn("placeholder:text-fg-subtle min-h-11 w-full bg-transparent px-3 text-(length:--cue-text-emphasis) caret-stream outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent", className),
262
+ className: cn(`placeholder:text-fg-subtle min-h-11 w-full bg-transparent px-3 text-(length:--cue-text-emphasis) caret-stream outline-none ${FOCUS_RING}`, className),
262
263
  ...props
263
264
  });
264
265
  }
@@ -393,7 +394,7 @@ function ComposerContext({ usage, className, ...props }) {
393
394
  className: cn("group/ctx relative", className),
394
395
  ...props,
395
396
  children: [/* @__PURE__ */ jsxs("div", {
396
- className: cn(floating, "absolute end-0 bottom-full z-10 mb-2 flex w-60 origin-bottom-right flex-col gap-3.5 rounded-(--radius-overlay) p-4", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", "pointer-events-none scale-[0.97] opacity-0", "group-hover/ctx:pointer-events-auto group-hover/ctx:scale-100 group-hover/ctx:opacity-100", "group-focus-within/ctx:pointer-events-auto group-focus-within/ctx:scale-100 group-focus-within/ctx:opacity-100"),
397
+ className: cn(floating, "absolute end-0 bottom-full z-10 mb-2 flex w-60 origin-bottom-right flex-col gap-3.5 rounded-overlay p-4", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", "pointer-events-none scale-[0.97] opacity-0", "group-hover/ctx:pointer-events-auto group-hover/ctx:scale-100 group-hover/ctx:opacity-100", "group-focus-within/ctx:pointer-events-auto group-focus-within/ctx:scale-100 group-focus-within/ctx:opacity-100"),
397
398
  children: [
398
399
  /* @__PURE__ */ jsxs("div", {
399
400
  className: "flex items-baseline justify-between",
@@ -21,7 +21,7 @@ function ComputerUse({ url, steps, activeIndex, children, className, ...props })
21
21
  const trail = steps.slice(Math.max(0, index - 2), index + 1);
22
22
  return /* @__PURE__ */ jsxs("div", {
23
23
  "data-slot": "computer-use",
24
- className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-(--radius-overlay)", className),
24
+ className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-overlay", className),
25
25
  ...props,
26
26
  children: [
27
27
  /* @__PURE__ */ jsxs("div", {
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import "./surfaces.js";
4
5
  import { useId } from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -38,7 +39,7 @@ function ConfidenceMarker({ claims, hoveredId, onHover, className, ...props }) {
38
39
  onMouseLeave: () => onHover?.(""),
39
40
  onFocus: () => onHover?.(claim.id),
40
41
  onBlur: () => onHover?.(""),
41
- className: cn("focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent inline cursor-help rounded-(--radius-control) text-start underline decoration-2 underline-offset-[3px] transition-colors outline-none", UNDERLINE[claim.confidence], hoveredId === claim.id ? "text-fg" : "text-fg-muted"),
42
+ className: cn(`${FOCUS_RING} inline cursor-help rounded-control text-start underline decoration-2 underline-offset-[3px] transition-colors outline-none`, UNDERLINE[claim.confidence], hoveredId === claim.id ? "text-fg" : "text-fg-muted"),
42
43
  children: [claim.text, " "]
43
44
  }, claim.id))
44
45
  }), /* @__PURE__ */ jsx("div", {
@@ -17,7 +17,7 @@ function ConnectionState({ phase, attempt, resumedTokens, onRetry, className, ..
17
17
  if (phase === "online") return null;
18
18
  return /* @__PURE__ */ jsxs("div", {
19
19
  "data-slot": "connection-state",
20
- className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-top-1 cue-elements-animate-in flex w-full max-w-sm items-center gap-2.5 rounded-(--radius-overlay) px-3.5 py-2.5 duration-300", className),
20
+ className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-top-1 cue-elements-animate-in flex w-full max-w-sm items-center gap-2.5 rounded-overlay px-3.5 py-2.5 duration-300", className),
21
21
  ...props,
22
22
  children: [
23
23
  phase === "dropped" && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -19,7 +19,7 @@ function ContextBreakdown({ segments, limit, className, ...props }) {
19
19
  const share = (tokens) => pct(tokens, limit);
20
20
  return /* @__PURE__ */ jsxs("div", {
21
21
  "data-slot": "context-breakdown",
22
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
22
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
23
23
  ...props,
24
24
  children: [
25
25
  /* @__PURE__ */ jsxs("div", {
@@ -91,7 +91,7 @@ const ContextUsage = React.forwardRef(function ContextUsage({ categories, limit,
91
91
  ref,
92
92
  "data-slot": "context-usage",
93
93
  "data-pressure": pressure,
94
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
94
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
95
95
  ...elementProps,
96
96
  children: [
97
97
  /* @__PURE__ */ jsxs("div", {
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { ghostButton, mono, paper } from "./surfaces.js";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { ChevronDownIcon, ChevronUpIcon, SearchIcon } from "lucide-react";
@@ -36,7 +37,7 @@ function ConversationSearch({ query, hits, activeIndex, onQueryChange, onStep, c
36
37
  onChange: (event) => onQueryChange?.(event.target.value),
37
38
  placeholder: "Find in conversation",
38
39
  "aria-label": "Find in conversation",
39
- className: "text-fg-muted placeholder:text-fg-subtle min-w-0 flex-1 bg-transparent text-(length:--cue-text-body) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent"
40
+ className: `text-fg-muted placeholder:text-fg-subtle min-w-0 flex-1 bg-transparent text-(length:--cue-text-body) outline-none ${FOCUS_RING}`
40
41
  }),
41
42
  /* @__PURE__ */ jsx("span", {
42
43
  className: cn(mono, "text-fg-subtle shrink-0 tabular-nums"),
@@ -58,14 +59,14 @@ function ConversationSearch({ query, hits, activeIndex, onQueryChange, onStep, c
58
59
  })
59
60
  ]
60
61
  }), active && /* @__PURE__ */ jsxs("div", {
61
- className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-200"),
62
+ className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in rounded-surface px-3 py-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-200"),
62
63
  children: [
63
64
  /* @__PURE__ */ jsx("span", {
64
65
  className: "text-fg-muted",
65
66
  children: active.before
66
67
  }),
67
68
  /* @__PURE__ */ jsx("span", {
68
- className: "text-fg rounded-(--radius-control) bg-warn/35 px-0.5",
69
+ className: "text-fg rounded-control bg-warn/35 px-0.5",
69
70
  children: active.match
70
71
  }),
71
72
  /* @__PURE__ */ jsx("span", {
@@ -15,7 +15,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
15
15
  function CostMeter({ runCost, sessionCost, lines, className, ...props }) {
16
16
  return /* @__PURE__ */ jsxs("div", {
17
17
  "data-slot": "cost-meter",
18
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
18
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
19
19
  ...props,
20
20
  children: [
21
21
  /* @__PURE__ */ jsxs("div", {
@@ -17,7 +17,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
17
17
  function ElementsDataTable({ rows, cycle, className, ...props }) {
18
18
  return /* @__PURE__ */ jsxs("div", {
19
19
  "data-slot": "data-table",
20
- className: cn(paper, "w-full max-w-sm overflow-hidden rounded-(--radius-overlay) text-(length:--cue-text-body)", className),
20
+ className: cn(paper, "w-full max-w-sm overflow-hidden rounded-overlay text-(length:--cue-text-body)", className),
21
21
  ...props,
22
22
  children: [
23
23
  /* @__PURE__ */ jsxs("div", {
@@ -43,7 +43,7 @@ function ElementsDataTable({ rows, cycle, className, ...props }) {
43
43
  style: { animationDelay: `${index * 80}ms` },
44
44
  children: [
45
45
  /* @__PURE__ */ jsx("span", {
46
- className: "bg-surface-2 text-fg-muted flex size-5 shrink-0 items-center justify-center rounded-(--radius-control) text-(length:--cue-text-micro) font-medium",
46
+ className: "bg-surface-2 text-fg-muted flex size-5 shrink-0 items-center justify-center rounded-control text-(length:--cue-text-micro) font-medium",
47
47
  children: row.name[0]
48
48
  }),
49
49
  /* @__PURE__ */ jsx("span", {
@@ -35,7 +35,7 @@ function DaySeparator({ messages, className, ...props }) {
35
35
  }), /* @__PURE__ */ jsxs("div", {
36
36
  className: cn("group flex items-baseline gap-2", message.role === "user" && "flex-row-reverse"),
37
37
  children: [/* @__PURE__ */ jsx("span", {
38
- className: cn("max-w-[80%] text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words", message.role === "user" ? "bg-surface-1 rounded-(--radius-overlay) px-3.5 py-2" : "text-fg-muted"),
38
+ className: cn("max-w-[80%] text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words", message.role === "user" ? "bg-surface-1 rounded-overlay px-3.5 py-2" : "text-fg-muted"),
39
39
  children: message.text
40
40
  }), /* @__PURE__ */ jsx("span", {
41
41
  className: cn(mono, "text-transparent group-hover:text-fg-subtle shrink-0 tabular-nums transition-colors"),
@@ -18,7 +18,7 @@ import { MaximizeIcon, MinusIcon, PlusIcon, RotateCcwIcon } from "lucide-react";
18
18
  function Diagram({ title, zoom, children, onZoomIn, onZoomOut, onReset, onExpand, className, ...props }) {
19
19
  return /* @__PURE__ */ jsxs("div", {
20
20
  "data-slot": "diagram",
21
- className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-(--radius-overlay)", className),
21
+ className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-overlay", className),
22
22
  ...props,
23
23
  children: [/* @__PURE__ */ jsxs("div", {
24
24
  className: "flex items-center gap-1 px-3 py-2",
@@ -22,12 +22,12 @@ function DocumentReference({ title, pages, anchors, activePage, onJump, classNam
22
22
  const currentIndex = anchors.findIndex((anchor) => anchor.page === activePage);
23
23
  return /* @__PURE__ */ jsxs("div", {
24
24
  "data-slot": "document-reference",
25
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-3.5", className),
25
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-3.5", className),
26
26
  ...props,
27
27
  children: [/* @__PURE__ */ jsxs("div", {
28
28
  className: "flex items-center gap-2.5",
29
29
  children: [/* @__PURE__ */ jsx("span", {
30
- className: "bg-surface-1 text-fg-muted flex size-8 shrink-0 items-center justify-center rounded-(--radius-surface)",
30
+ className: "bg-surface-1 text-fg-muted flex size-8 shrink-0 items-center justify-center rounded-surface",
31
31
  children: /* @__PURE__ */ jsx(FileTextIcon, { className: "size-3.5" })
32
32
  }), /* @__PURE__ */ jsxs("div", {
33
33
  className: "flex min-w-0 flex-1 flex-col",
@@ -50,7 +50,7 @@ function DocumentReference({ title, pages, anchors, activePage, onJump, classNam
50
50
  type: "button",
51
51
  "aria-current": i === currentIndex || void 0,
52
52
  onClick: () => onJump?.(anchor.page),
53
- className: cn("flex flex-col gap-1 rounded-(--radius-surface) px-2.5 py-2 text-start transition-colors", anchor.page === activePage ? field : "hover:bg-surface-1"),
53
+ className: cn("flex flex-col gap-1 rounded-surface px-2.5 py-2 text-start transition-colors", anchor.page === activePage ? field : "hover:bg-surface-1"),
54
54
  children: [/* @__PURE__ */ jsxs("span", {
55
55
  className: cn(mono, "text-fg-subtle"),
56
56
  children: ["p. ", anchor.page]
@@ -20,7 +20,7 @@ import { PencilLineIcon, XIcon } from "lucide-react";
20
20
  function DraftRestore({ draft, savedAt, onRestore, onDiscard, className, ...props }) {
21
21
  return /* @__PURE__ */ jsxs("div", {
22
22
  "data-slot": "draft-restore",
23
- className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in flex w-full max-w-sm items-center gap-2.5 rounded-(--radius-overlay) py-2 pr-2 pl-3.5 duration-300", className),
23
+ className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in flex w-full max-w-sm items-center gap-2.5 rounded-overlay py-2 pr-2 pl-3.5 duration-300", className),
24
24
  ...props,
25
25
  children: [
26
26
  /* @__PURE__ */ jsx(PencilLineIcon, { className: "text-fg-subtle size-3.5 shrink-0" }),
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { field, inkButton, paper } from "./surfaces.js";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { AlertTriangleIcon } from "lucide-react";
@@ -28,13 +29,13 @@ function EditMessage({ value, discardedReplies, editing, onValueChange, onSave,
28
29
  children: /* @__PURE__ */ jsx("button", {
29
30
  type: "button",
30
31
  onClick: onStartEdit,
31
- className: cn(field, "hover:bg-surface-2 max-w-[85%] rounded-(--radius-overlay) px-3.5 py-2.5 text-start text-(length:--cue-text-body) transition-colors"),
32
+ className: cn(field, "hover:bg-surface-2 max-w-[85%] rounded-overlay px-3.5 py-2.5 text-start text-(length:--cue-text-body) transition-colors"),
32
33
  children: value
33
34
  })
34
35
  });
35
36
  return /* @__PURE__ */ jsxs("div", {
36
37
  "data-slot": "edit-message",
37
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-3.5", className),
38
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-3.5", className),
38
39
  ...props,
39
40
  children: [
40
41
  /* @__PURE__ */ jsx("textarea", {
@@ -42,7 +43,7 @@ function EditMessage({ value, discardedReplies, editing, onValueChange, onSave,
42
43
  onChange: (event) => onValueChange?.(event.target.value),
43
44
  rows: 2,
44
45
  "aria-label": "Edit your message",
45
- className: cn(field, "text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent resize-none rounded-(--radius-surface) px-3 py-2.5 text-(length:--cue-text-body) leading-(--cue-leading-ui) outline-none")
46
+ className: cn(field, `text-fg ${FOCUS_RING} resize-none rounded-surface px-3 py-2.5 text-(length:--cue-text-body) leading-(--cue-leading-ui) outline-none`)
46
47
  }),
47
48
  discardedReplies > 0 && /* @__PURE__ */ jsxs("div", {
48
49
  className: "flex items-center gap-2 text-warn",
@@ -284,17 +284,35 @@
284
284
  * carries for `--radius-*`:
285
285
  *
286
286
  * - **Absent by choice:** `--cue-busy`, `--cue-info`, `--cue-selection`,
287
- * `--cue-focus`, `--cue-scrim`. No element in this family reads them — the
288
- * codemod maps upstream's blue onto `--cue-stream`, and upstream has no
289
- * selection or scrim of its own to transcribe. The consequence is worth
290
- * knowing before you mix families: a *cue* component rendered inside an
291
- * island — a `Chip tone="busy"`, a `Toast`, anything that draws a focus ring
287
+ * `--cue-scrim`. No element in this family reads them — the codemod maps
288
+ * upstream's blue onto `--cue-stream`, and upstream has no selection or
289
+ * scrim of its own to transcribe. The consequence is worth knowing before
290
+ * you mix families: a *cue* component rendered inside an island — a
291
+ * `Chip tone="busy"`, a `Toast`
292
292
  * — paints half in each palette, its ground and ink from assistant-ui and its
293
293
  * tone from the console's theme. That is a mixed surface, not a bug, and the
294
294
  * island is not the place to fix it: re-pointing the whole contract here
295
295
  * would make this a theme, which is exactly what `AgentSurface` is documented
296
296
  * not to be.
297
297
  *
298
+ * `--cue-focus` used to be on this list too, on the reasoning that no
299
+ * element in this family drew a ring. Spec 2026-09-26-looks-fidelity §3.12
300
+ * (F-9) made that false: `_focus-ring.ts` gave every one of this system's
301
+ * focusable elements a ring drawn from `--cue-focus` rather than restated
302
+ * per site, this family's included, and the two were never one and the same
303
+ * before then only by coincidence — a fixed 2px ring in `--cue-accent`,
304
+ * which this island already re-points to its own ink for exactly the
305
+ * reasons above. Left off this island, an element inside it would draw the
306
+ * ring in the OUTER console theme's `--cue-focus` instead of the island's —
307
+ * under a theme where the two differ (ten of the thirty shipped blocks),
308
+ * the one visible seam a reader would find is a focus ring in the wrong
309
+ * palette on an otherwise self-consistent surface. So it is set below,
310
+ * equal to the island's own `--cue-fg` exactly as `--cue-accent` already
311
+ * is: not a second colour to keep in step, the same one the ring drew
312
+ * before this module existed, kept in step with it now that the module
313
+ * names it explicitly.
314
+ *
315
+
298
316
  * - **Absent by construction:** every derived token —
299
317
  * `--cue-ok-soft`, `--cue-stream-border`, `--cue-accent-soft`, `--cue-hair`,
300
318
  * `--cue-row-hover` and the rest. They cannot follow the island. Each is a
@@ -326,6 +344,7 @@
326
344
  --cue-border-strong: color-mix(in oklab, var(--cue-fg) 20%, transparent);
327
345
  --cue-border-overlay: color-mix(in oklab, oklch(1 0 0 / 10%) 60%, transparent);
328
346
  --cue-accent: var(--cue-fg);
347
+ --cue-focus: var(--cue-fg);
329
348
  --cue-accent-hover: color-mix(in oklab, var(--cue-fg) 90%, transparent);
330
349
  --cue-accent-fg: var(--cue-bg);
331
350
  --cue-ok: oklch(0.765 0.177 163.223);
@@ -365,6 +384,7 @@
365
384
  --cue-border-strong: color-mix(in oklab, var(--cue-fg) 20%, transparent);
366
385
  --cue-border-overlay: color-mix(in oklab, oklch(0.92 0.004 286.32) 60%, transparent);
367
386
  --cue-accent: var(--cue-fg);
387
+ --cue-focus: var(--cue-fg);
368
388
  --cue-accent-hover: color-mix(in oklab, var(--cue-fg) 90%, transparent);
369
389
  --cue-accent-fg: var(--cue-bg);
370
390
  --cue-ok: oklch(0.696 0.17 162.48);
@@ -395,6 +415,7 @@
395
415
  --cue-border-strong: color-mix(in oklab, var(--cue-fg) 20%, transparent);
396
416
  --cue-border-overlay: color-mix(in oklab, oklch(0.92 0.004 286.32) 60%, transparent);
397
417
  --cue-accent: var(--cue-fg);
418
+ --cue-focus: var(--cue-fg);
398
419
  --cue-accent-hover: color-mix(in oklab, var(--cue-fg) 90%, transparent);
399
420
  --cue-accent-fg: var(--cue-bg);
400
421
  --cue-ok: oklch(0.696 0.17 162.48);
@@ -22,14 +22,14 @@ import { CheckIcon, PlugIcon, XIcon } from "lucide-react";
22
22
  function ElicitationForm({ server, message, fields, state, onAccept, onDecline, className, ...props }) {
23
23
  return /* @__PURE__ */ jsxs("div", {
24
24
  "data-slot": "elicitation-form",
25
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-(--radius-overlay) p-4", className),
25
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-overlay p-4", className),
26
26
  ...props,
27
27
  children: [
28
28
  /* @__PURE__ */ jsxs("div", {
29
29
  className: "flex items-center gap-2.5",
30
30
  children: [
31
31
  /* @__PURE__ */ jsx("span", {
32
- className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-(--radius-surface)",
32
+ className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-surface",
33
33
  children: /* @__PURE__ */ jsx(PlugIcon, { className: "size-3.5" })
34
34
  }),
35
35
  /* @__PURE__ */ jsx("span", {
@@ -73,7 +73,7 @@ function ElicitationForm({ server, message, fields, state, onAccept, onDecline,
73
73
  children: item.value === "true" ? "On" : "Off"
74
74
  })]
75
75
  }) : /* @__PURE__ */ jsx("span", {
76
- className: cn(field, "text-fg-muted rounded-(--radius-surface) px-2.5 py-1.5 text-(length:--cue-text-ui)"),
76
+ className: cn(field, "text-fg-muted rounded-surface px-2.5 py-1.5 text-(length:--cue-text-ui)"),
77
77
  children: item.value
78
78
  })]
79
79
  }, item.name))
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { inkButton, paper } from "./surfaces.js";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { ArrowUpIcon } from "lucide-react";
@@ -63,7 +64,7 @@ function EmptyStateSuggestion({ index = 0, className, style, ...props }) {
63
64
  animationDelay: `${120 + index * 70}ms`,
64
65
  ...style
65
66
  },
66
- className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in cue-elements-fill-mode-both focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent rounded-full px-4 py-2 text-(length:--cue-text-body) transition-transform duration-500 outline-none hover:-translate-y-px active:scale-[0.96] motion-reduce:animate-none", className),
67
+ className: cn(paper, `cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in cue-elements-fill-mode-both ${FOCUS_RING} rounded-full px-4 py-2 text-(length:--cue-text-body) transition-transform duration-500 outline-none hover:-translate-y-px active:scale-[0.96] motion-reduce:animate-none`, className),
67
68
  ...props
68
69
  });
69
70
  }
@@ -31,7 +31,7 @@ function ErrorState({ title, detail, retrying, onRetry, className, ...props }) {
31
31
  return /* @__PURE__ */ jsxs("div", {
32
32
  "data-slot": "error-state",
33
33
  role: "alert",
34
- className: cn("cue-elements-fade-in cue-elements-animate-in flex w-full max-w-sm items-start gap-2.5 rounded-(--radius-overlay) bg-danger/10 px-4 py-3 text-(length:--cue-text-body) duration-300 motion-reduce:animate-none", className),
34
+ className: cn("cue-elements-fade-in cue-elements-animate-in flex w-full max-w-sm items-start gap-2.5 rounded-overlay bg-danger/10 px-4 py-3 text-(length:--cue-text-body) duration-300 motion-reduce:animate-none", className),
35
35
  ...props,
36
36
  children: [
37
37
  /* @__PURE__ */ jsx(CircleAlertIcon, { className: "mt-0.5 size-4 shrink-0 text-danger/80" }),
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { field, inkButton, mono, paper } from "./surfaces.js";
4
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
6
  import { CheckIcon, ThumbsDownIcon } from "lucide-react";
@@ -23,7 +24,7 @@ import { CheckIcon, ThumbsDownIcon } from "lucide-react";
23
24
  function FeedbackDialog({ reasons, selected, note, sent, onToggleReason, onNoteChange, onSubmit, className, ...props }) {
24
25
  return /* @__PURE__ */ jsxs("div", {
25
26
  "data-slot": "feedback-dialog",
26
- className: cn(paper, "flex w-full max-w-sm rounded-(--radius-overlay) p-4", sent ? "items-center gap-2.5 text-(length:--cue-text-body)" : "flex-col gap-3", className),
27
+ className: cn(paper, "flex w-full max-w-sm rounded-overlay p-4", sent ? "items-center gap-2.5 text-(length:--cue-text-body)" : "flex-col gap-3", className),
27
28
  ...props,
28
29
  children: [/* @__PURE__ */ jsx("div", {
29
30
  role: "status",
@@ -34,7 +35,7 @@ function FeedbackDialog({ reasons, selected, note, sent, onToggleReason, onNoteC
34
35
  className: "flex items-center gap-2.5",
35
36
  children: [
36
37
  /* @__PURE__ */ jsx("span", {
37
- className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-(--radius-surface)",
38
+ className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-surface",
38
39
  children: /* @__PURE__ */ jsx(ThumbsDownIcon, { className: "size-3.5" })
39
40
  }),
40
41
  /* @__PURE__ */ jsx("span", {
@@ -66,7 +67,7 @@ function FeedbackDialog({ reasons, selected, note, sent, onToggleReason, onNoteC
66
67
  rows: 2,
67
68
  placeholder: "Anything else?",
68
69
  "aria-label": "Anything else?",
69
- className: cn(field, "text-fg-muted placeholder:text-fg-subtle focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent resize-none rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-ui) outline-none")
70
+ className: cn(field, `text-fg-muted placeholder:text-fg-subtle ${FOCUS_RING} resize-none rounded-surface px-3 py-2 text-(length:--cue-text-ui) outline-none`)
70
71
  }),
71
72
  /* @__PURE__ */ jsx("button", {
72
73
  type: "button",
@@ -22,7 +22,7 @@ function FileTree({ nodes, visibleCount, totalAdditions, totalDeletions, classNa
22
22
  const files = nodes.filter((node) => node.kind === "file").length;
23
23
  return /* @__PURE__ */ jsxs("div", {
24
24
  "data-slot": "file-tree",
25
- className: cn(paper, "flex w-full max-w-sm flex-col gap-2 rounded-(--radius-overlay) p-3.5", className),
25
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-2 rounded-overlay p-3.5", className),
26
26
  ...props,
27
27
  children: [/* @__PURE__ */ jsxs("div", {
28
28
  className: "flex items-baseline justify-between px-1",
@@ -46,7 +46,7 @@ function FileTree({ nodes, visibleCount, totalAdditions, totalDeletions, classNa
46
46
  }), /* @__PURE__ */ jsx("div", {
47
47
  className: "flex flex-col",
48
48
  children: take(nodes, visibleCount).map((node) => /* @__PURE__ */ jsx("div", {
49
- className: "cue-elements-fade-in cue-elements-slide-in-from-left-1 cue-elements-animate-in cue-elements-fill-mode-both hover:bg-surface-1 flex items-center gap-2 rounded-(--radius-surface) px-1 py-1 text-(length:--cue-text-body) transition-colors duration-300",
49
+ className: "cue-elements-fade-in cue-elements-slide-in-from-left-1 cue-elements-animate-in cue-elements-fill-mode-both hover:bg-surface-1 flex items-center gap-2 rounded-surface px-1 py-1 text-(length:--cue-text-body) transition-colors duration-300",
50
50
  style: { paddingInlineStart: `${.25 + node.depth * .85}rem` },
51
51
  children: node.kind === "folder" ? /* @__PURE__ */ jsxs(Fragment, { children: [
52
52
  /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-fg-subtle size-3 shrink-0" }),
@@ -29,7 +29,7 @@ function FlowGraph({ nodes, edges, visibleCount, className, ...props }) {
29
29
  });
30
30
  return /* @__PURE__ */ jsx("div", {
31
31
  "data-slot": "flow-graph",
32
- className: cn(paper, "w-full max-w-md overflow-x-auto rounded-(--radius-overlay) p-4", className),
32
+ className: cn(paper, "w-full max-w-md overflow-x-auto rounded-overlay p-4", className),
33
33
  ...props,
34
34
  children: /* @__PURE__ */ jsxs("div", {
35
35
  className: "relative",
@@ -59,7 +59,7 @@ function FlowGraph({ nodes, edges, visibleCount, className, ...props }) {
59
59
  }, `${edge.from}-${edge.to}`);
60
60
  })
61
61
  }), shown.map((node) => /* @__PURE__ */ jsx("div", {
62
- className: cn("cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-animate-in cue-elements-fill-mode-both absolute flex items-center justify-center rounded-(--radius-surface) border text-center text-(length:--cue-text-ui) leading-tight duration-300", node.state === "done" && "border-border bg-surface-1 text-fg-muted", node.state === "active" && "text-fg border-stream/30 bg-stream/10", node.state === "pending" && "border-border text-fg-subtle border-dashed"),
62
+ className: cn("cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-animate-in cue-elements-fill-mode-both absolute flex items-center justify-center rounded-surface border text-center text-(length:--cue-text-ui) leading-tight duration-300", node.state === "done" && "border-border bg-surface-1 text-fg-muted", node.state === "active" && "text-fg border-stream/30 bg-stream/10", node.state === "pending" && "border-border text-fg-subtle border-dashed"),
63
63
  style: {
64
64
  left: node.column * COL_W,
65
65
  top: node.row * ROW_H,
@@ -20,14 +20,14 @@ import { ShieldIcon } from "lucide-react";
20
20
  function GuardrailNotice({ title, explanation, policy, alternatives, onPick, className, ...props }) {
21
21
  return /* @__PURE__ */ jsxs("div", {
22
22
  "data-slot": "guardrail-notice",
23
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
23
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
24
24
  ...props,
25
25
  children: [
26
26
  /* @__PURE__ */ jsxs("div", {
27
27
  className: "flex items-center gap-2.5",
28
28
  children: [
29
29
  /* @__PURE__ */ jsx("span", {
30
- className: "flex size-7 shrink-0 items-center justify-center rounded-(--radius-surface) bg-warn/12 text-warn",
30
+ className: "flex size-7 shrink-0 items-center justify-center rounded-surface bg-warn/12 text-warn",
31
31
  children: /* @__PURE__ */ jsx(ShieldIcon, { className: "size-3.5" })
32
32
  }),
33
33
  /* @__PURE__ */ jsx("span", {
@@ -52,7 +52,7 @@ function GuardrailNotice({ title, explanation, policy, alternatives, onPick, cla
52
52
  }), alternatives.map((alternative) => /* @__PURE__ */ jsx("button", {
53
53
  type: "button",
54
54
  onClick: () => onPick?.(alternative),
55
- className: "hover:bg-surface-1 text-fg-muted hover:text-fg -mx-1.5 rounded-(--radius-surface) px-1.5 py-1 text-start text-(length:--cue-text-body) transition-colors",
55
+ className: "hover:bg-surface-1 text-fg-muted hover:text-fg -mx-1.5 rounded-surface px-1.5 py-1 text-start text-(length:--cue-text-body) transition-colors",
56
56
  children: alternative
57
57
  }, alternative))]
58
58
  })
@@ -19,7 +19,7 @@ function ImageGeneration({ prompt, generating, className, ...props }) {
19
19
  className: cn("flex w-52 flex-col gap-2.5", className),
20
20
  ...props,
21
21
  children: [/* @__PURE__ */ jsxs("div", {
22
- className: cn(paper, "relative aspect-square w-full overflow-hidden rounded-(--radius-overlay)"),
22
+ className: cn(paper, "relative aspect-square w-full overflow-hidden rounded-overlay"),
23
23
  children: [
24
24
  /* @__PURE__ */ jsx("div", {
25
25
  className: "absolute inset-0 grid grid-cols-8 place-items-center p-6",
@@ -13,7 +13,7 @@ function Citation({ index, source, open, onOpenChange }) {
13
13
  children: [/* @__PURE__ */ jsx(PreviewCard.Trigger, {
14
14
  delay: 0,
15
15
  render: /* @__PURE__ */ jsx("button", { type: "button" }),
16
- className: cn("mx-0.5 inline-flex h-4 min-w-4 translate-y-[-2px] cursor-default items-center justify-center rounded-(--radius-control) px-1 align-middle font-mono text-(length:--cue-text-micro) font-medium tabular-nums transition-colors", open ? "bg-accent text-accent-fg" : "bg-surface-2 text-fg-muted hover:text-fg"),
16
+ className: cn("mx-0.5 inline-flex h-4 min-w-4 translate-y-[-2px] cursor-default items-center justify-center rounded-control px-1 align-middle font-mono text-(length:--cue-text-micro) font-medium tabular-nums transition-colors", open ? "bg-accent text-accent-fg" : "bg-surface-2 text-fg-muted hover:text-fg"),
17
17
  children: index + 1
18
18
  }), /* @__PURE__ */ jsx(PreviewCard.Portal, {
19
19
  ...portalProps,
@@ -21,12 +21,12 @@ function Citation({ index, source, open, onOpenChange }) {
21
21
  side: "top",
22
22
  sideOffset: 8,
23
23
  children: /* @__PURE__ */ jsxs(PreviewCard.Popup, {
24
- className: cn(floating, "z-50 w-64 origin-(--transform-origin) rounded-(--radius-overlay) p-3.5 outline-none", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0", "data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0"),
24
+ className: cn(floating, "z-50 w-64 origin-(--transform-origin) rounded-overlay p-3.5 outline-none", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0", "data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0"),
25
25
  children: [
26
26
  /* @__PURE__ */ jsxs("div", {
27
27
  className: "flex items-center gap-1.5",
28
28
  children: [/* @__PURE__ */ jsx("span", {
29
- className: "bg-surface-2 text-fg-muted flex size-4 items-center justify-center rounded-(--radius-control) text-(length:--cue-text-micro) font-medium",
29
+ className: "bg-surface-2 text-fg-muted flex size-4 items-center justify-center rounded-control text-(length:--cue-text-micro) font-medium",
30
30
  children: source.domain[0]?.toUpperCase()
31
31
  }), /* @__PURE__ */ jsx("span", {
32
32
  className: cn(mono, "text-fg-subtle"),
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { mono, paper } from "./surfaces.js";
3
+ import { ghostButton, mono, paper } from "./surfaces.js";
4
4
  import { clamp, pct, progressOf, take } from "./range.js";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { CheckIcon, Loader2Icon, XIcon } from "lucide-react";
@@ -29,7 +29,7 @@ function JobProgress({ title, stages, stageIndex, stageProgress, eta, onCancel,
29
29
  const finished = stage >= stages.length;
30
30
  return /* @__PURE__ */ jsxs("div", {
31
31
  "data-slot": "job-progress",
32
- className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
32
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
33
33
  ...props,
34
34
  children: [
35
35
  /* @__PURE__ */ jsxs("div", {
@@ -48,7 +48,7 @@ function JobProgress({ title, stages, stageIndex, stageProgress, eta, onCancel,
48
48
  type: "button",
49
49
  "aria-label": "Cancel the job",
50
50
  onClick: onCancel,
51
- className: cn("flex items-center justify-center rounded-full text-fg-muted outline-none transition-[background-color,color,scale] duration-150 hover:bg-surface-2 hover:text-fg active:scale-[0.96] focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent motion-reduce:transition-none", "size-6 shrink-0"),
51
+ className: cn(ghostButton, "size-6 shrink-0"),
52
52
  children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5" })
53
53
  })
54
54
  ]
@@ -24,7 +24,7 @@ function LauncherBubble({ open, unread, greeting, prompts, onToggle, onPick, onS
24
24
  className: cn("flex w-full max-w-[19rem] flex-col items-end gap-2.5", className),
25
25
  ...props,
26
26
  children: [open && /* @__PURE__ */ jsxs("div", {
27
- className: cn("bg-surface-2 border border-border-overlay", "cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-slide-in-from-bottom-2 cue-elements-animate-in flex w-full flex-col gap-3 rounded-(--radius-overlay) p-4 duration-200"),
27
+ className: cn("bg-surface-2 border border-border-overlay", "cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-slide-in-from-bottom-2 cue-elements-animate-in flex w-full flex-col gap-3 rounded-overlay p-4 duration-200"),
28
28
  children: [
29
29
  /* @__PURE__ */ jsxs("div", {
30
30
  className: "flex flex-col gap-1",
@@ -41,7 +41,7 @@ function LauncherBubble({ open, unread, greeting, prompts, onToggle, onPick, onS
41
41
  children: prompts.map((prompt) => /* @__PURE__ */ jsx("button", {
42
42
  type: "button",
43
43
  onClick: () => onPick?.(prompt),
44
- className: cn("bg-fg/[0.06]", "hover:bg-surface-2 text-fg-muted rounded-(--radius-surface) px-3 py-2 text-start text-(length:--cue-text-body) transition-colors"),
44
+ className: cn("bg-fg/[0.06]", "hover:bg-surface-2 text-fg-muted rounded-surface px-3 py-2 text-start text-(length:--cue-text-body) transition-colors"),
45
45
  children: prompt
46
46
  }, prompt))
47
47
  }),
@@ -6,7 +6,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
  const CELL_SHAPES = {
7
7
  dots: "rounded-full",
8
8
  squares: "rounded-none",
9
- rounded: "rounded-(--radius-control)"
9
+ rounded: "rounded-control"
10
10
  };
11
11
  /**
12
12
  * The wait before there is anything to show. A nine-cell matrix keeps time under a