@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
@@ -0,0 +1,57 @@
1
+ //#region src/system/_style-band.ts
2
+ /**
3
+ * The two `Band`-only readers of the band's proportions: the broad column's
4
+ * measure, and the rhythm's two halves.
5
+ *
6
+ * **Why neither is in `chrome/_band.ts`.** `Footer` spends that file's
7
+ * `bandClasses("rule")` too, and `@repo/docgen` reads a `_`-prefixed module
8
+ * whole and publishes every `--cue-*` in it as a token each importer paints.
9
+ * `Footer` cannot render either reader below — its `width` is a
10
+ * `ContainerWidth` whose `broad` goes straight to `Container`, and the docs site
11
+ * renders it on every page, where Graphite's 160/80 halves would have moved
12
+ * every footer on a surface the fidelity round never measured (spec §10.4). So
13
+ * they live here, imported by `band.tsx` alone.
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ /**
18
+ * The `width="broad"` column's measure — spec §3.11, `style-band-width` (T38).
19
+ *
20
+ * `--cue-measure-broad` stays `:root`-only (a set that moved it would move
21
+ * every `Container` and `PageShell` at the broad rung); the band column reads a
22
+ * name of its own instead, a rem length from 40 to 100rem.
23
+ *
24
+ * **The fallback is the old class, spelt out.** `Container`'s broad rung is
25
+ * `max-w-(--cue-measure-broad)`, and this computes the same `max-width` when
26
+ * `--cue-style-band-width` is unset, which it is under no set and under every
27
+ * shipped set today.
28
+ *
29
+ * @internal
30
+ */
31
+ const BAND_BROAD_WIDTH = "max-w-[var(--cue-style-band-width,var(--cue-measure-broad))]";
32
+ /**
33
+ * The rhythm's halves — spec §10.4, `band-y-top` and `band-y-bottom` (G46).
34
+ *
35
+ * `--cue-band-y` is one symmetric value, and Graphite's source draws every band
36
+ * 160px above and 80px below (88/32 on a phone), which no value of it reaches.
37
+ * The halves keep `band-y`'s spelling rather than the `style-` prefix: they are
38
+ * its halves (the paint-axis spec's §9.1 named them so).
39
+ *
40
+ * **Composed after `bandClasses(separation)`, and both stay in the class
41
+ * list.** `tailwind-merge` drops an earlier `py-` only for a later `py-`, so
42
+ * `bandClasses`'s `py-(--cue-band-y)` survives beside these; they win by
43
+ * Tailwind 4's property order, which emits `padding-block` before
44
+ * `padding-top` and `padding-bottom`. A consumer's later `py-0`
45
+ * (`home-band.tsx`) drops these two as well, so a band that zeroes its rhythm
46
+ * still does.
47
+ *
48
+ * **The fallback is the old value, spelt out.** Each half falls back to
49
+ * `var(--cue-band-y)`, which is what `py-(--cue-band-y)` drew on that side. The
50
+ * two names enter the contract with Graphite's round (plan L5.1); until then no
51
+ * set declares them, and each half renders `band-y`.
52
+ *
53
+ * @internal
54
+ */
55
+ const BAND_Y_HALVES = "pt-[var(--cue-band-y-top,var(--cue-band-y))] pb-[var(--cue-band-y-bottom,var(--cue-band-y))]";
56
+ //#endregion
57
+ export { BAND_BROAD_WIDTH, BAND_Y_HALVES };
@@ -0,0 +1,21 @@
1
+ //#region src/system/_style-body-leading.ts
2
+ /**
3
+ * Body copy's leading where a component sets it itself: an overlay's
4
+ * description, a field's help and a tooltip (plan V.2, P42, P48, P129).
5
+ * Porcelain's body copy sits on a 1.38 leading at every size.
6
+ *
7
+ * | constant | reads | fallback |
8
+ * |------------------------|----------------------|--------------------------|
9
+ * | `BODY_LEADING` | `style-body-leading` | `var(--cue-leading-ui)` |
10
+ * | `BODY_LEADING_INHERIT` | `style-body-leading` | `inherit` |
11
+ *
12
+ * **Optional** (spec §3.0). Its own module for docgen's reason
13
+ * (`_style-body-size.ts`).
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ const BODY_LEADING = "leading-[var(--cue-style-body-leading,var(--cue-leading-ui))]";
18
+ /** @see BODY_LEADING — for a site that set none and inherited its box's. */
19
+ const BODY_LEADING_INHERIT = "leading-[var(--cue-style-body-leading,inherit)]";
20
+ //#endregion
21
+ export { BODY_LEADING, BODY_LEADING_INHERIT };
@@ -0,0 +1,30 @@
1
+ //#region src/system/_style-body-size.ts
2
+ /**
3
+ * Body copy's size where a component sets it itself: a card's description, an
4
+ * overlay's description, a table, a table's caption and the breadcrumb.
5
+ *
6
+ * Plan V.2 (P8, P42, P122, P128, P138). Each read a density rung directly —
7
+ * `text-ui` or `text-label` — and Porcelain's source sets them all at one 14px
8
+ * body size that does not ramp on a phone the way its `text-ui` does, so a
9
+ * Look needed a name for "body copy" apart from the rung.
10
+ *
11
+ * | constant | reads | fallback |
12
+ * |-------------------|-------------------|-------------------------|
13
+ * | `BODY_SIZE` | `style-body-size` | `var(--cue-text-ui)` |
14
+ * | `BODY_SIZE_LABEL` | `style-body-size` | `var(--cue-text-label)` |
15
+ *
16
+ * A type size, so the build wraps a set's value in the font scale's `calc()`
17
+ * as it does the `text-*` rungs it stands in for. **Size before leading** in
18
+ * any one class list: `tailwind-merge` drops a `leading-*` that precedes a
19
+ * font size. **Optional** (spec §3.0): declared on no `:root` and left at the
20
+ * shared `[data-style]` reset by every set that does not name it. Its own
21
+ * module because docgen attributes a token to a component by the file its
22
+ * class string lives in.
23
+ *
24
+ * @internal Not part of the public API.
25
+ */
26
+ const BODY_SIZE = "text-[length:var(--cue-style-body-size,var(--cue-text-ui))]";
27
+ /** @see BODY_SIZE — for a site whose body copy was the `text-label` rung. */
28
+ const BODY_SIZE_LABEL = "text-[length:var(--cue-style-body-size,var(--cue-text-label))]";
29
+ //#endregion
30
+ export { BODY_SIZE, BODY_SIZE_LABEL };
@@ -0,0 +1,24 @@
1
+ //#region src/system/_style-body-weight.ts
2
+ /**
3
+ * Body copy's weight: whatever the box above says, until a style set names one.
4
+ *
5
+ * Spec 2026-09-26-looks-fidelity §3.5, plan R1. No reader of this name set a
6
+ * weight before it existed — a card's description, an overlay's body copy, the
7
+ * `PageShell` subtitle and the recessed control chassis all inherited theirs —
8
+ * so the fallback is `inherit`, which is what not declaring one computed.
9
+ * Tender's body copy is 300 (T62), and without this name a Look could not say so.
10
+ *
11
+ * The chassis (`forms/_chassis.ts`) reads this and not `_style-body.ts`: a
12
+ * control's face is `INPUT_FACE`, and importing the body face beside the weight
13
+ * would have docgen publish `style-body-face` as a token of every control.
14
+ * `_style-body.ts` composes this one for the readers that spend both.
15
+ *
16
+ * **Optional** (spec §3.0): declared on no `:root` and left at the shared
17
+ * `[data-style]` reset by every shipped set. `_style-page-title.ts` says why a
18
+ * weight reader is `font-[number:…]`.
19
+ *
20
+ * @internal Not part of the public API.
21
+ */
22
+ const BODY_WEIGHT = "font-[number:var(--cue-style-body-weight,inherit)]";
23
+ //#endregion
24
+ export { BODY_WEIGHT };
@@ -0,0 +1,27 @@
1
+ import { BODY_WEIGHT } from "./_style-body-weight.js";
2
+ //#region src/system/_style-body.ts
3
+ /**
4
+ * Body copy's face and weight: mono and inherited, until a style set names them.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.5, plan R1. `CardDescription`,
7
+ * `overlayTextClasses`, `overlayDescriptionClasses` and the `PageShell` subtitle
8
+ * each spelt `font-mono`, so a sans-voiced Look (Tender, Zine, Kiln, Porcelain)
9
+ * could change a card's title and leave the sentence under it shouting in mono.
10
+ *
11
+ * | property | reads | fallback (the class it replaced) |
12
+ * |-------------|---------------------|--------------------------------------|
13
+ * | font-family | `style-body-face` | `var(--cue-font-mono)` (`font-mono`) |
14
+ * | font-weight | `style-body-weight` | `inherit` (no class) |
15
+ *
16
+ * Size, leading and ink stay with each call site: a description and an overlay's
17
+ * body copy sit at different rungs and inks, and no Look measured them moving.
18
+ *
19
+ * **Both names are optional** (spec §3.0), declared on no `:root` and left at the
20
+ * shared `[data-style]` reset by every shipped set, so under each the reader
21
+ * computes what `font-mono` and no weight computed at the element.
22
+ *
23
+ * @internal Not part of the public API.
24
+ */
25
+ const BODY_VOICE = `font-[family-name:var(--cue-style-body-face,var(--cue-font-mono))] ${BODY_WEIGHT}`;
26
+ //#endregion
27
+ export { BODY_VOICE };
@@ -0,0 +1,19 @@
1
+ //#region src/system/_style-caption.ts
2
+ /**
3
+ * A caption's case where the caption is sentence case today (plan V.2, K131,
4
+ * G123): `style-caption-case`, falling back to `inherit` — what a caption
5
+ * that declared no case drew.
6
+ *
7
+ * Not `LABEL_CASE`. `style-label-case` is a required name that `console`
8
+ * restates as `uppercase`, so reading it at a caption that is not uppercase
9
+ * today would uppercase that caption under Classic. Kiln and Graphite set
10
+ * their captions in capitals at these sites too — a frame's caption, a
11
+ * showcase caption — and this is the optional name they say so with.
12
+ *
13
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ const CAPTION_CASE = "[text-transform:var(--cue-style-caption-case,inherit)]";
18
+ //#endregion
19
+ export { CAPTION_CASE };
@@ -0,0 +1,43 @@
1
+ //#region src/system/_style-card-pad.ts
2
+ /**
3
+ * A card's padding: one `--cue-space-5` rung, times the style set's
4
+ * proportion.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.11, `style-card-pad` (row K31). Kiln's
7
+ * cards breathe a quarter wider than the chassis's; a card's padding is a
8
+ * proportion of the density rung (F-6), so the set owns the multiplier and
9
+ * density keeps the rung — a compact island still pads a Kiln card less than a
10
+ * large one does.
11
+ *
12
+ * **The fallback is the old class, spelt out.** `p-(--cue-space-5)` compiled to
13
+ * `padding: var(--cue-space-5)`, and `calc(var(--cue-space-5)*1)` computes the
14
+ * same length at every rung. `--cue-style-card-pad` is on no `:root` — it is
15
+ * one of contract round 2's optional names, reset to `initial` under every
16
+ * `[data-style]` that does not declare it — so under no set, `console` and every
17
+ * shipped set today each reader below resolves to exactly what it drew before.
18
+ *
19
+ * **One constant per side and state**, because a card's parts pad
20
+ * asymmetrically on purpose: the header carries no bottom padding and the footer
21
+ * no top padding, so the body's own padding is the whole gap between them, and
22
+ * under `seam` each takes its missing side back (`Card.Header`'s docblock). Every
23
+ * side reads the same multiplier, so the asymmetry survives any value of it.
24
+ *
25
+ * **Its own module**, because `@repo/docgen` attributes a token to a component
26
+ * by the file its class string lives in, following only `_`-prefixed imports.
27
+ * `Card` is this file's only reader.
28
+ *
29
+ * @internal Not part of the public API.
30
+ */
31
+ const CARD_PAD = "p-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
32
+ /** The inline sides alone: the header's and the footer's. @internal */
33
+ const CARD_PAD_X = "px-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
34
+ /** The header's top. @internal */
35
+ const CARD_PAD_TOP = "pt-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
36
+ /** The footer's bottom. @internal */
37
+ const CARD_PAD_BOTTOM = "pb-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
38
+ /** The header's bottom, taken back under `<Card.Root seam>`. @internal */
39
+ const CARD_PAD_SEAM_BOTTOM = "group-data-[seam]/card:pb-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
40
+ /** The footer's top, taken back under `<Card.Root seam>`. @internal */
41
+ const CARD_PAD_SEAM_TOP = "group-data-[seam]/card:pt-[calc(var(--cue-space-5)*var(--cue-style-card-pad,1))]";
42
+ //#endregion
43
+ export { CARD_PAD, CARD_PAD_BOTTOM, CARD_PAD_SEAM_BOTTOM, CARD_PAD_SEAM_TOP, CARD_PAD_TOP, CARD_PAD_X };
@@ -0,0 +1,33 @@
1
+ //#region src/system/_style-check.ts
2
+ /**
3
+ * The checkbox's resting edge: `border`, or the style set's `style-check-edge`.
4
+ *
5
+ * Fidelity spec 2026-09-26 §3.7 (plan R3). Porcelain draws an unchecked box
6
+ * one rung heavier than its hairlines (`border-strong`, P50), and a checkbox
7
+ * is not a control a call site restyles per Look, so the set says it.
8
+ *
9
+ * **The fallback is the old class, spelt out**: `border-border` compiles to
10
+ * `border-color: var(--cue-border)`, and the name is declared on no `:root`,
11
+ * so under no set and under every set that declines it this resolves at the
12
+ * box exactly as `border-border` did. The checked, indeterminate, hovered and
13
+ * invalid edges are variants over this and keep their own colours.
14
+ *
15
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
16
+ * reader per file, so `@repo/docgen` attributes this token to the checkbox and
17
+ * to nothing else.
18
+ *
19
+ * @internal Not part of the public API.
20
+ */
21
+ const CHECK_EDGE = "border-[color:var(--cue-style-check-edge,var(--cue-border))]";
22
+ /**
23
+ * The checkbox's corner and its `md` size (plan V.2, P110, P137):
24
+ * `style-check-radius`, falling back to the `rounded-control` corner the box
25
+ * drew, and `style-check-size`, falling back to the `icon-md` rung. Porcelain's
26
+ * box is 18px on a phone and 16px on a desktop, rounded at 0.4 of its control
27
+ * corner (4px). The `sm` box keeps its `icon-sm`.
28
+ */
29
+ const CHECK_RADIUS = "rounded-[var(--cue-style-check-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
30
+ /** @see CHECK_RADIUS */
31
+ const CHECK_SIZE_MD = "size-[var(--cue-style-check-size,var(--cue-icon-md))]";
32
+ //#endregion
33
+ export { CHECK_EDGE, CHECK_RADIUS, CHECK_SIZE_MD };
@@ -0,0 +1,103 @@
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
+ //#endregion
103
+ export { CHIP_CASE, CHIP_EDGE, CHIP_FILL, CHIP_HEIGHT, CHIP_PAD, CHIP_RADIUS, CHIP_SIZE, CHIP_SIZE_MICRO, CHIP_TRACKING, CHIP_TRACKING_TAG };
@@ -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,14 @@
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
+ //#endregion
14
+ export { COLLAPSE_HEIGHT };
@@ -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,22 @@
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
+ //#endregion
22
+ export { 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,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,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 };