@cueplusplus/ui 0.16.0 → 0.18.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 (548) hide show
  1. package/CHANGELOG.md +901 -0
  2. package/README.md +1 -1
  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 +3 -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 +1 -1
  16. package/dist/chrome/_tabs-scroll.js +1 -1
  17. package/dist/chrome/app-bar.js +9 -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 +18 -32
  21. package/dist/chrome/empty-state.js +8 -4
  22. package/dist/chrome/eyebrow.d.ts +13 -5
  23. package/dist/chrome/eyebrow.js +18 -7
  24. package/dist/chrome/footer.d.ts +5 -0
  25. package/dist/chrome/footer.js +14 -3
  26. package/dist/chrome/navigation-menu.js +6 -3
  27. package/dist/chrome/page-shell.js +8 -5
  28. package/dist/chrome/panel.d.ts +5 -2
  29. package/dist/chrome/panel.js +10 -5
  30. package/dist/chrome/row.js +9 -5
  31. package/dist/chrome/scroll-area.js +6 -4
  32. package/dist/chrome/section-header.js +13 -4
  33. package/dist/chrome/segmented-control.js +14 -4
  34. package/dist/chrome/status-bar.js +2 -1
  35. package/dist/chrome/tabs.js +14 -3
  36. package/dist/chrome/toolbar.js +6 -3
  37. package/dist/chrome/tree.js +3 -2
  38. package/dist/color/_thumb.js +9 -3
  39. package/dist/color/color-area.js +1 -1
  40. package/dist/color/color-swatch.js +1 -1
  41. package/dist/configurator/_overrides.js +13 -4
  42. package/dist/configurator/configurator.js +4 -1
  43. package/dist/configurator/export-dialog.js +5 -2
  44. package/dist/configurator/panel-sections.js +6 -2
  45. package/dist/configurator/token-editor.js +4 -1
  46. package/dist/date/_trigger.js +4 -1
  47. package/dist/date/calendar.js +22 -12
  48. package/dist/dmx/channel-matrix.js +3 -2
  49. package/dist/dmx/dmx-bar.js +1 -1
  50. package/dist/dmx/dmx-strip.js +1 -1
  51. package/dist/dmx/universe-grid.js +3 -2
  52. package/dist/elements/activity-graph.js +3 -3
  53. package/dist/elements/agent-card.js +3 -3
  54. package/dist/elements/approval-card.js +3 -3
  55. package/dist/elements/artifact-card.js +2 -2
  56. package/dist/elements/background-inbox.js +2 -2
  57. package/dist/elements/canvas-split.js +2 -2
  58. package/dist/elements/chart.js +1 -1
  59. package/dist/elements/chat-panel.js +2 -2
  60. package/dist/elements/checkpoint-history.js +2 -2
  61. package/dist/elements/clamp.js +2 -1
  62. package/dist/elements/code-diff.js +1 -1
  63. package/dist/elements/code-runner.js +1 -1
  64. package/dist/elements/command-palette.js +6 -5
  65. package/dist/elements/comparison-card.js +2 -2
  66. package/dist/elements/composer.js +9 -8
  67. package/dist/elements/computer-use.js +1 -1
  68. package/dist/elements/confidence-marker.js +2 -1
  69. package/dist/elements/connection-state.js +1 -1
  70. package/dist/elements/context-breakdown.js +1 -1
  71. package/dist/elements/context-usage.js +1 -1
  72. package/dist/elements/conversation-search.js +4 -3
  73. package/dist/elements/cost-meter.js +1 -1
  74. package/dist/elements/data-table.js +2 -2
  75. package/dist/elements/day-separator.js +1 -1
  76. package/dist/elements/diagram.js +1 -1
  77. package/dist/elements/document-reference.js +3 -3
  78. package/dist/elements/draft-restore.js +1 -1
  79. package/dist/elements/edit-message.js +4 -3
  80. package/dist/elements/elements.css +26 -5
  81. package/dist/elements/elicitation-form.js +3 -3
  82. package/dist/elements/empty-state.js +2 -1
  83. package/dist/elements/error-state.js +1 -1
  84. package/dist/elements/feedback-dialog.js +4 -3
  85. package/dist/elements/file-tree.js +2 -2
  86. package/dist/elements/flow-graph.js +2 -2
  87. package/dist/elements/guardrail-notice.js +3 -3
  88. package/dist/elements/image-generation.js +1 -1
  89. package/dist/elements/inline-citation.js +3 -3
  90. package/dist/elements/job-progress.js +3 -3
  91. package/dist/elements/launcher-bubble.js +2 -2
  92. package/dist/elements/loading-state.js +1 -1
  93. package/dist/elements/map-answer.js +3 -2
  94. package/dist/elements/markdown.js +5 -4
  95. package/dist/elements/math-block.js +1 -1
  96. package/dist/elements/mcp-server-panel.js +3 -3
  97. package/dist/elements/message-attachment.js +4 -4
  98. package/dist/elements/message-pair.js +1 -1
  99. package/dist/elements/message-queue.js +2 -2
  100. package/dist/elements/mobile-composer.js +4 -3
  101. package/dist/elements/model-picker.js +3 -3
  102. package/dist/elements/onboarding.js +2 -2
  103. package/dist/elements/permission-grant.js +2 -2
  104. package/dist/elements/permission-scopes.js +5 -4
  105. package/dist/elements/prompt-library.js +7 -6
  106. package/dist/elements/queue-dock.js +4 -3
  107. package/dist/elements/quota-banner.js +1 -1
  108. package/dist/elements/quote-reply.js +1 -1
  109. package/dist/elements/read-aloud.js +2 -2
  110. package/dist/elements/reasoning-panel.js +2 -1
  111. package/dist/elements/recommendation-card.d.ts +1 -1
  112. package/dist/elements/recommendation-card.js +2 -2
  113. package/dist/elements/regenerate-menu.js +2 -2
  114. package/dist/elements/research-report.js +1 -1
  115. package/dist/elements/retrieval-chunks.js +1 -1
  116. package/dist/elements/revert-dock.js +5 -4
  117. package/dist/elements/reviewable-diff.js +1 -1
  118. package/dist/elements/schedule-card.js +3 -3
  119. package/dist/elements/score-breakdown.js +1 -1
  120. package/dist/elements/scroll-anchor.js +2 -2
  121. package/dist/elements/settings-panel.js +3 -2
  122. package/dist/elements/shared-conversation.js +2 -2
  123. package/dist/elements/sources.js +4 -3
  124. package/dist/elements/speaker-identity.js +1 -1
  125. package/dist/elements/spec-sheet.js +1 -1
  126. package/dist/elements/streaming-text.js +1 -1
  127. package/dist/elements/subagent-list.js +2 -2
  128. package/dist/elements/suggestions.js +1 -1
  129. package/dist/elements/surfaces.d.ts +1 -1
  130. package/dist/elements/surfaces.js +2 -1
  131. package/dist/elements/tail-status.js +1 -1
  132. package/dist/elements/terminal-block.js +1 -1
  133. package/dist/elements/thread-list.js +1 -1
  134. package/dist/elements/thread-search.js +5 -4
  135. package/dist/elements/timeline.js +1 -1
  136. package/dist/elements/todo-list.js +2 -2
  137. package/dist/elements/tool-call.js +4 -3
  138. package/dist/elements/tool-error.js +2 -2
  139. package/dist/elements/tool-group.js +1 -1
  140. package/dist/elements/tool-timeline.js +4 -3
  141. package/dist/elements/trace-waterfall.js +1 -1
  142. package/dist/elements/verdict-row.js +2 -2
  143. package/dist/elements/voice-conversation.js +3 -2
  144. package/dist/elements/web-preview.js +1 -1
  145. package/dist/elements/web-search.js +2 -2
  146. package/dist/elements/work-collapse.js +2 -1
  147. package/dist/flow/node-card.js +3 -2
  148. package/dist/flow/use-flow-theme.js +2 -1
  149. package/dist/forms/_chassis.d.ts +34 -6
  150. package/dist/forms/_chassis.js +44 -9
  151. package/dist/forms/_listbox.js +22 -14
  152. package/dist/forms/checkbox.js +13 -4
  153. package/dist/forms/env-var-input.js +3 -2
  154. package/dist/forms/field.d.ts +2 -1
  155. package/dist/forms/field.js +16 -5
  156. package/dist/forms/file-upload.js +3 -2
  157. package/dist/forms/input-group.js +11 -2
  158. package/dist/forms/multi-select.js +4 -3
  159. package/dist/forms/number-field.js +7 -3
  160. package/dist/forms/otp-field.js +15 -6
  161. package/dist/forms/password-input.js +4 -2
  162. package/dist/forms/radio-group.js +10 -4
  163. package/dist/forms/rating.js +2 -1
  164. package/dist/forms/scrub-input.js +2 -1
  165. package/dist/forms/search-input.js +2 -1
  166. package/dist/forms/select.js +10 -4
  167. package/dist/forms/slider.js +9 -3
  168. package/dist/forms/switch.js +9 -3
  169. package/dist/forms/tags-input.js +4 -3
  170. package/dist/forms/textarea.js +3 -1
  171. package/dist/forms/toggle-group.js +2 -1
  172. package/dist/forms/toggle.js +5 -1
  173. package/dist/index.d.ts +2 -2
  174. package/dist/index.js +2 -2
  175. package/dist/instruments/_data-row.js +2 -1
  176. package/dist/instruments/app-window-frame.js +1 -1
  177. package/dist/instruments/code-block.js +8 -2
  178. package/dist/instruments/group-bar.js +1 -1
  179. package/dist/instruments/ledger.js +6 -2
  180. package/dist/instruments/log-viewer.js +4 -3
  181. package/dist/instruments/meter.js +2 -1
  182. package/dist/instruments/progress.js +9 -3
  183. package/dist/instruments/seam-grid.js +5 -3
  184. package/dist/instruments/stat.js +13 -4
  185. package/dist/instruments/table.js +29 -10
  186. package/dist/instruments/terminal-frame.js +4 -2
  187. package/dist/instruments/usage-chart.js +1 -1
  188. package/dist/layout/_collapse.js +26 -5
  189. package/dist/layout/accordion.js +2 -1
  190. package/dist/layout/bento.js +7 -4
  191. package/dist/layout/breadcrumb.js +10 -5
  192. package/dist/layout/card.js +14 -7
  193. package/dist/layout/carousel.js +3 -2
  194. package/dist/layout/collapsible.js +6 -1
  195. package/dist/layout/container.js +2 -1
  196. package/dist/layout/description-list.js +4 -1
  197. package/dist/layout/frames.js +11 -5
  198. package/dist/layout/item.js +3 -2
  199. package/dist/layout/link.d.ts +30 -0
  200. package/dist/layout/link.js +22 -3
  201. package/dist/layout/pagination.js +8 -8
  202. package/dist/layout/preview.d.ts +32 -12
  203. package/dist/layout/preview.js +149 -40
  204. package/dist/layout/resizable.js +2 -1
  205. package/dist/layout/sidebar.js +11 -3
  206. package/dist/layout/stepper.js +6 -2
  207. package/dist/lib/cn.js +29 -2
  208. package/dist/midi/piano-keyboard.js +3 -2
  209. package/dist/midi/spectrum-visualizer.js +1 -1
  210. package/dist/midi/threshold-rail.js +2 -1
  211. package/dist/midi/timeline-ruler.js +1 -1
  212. package/dist/overlays/_surface.d.ts +74 -14
  213. package/dist/overlays/_surface.js +87 -14
  214. package/dist/overlays/alert-dialog.js +1 -1
  215. package/dist/overlays/command-palette.js +28 -9
  216. package/dist/overlays/dialog.d.ts +5 -0
  217. package/dist/overlays/dialog.js +6 -1
  218. package/dist/overlays/drawer.js +8 -1
  219. package/dist/overlays/hover-card.js +3 -1
  220. package/dist/overlays/info-tip.js +2 -1
  221. package/dist/overlays/menubar.js +3 -1
  222. package/dist/overlays/popover.js +3 -1
  223. package/dist/overlays/toast.js +14 -6
  224. package/dist/overlays/tooltip.js +3 -1
  225. package/dist/primitives/avatar.js +6 -2
  226. package/dist/primitives/button.d.ts +16 -1
  227. package/dist/primitives/button.js +44 -12
  228. package/dist/primitives/chip.d.ts +11 -29
  229. package/dist/primitives/chip.js +40 -50
  230. package/dist/primitives/icon-button.d.ts +1 -1
  231. package/dist/primitives/kbd.d.ts +6 -0
  232. package/dist/primitives/kbd.js +10 -1
  233. package/dist/primitives/skeleton.js +2 -1
  234. package/dist/system/_focus-ring-field.js +29 -0
  235. package/dist/system/_focus-ring.js +125 -0
  236. package/dist/system/_paint-glow.js +22 -3
  237. package/dist/system/_paint-rest-shade.js +32 -0
  238. package/dist/system/_paint-rim.js +22 -4
  239. package/dist/system/_paint-stroke-surface-1.js +1 -1
  240. package/dist/system/_paint-stroke-surface-2.js +14 -1
  241. package/dist/system/_paint-texture.js +5 -2
  242. package/dist/system/_style-accordion-rule.js +32 -0
  243. package/dist/system/_style-app-bar.js +65 -0
  244. package/dist/system/_style-avatar.js +20 -0
  245. package/dist/system/_style-band.js +57 -0
  246. package/dist/system/_style-body-leading.js +19 -0
  247. package/dist/system/_style-body-size.js +30 -0
  248. package/dist/system/_style-body-weight.js +24 -0
  249. package/dist/system/_style-body.js +32 -0
  250. package/dist/system/_style-caption-ink.js +17 -0
  251. package/dist/system/_style-caption-size.js +19 -0
  252. package/dist/system/_style-caption-weight.js +18 -0
  253. package/dist/system/_style-caption.js +19 -0
  254. package/dist/system/_style-card-gap.js +14 -0
  255. package/dist/system/_style-card-pad.js +43 -0
  256. package/dist/system/_style-cell.js +18 -0
  257. package/dist/system/_style-check-glyph.js +14 -0
  258. package/dist/system/_style-check.js +40 -0
  259. package/dist/system/_style-chip.js +143 -0
  260. package/dist/system/_style-choice-gap.js +15 -0
  261. package/dist/system/_style-code.js +13 -0
  262. package/dist/system/_style-collapse.js +94 -0
  263. package/dist/system/_style-control-face.js +29 -0
  264. package/dist/system/_style-control-gap.js +14 -0
  265. package/dist/system/_style-control-label.js +29 -0
  266. package/dist/system/_style-control-step.js +22 -0
  267. package/dist/system/_style-control.js +76 -0
  268. package/dist/system/_style-crumb.js +44 -0
  269. package/dist/system/_style-data-face.js +28 -0
  270. package/dist/system/_style-day.js +25 -0
  271. package/dist/system/_style-description.js +23 -0
  272. package/dist/system/_style-disabled.js +70 -0
  273. package/dist/system/_style-disclosure.js +21 -0
  274. package/dist/system/_style-empty-state.js +42 -0
  275. package/dist/system/_style-eyebrow.js +43 -0
  276. package/dist/system/_style-field-chassis.js +38 -0
  277. package/dist/system/_style-field-gap.js +12 -0
  278. package/dist/system/_style-footer-rule.js +47 -0
  279. package/dist/system/_style-glyph-ink.js +20 -0
  280. package/dist/system/_style-glyph-opacity.js +20 -0
  281. package/dist/system/_style-glyph-size.js +21 -0
  282. package/dist/system/_style-group-gap.js +15 -0
  283. package/dist/system/_style-group-label-pad.js +14 -0
  284. package/dist/system/_style-group-label.js +24 -0
  285. package/dist/system/_style-gutter.js +17 -0
  286. package/dist/system/_style-help-ink.js +14 -0
  287. package/dist/system/_style-help.js +38 -0
  288. package/dist/system/_style-hover-card-width.js +15 -0
  289. package/dist/system/_style-input-face.js +34 -0
  290. package/dist/system/_style-kbd.js +58 -0
  291. package/dist/system/_style-label-case.js +36 -0
  292. package/dist/system/_style-label-face.js +32 -0
  293. package/dist/system/_style-label-ink.js +29 -0
  294. package/dist/system/_style-label-leading.js +14 -0
  295. package/dist/system/_style-label-size.js +36 -0
  296. package/dist/system/_style-label-tracking.js +45 -0
  297. package/dist/system/_style-label-weight.js +40 -0
  298. package/dist/system/_style-lede.js +49 -0
  299. package/dist/system/_style-link.js +58 -0
  300. package/dist/system/_style-menu.js +43 -0
  301. package/dist/system/_style-meter.js +15 -0
  302. package/dist/system/_style-nav-item.js +41 -0
  303. package/dist/system/_style-nav-menu.js +48 -0
  304. package/dist/system/_style-nav-voice.js +43 -0
  305. package/dist/system/_style-option.js +99 -0
  306. package/dist/system/_style-otp.js +15 -0
  307. package/dist/system/_style-outline-hover.js +18 -0
  308. package/dist/system/_style-overlay-title.js +35 -0
  309. package/dist/system/_style-page-title.js +48 -0
  310. package/dist/system/_style-page.js +17 -0
  311. package/dist/system/_style-palette.js +18 -0
  312. package/dist/system/_style-panel.js +21 -0
  313. package/dist/system/_style-popover-pad.js +13 -0
  314. package/dist/system/_style-popover-width.js +15 -0
  315. package/dist/system/_style-quiet-ink.js +13 -0
  316. package/dist/system/_style-radio.js +19 -0
  317. package/dist/system/_style-row-disabled.js +17 -0
  318. package/dist/system/_style-row-pad.js +13 -0
  319. package/dist/system/_style-row.js +30 -0
  320. package/dist/system/_style-scrollbar.js +19 -0
  321. package/dist/system/_style-seam.js +43 -0
  322. package/dist/system/_style-section-rule.js +26 -0
  323. package/dist/system/_style-segment-pad.js +15 -0
  324. package/dist/system/_style-segment.js +30 -0
  325. package/dist/system/_style-segmented-control.js +86 -0
  326. package/dist/system/_style-selected.js +36 -0
  327. package/dist/system/_style-skeleton.js +15 -0
  328. package/dist/system/_style-slider.js +26 -0
  329. package/dist/system/_style-stage-marks.js +26 -0
  330. package/dist/system/_style-stat.js +31 -0
  331. package/dist/system/_style-stepper.js +16 -0
  332. package/dist/system/_style-switch.js +26 -0
  333. package/dist/system/_style-tab-hover.js +15 -0
  334. package/dist/system/_style-tab.js +71 -0
  335. package/dist/system/_style-text-focus.js +26 -0
  336. package/dist/system/_style-textarea.js +21 -0
  337. package/dist/system/_style-title.js +37 -0
  338. package/dist/system/_style-toast.js +22 -0
  339. package/dist/system/_style-toggle.js +50 -0
  340. package/dist/system/_style-toolbar.js +23 -0
  341. package/dist/system/_style-tooltip.js +46 -0
  342. package/dist/system/density.d.ts +15 -5
  343. package/dist/system/density.js +188 -25
  344. package/dist/system/index.d.ts +2 -2
  345. package/dist/system/index.js +2 -2
  346. package/dist/system/overrides.d.ts +1 -0
  347. package/dist/system/overrides.js +151 -3
  348. package/dist/system/portal.d.ts +3 -2
  349. package/dist/system/portal.js +22 -10
  350. package/dist/system/prepaint.d.ts +21 -5
  351. package/dist/system/prepaint.js +3 -1
  352. package/dist/system/published.d.ts +1 -0
  353. package/dist/system/published.js +131 -0
  354. package/dist/system/theme-provider.d.ts +118 -21
  355. package/dist/system/theme-provider.js +362 -73
  356. package/dist/system/theme-registry.d.ts +2 -1
  357. package/dist/system/theme-registry.js +27 -10
  358. package/dist/system/use-density.js +4 -3
  359. package/dist/system/use-theme.d.ts +5 -2
  360. package/dist/system/use-theme.js +7 -4
  361. package/dist/system/vocabulary.js +2 -2
  362. package/dist/theming/create-theme.js +12 -6
  363. package/dist/theming/serialize.d.ts +34 -2
  364. package/dist/theming/serialize.js +86 -4
  365. package/manifest/components/accordion.json +29 -2
  366. package/manifest/components/agent-pile.json +3 -0
  367. package/manifest/components/alert-dialog.json +36 -3
  368. package/manifest/components/app-bar.json +61 -2
  369. package/manifest/components/app-shell.json +5 -0
  370. package/manifest/components/ask-box.json +3 -1
  371. package/manifest/components/autocomplete.json +85 -1
  372. package/manifest/components/avatar-group.json +7 -0
  373. package/manifest/components/avatar.json +7 -0
  374. package/manifest/components/band.json +7 -3
  375. package/manifest/components/bento.json +12 -1
  376. package/manifest/components/breadcrumb.json +12 -0
  377. package/manifest/components/button.json +43 -4
  378. package/manifest/components/calendar.json +13 -0
  379. package/manifest/components/card.json +23 -1
  380. package/manifest/components/carousel.json +4 -1
  381. package/manifest/components/channel-matrix.json +37 -3
  382. package/manifest/components/chart-tooltip-content.json +35 -3
  383. package/manifest/components/chat-empty-state.json +3 -1
  384. package/manifest/components/checkbox-group.json +36 -1
  385. package/manifest/components/checkbox.json +36 -1
  386. package/manifest/components/chip.json +22 -1
  387. package/manifest/components/clamp.json +3 -1
  388. package/manifest/components/code-block.json +10 -1
  389. package/manifest/components/collapsible.json +35 -2
  390. package/manifest/components/color-area.json +4 -2
  391. package/manifest/components/color-field.json +29 -0
  392. package/manifest/components/color-picker.json +29 -0
  393. package/manifest/components/color-slider.json +3 -1
  394. package/manifest/components/colors-section.json +9 -1
  395. package/manifest/components/combobox.json +85 -1
  396. package/manifest/components/command-palette.json +39 -3
  397. package/manifest/components/composer-actions.json +3 -0
  398. package/manifest/components/composer-attach-button.json +3 -0
  399. package/manifest/components/composer-attachment-chip.json +3 -0
  400. package/manifest/components/composer-attachments.json +3 -0
  401. package/manifest/components/composer-bar.json +3 -0
  402. package/manifest/components/composer-command-item.json +3 -0
  403. package/manifest/components/composer-context.json +3 -0
  404. package/manifest/components/composer-input.json +3 -0
  405. package/manifest/components/composer-menu-item.json +3 -0
  406. package/manifest/components/composer-menu.json +3 -0
  407. package/manifest/components/composer-model-item.json +3 -0
  408. package/manifest/components/composer-model-trigger.json +3 -0
  409. package/manifest/components/composer-person-item.json +3 -0
  410. package/manifest/components/composer-send.json +3 -0
  411. package/manifest/components/composer-toolbar.json +3 -0
  412. package/manifest/components/composer-voice-button.json +3 -0
  413. package/manifest/components/composer-voice.json +3 -0
  414. package/manifest/components/composer.json +29 -0
  415. package/manifest/components/confidence-marker.json +3 -1
  416. package/manifest/components/container.json +2 -1
  417. package/manifest/components/context-menu.json +35 -3
  418. package/manifest/components/conversation-search.json +3 -1
  419. package/manifest/components/cue-mark.json +2 -2
  420. package/manifest/components/cue-portal-frame.json +1 -1
  421. package/manifest/components/data-row.json +3 -1
  422. package/manifest/components/data-tree.json +3 -1
  423. package/manifest/components/date-field.json +28 -0
  424. package/manifest/components/date-picker.json +32 -0
  425. package/manifest/components/date-range-picker.json +32 -0
  426. package/manifest/components/delegation-card.json +3 -1
  427. package/manifest/components/density.json +15 -7
  428. package/manifest/components/description-list.json +6 -1
  429. package/manifest/components/dialog.json +37 -3
  430. package/manifest/components/disclosure.json +35 -2
  431. package/manifest/components/dmx-bar.json +34 -3
  432. package/manifest/components/dmx-strip.json +34 -3
  433. package/manifest/components/drawer.json +36 -3
  434. package/manifest/components/dropdown-menu.json +35 -3
  435. package/manifest/components/edit-message.json +3 -1
  436. package/manifest/components/elements-command-palette.json +3 -1
  437. package/manifest/components/elements-composer.json +3 -0
  438. package/manifest/components/empty-state-composer.json +3 -1
  439. package/manifest/components/empty-state-greeting.json +3 -1
  440. package/manifest/components/empty-state-suggestion.json +3 -1
  441. package/manifest/components/empty-state-suggestions.json +3 -1
  442. package/manifest/components/empty-state.json +13 -0
  443. package/manifest/components/env-var-input.json +28 -0
  444. package/manifest/components/export-dialog.json +6 -1
  445. package/manifest/components/eyebrow.json +13 -2
  446. package/manifest/components/feedback-dialog.json +3 -0
  447. package/manifest/components/field-description.json +15 -0
  448. package/manifest/components/field-error.json +15 -0
  449. package/manifest/components/field-label.json +16 -1
  450. package/manifest/components/field.json +15 -0
  451. package/manifest/components/file-upload.json +3 -0
  452. package/manifest/components/footer.json +14 -1
  453. package/manifest/components/frames.json +14 -1
  454. package/manifest/components/hover-card.json +37 -3
  455. package/manifest/components/info-tip.json +3 -0
  456. package/manifest/components/input-group.json +31 -0
  457. package/manifest/components/input.json +29 -0
  458. package/manifest/components/item.json +3 -1
  459. package/manifest/components/kbd.json +12 -1
  460. package/manifest/components/ledger.json +9 -2
  461. package/manifest/components/link.json +33 -0
  462. package/manifest/components/log-viewer.json +3 -0
  463. package/manifest/components/map-answer.json +3 -1
  464. package/manifest/components/markdown-text.json +3 -0
  465. package/manifest/components/menubar.json +38 -4
  466. package/manifest/components/message-list.json +3 -0
  467. package/manifest/components/message.json +6 -1
  468. package/manifest/components/meter.json +1 -0
  469. package/manifest/components/mobile-composer.json +3 -1
  470. package/manifest/components/multi-select.json +86 -1
  471. package/manifest/components/musical-time-input.json +29 -0
  472. package/manifest/components/navigation-menu.json +48 -3
  473. package/manifest/components/node-card.json +3 -0
  474. package/manifest/components/number-field.json +30 -0
  475. package/manifest/components/otp-field.json +29 -0
  476. package/manifest/components/page-shell.json +14 -0
  477. package/manifest/components/pagination.json +22 -0
  478. package/manifest/components/panel-header.json +13 -0
  479. package/manifest/components/panel.json +14 -1
  480. package/manifest/components/password-input.json +28 -0
  481. package/manifest/components/permission-scopes.json +3 -1
  482. package/manifest/components/piano-keyboard.json +3 -0
  483. package/manifest/components/popover.json +37 -3
  484. package/manifest/components/preset-section.json +9 -1
  485. package/manifest/components/preview.json +24 -10
  486. package/manifest/components/progress.json +10 -1
  487. package/manifest/components/prompt-library.json +3 -1
  488. package/manifest/components/queue-dock.json +3 -1
  489. package/manifest/components/radio-group.json +14 -0
  490. package/manifest/components/radio.json +14 -0
  491. package/manifest/components/rating.json +4 -1
  492. package/manifest/components/reasoning-panel.json +3 -1
  493. package/manifest/components/recommendation-card.json +1 -1
  494. package/manifest/components/resizable.json +4 -1
  495. package/manifest/components/revert-dock.json +3 -1
  496. package/manifest/components/row.json +8 -1
  497. package/manifest/components/scroll-area.json +6 -2
  498. package/manifest/components/scrollable-tabs-list.json +21 -0
  499. package/manifest/components/scrub-input.json +28 -0
  500. package/manifest/components/seam-cell.json +1 -0
  501. package/manifest/components/seam-grid.json +1 -0
  502. package/manifest/components/seam-list.json +8 -1
  503. package/manifest/components/search-input.json +28 -0
  504. package/manifest/components/section-header.json +15 -2
  505. package/manifest/components/segmented-control.json +17 -0
  506. package/manifest/components/select.json +42 -0
  507. package/manifest/components/settings-panel.json +3 -0
  508. package/manifest/components/shape-section.json +9 -1
  509. package/manifest/components/sheet.json +35 -3
  510. package/manifest/components/shimmer-label.json +3 -0
  511. package/manifest/components/sidebar.json +19 -2
  512. package/manifest/components/skeleton.json +2 -0
  513. package/manifest/components/slider.json +16 -0
  514. package/manifest/components/sources.json +3 -1
  515. package/manifest/components/stat.json +17 -0
  516. package/manifest/components/status-bar.json +4 -0
  517. package/manifest/components/stepper.json +8 -0
  518. package/manifest/components/swap-label.json +3 -0
  519. package/manifest/components/switch.json +30 -0
  520. package/manifest/components/table-scroll-region.json +22 -2
  521. package/manifest/components/table.json +22 -2
  522. package/manifest/components/tabs.json +22 -1
  523. package/manifest/components/tags-input.json +86 -1
  524. package/manifest/components/terminal-frame.json +3 -0
  525. package/manifest/components/textarea.json +31 -0
  526. package/manifest/components/theme-configurator.json +35 -3
  527. package/manifest/components/theme-provider.json +31 -19
  528. package/manifest/components/thread-search.json +3 -1
  529. package/manifest/components/threshold-rail.json +3 -0
  530. package/manifest/components/time-field.json +28 -0
  531. package/manifest/components/toast.json +39 -2
  532. package/manifest/components/toggle-group.json +2 -1
  533. package/manifest/components/toggle.json +32 -0
  534. package/manifest/components/token-editor.json +6 -1
  535. package/manifest/components/tool-call-card.json +9 -2
  536. package/manifest/components/tool-call.json +3 -1
  537. package/manifest/components/tool-timeline.json +3 -1
  538. package/manifest/components/toolbar.json +22 -1
  539. package/manifest/components/tooltip.json +42 -3
  540. package/manifest/components/tree-visibility-toggle.json +3 -0
  541. package/manifest/components/tree.json +3 -0
  542. package/manifest/components/universe-grid.json +3 -0
  543. package/manifest/components/voice-conversation.json +3 -0
  544. package/manifest/components/work-collapse.json +3 -1
  545. package/manifest/fixtures.json +15 -0
  546. package/manifest/manifest.json +210 -190
  547. package/manifest/tokens.json +395 -4
  548. package/package.json +6 -6
@@ -0,0 +1,143 @@
1
+ //#region src/system/_style-chip.ts
2
+ /**
3
+ * The chip's voice and recipe: its case, tracking and radius, and the share of
4
+ * each tone its fill and its rim take — the console's by default, the style
5
+ * set's choice inside one.
6
+ *
7
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2), F-15. A tinted chip was
8
+ * `bg-<tone>/10 border-<tone>/35 text-<tone>`, mono, uppercase and caps-tracked
9
+ * on the control radius, and under a sans Look it was the most visible console
10
+ * voice left (K44). The four measured Looks each draw their tags differently —
11
+ * kiln's are sentence-case pills at a 12% fill with no rim, porcelain's a 8%
12
+ * fill with no rim on a tighter radius, zine's rimless and 0.1em-tracked — and
13
+ * none of that follows the Look unless the chip reads it. So it reads:
14
+ *
15
+ * - `--cue-style-chip-case`, falling back through `--cue-style-label-case` to
16
+ * `uppercase`: a chip shouts when the set's captions do, unless the set says
17
+ * otherwise (kiln's tags are sentence case while its captions are caps);
18
+ * - `--cue-style-chip-tracking`, falling back to each variant's own tracking —
19
+ * the caps rung for `tinted` and `outline`, `0.06em` for `tag`;
20
+ * - `--cue-style-chip-size`, falling back to each variant's own rung — the
21
+ * label rung for `tinted` and `outline`, the micro rung for `tag` (`Kbd`
22
+ * reads it too, from `_style-kbd.ts`);
23
+ * - `--cue-style-chip-radius`, falling back to what `rounded-control` compiles
24
+ * to — the control rung times the radius scale, resolved at the chip;
25
+ * - `--cue-style-chip-fill` and `--cue-style-chip-edge`, the share of the tone
26
+ * in the fill and in the rim, falling back to `10%` and `35%`.
27
+ *
28
+ * Every name is optional (spec §3.0, F-3), emitted as `initial` on the shared
29
+ * `[data-style]` reset, so under no set and every set that declines them each
30
+ * reader resolves to exactly what the class it replaced resolved to.
31
+ *
32
+ * **The tone recipe mixes in `oklab`, not the spec's `oklch`.** `bg-accent/10`
33
+ * compiles to `color-mix(in oklab, var(--cue-accent) 10%, transparent)`, and a
34
+ * mix with `transparent` lands on the same colour in either space — but an
35
+ * engine serialises the result in the space it mixed in, so an `oklch` recipe
36
+ * reads `oklch(…)` where the chip read `oklab(…)`, and the fallback would not
37
+ * be the site's value byte for byte. `oklab` is.
38
+ *
39
+ * `neutral` is not here: its fill (`surface-2`) and its rims (`border`,
40
+ * `hair-strong`) are theme roles rather than a share of a tone, and keep their
41
+ * own classes. The hover rims and fills (`/60`, `/20`) stay the tone's own too.
42
+ *
43
+ * **Every entry is a complete literal**, for the reason `_focus-ring.ts` gives
44
+ * at length: Tailwind generates a class only when some source spells it out in
45
+ * one contiguous string, so the per-tone recipe is written out six times and
46
+ * never assembled from the tone's name at runtime.
47
+ *
48
+ * **One module for the chip's own names**, because `Chip` is their only
49
+ * importer: `@repo/docgen` credits every importer with every token in a file,
50
+ * which is why `Kbd`'s read of `--cue-style-chip-size` lives in `_style-kbd.ts`.
51
+ *
52
+ * **Where the size sits decides the line box.** `tailwind-merge` drops a
53
+ * `leading-*` class that a later font-size class follows. The chip's base
54
+ * string carries `leading-none` and its variants the size, so `Chip`'s own
55
+ * `cn()` drops the `leading-none` — exactly as it did when the variants spelt
56
+ * `text-(length:--cue-text-label)` — and a rendered chip's line box is the
57
+ * inherited one. The sizes stay in the variants for that reason: moving them
58
+ * ahead of the base would restore `leading-none` and move every chip.
59
+ *
60
+ * @internal Not part of the public API.
61
+ */
62
+ const CHIP_CASE = "[text-transform:var(--cue-style-chip-case,var(--cue-style-label-case,uppercase))]";
63
+ /** @see CHIP_CASE — the `tinted` and `outline` variants' size; the label rung by default. */
64
+ const CHIP_SIZE = "text-[length:var(--cue-style-chip-size,var(--cue-text-label))]";
65
+ /** @see CHIP_CASE — the `tag` variant's size; the micro rung by default. */
66
+ const CHIP_SIZE_MICRO = "text-[length:var(--cue-style-chip-size,var(--cue-text-micro))]";
67
+ /** @see CHIP_CASE — the `tinted` and `outline` variants' tracking; the caps rung by default. */
68
+ const CHIP_TRACKING = "tracking-[var(--cue-style-chip-tracking,var(--cue-tracking-caps))]";
69
+ /** @see CHIP_CASE — the `tag` variant's tracking; its own closed `0.06em` by default. */
70
+ const CHIP_TRACKING_TAG = "tracking-[var(--cue-style-chip-tracking,0.06em)]";
71
+ /** @see CHIP_CASE — the chip's radius; what `rounded-control` compiles to by default. */
72
+ const CHIP_RADIUS = "rounded-[var(--cue-style-chip-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
73
+ /** @see CHIP_CASE — each tone's fill: `var(--cue-style-chip-fill, 10%)` of the tone over transparent. */
74
+ const CHIP_FILL = {
75
+ accent: "bg-[color:color-mix(in_oklab,var(--cue-accent)_var(--cue-style-chip-fill,10%),transparent)]",
76
+ ok: "bg-[color:color-mix(in_oklab,var(--cue-ok)_var(--cue-style-chip-fill,10%),transparent)]",
77
+ busy: "bg-[color:color-mix(in_oklab,var(--cue-busy)_var(--cue-style-chip-fill,10%),transparent)]",
78
+ warn: "bg-[color:color-mix(in_oklab,var(--cue-warn)_var(--cue-style-chip-fill,10%),transparent)]",
79
+ danger: "bg-[color:color-mix(in_oklab,var(--cue-danger)_var(--cue-style-chip-fill,10%),transparent)]",
80
+ info: "bg-[color:color-mix(in_oklab,var(--cue-info)_var(--cue-style-chip-fill,10%),transparent)]"
81
+ };
82
+ /** @see CHIP_CASE — each tone's rim: `var(--cue-style-chip-edge, 35%)` of the tone over transparent. */
83
+ const CHIP_EDGE = {
84
+ accent: "border-[color:color-mix(in_oklab,var(--cue-accent)_var(--cue-style-chip-edge,35%),transparent)]",
85
+ ok: "border-[color:color-mix(in_oklab,var(--cue-ok)_var(--cue-style-chip-edge,35%),transparent)]",
86
+ busy: "border-[color:color-mix(in_oklab,var(--cue-busy)_var(--cue-style-chip-edge,35%),transparent)]",
87
+ warn: "border-[color:color-mix(in_oklab,var(--cue-warn)_var(--cue-style-chip-edge,35%),transparent)]",
88
+ danger: "border-[color:color-mix(in_oklab,var(--cue-danger)_var(--cue-style-chip-edge,35%),transparent)]",
89
+ info: "border-[color:color-mix(in_oklab,var(--cue-info)_var(--cue-style-chip-edge,35%),transparent)]"
90
+ };
91
+ /**
92
+ * The chip's own height and inline padding (plan V.2, P14):
93
+ * `style-chip-height`, falling back to the `h-chip` rung, and `style-chip-pad`,
94
+ * falling back to the `space-3` the tinted and outline variants pad at (the
95
+ * `tag` variant keeps its `space-2`). Porcelain's chips are 22px on a phone and
96
+ * 18px on a desktop, 3px in — shorter than the `chip-h` rung its key caps
97
+ * share, which is why this is the chip's name and not the rung's.
98
+ */
99
+ const CHIP_HEIGHT = "h-[var(--cue-style-chip-height,var(--cue-chip-h))]";
100
+ /** @see CHIP_HEIGHT */
101
+ const CHIP_PAD = "px-[var(--cue-style-chip-pad,var(--cue-space-3))]";
102
+ /**
103
+ * The chip's leading (round 6, spec §11, lane R6.T: `style-chip-leading`).
104
+ * stripe.com's tag sets 14px on a 19.6px line, 1.4 (T134). A nowrap, centred
105
+ * chip lays its glyphs in the same place at any leading.
106
+ *
107
+ * Two fallbacks, because the recipe's two users rendered two leadings. The
108
+ * recipe spelled `leading-none`, so `chipVariants()` on a consumer's own
109
+ * element drew a line of 1: {@link CHIP_LEADING}, composed after the size so
110
+ * it survives, falls back to `1`. `Chip` merged that recipe in `cn()`, where
111
+ * `tailwind-merge` dropped `leading-none` because a font-size class follows
112
+ * it, so a `Chip` inherited its leading: it appends
113
+ * {@link CHIP_LEADING_INHERIT}, which replaces the recipe's in the merge (the
114
+ * closing pass's adversarial review).
115
+ */
116
+ const CHIP_LEADING = "leading-[var(--cue-style-chip-leading,1)]";
117
+ /** @see CHIP_LEADING — `Chip`'s own, falling back to the leading it inherited. */
118
+ const CHIP_LEADING_INHERIT = "leading-[var(--cue-style-chip-leading,inherit)]";
119
+ /**
120
+ * The tag volume's own gutter (round 6: `style-tag-pad`, PAD2), falling back
121
+ * to the `space-2` it drew. stripe.com's small tag pads 4px (T135).
122
+ */
123
+ const TAG_PAD = "px-[var(--cue-style-tag-pad,var(--cue-space-2))]";
124
+ /**
125
+ * The neutral tag's rim (round 6: `style-tag-edge`), falling back to the
126
+ * `hair-strong` it drew. stripe.com rims its small tag in its quiet border
127
+ * ink, #e5edf5, the md tag's own (T135).
128
+ */
129
+ const TAG_EDGE = "border-[color:var(--cue-style-tag-edge,var(--cue-hair-strong))]";
130
+ /**
131
+ * The neutral chip's ink (round 6, spec §11, lane R6.K: `style-chip-ink`),
132
+ * falling back to the `fg-muted` it drew. The tinted tones keep their own ink.
133
+ * replit.com's tags are near-black, #151618, on a warm tint (K156).
134
+ */
135
+ const CHIP_INK_NEUTRAL = "text-[color:var(--cue-style-chip-ink,var(--cue-fg-muted))]";
136
+ /**
137
+ * The gap between a chip's icon and its label (round 6, spec §11, lane R6.P:
138
+ * `style-chip-gap`), falling back to the `space-2` it drew. coss.com/ui's badge
139
+ * sets it 4px (P190.gap).
140
+ */
141
+ const CHIP_GAP = "gap-[var(--cue-style-chip-gap,var(--cue-space-2))]";
142
+ //#endregion
143
+ export { CHIP_CASE, CHIP_EDGE, CHIP_FILL, CHIP_GAP, CHIP_HEIGHT, CHIP_INK_NEUTRAL, CHIP_LEADING, CHIP_LEADING_INHERIT, CHIP_PAD, CHIP_RADIUS, CHIP_SIZE, CHIP_SIZE_MICRO, CHIP_TRACKING, CHIP_TRACKING_TAG, TAG_EDGE, TAG_PAD };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-choice-gap.ts
2
+ /**
3
+ * The gap between a stacked CheckboxGroup's or RadioGroup's items (round 6,
4
+ * spec §11, lane R6.P: `style-choice-gap`), falling back to the `space-2`
5
+ * both drew. coss.com/ui stacks both 12px apart (P148, P171.gap). A horizontal
6
+ * radio group keeps its own `space-5`.
7
+ *
8
+ * **Optional** (spec §3.0). Its own module for docgen's reason: one token per
9
+ * file, so only the components that read it are credited with it.
10
+ *
11
+ * @internal Not part of the public API.
12
+ */
13
+ const CHOICE_GAP = "gap-[var(--cue-style-choice-gap,var(--cue-space-2))]";
14
+ //#endregion
15
+ export { CHOICE_GAP };
@@ -0,0 +1,13 @@
1
+ //#region src/system/_style-code.ts
2
+ /**
3
+ * Code's weight (plan V.2, T74): `style-code-weight` on a `CodeBlock`'s code,
4
+ * falling back to `inherit` — the block declared none. Tender's source serves
5
+ * one code face, SourceCodePro-Medium, so its code is 500 wherever it appears.
6
+ *
7
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
8
+ *
9
+ * @internal Not part of the public API.
10
+ */
11
+ const CODE_WEIGHT = "font-[number:var(--cue-style-code-weight,inherit)]";
12
+ //#endregion
13
+ export { CODE_WEIGHT };
@@ -0,0 +1,94 @@
1
+ //#region src/system/_style-collapse.ts
2
+ /**
3
+ * The disclosure trigger's height (plan V.2, P125): `style-collapse-height`,
4
+ * falling back to the `control-md` rung it drew. Porcelain's accordion rows
5
+ * are 52px. Shared by `Accordion`, `Collapsible` and `Disclosure`, which ride
6
+ * one trigger recipe (`layout/_collapse.ts`).
7
+ *
8
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
9
+ *
10
+ * @internal Not part of the public API.
11
+ */
12
+ const COLLAPSE_HEIGHT = "h-[var(--cue-style-collapse-height,var(--cue-control-md))]";
13
+ /**
14
+ * The disclosure trigger's and panel's inline padding (round 6, spec §11,
15
+ * lane R6.T: `style-collapse-pad`), falling back to the row gutter
16
+ * `--cue-pad-row-x` they drew. stripe.com's accordion summary and content sit
17
+ * flush with the rule between sections, so tender sets `0px` (T127, T130).
18
+ */
19
+ const COLLAPSE_PAD = "px-[var(--cue-style-collapse-pad,var(--cue-pad-row-x))]";
20
+ /** The gap between the trigger's label and its caret (`style-collapse-gap`), falling back to `space-3` (T127). */
21
+ const COLLAPSE_GAP = "gap-[var(--cue-style-collapse-gap,var(--cue-space-3))]";
22
+ /** The trigger's hover ink (`style-collapse-hover-ink`), falling back to the `fg` it hovered to (T128). */
23
+ const COLLAPSE_HOVER_INK = "hover:text-[color:var(--cue-style-collapse-hover-ink,var(--cue-fg))]";
24
+ /** An open section's trigger ink (`style-collapse-open-ink`), falling back to `fg` (T129). */
25
+ const COLLAPSE_OPEN_INK = "data-[panel-open]:text-[color:var(--cue-style-collapse-open-ink,var(--cue-fg))]";
26
+ /**
27
+ * The panel body's block padding, start then end (`style-collapse-body-pad`,
28
+ * PAD2), falling back to the `space-1` over `space-4` it drew. stripe.com's
29
+ * content starts under the summary's own padding and ends 16px above the
30
+ * rule (T130).
31
+ */
32
+ const COLLAPSE_BODY_PAD = "[padding-block:var(--cue-style-collapse-body-pad,var(--cue-space-1)_var(--cue-space-4))]";
33
+ /**
34
+ * The trigger's text size (round 6, spec §11, lane R6.K: `style-collapse-size`,
35
+ * a SIZE the font scale moves), falling back to the `text-ui` rung it drew.
36
+ * replit.com's FAQ rows set their question at 20px on a 28px line (K142); greptile.com's
37
+ * FAQ toggles are its 16px copy, 14px on a phone (Z112).
38
+ */
39
+ const COLLAPSE_SIZE = "text-[length:var(--cue-style-collapse-size,var(--cue-text-ui))]";
40
+ /** The trigger's leading (`style-collapse-leading`), falling back to the `inherit` it drew (no leading class of its own). */
41
+ const COLLAPSE_LEADING = "leading-[var(--cue-style-collapse-leading,inherit)]";
42
+ /**
43
+ * The trigger's hover ground (`style-collapse-hover-ground`), falling back to
44
+ * the `transparent` it drew: the trigger painted no ground under the pointer.
45
+ * replit.com's FAQ rows fill with its recessed ground on hover (K143).
46
+ */
47
+ const COLLAPSE_HOVER_GROUND = "hover:bg-[color:var(--cue-style-collapse-hover-ground,transparent)]";
48
+ /**
49
+ * The panel body's ink (`style-collapse-body-ink`), falling back to the
50
+ * `fg-muted` it drew. replit.com's FAQ answers are set in its quiet ink,
51
+ * #37383c, the ink of its headings and quiet controls (K144).
52
+ */
53
+ const COLLAPSE_BODY_INK = "text-[color:var(--cue-style-collapse-body-ink,var(--cue-fg-muted))]";
54
+ /**
55
+ * The panel body's face: the body face (`style-body-face`, spec §3.5), falling back to the `font-mono` the body
56
+ * drew. The body was the one part of the disclosure still hard-coded mono under a sans Look (K144, the K44
57
+ * finding).
58
+ */
59
+ const COLLAPSE_BODY_FACE = "font-[family-name:var(--cue-style-body-face,var(--cue-font-mono))]";
60
+ /**
61
+ * The disclosure trigger's corner (round 6, spec §11, lane R6.K: `style-collapse-radius`), falling
62
+ * back to the square it drew. replit.com's FAQ rows round their hover ground 6px (K141.radius).
63
+ */
64
+ const COLLAPSE_RADIUS = "rounded-[var(--cue-style-collapse-radius,0px)]";
65
+ /**
66
+ * The trigger's weight (`style-collapse-weight`), falling back through the
67
+ * label weight to the `400` it drew (`LABEL_WEIGHT_NORMAL`). greptile.com's
68
+ * FAQ toggles are 600 beside its 400 labels, so the two are apart (Z112).
69
+ */
70
+ const COLLAPSE_WEIGHT = "font-[number:var(--cue-style-collapse-weight,var(--cue-style-label-weight,400))]";
71
+ /** The caret's size (`style-collapse-caret-size`), falling back to the `icon-sm` it drew; greptile.com's chevron is 16px (Z113). */
72
+ const COLLAPSE_CARET_SIZE = "size-[var(--cue-style-collapse-caret-size,var(--cue-icon-sm))]";
73
+ /** The caret's ink (`style-collapse-caret-ink`), falling back to the `fg-subtle` it drew; greptile.com's chevron takes the label's slate (Z113). */
74
+ /**
75
+ * The caret's fade (round 6, spec §11, lane R6.P: `style-collapse-caret-opacity`),
76
+ * falling back to the opacity 1 it drew. coss.com/ui's accordion chevron sits
77
+ * at 0.8 (P150.caret-opacity).
78
+ */
79
+ const COLLAPSE_CARET_OPACITY = "opacity-[var(--cue-style-collapse-caret-opacity,1)]";
80
+ /** @see COLLAPSE_CARET_SIZE */
81
+ const COLLAPSE_CARET_INK = "text-[color:var(--cue-style-collapse-caret-ink,var(--cue-fg-subtle))]";
82
+ /**
83
+ * The panel body's size, leading and tracking (round 6, spec §11, lane R6.Z: `style-collapse-body-size`,
84
+ * a type size the font scale moves, `-body-leading`, `-body-tracking`), each falling back to the class it
85
+ * replaced: the `text-ui` rung on `leading-ui`, and the tracking it inherited (no class of its own). greptile.com's FAQ answers are its running
86
+ * copy, 16px on 24px at −0.01em (Z114).
87
+ */
88
+ const COLLAPSE_BODY_SIZE = "text-[length:var(--cue-style-collapse-body-size,var(--cue-text-ui))]";
89
+ /** @see COLLAPSE_BODY_SIZE */
90
+ const COLLAPSE_BODY_LEADING = "leading-[var(--cue-style-collapse-body-leading,var(--cue-leading-ui))]";
91
+ /** @see COLLAPSE_BODY_SIZE */
92
+ const COLLAPSE_BODY_TRACKING = "tracking-[var(--cue-style-collapse-body-tracking,inherit)]";
93
+ //#endregion
94
+ export { COLLAPSE_BODY_FACE, COLLAPSE_BODY_INK, COLLAPSE_BODY_LEADING, COLLAPSE_BODY_PAD, COLLAPSE_BODY_SIZE, COLLAPSE_BODY_TRACKING, COLLAPSE_CARET_INK, COLLAPSE_CARET_OPACITY, COLLAPSE_CARET_SIZE, COLLAPSE_GAP, COLLAPSE_HEIGHT, COLLAPSE_HOVER_GROUND, COLLAPSE_HOVER_INK, COLLAPSE_LEADING, COLLAPSE_OPEN_INK, COLLAPSE_PAD, COLLAPSE_RADIUS, COLLAPSE_SIZE, COLLAPSE_WEIGHT };
@@ -0,0 +1,29 @@
1
+ //#region src/system/_style-control-face.ts
2
+ /**
3
+ * The face a control wears: mono by default, the style set's choice inside one.
4
+ *
5
+ * Spec 2026-09-26 R-8. Every control in this library spoke mono before this
6
+ * existed — `font-mono` on `Button`'s chassis and on the `Tabs` trigger — and
7
+ * that voice is the default and stays so. What was missing was a way for a
8
+ * sans-voiced Look (stripe's, replit's, coss's) to change it, and a face chosen
9
+ * per call site would not follow the Look. So the style set says it, through
10
+ * `--cue-style-control-face`, and this reads it.
11
+ *
12
+ * **The fallback is the old class, spelt out.** `font-mono` compiles to
13
+ * `font-family: var(--cue-font-mono)` through the Tailwind bridge, and
14
+ * `--cue-style-control-face` is declared on no `:root` — deliberately, because
15
+ * a `:root` `var(--cue-font-mono)` would be substituted at `<html>` and freeze
16
+ * the page's mono into every `<Preview font>` stage. So under no set this
17
+ * resolves to exactly what `font-mono` resolved to, at the control itself; and
18
+ * every shipped set but a sans-voiced one restates `var(--cue-font-mono)`, which
19
+ * `@cueplusplus/tokens` refuses to build otherwise for `console`.
20
+ *
21
+ * **Its own module**, because `@repo/docgen` attributes a token to a component
22
+ * by the file its class string lives in, following only `_`-prefixed imports —
23
+ * the rule `_paint-glow.ts` records. One reader per file.
24
+ *
25
+ * @internal Not part of the public API.
26
+ */
27
+ const CONTROL_FACE = "font-[family-name:var(--cue-style-control-face,var(--cue-font-mono))]";
28
+ //#endregion
29
+ export { CONTROL_FACE };
@@ -0,0 +1,14 @@
1
+ //#region src/system/_style-control-gap.ts
2
+ /**
3
+ * The gap between a button's icon and its label (round 6, spec §11, lane
4
+ * R6.P: `style-control-gap`), falling back to the `0.4em` the chassis drew.
5
+ * coss.com/ui's buttons set it 8px (`gap-2`, P145.gap).
6
+ *
7
+ * **Optional** (spec §3.0). Its own module for docgen's reason: one token per
8
+ * file, so only the components that read it are credited with it.
9
+ *
10
+ * @internal Not part of the public API.
11
+ */
12
+ const CONTROL_GAP = "gap-[var(--cue-style-control-gap,0.4em)]";
13
+ //#endregion
14
+ export { CONTROL_GAP };
@@ -0,0 +1,29 @@
1
+ //#region src/system/_style-control-label.ts
2
+ /**
3
+ * A control's own label — the text beside a `Switch`, a `Checkbox` or a
4
+ * `Radio` — at the body weight first and the label weight after it (plan V.2,
5
+ * T114, P126).
6
+ *
7
+ * The label beside a control is body copy in Tender's source (300, its body
8
+ * weight) and a caption-weight label in Porcelain's (500, its label weight),
9
+ * so the reader tries the body weight, then the label weight, then `inherit`
10
+ * — `LABEL_WEIGHT`'s fallback, what the label drew before either name
11
+ * existed. Only Tender declares the body weight, so every other Look keeps
12
+ * its label weight here.
13
+ *
14
+ * **Optional** (spec §3.0). Its own module for docgen's reason: every
15
+ * importer of `_style-label-weight.ts` would otherwise publish
16
+ * `style-body-weight` as a token it reads.
17
+ *
18
+ * @internal Not part of the public API.
19
+ */
20
+ const CONTROL_LABEL_WEIGHT = "font-[number:var(--cue-style-body-weight,var(--cue-style-label-weight,inherit))]";
21
+ /**
22
+ * A checkbox's, a switch's and a radio's label leading (round 6, spec §11,
23
+ * lane R6.T: `style-control-label-leading`), falling back to the `inherit` it
24
+ * drew (no leading class of its own). stripe.com sets its checkbox and switch
25
+ * labels at 16px on a 19.2px line, 1.2 (T145, T146).
26
+ */
27
+ const CONTROL_LABEL_LEADING = "leading-[var(--cue-style-control-label-leading,inherit)]";
28
+ //#endregion
29
+ export { CONTROL_LABEL_LEADING, CONTROL_LABEL_WEIGHT };
@@ -0,0 +1,22 @@
1
+ //#region src/system/_style-control-step.ts
2
+ /**
3
+ * The control rungs' step size (plan V.2, P130): the `sm` field and the `lg`
4
+ * field and button read `style-control-step-size`, each falling back to the
5
+ * rung it drew — `text-label`, `text-body` and `text-emphasis`. Porcelain's
6
+ * source sets every control's text at one size that steps from 16px on a
7
+ * phone to 14px on a desktop, whichever rung the control is.
8
+ *
9
+ * A type size, so the build wraps a set's value in the font scale's `calc()`.
10
+ * **Optional** (spec §3.0). Its own module for docgen's reason: the field
11
+ * chassis reads it, and `_style-control.ts`'s button names are not the
12
+ * field's.
13
+ *
14
+ * @internal Not part of the public API.
15
+ */
16
+ const CONTROL_STEP_SIZE_SM = "text-[length:var(--cue-style-control-step-size,var(--cue-text-label))]";
17
+ /** @see CONTROL_STEP_SIZE_SM */
18
+ const CONTROL_STEP_SIZE_BODY = "text-[length:var(--cue-style-control-step-size,var(--cue-text-body))]";
19
+ /** @see CONTROL_STEP_SIZE_SM */
20
+ const CONTROL_STEP_SIZE_LG = "text-[length:var(--cue-style-control-step-size,var(--cue-text-emphasis))]";
21
+ //#endregion
22
+ export { CONTROL_STEP_SIZE_BODY, CONTROL_STEP_SIZE_LG, CONTROL_STEP_SIZE_SM };
@@ -0,0 +1,76 @@
1
+ //#region src/system/_style-control.ts
2
+ /**
3
+ * `Button`'s voice, padding and tones, each a style-set name read with the
4
+ * class it replaced as its fallback.
5
+ *
6
+ * Fidelity spec 2026-09-26 §3.7 (plan R3), and §10.4 for `CONTROL_CASE`. Four
7
+ * Looks draw their buttons differently from the console: tender and zine at
8
+ * weight 400, kiln tracked in, tender and zine padded out and kiln and
9
+ * porcelain drawn in, tender's label trimmed to its cap height, graphite in
10
+ * capitals; and each gives its secondary, ghost and outline tones an ink, a
11
+ * ground or an edge of its own. None of that is a value one call site could
12
+ * choose, so the style set says it and these read it.
13
+ *
14
+ * **Every fallback is what the site rendered before this existed**, so under
15
+ * no set and under every set that declines a name the reader is a no-op:
16
+ *
17
+ * - `CONTROL_WEIGHT` is `font-medium`'s 500. It is spelt
18
+ * `font-[number:…]`: a bare `font-[…]` is read as a family, and the
19
+ * `number` label makes it a weight to Tailwind (which emits exactly what
20
+ * `font-medium` emitted, `--tw-font-weight` included) and to `twMerge`, so a
21
+ * caller's `className="font-semibold"` still replaces it. Spelt as an
22
+ * arbitrary `[font-weight:…]` property instead, it would survive the merge
23
+ * and win the cascade: Tailwind emits it after `font-semibold`.
24
+ * - `CONTROL_TRACKING`, `CONTROL_TRIM` and `CONTROL_CASE` fall back to
25
+ * `normal`, `normal` and `none`, the spec's fallbacks: the chassis set none
26
+ * of the three, so a button drew each property's initial value unless an
27
+ * ancestor set a letter-spacing or a case for it to inherit. It now draws
28
+ * the initial value under such an ancestor too, which is what a control
29
+ * should: its voice is the set's, not the caption's it happens to sit in.
30
+ * - The three `CONTROL_PAD_*` multiply the rung each size read (`space-4`,
31
+ * `-5`, `-6`) by the set's multiplier, `1` when it has none.
32
+ * - The tone readers keep each tone's own ink, ground and edge:
33
+ * `style-quiet-ink` in particular falls back to `fg-muted` on the ghost and
34
+ * to `fg` on the outline, the two values the spec's §3.0 names as the reason
35
+ * a name like it cannot be declared on `console`.
36
+ *
37
+ * `style-control-case` is not in the contract yet (spec §10.4: it enters in
38
+ * L5.1). Until then no set declares it and `CONTROL_CASE` renders its
39
+ * fallback.
40
+ *
41
+ * **Its own module, and `Button`'s alone.** `@repo/docgen` attributes every
42
+ * token a file spells to each component that imports it, following only
43
+ * `_`-prefixed imports; the rule `_style-control-face.ts` records. Only
44
+ * `primitives/button.tsx` imports this, and `IconButton` reads it through
45
+ * `buttonChassis` and `buttonTones` as it always has.
46
+ *
47
+ * @internal Not part of the public API.
48
+ */
49
+ /** The control's weight: 500, or the set's `style-control-weight`. */
50
+ const CONTROL_WEIGHT = "font-[number:var(--cue-style-control-weight,500)]";
51
+ /** The control's tracking: `normal`, or the set's `style-control-tracking`. */
52
+ const CONTROL_TRACKING = "tracking-[var(--cue-style-control-tracking,normal)]";
53
+ /** The label's box trim: `normal`, or the set's `style-control-trim`. */
54
+ const CONTROL_TRIM = "[text-box:var(--cue-style-control-trim,normal)]";
55
+ /** The label's case: `none`, or the set's `style-control-case` (spec §10.4). */
56
+ const CONTROL_CASE = "[text-transform:var(--cue-style-control-case,none)]";
57
+ /** `size="sm"`'s inline padding: `space-4` times the set's `style-control-pad`. */
58
+ const CONTROL_PAD_SM = "px-[calc(var(--cue-space-4)*var(--cue-style-control-pad,1))]";
59
+ /** `size="md"`'s inline padding: `space-5` times the set's `style-control-pad`. */
60
+ const CONTROL_PAD_MD = "px-[calc(var(--cue-space-5)*var(--cue-style-control-pad,1))]";
61
+ /** `size="lg"`'s inline padding: `space-6` times the set's `style-control-pad`. */
62
+ const CONTROL_PAD_LG = "px-[calc(var(--cue-space-6)*var(--cue-style-control-pad,1))]";
63
+ /** The secondary tone's ink: `fg-muted`, or the set's `style-secondary-ink`. */
64
+ const SECONDARY_INK = "text-[color:var(--cue-style-secondary-ink,var(--cue-fg-muted))]";
65
+ /** The secondary tone's ground: `surface-2`, or the set's `style-secondary-ground`. */
66
+ const SECONDARY_GROUND = "bg-[color:var(--cue-style-secondary-ground,var(--cue-surface-2))]";
67
+ /** The secondary tone's edge: `border`, or the set's `style-secondary-edge`. */
68
+ const SECONDARY_EDGE = "border-[color:var(--cue-style-secondary-edge,var(--cue-border))]";
69
+ /** The ghost tone's ink: `fg-muted`, or the set's `style-quiet-ink`. */
70
+ const GHOST_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
71
+ /** The outline tone's ink: `fg`, or the set's `style-quiet-ink`. */
72
+ const OUTLINE_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg))]";
73
+ /** The outline tone's edge: `border`, or the set's `style-outline-edge`. */
74
+ const OUTLINE_EDGE = "border-[color:var(--cue-style-outline-edge,var(--cue-border))]";
75
+ //#endregion
76
+ export { CONTROL_CASE, CONTROL_PAD_LG, CONTROL_PAD_MD, CONTROL_PAD_SM, CONTROL_TRACKING, CONTROL_TRIM, CONTROL_WEIGHT, GHOST_INK, OUTLINE_EDGE, OUTLINE_INK, SECONDARY_EDGE, SECONDARY_GROUND, SECONDARY_INK };
@@ -0,0 +1,44 @@
1
+ //#region src/system/_style-crumb.ts
2
+ /**
3
+ * The breadcrumb's own voice (round 6, spec §11, lane R6.Z): its face
4
+ * (`style-crumb-face`), falling back through the control face to the mono it
5
+ * drew; a crumb's hover ink (`style-crumb-hover-ink`), falling back to the
6
+ * `accent` it hovered to; and the gap between crumbs (`style-crumb-gap`),
7
+ * falling back to the `space-2` it drew. greptile.com's blog trail is Space
8
+ * Mono beside its DM Sans buttons, hovers to `fg`, and spaces its crumbs 8px
9
+ * apart at 1440 and 6px at 390 (Z126). Its size is `style-body-size`'s
10
+ * (`_style-body-size.ts`).
11
+ *
12
+ * **Optional** (spec §3.0). Its own module for docgen's reason: one token per
13
+ * file, so `Breadcrumb` alone is credited with these.
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ const CRUMB_FACE = "font-[family-name:var(--cue-style-crumb-face,var(--cue-style-control-face,var(--cue-font-mono)))]";
18
+ /** @see CRUMB_FACE */
19
+ const CRUMB_HOVER_INK = "hover:text-[color:var(--cue-style-crumb-hover-ink,var(--cue-accent))]";
20
+ /** @see CRUMB_FACE */
21
+ const CRUMB_GAP = "gap-[var(--cue-style-crumb-gap,var(--cue-space-2))]";
22
+ /**
23
+ * A crumb's ink (round 6, spec §11, lane R6.Z: `style-crumb-ink`): the links fall back to the
24
+ * `fg-muted` they drew and the current crumb to its full-strength `fg`. greptile.com's blog
25
+ * sets both in one grey, #6a6a6a (Z126.ink, Z126.current).
26
+ */
27
+ const CRUMB_INK = "text-[color:var(--cue-style-crumb-ink,var(--cue-fg-muted))]";
28
+ /** @see CRUMB_INK */
29
+ const CRUMB_CURRENT_INK = "text-[color:var(--cue-style-crumb-ink,var(--cue-fg))]";
30
+ /**
31
+ * The trail's type size (`style-crumb-size`, a type size the font scale moves), falling back through
32
+ * the body size to the `text-label` rung it drew (`BODY_SIZE_LABEL`). greptile.com's crumbs are
33
+ * 14px, 12px on a phone (Z126.size).
34
+ */
35
+ /**
36
+ * The separator's fade (round 6, spec §11, lane R6.P:
37
+ * `style-crumb-separator-opacity`), falling back to the opacity 1 it drew.
38
+ * coss.com/ui's separators sit at 0.8 (P144.opacity).
39
+ */
40
+ const CRUMB_SEPARATOR_OPACITY = "opacity-[var(--cue-style-crumb-separator-opacity,1)]";
41
+ /** @see CRUMB_INK */
42
+ const CRUMB_SIZE = "text-[length:var(--cue-style-crumb-size,var(--cue-style-body-size,var(--cue-text-label)))]";
43
+ //#endregion
44
+ export { CRUMB_CURRENT_INK, CRUMB_FACE, CRUMB_GAP, CRUMB_HOVER_INK, CRUMB_INK, CRUMB_SEPARATOR_OPACITY, CRUMB_SIZE };
@@ -0,0 +1,28 @@
1
+ //#region src/system/_style-data-face.ts
2
+ /**
3
+ * The face figures and records are set in: mono, until a style set names another.
4
+ *
5
+ * Spec 2026-09-26-looks-fidelity §3.5, plan R1. A `Stat`'s value and detail, a
6
+ * `Table`, a `Row`, a `Bento` tile's eyebrow and a `SectionHeader`'s count all
7
+ * spelt `font-mono`. In the console that is the data's voice; in Tender, Kiln
8
+ * and Porcelain the same numbers are set in the Look's sans (T15, K44, P46), and
9
+ * a face chosen per call site would not follow the Look.
10
+ *
11
+ * `tabular-nums` stays at each call site: a sans figure column still has to line
12
+ * up. Code, timecode and DMX values do not read this — they are content, and stay
13
+ * `font-mono` whatever the Look.
14
+ *
15
+ * **The fallback is the old class, spelt out**: `font-mono` compiles to
16
+ * `font-family: var(--cue-font-mono)`, and `--cue-style-data-face` is optional
17
+ * (spec §3.0) — on no `:root`, and left at the shared `[data-style]` reset by
18
+ * every shipped set — so the reader resolves the element's own mono, exactly as
19
+ * `font-mono` did, in every set and every font island.
20
+ *
21
+ * **Its own module**, one name per file, so `@repo/docgen` attributes exactly
22
+ * this token to exactly the components that import it.
23
+ *
24
+ * @internal Not part of the public API.
25
+ */
26
+ const DATA_FACE = "font-[family-name:var(--cue-style-data-face,var(--cue-font-mono))]";
27
+ //#endregion
28
+ export { DATA_FACE };
@@ -0,0 +1,25 @@
1
+ //#region src/system/_style-day.ts
2
+ /**
3
+ * A calendar day's cell and ink (round 6, spec §11, lane R6.P: `style-day-size`,
4
+ * `style-day-ink`). The size sets the day buttons, the weekday heads above
5
+ * them, the month-nav buttons and the caption row they sit in, falling back to
6
+ * the `control-sm` box they drew. coss.com/ui's days and its nav buttons are
7
+ * 36px squares (40px on a phone) (P189, P189.nav).
8
+ *
9
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
10
+ * reader falls back to what the component drew. Its own module for docgen's
11
+ * reason: one component's tokens per file.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const DAY_SIZE = "size-[var(--cue-style-day-size,var(--cue-control-sm))]";
16
+ /** @see DAY_SIZE — the caption row's and the nav row's height. */
17
+ const DAY_HEIGHT = "h-[var(--cue-style-day-size,var(--cue-control-sm))]";
18
+ /**
19
+ * A day's ink at rest (`style-day-ink`), falling back to the `fg-muted` the days
20
+ * drew. coss.com/ui draws its days in `fg` (P189.day-ink); the outside days,
21
+ * the selected day and a hovered day keep their own inks.
22
+ */
23
+ const DAY_INK = "text-[color:var(--cue-style-day-ink,var(--cue-fg-muted))]";
24
+ //#endregion
25
+ export { DAY_HEIGHT, DAY_INK, DAY_SIZE };
@@ -0,0 +1,23 @@
1
+ //#region src/system/_style-description.ts
2
+ /**
3
+ * `Card.Description`'s leading and tracking (plan V.2, Z104, T117, P8).
4
+ *
5
+ * The description reads `style-description-leading` first and then the body
6
+ * leading, so Zine can set a card's supporting line apart from the rest of its
7
+ * body copy (a clamp the description alone measured) while Tender and
8
+ * Porcelain move it with their body leading; with neither named it keeps the
9
+ * `leading-ui` it drew. The tracking is the description's own name rather
10
+ * than `style-prose-tracking`, which Kiln declares at -0.02em for its prose:
11
+ * reading that here would have moved every Kiln card's copy with it. It falls
12
+ * back to `inherit`, which is what the description drew, since it declared no
13
+ * tracking before.
14
+ *
15
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
16
+ *
17
+ * @internal Not part of the public API.
18
+ */
19
+ const DESCRIPTION_LEADING = "leading-[var(--cue-style-description-leading,var(--cue-style-body-leading,var(--cue-leading-ui)))]";
20
+ /** @see DESCRIPTION_LEADING */
21
+ const DESCRIPTION_TRACKING = "tracking-[var(--cue-style-description-tracking,inherit)]";
22
+ //#endregion
23
+ export { DESCRIPTION_LEADING, DESCRIPTION_TRACKING };
@@ -0,0 +1,70 @@
1
+ //#region src/system/_style-disabled.ts
2
+ /**
3
+ * A disabled control's opacity, fill and ink (round 6, spec §11, lane R6.T:
4
+ * `style-disabled-opacity`, `style-disabled-fill`, `style-disabled-ink`).
5
+ *
6
+ * The chassis marks a disabled control by fading it to 40%, whatever the Look.
7
+ * stripe.com's system paints its disabled controls instead: a button, a
8
+ * checkbox, a switch's track and a text field fill with its quiet surface
9
+ * (`--hds-color-input-bg-disabled`, #e5edf5 over white), a disabled label and
10
+ * button text take a pale ink (`--hds-color-input-text-disabled`, #95a4ba),
11
+ * and nothing fades (T143, T132, T145, T146). So a set may lift the fade and
12
+ * name the fill and the ink.
13
+ *
14
+ * **Every reader falls back to what its control drew before**: the fade to
15
+ * `0.4`, each fill and ink to the resting value of the same control and
16
+ * state, spelled here byte for byte, so a disabled control under a set that
17
+ * declines all three is exactly the faded control it was. Each is spelled
18
+ * out whole, because Tailwind reads class names from source text and cannot
19
+ * see one built at run time.
20
+ *
21
+ * **Its own module**, because docgen credits every `--cue-*` in a module to
22
+ * each component that imports it: the button chassis, the field chassis, the
23
+ * checkbox and the switch each import the constants they spend.
24
+ *
25
+ * @internal Not part of the public API.
26
+ */
27
+ /** The fade on `:disabled` (a native control). */
28
+ const DISABLED_OPACITY = "disabled:opacity-[var(--cue-style-disabled-opacity,0.4)]";
29
+ /** The fade on `[data-disabled]` (Base UI's own attribute). */
30
+ const DATA_DISABLED_OPACITY = "data-[disabled]:opacity-[var(--cue-style-disabled-opacity,0.4)]";
31
+ /** The fade on a control's label, which holds the disabled control. */
32
+ const LABEL_DISABLED_OPACITY = "has-[[data-disabled]]:opacity-[var(--cue-style-disabled-opacity,0.4)]";
33
+ /** A disabled control label's ink, falling back to the label ink it drew (`LABEL_INK`). */
34
+ const LABEL_DISABLED_INK = "has-[[data-disabled]]:text-[color:var(--cue-style-disabled-ink,var(--cue-style-label-ink,var(--cue-fg-muted)))]";
35
+ /**
36
+ * The field chassis's fill when disabled: its own two layers (`STROKE_SUNKEN`),
37
+ * with the fill layer's `sunken` read through `style-disabled-fill`, on
38
+ * `:disabled` and on `[data-disabled]`.
39
+ */
40
+ const FIELD_DISABLED_FILL = "disabled:bg-[linear-gradient(var(--cue-style-disabled-fill,var(--cue-sunken)),var(--cue-style-disabled-fill,var(--cue-sunken))),linear-gradient(var(--cue-paint-stroke-angle),var(--cue-paint-stroke-from,var(--cue-border)),var(--cue-paint-stroke-to,var(--cue-border)))] data-[disabled]:bg-[linear-gradient(var(--cue-style-disabled-fill,var(--cue-sunken)),var(--cue-style-disabled-fill,var(--cue-sunken))),linear-gradient(var(--cue-paint-stroke-angle),var(--cue-paint-stroke-from,var(--cue-border)),var(--cue-paint-stroke-to,var(--cue-border)))]";
41
+ /**
42
+ * The button tones' fill and ink when disabled, each falling back to the tone's own resting fill and ink.
43
+ * The two transparent tones keep their ground and take an edge instead (`style-disabled-edge`, falling
44
+ * back to the edge each drew): stripe.com's disabled icon button stays on its ground and draws a 1px rim
45
+ * in its disabled border ink (T139), where its filled buttons fill (T143).
46
+ */
47
+ const DISABLED_TONES = {
48
+ primary: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent-fill))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-accent-fill-fg))]",
49
+ secondary: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-style-secondary-ground,var(--cue-surface-2)))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-secondary-ink,var(--cue-fg-muted)))]",
50
+ ghost: "disabled:border-[color:var(--cue-style-disabled-edge,transparent)] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-quiet-ink,var(--cue-fg-muted)))]",
51
+ outline: "disabled:border-[color:var(--cue-style-disabled-edge,var(--cue-style-outline-edge,var(--cue-border)))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-quiet-ink,var(--cue-fg)))]",
52
+ danger: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-danger))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-danger-fg))]",
53
+ "danger-outline": "disabled:bg-[color:var(--cue-style-disabled-fill,transparent)] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-danger))]"
54
+ };
55
+ /**
56
+ * The checkbox's box when disabled: its fill, and its edge, which a disabled
57
+ * box draws in its own fill (the source's disabled box draws no border, so
58
+ * the two read as one square). Each state keeps its own fallback: the
59
+ * resting `sunken` and edge, and the checked and indeterminate `accent`.
60
+ *
61
+ * The checked and indeterminate edges skip an invalid box: they name two
62
+ * attributes and so outrank `data-[invalid]:border-danger`, and a disabled,
63
+ * checked, invalid box drew `danger` before round 6 (the closing pass's
64
+ * adversarial review).
65
+ */
66
+ const CHECK_DISABLED = "data-[disabled]:bg-[color:var(--cue-style-disabled-fill,var(--cue-sunken))] data-[disabled]:border-[color:var(--cue-style-disabled-fill,var(--cue-style-check-edge,var(--cue-border)))] data-[disabled]:data-[checked]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[checked]:not-data-[invalid]:border-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[indeterminate]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[indeterminate]:not-data-[invalid]:border-[color:var(--cue-style-disabled-fill,var(--cue-accent))]";
67
+ /** The switch's track when disabled, unchecked and checked, each state keeping its own fallback. */
68
+ const SWITCH_DISABLED_TRACK = "data-[disabled]:bg-[color:var(--cue-style-disabled-fill,var(--cue-surface-3))] data-[disabled]:data-[checked]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))]";
69
+ //#endregion
70
+ export { CHECK_DISABLED, DATA_DISABLED_OPACITY, DISABLED_OPACITY, DISABLED_TONES, FIELD_DISABLED_FILL, LABEL_DISABLED_INK, LABEL_DISABLED_OPACITY, SWITCH_DISABLED_TRACK };