@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,4 +1,8 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
3
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
4
+ import { BODY_SIZE_LABEL } from "../system/_style-body-size.js";
5
+ import { HELP_INK } from "../system/_style-help-ink.js";
2
6
  import * as React from "react";
3
7
  import { jsx, jsxs } from "react/jsx-runtime";
4
8
  //#region src/layout/breadcrumb.tsx
@@ -6,7 +10,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
10
  * A crumb that goes somewhere. Muted until hovered, never underlined — the
7
11
  * trail is navigation furniture and should not read as body-copy links.
8
12
  */
9
- const CRUMB_LINK_CLASSES = "cursor-pointer rounded-(--radius-control) border-0 bg-transparent p-0 font-mono text-(length:--cue-text-label) text-fg-muted no-underline transition-colors duration-150 outline-none hover:text-accent focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent";
13
+ const CRUMB_LINK_CLASSES = `cursor-pointer rounded-control border-0 bg-transparent p-0 ${CONTROL_FACE} ${BODY_SIZE_LABEL} text-fg-muted no-underline transition-colors duration-150 outline-none hover:text-accent ${FOCUS_RING_OFFSET_2}`;
10
14
  /**
11
15
  * Where you are, and how to get back.
12
16
  *
@@ -28,13 +32,13 @@ const Breadcrumb = React.forwardRef(function Breadcrumb({ className, items, sepa
28
32
  className: cn("min-w-0", className),
29
33
  ...elementProps,
30
34
  children: /* @__PURE__ */ jsx("ol", {
31
- className: "m-0 flex list-none flex-wrap items-center gap-(--cue-space-2) p-0 font-mono text-(length:--cue-text-label) text-fg-muted",
35
+ className: cn(`m-0 flex list-none flex-wrap items-center gap-(--cue-space-2) p-0 ${BODY_SIZE_LABEL} text-fg-muted`, CONTROL_FACE),
32
36
  children: items.map((item, index) => {
33
37
  const last = index === items.length - 1;
34
38
  return /* @__PURE__ */ jsxs(React.Fragment, { children: [index === 0 ? null : /* @__PURE__ */ jsx("li", {
35
39
  "data-slot": "breadcrumb-separator",
36
40
  "aria-hidden": "true",
37
- className: "text-fg-subtle select-none",
41
+ className: `${HELP_INK} select-none`,
38
42
  children: separator
39
43
  }), /* @__PURE__ */ jsx("li", {
40
44
  "data-slot": "breadcrumb-item",
@@ -1,4 +1,12 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { BODY_VOICE } from "../system/_style-body.js";
3
+ import { BODY_SIZE } from "../system/_style-body-size.js";
4
+ import { RIM_INSET } from "../system/_paint-rim.js";
5
+ import { TITLE_VOICE } from "../system/_style-title.js";
6
+ import { SEAM_INK, SEAM_RIM } from "../system/_style-seam.js";
7
+ import { STROKE_SURFACE_1 } from "../system/_paint-stroke-surface-1.js";
8
+ import { CARD_PAD, CARD_PAD_BOTTOM, CARD_PAD_SEAM_BOTTOM, CARD_PAD_SEAM_TOP, CARD_PAD_TOP, CARD_PAD_X } from "../system/_style-card-pad.js";
9
+ import { DESCRIPTION_LEADING, DESCRIPTION_TRACKING } from "../system/_style-description.js";
2
10
  import * as React from "react";
3
11
  import { jsx, jsxs } from "react/jsx-runtime";
4
12
  /**
@@ -19,7 +27,7 @@ const Card = {
19
27
  ref,
20
28
  "data-slot": "card",
21
29
  "data-seam": seam ? "" : void 0,
22
- className: cn("group/card flex flex-col overflow-hidden rounded-(--radius-surface) border border-border", seam ? "gap-px bg-border" : "bg-surface-1", className),
30
+ className: cn("group/card flex flex-col overflow-hidden rounded-surface", seam ? `border ${SEAM_RIM} gap-px ${SEAM_INK}` : `${STROKE_SURFACE_1} ${RIM_INSET}`, className),
23
31
  ...elementProps
24
32
  });
25
33
  }),
@@ -27,7 +35,7 @@ const Card = {
27
35
  return /* @__PURE__ */ jsxs("div", {
28
36
  ref,
29
37
  "data-slot": "card-header",
30
- className: cn("flex items-start justify-between gap-(--cue-space-4) bg-surface-1 px-(--cue-space-5) pt-(--cue-space-5) pb-0 group-data-[seam]/card:pb-(--cue-space-5)", className),
38
+ className: cn(`flex items-start justify-between gap-(--cue-space-4) bg-surface-1 ${CARD_PAD_X} ${CARD_PAD_TOP} pb-0 ${CARD_PAD_SEAM_BOTTOM}`, className),
31
39
  ...elementProps,
32
40
  children: [/* @__PURE__ */ jsx("div", {
33
41
  className: "flex min-w-0 flex-col gap-(--cue-space-1)",
@@ -43,7 +51,7 @@ const Card = {
43
51
  return /* @__PURE__ */ jsx("h3", {
44
52
  ref,
45
53
  "data-slot": "card-title",
46
- className: cn("font-mono text-(length:--cue-text-emphasis) font-medium text-fg", className),
54
+ className: cn(TITLE_VOICE, className),
47
55
  ...elementProps
48
56
  });
49
57
  }),
@@ -51,7 +59,7 @@ const Card = {
51
59
  return /* @__PURE__ */ jsx("p", {
52
60
  ref,
53
61
  "data-slot": "card-description",
54
- className: cn("font-mono text-(length:--cue-text-ui) leading-(--cue-leading-ui) text-fg-muted", className),
62
+ className: cn(`${BODY_VOICE} ${BODY_SIZE} ${DESCRIPTION_LEADING} ${DESCRIPTION_TRACKING} text-fg-muted`, className),
55
63
  ...elementProps
56
64
  });
57
65
  }),
@@ -59,7 +67,7 @@ const Card = {
59
67
  return /* @__PURE__ */ jsx("div", {
60
68
  ref,
61
69
  "data-slot": "card-content",
62
- className: cn("bg-surface-1 p-(--cue-space-5)", className),
70
+ className: cn(`bg-surface-1 ${CARD_PAD}`, className),
63
71
  ...elementProps
64
72
  });
65
73
  }),
@@ -67,7 +75,7 @@ const Card = {
67
75
  return /* @__PURE__ */ jsx("div", {
68
76
  ref,
69
77
  "data-slot": "card-footer",
70
- className: cn("flex items-center justify-end gap-(--cue-space-3) bg-surface-1 px-(--cue-space-5) pt-0 pb-(--cue-space-5) group-data-[seam]/card:pt-(--cue-space-5)", className),
78
+ className: cn(`flex items-center justify-end gap-(--cue-space-3) bg-surface-1 ${CARD_PAD_X} pt-0 ${CARD_PAD_BOTTOM} ${CARD_PAD_SEAM_TOP}`, className),
71
79
  ...elementProps
72
80
  });
73
81
  })
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
3
4
  import { IconButton } from "../primitives/icon-button.js";
4
5
  import { ChevronLeftGlyph, ChevronRightGlyph } from "./_glyphs.js";
5
6
  import * as React from "react";
@@ -118,7 +119,7 @@ const Carousel = {
118
119
  scrollNext();
119
120
  }
120
121
  },
121
- className: cn("relative outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent", className),
122
+ className: cn(`relative outline-none ${FOCUS_RING_OFFSET_2}`, className),
122
123
  ...elementProps,
123
124
  children
124
125
  })
@@ -202,7 +203,7 @@ const Carousel = {
202
203
  "aria-label": dotLabel(index),
203
204
  "aria-current": index === selectedIndex ? "true" : void 0,
204
205
  onClick: () => scrollTo(index),
205
- className: cn("size-[0.25rem] cursor-pointer rounded-full border-0 p-0 transition-colors duration-150 outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent motion-reduce:transition-none", index === selectedIndex ? "bg-accent" : "bg-border-strong")
206
+ className: cn(`size-[0.25rem] cursor-pointer rounded-full border-0 p-0 transition-colors duration-150 outline-none ${FOCUS_RING_OFFSET_2} motion-reduce:transition-none`, index === selectedIndex ? "bg-accent" : "bg-border-strong")
206
207
  }, index))
207
208
  });
208
209
  })
@@ -1,5 +1,9 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
4
+ import { LABEL_FACE } from "../system/_style-label-face.js";
5
+ import { LABEL_CASE } from "../system/_style-label-case.js";
6
+ import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
3
7
  import { collapseCaretClasses, collapseLabelClasses, collapsePanelBodyClasses, collapseTriggerClasses, collapsiblePanelClasses } from "./_collapse.js";
4
8
  import { ChevronRightGlyph } from "./_glyphs.js";
5
9
  import * as React from "react";
@@ -94,7 +98,7 @@ const Disclosure = React.forwardRef(function Disclosure({ className, label = "ad
94
98
  children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
95
99
  ref,
96
100
  "data-slot": "disclosure-trigger",
97
- className: cn("group/disclosure inline-flex cursor-pointer items-center gap-(--cue-space-2) self-start border-0 bg-transparent p-0 py-(--cue-space-2) font-mono text-(length:--cue-text-label) tracking-(--cue-tracking-caps) text-fg-subtle uppercase transition-colors duration-150 outline-none select-none hover:text-fg-muted focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent", className),
101
+ className: cn(`group/disclosure inline-flex cursor-pointer items-center gap-(--cue-space-2) self-start border-0 bg-transparent p-0 py-(--cue-space-2) text-(length:--cue-text-label) text-fg-subtle transition-colors duration-150 outline-none select-none hover:text-fg-muted ${FOCUS_RING_OFFSET_2}`, LABEL_FACE, LABEL_TRACKING, LABEL_CASE, className),
98
102
  ...elementProps,
99
103
  children: [
100
104
  /* @__PURE__ */ jsx("span", {
@@ -1,4 +1,5 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { GUTTER } from "../system/_style-gutter.js";
2
3
  import * as React from "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  //#region src/layout/container.tsx
@@ -35,7 +36,7 @@ const Container = React.forwardRef(function Container({ className, width = "narr
35
36
  return /* @__PURE__ */ jsx("div", {
36
37
  ref,
37
38
  "data-slot": "container",
38
- className: cn("mx-auto w-full", WIDTHS[width], padded ? "px-(--cue-space-6)" : null, className),
39
+ className: cn("mx-auto w-full", WIDTHS[width], padded ? GUTTER : null, className),
39
40
  ...elementProps
40
41
  });
41
42
  });
@@ -1,4 +1,7 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { LABEL_FACE } from "../system/_style-label-face.js";
3
+ import { LABEL_CASE } from "../system/_style-label-case.js";
4
+ import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
2
5
  import * as React from "react";
3
6
  import { jsx } from "react/jsx-runtime";
4
7
  //#region src/layout/description-list.tsx
@@ -20,7 +23,7 @@ const DescriptionList = {
20
23
  return /* @__PURE__ */ jsx("dt", {
21
24
  ref,
22
25
  "data-slot": "description-list-term",
23
- className: cn("font-mono text-(length:--cue-text-label) tracking-(--cue-tracking-caps) text-fg-subtle uppercase", className),
26
+ className: cn("text-(length:--cue-text-label) text-fg-subtle", LABEL_FACE, LABEL_TRACKING, LABEL_CASE, className),
24
27
  ...elementProps
25
28
  });
26
29
  }),
@@ -1,6 +1,12 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_INSET_2 } from "../system/_focus-ring.js";
4
+ import { LABEL_INK_SUBTLE } from "../system/_style-label-ink.js";
5
+ import { LABEL_FACE } from "../system/_style-label-face.js";
6
+ import { LABEL_TRACKING_INHERIT } from "../system/_style-label-tracking.js";
7
+ import { LABEL_SIZE_MICRO } from "../system/_style-label-size.js";
3
8
  import { GROUND_CLASSES } from "./_ground.js";
9
+ import { CAPTION_CASE } from "../system/_style-caption.js";
4
10
  import * as React from "react";
5
11
  import { jsx, jsxs } from "react/jsx-runtime";
6
12
  //#region src/layout/frames.tsx
@@ -105,7 +111,7 @@ const HEIGHT_CLASSES = {
105
111
  * scroller fills stays where a reader left it. The ground is on the box for the
106
112
  * same reason — a board's grid does not move with its art.
107
113
  */
108
- const ROOT_CLASS = "relative min-w-0 overflow-hidden rounded-(--radius-surface) border border-border";
114
+ const ROOT_CLASS = "relative min-w-0 overflow-hidden rounded-surface border border-border";
109
115
  /**
110
116
  * The scroller: a row of frames, sideways only, with a rung of the space
111
117
  * ladder's top between them.
@@ -117,7 +123,7 @@ const ROOT_CLASS = "relative min-w-0 overflow-hidden rounded-(--radius-surface)
117
123
  * there is no frame loop here for `reduced-motion.test.ts` to find, and there
118
124
  * must not be.
119
125
  */
120
- const CANVAS_CLASS = "flex h-full min-w-0 items-start gap-(--cue-space-8) overflow-x-auto overflow-y-hidden scroll-smooth p-(--cue-space-6) outline-none motion-reduce:scroll-auto focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-2 focus-visible:outline-accent";
126
+ const CANVAS_CLASS = `flex h-full min-w-0 items-start gap-(--cue-space-8) overflow-x-auto overflow-y-hidden scroll-smooth p-(--cue-space-6) outline-none motion-reduce:scroll-auto ${FOCUS_RING_INSET_2}`;
121
127
  /**
122
128
  * The column: the same frames, stacked, sized by what they hold.
123
129
  *
@@ -127,7 +133,7 @@ const CANVAS_CLASS = "flex h-full min-w-0 items-start gap-(--cue-space-8) overfl
127
133
  * It keeps the focus ring and the keyboard handler: the region is still
128
134
  * focusable, and arrow keys still scroll it, they just scroll the page.
129
135
  */
130
- const COLUMN_CLASS = "flex min-w-0 flex-col gap-(--cue-space-6) p-(--cue-space-6) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-2 focus-visible:outline-accent";
136
+ const COLUMN_CLASS = `flex min-w-0 flex-col gap-(--cue-space-6) p-(--cue-space-6) outline-none ${FOCUS_RING_INSET_2}`;
131
137
  /** A column is sized by its contents, so the box must not hold a height. */
132
138
  const COLUMN_ROOT_CLASS = "h-auto";
133
139
  /** The affordance, and only where there is something to afford. */
@@ -237,7 +243,7 @@ const FramesRoot = React.forwardRef(function FramesRoot({ children, label, heigh
237
243
  });
238
244
  });
239
245
  /** One cell: the specimen, and the line under it. */
240
- const ITEM_CLASS = "flex min-w-0 shrink-0 flex-col items-center gap-(--cue-space-2) rounded-(--radius-control) p-(--cue-space-2)";
246
+ const ITEM_CLASS = "flex min-w-0 shrink-0 flex-col items-center gap-(--cue-space-2) rounded-control p-(--cue-space-2)";
241
247
  /** The one a reader is inspecting. An outline and not a border: a border would move the cell. */
242
248
  const ITEM_SELECTED_CLASS = "outline-2 outline-solid -outline-offset-1 outline-accent";
243
249
  const ITEM_BODY_CLASS = "flex min-w-0 items-center justify-center";
@@ -262,7 +268,7 @@ const ITEM_BODY_CLASS = "flex min-w-0 items-center justify-center";
262
268
  * behaves like any other line, rather than inheriting the empty string and
263
269
  * vanishing.
264
270
  */
265
- const ITEM_CAPTION_CLASS = "min-w-0 truncate text-center font-mono text-(length:--cue-text-micro) text-fg-subtle [opacity:var(--preview-captions,1)] [pointer-events:var(--preview-captions-pe,auto)]";
271
+ const ITEM_CAPTION_CLASS = `min-w-0 truncate text-center ${LABEL_FACE} ${CAPTION_CASE} ${LABEL_TRACKING_INHERIT} ${LABEL_SIZE_MICRO} ${LABEL_INK_SUBTLE} [opacity:var(--preview-captions,1)] [pointer-events:var(--preview-captions-pe,auto)]`;
266
272
  /**
267
273
  * A design canvas: frames side by side, each holding one axis of one component.
268
274
  *
@@ -1,4 +1,5 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { FOCUS_RING } from "../system/_focus-ring.js";
2
3
  import { cva } from "../lib/cva.js";
3
4
  import * as React from "react";
4
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -15,7 +16,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
16
  * @example
16
17
  * <div className={itemVariants({ variant: "outline" })} />
17
18
  */
18
- const itemVariants = cva("flex w-full items-center gap-(--cue-space-4) rounded-(--radius-control) px-(--cue-pad-row-x) py-(--cue-pad-row-y) text-left font-mono text-(length:--cue-text-ui) text-fg", {
19
+ const itemVariants = cva("flex w-full items-center gap-(--cue-space-4) rounded-control px-(--cue-pad-row-x) py-(--cue-pad-row-y) text-left font-mono text-(length:--cue-text-ui) text-fg", {
19
20
  variants: {
20
21
  variant: {
21
22
  plain: "",
@@ -23,7 +24,7 @@ const itemVariants = cva("flex w-full items-center gap-(--cue-space-4) rounded-(
23
24
  soft: "bg-surface-2"
24
25
  },
25
26
  interactive: {
26
- true: "cursor-pointer transition-colors duration-150 outline-none hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40",
27
+ true: `cursor-pointer transition-colors duration-150 outline-none hover:bg-surface-2 ${FOCUS_RING} disabled:pointer-events-none disabled:opacity-40`,
27
28
  false: ""
28
29
  }
29
30
  },
@@ -13,6 +13,22 @@ import { useRender } from "@base-ui/react/use-render";
13
13
  * alone would fail WCAG 1.4.1 — and it offsets the rule by 4px so descenders
14
14
  * are not struck through.
15
15
  *
16
+ * The ink, the rule's colour and offset, the weight and the hover ink are the
17
+ * style set's to change (spec §3.7): each reads a `style-link-*` name, or
18
+ * `style-hover-ink`, with what this recipe drew before as its fallback —
19
+ * `_style-link.ts` lists them. The `underline` variant's ink falls back
20
+ * through every link's, so a set that inks all links inks prose links too.
21
+ *
22
+ * **Each variant carries its own ink, and the base carries none.** The two
23
+ * inks are two `text-[color:…]` utilities, and `linkVariants()` is exported to
24
+ * be spread onto an anchor without `cn()`: were the plain ink in the base and
25
+ * the prose ink in the variant, an underlined link would carry both, and which
26
+ * one painted would be decided by the order Tailwind happened to emit them in.
27
+ * The same holds for a class a caller concatenates onto it: it does not replace
28
+ * the recipe's own, and the offset reader is emitted after every numeric
29
+ * `underline-offset-*`. Merge with `tailwind-merge`, or pass `className` to
30
+ * `Link`, which merges, to override one.
31
+ *
16
32
  * @example
17
33
  * <a className={linkVariants({ variant: "underline" })} href="/docs">Docs</a>
18
34
  */
@@ -1,6 +1,9 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
4
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
3
5
  import { cva } from "../lib/cva.js";
6
+ import { HOVER_INK, INLINE_LINK_INK, LINK_INK, LINK_OFFSET, LINK_RULE, LINK_WEIGHT } from "../system/_style-link.js";
4
7
  import * as React from "react";
5
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
9
  import { useRender } from "@base-ui/react/use-render";
@@ -16,13 +19,29 @@ import { useRender } from "@base-ui/react/use-render";
16
19
  * alone would fail WCAG 1.4.1 — and it offsets the rule by 4px so descenders
17
20
  * are not struck through.
18
21
  *
22
+ * The ink, the rule's colour and offset, the weight and the hover ink are the
23
+ * style set's to change (spec §3.7): each reads a `style-link-*` name, or
24
+ * `style-hover-ink`, with what this recipe drew before as its fallback —
25
+ * `_style-link.ts` lists them. The `underline` variant's ink falls back
26
+ * through every link's, so a set that inks all links inks prose links too.
27
+ *
28
+ * **Each variant carries its own ink, and the base carries none.** The two
29
+ * inks are two `text-[color:…]` utilities, and `linkVariants()` is exported to
30
+ * be spread onto an anchor without `cn()`: were the plain ink in the base and
31
+ * the prose ink in the variant, an underlined link would carry both, and which
32
+ * one painted would be decided by the order Tailwind happened to emit them in.
33
+ * The same holds for a class a caller concatenates onto it: it does not replace
34
+ * the recipe's own, and the offset reader is emitted after every numeric
35
+ * `underline-offset-*`. Merge with `tailwind-merge`, or pass `className` to
36
+ * `Link`, which merges, to override one.
37
+ *
19
38
  * @example
20
39
  * <a className={linkVariants({ variant: "underline" })} href="/docs">Docs</a>
21
40
  */
22
- const linkVariants = cva("cursor-pointer rounded-(--radius-control) font-mono text-fg transition-colors duration-150 outline-none hover:text-accent focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent", {
41
+ const linkVariants = cva(`cursor-pointer rounded-control ${CONTROL_FACE} ${LINK_WEIGHT} transition-colors duration-150 outline-none ${HOVER_INK} ${FOCUS_RING_OFFSET_2}`, {
23
42
  variants: { variant: {
24
- plain: "no-underline",
25
- underline: "underline decoration-border underline-offset-4 hover:decoration-accent"
43
+ plain: `no-underline ${LINK_INK}`,
44
+ underline: `underline ${INLINE_LINK_INK} ${LINK_RULE} ${LINK_OFFSET} hover:decoration-[color:var(--cue-style-hover-ink,var(--cue-accent))]`
26
45
  } },
27
46
  defaultVariants: { variant: "plain" }
28
47
  });
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_INSET } from "../system/_focus-ring.js";
3
4
  import { IconButton } from "../primitives/icon-button.js";
4
5
  import { ChevronLeftGlyph, ChevronRightGlyph } from "./_glyphs.js";
5
6
  import * as React from "react";
@@ -62,7 +63,7 @@ function paginationRange(page, pageCount, siblingCount = 1) {
62
63
  * with `accent-soft` when it is the page you are on — never a solid accent
63
64
  * fill, which at console density reads as a second, louder button.
64
65
  */
65
- const PAGE_BUTTON_CLASSES = "inline-flex h-control-sm min-w-control-sm cursor-pointer items-center justify-center rounded-(--radius-control) border-0 bg-transparent px-(--cue-space-2) font-mono text-(length:--cue-text-ui) tabular-nums text-fg-muted transition-colors duration-150 outline-none select-none hover:bg-surface-2 hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-accent";
66
+ const PAGE_BUTTON_CLASSES = `inline-flex h-control-sm min-w-control-sm cursor-pointer items-center justify-center rounded-control border-0 bg-transparent px-(--cue-space-2) font-mono text-(length:--cue-text-ui) tabular-nums text-fg-muted transition-colors duration-150 outline-none select-none hover:bg-surface-2 hover:text-fg ${FOCUS_RING_INSET}`;
66
67
  /**
67
68
  * The pager: previous, a window of page numbers, next.
68
69
  *
@@ -55,15 +55,29 @@ interface PreviewProps extends Omit<React.ComponentPropsWithoutRef<"div">, "chil
55
55
  mode?: Mode;
56
56
  /** A rung of the density ladder for the stage only, as a `<Density>` island would set it. */
57
57
  density?: Density$1;
58
- /** A font pairing for the stage only, as `data-font`. Portals still follow the root's pairing. */
58
+ /**
59
+ * A font pairing for the stage only, stamped as `data-font` and republished to
60
+ * React, so an overlay opened on the stage wears the stage's pairing rather
61
+ * than the page's, and `useTheme().font` read on the stage reports it. The
62
+ * stage also takes `font-sans` when a pairing is named: `data-font` re-declares
63
+ * the family's custom properties, but `font-family` inherits as an already
64
+ * computed value, so unclassed text on the stage would otherwise keep the
65
+ * family it resolved above it. Unset, the stage inherits and adds neither.
66
+ */
59
67
  font?: FontName;
60
68
  /**
61
- * A style set for the stage only: `console`, `editorial` or `marketing`.
69
+ * A style set for the stage only: `console`, `editorial`, `marketing` or
70
+ * `graphite`.
62
71
  *
63
72
  * Unset, the stage inherits and **no attribute is emitted at all** — the same
64
- * rule the other four follow here. Unlike `theme`, naming one loads nothing
65
- * and needs nothing: the three sets are emitted by `@cueplusplus/tokens` into
66
- * the stylesheet every consumer already imports, so a stage is scoped to
73
+ * rule the other four follow here — unless the stage names a `theme`, a `mode`
74
+ * or a `font`. Then it restates the set in force around it, because a set's
75
+ * block declares values that read those axes (its seam ink and band rule
76
+ * read the theme, its control and display faces read the pairing) and a
77
+ * custom property resolves where it is declared: restated, they resolve
78
+ * against the stage. Unlike `theme`, naming one loads nothing and needs
79
+ * nothing: every set is emitted by `@cueplusplus/tokens` into the stylesheet
80
+ * every consumer already imports, so a stage is scoped to
67
81
  * `[data-style="<name>"]` and the block is on the page by construction.
68
82
  *
69
83
  * The set is republished to React as well as stamped, so a popover opened on
@@ -72,15 +86,18 @@ interface PreviewProps extends Omit<React.ComponentPropsWithoutRef<"div">, "chil
72
86
  */
73
87
  styleSet?: StyleSet;
74
88
  /**
75
- * A look pack for the stage: the finish its surfaces wear.
89
+ * A paint pack for the stage: the finish its surfaces wear.
76
90
  *
77
91
  * Stamped as `data-paint` on the stage element, and republished to React for
78
92
  * the same reason `styleSet` is — a popover opened on the stage mounts on
79
93
  * `<body>` and inherits nothing from the stage's DOM, so it has to be told.
80
94
  *
81
- * Absent means inherit. `none` is a value that opts OUT of an ambient pack,
82
- * which is what a stage uses to show a component unpainted inside a page that
83
- * is not.
95
+ * Absent means inherit — and a stage that names a `theme`, a `mode` or a
96
+ * `font` restates the pack in force around it, so the pack's strokes and
97
+ * inks, which are the theme's colours mixed, resolve against the stage's
98
+ * theme rather than the page's. `none` is a value that opts OUT of an ambient
99
+ * pack, which is what a stage uses to show a component unpainted inside a
100
+ * page that is not.
84
101
  */
85
102
  paint?: Paint;
86
103
  /**
@@ -151,12 +168,15 @@ interface PreviewProps extends Omit<React.ComponentPropsWithoutRef<"div">, "chil
151
168
  *
152
169
  * **The stage is the island; the chrome is not.** `theme`, `mode`, `density`,
153
170
  * `font` and `styleSet` land on the stage element only, and the stage
154
- * republishes the theme, density and style-set contexts so an overlay opened on
155
- * it follows it. The tools, the footer, the grips and anything they open stay
171
+ * republishes the theme (pairing included), density and style-set contexts so
172
+ * an overlay opened on it follows it. The tools, the footer, the grips and anything they open stay
156
173
  * in the scope around the Preview — a `terminal` preview's own controls do not
157
174
  * turn cyan. With none of the five set, the stage carries no attribute and
158
175
  * costs what a `<div>` costs. A stage `theme` with no `mode` repeats the page's
159
- * mode beside it.
176
+ * mode beside it, a stage `theme` or `mode` with no `density` the page's rung,
177
+ * and a stage `theme`, `mode` or `font` restates the page's
178
+ * style set and paint pack beside it, so their theme-reading values resolve
179
+ * against the stage.
160
180
  *
161
181
  * **`resizable` is handles of its own**, both axes by default: an edge grip per
162
182
  * axis that is a keyboard-operable `separator` valued in pixels, and a corner