@cueplusplus/ui 0.16.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 (480) hide show
  1. package/CHANGELOG.md +825 -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/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 +8 -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-swatch.js +1 -1
  40. package/dist/configurator/_overrides.js +13 -4
  41. package/dist/configurator/configurator.js +4 -1
  42. package/dist/configurator/export-dialog.js +5 -2
  43. package/dist/configurator/panel-sections.js +6 -2
  44. package/dist/configurator/token-editor.js +4 -1
  45. package/dist/date/calendar.js +12 -8
  46. package/dist/dmx/channel-matrix.js +3 -2
  47. package/dist/dmx/dmx-bar.js +1 -1
  48. package/dist/dmx/dmx-strip.js +1 -1
  49. package/dist/dmx/universe-grid.js +3 -2
  50. package/dist/elements/activity-graph.js +3 -3
  51. package/dist/elements/agent-card.js +3 -3
  52. package/dist/elements/approval-card.js +3 -3
  53. package/dist/elements/artifact-card.js +2 -2
  54. package/dist/elements/background-inbox.js +2 -2
  55. package/dist/elements/canvas-split.js +2 -2
  56. package/dist/elements/chart.js +1 -1
  57. package/dist/elements/chat-panel.js +2 -2
  58. package/dist/elements/checkpoint-history.js +2 -2
  59. package/dist/elements/clamp.js +2 -1
  60. package/dist/elements/code-diff.js +1 -1
  61. package/dist/elements/code-runner.js +1 -1
  62. package/dist/elements/command-palette.js +6 -5
  63. package/dist/elements/comparison-card.js +2 -2
  64. package/dist/elements/composer.js +9 -8
  65. package/dist/elements/computer-use.js +1 -1
  66. package/dist/elements/confidence-marker.js +2 -1
  67. package/dist/elements/connection-state.js +1 -1
  68. package/dist/elements/context-breakdown.js +1 -1
  69. package/dist/elements/context-usage.js +1 -1
  70. package/dist/elements/conversation-search.js +4 -3
  71. package/dist/elements/cost-meter.js +1 -1
  72. package/dist/elements/data-table.js +2 -2
  73. package/dist/elements/day-separator.js +1 -1
  74. package/dist/elements/diagram.js +1 -1
  75. package/dist/elements/document-reference.js +3 -3
  76. package/dist/elements/draft-restore.js +1 -1
  77. package/dist/elements/edit-message.js +4 -3
  78. package/dist/elements/elements.css +26 -5
  79. package/dist/elements/elicitation-form.js +3 -3
  80. package/dist/elements/empty-state.js +2 -1
  81. package/dist/elements/error-state.js +1 -1
  82. package/dist/elements/feedback-dialog.js +4 -3
  83. package/dist/elements/file-tree.js +2 -2
  84. package/dist/elements/flow-graph.js +2 -2
  85. package/dist/elements/guardrail-notice.js +3 -3
  86. package/dist/elements/image-generation.js +1 -1
  87. package/dist/elements/inline-citation.js +3 -3
  88. package/dist/elements/job-progress.js +3 -3
  89. package/dist/elements/launcher-bubble.js +2 -2
  90. package/dist/elements/loading-state.js +1 -1
  91. package/dist/elements/map-answer.js +3 -2
  92. package/dist/elements/markdown.js +5 -4
  93. package/dist/elements/math-block.js +1 -1
  94. package/dist/elements/mcp-server-panel.js +3 -3
  95. package/dist/elements/message-attachment.js +4 -4
  96. package/dist/elements/message-pair.js +1 -1
  97. package/dist/elements/message-queue.js +2 -2
  98. package/dist/elements/mobile-composer.js +4 -3
  99. package/dist/elements/model-picker.js +3 -3
  100. package/dist/elements/onboarding.js +2 -2
  101. package/dist/elements/permission-grant.js +2 -2
  102. package/dist/elements/permission-scopes.js +5 -4
  103. package/dist/elements/prompt-library.js +7 -6
  104. package/dist/elements/queue-dock.js +4 -3
  105. package/dist/elements/quota-banner.js +1 -1
  106. package/dist/elements/quote-reply.js +1 -1
  107. package/dist/elements/read-aloud.js +2 -2
  108. package/dist/elements/reasoning-panel.js +2 -1
  109. package/dist/elements/recommendation-card.d.ts +1 -1
  110. package/dist/elements/recommendation-card.js +2 -2
  111. package/dist/elements/regenerate-menu.js +2 -2
  112. package/dist/elements/research-report.js +1 -1
  113. package/dist/elements/retrieval-chunks.js +1 -1
  114. package/dist/elements/revert-dock.js +5 -4
  115. package/dist/elements/reviewable-diff.js +1 -1
  116. package/dist/elements/schedule-card.js +3 -3
  117. package/dist/elements/score-breakdown.js +1 -1
  118. package/dist/elements/scroll-anchor.js +2 -2
  119. package/dist/elements/settings-panel.js +3 -2
  120. package/dist/elements/shared-conversation.js +2 -2
  121. package/dist/elements/sources.js +4 -3
  122. package/dist/elements/speaker-identity.js +1 -1
  123. package/dist/elements/spec-sheet.js +1 -1
  124. package/dist/elements/streaming-text.js +1 -1
  125. package/dist/elements/subagent-list.js +2 -2
  126. package/dist/elements/suggestions.js +1 -1
  127. package/dist/elements/surfaces.d.ts +1 -1
  128. package/dist/elements/surfaces.js +2 -1
  129. package/dist/elements/tail-status.js +1 -1
  130. package/dist/elements/terminal-block.js +1 -1
  131. package/dist/elements/thread-list.js +1 -1
  132. package/dist/elements/thread-search.js +5 -4
  133. package/dist/elements/timeline.js +1 -1
  134. package/dist/elements/todo-list.js +2 -2
  135. package/dist/elements/tool-call.js +4 -3
  136. package/dist/elements/tool-error.js +2 -2
  137. package/dist/elements/tool-group.js +1 -1
  138. package/dist/elements/tool-timeline.js +4 -3
  139. package/dist/elements/trace-waterfall.js +1 -1
  140. package/dist/elements/verdict-row.js +2 -2
  141. package/dist/elements/voice-conversation.js +3 -2
  142. package/dist/elements/web-preview.js +1 -1
  143. package/dist/elements/web-search.js +2 -2
  144. package/dist/elements/work-collapse.js +2 -1
  145. package/dist/flow/node-card.js +3 -2
  146. package/dist/flow/use-flow-theme.js +2 -1
  147. package/dist/forms/_chassis.d.ts +26 -6
  148. package/dist/forms/_chassis.js +33 -8
  149. package/dist/forms/_listbox.js +8 -5
  150. package/dist/forms/checkbox.js +8 -2
  151. package/dist/forms/env-var-input.js +3 -2
  152. package/dist/forms/field.d.ts +2 -1
  153. package/dist/forms/field.js +15 -4
  154. package/dist/forms/file-upload.js +3 -2
  155. package/dist/forms/number-field.js +2 -1
  156. package/dist/forms/password-input.js +4 -2
  157. package/dist/forms/radio-group.js +6 -2
  158. package/dist/forms/rating.js +2 -1
  159. package/dist/forms/scrub-input.js +2 -1
  160. package/dist/forms/search-input.js +2 -1
  161. package/dist/forms/select.js +5 -2
  162. package/dist/forms/slider.js +6 -2
  163. package/dist/forms/switch.js +6 -2
  164. package/dist/forms/textarea.js +2 -1
  165. package/dist/forms/toggle.js +3 -1
  166. package/dist/index.d.ts +2 -2
  167. package/dist/index.js +2 -2
  168. package/dist/instruments/_data-row.js +2 -1
  169. package/dist/instruments/app-window-frame.js +1 -1
  170. package/dist/instruments/code-block.js +8 -2
  171. package/dist/instruments/group-bar.js +1 -1
  172. package/dist/instruments/ledger.js +6 -2
  173. package/dist/instruments/log-viewer.js +4 -3
  174. package/dist/instruments/progress.js +5 -2
  175. package/dist/instruments/seam-grid.js +5 -3
  176. package/dist/instruments/stat.js +10 -3
  177. package/dist/instruments/table.js +28 -10
  178. package/dist/instruments/terminal-frame.js +4 -2
  179. package/dist/instruments/usage-chart.js +1 -1
  180. package/dist/layout/_collapse.js +6 -1
  181. package/dist/layout/bento.js +7 -4
  182. package/dist/layout/breadcrumb.js +7 -3
  183. package/dist/layout/card.js +12 -6
  184. package/dist/layout/carousel.js +3 -2
  185. package/dist/layout/collapsible.js +5 -1
  186. package/dist/layout/container.js +2 -1
  187. package/dist/layout/description-list.js +4 -1
  188. package/dist/layout/frames.js +11 -5
  189. package/dist/layout/item.js +3 -2
  190. package/dist/layout/link.d.ts +16 -0
  191. package/dist/layout/link.js +22 -3
  192. package/dist/layout/pagination.js +2 -1
  193. package/dist/layout/preview.d.ts +32 -12
  194. package/dist/layout/preview.js +149 -40
  195. package/dist/layout/resizable.js +2 -1
  196. package/dist/layout/sidebar.js +11 -3
  197. package/dist/layout/stepper.js +6 -2
  198. package/dist/lib/cn.js +29 -2
  199. package/dist/midi/piano-keyboard.js +3 -2
  200. package/dist/midi/spectrum-visualizer.js +1 -1
  201. package/dist/midi/threshold-rail.js +2 -1
  202. package/dist/midi/timeline-ruler.js +1 -1
  203. package/dist/overlays/_surface.d.ts +72 -12
  204. package/dist/overlays/_surface.js +84 -12
  205. package/dist/overlays/command-palette.js +9 -5
  206. package/dist/overlays/dialog.d.ts +5 -0
  207. package/dist/overlays/dialog.js +6 -1
  208. package/dist/overlays/info-tip.js +2 -1
  209. package/dist/overlays/menubar.js +3 -1
  210. package/dist/overlays/popover.js +2 -1
  211. package/dist/overlays/toast.js +6 -2
  212. package/dist/overlays/tooltip.js +4 -1
  213. package/dist/primitives/button.d.ts +15 -0
  214. package/dist/primitives/button.js +40 -11
  215. package/dist/primitives/chip.d.ts +19 -1
  216. package/dist/primitives/chip.js +39 -17
  217. package/dist/primitives/kbd.d.ts +6 -0
  218. package/dist/primitives/kbd.js +10 -1
  219. package/dist/primitives/skeleton.js +1 -1
  220. package/dist/system/_focus-ring-field.js +29 -0
  221. package/dist/system/_focus-ring.js +125 -0
  222. package/dist/system/_paint-glow.js +22 -3
  223. package/dist/system/_paint-rest-shade.js +32 -0
  224. package/dist/system/_paint-rim.js +22 -4
  225. package/dist/system/_paint-stroke-surface-1.js +1 -1
  226. package/dist/system/_paint-stroke-surface-2.js +14 -1
  227. package/dist/system/_paint-texture.js +5 -2
  228. package/dist/system/_style-app-bar.js +65 -0
  229. package/dist/system/_style-band.js +57 -0
  230. package/dist/system/_style-body-leading.js +21 -0
  231. package/dist/system/_style-body-size.js +30 -0
  232. package/dist/system/_style-body-weight.js +24 -0
  233. package/dist/system/_style-body.js +27 -0
  234. package/dist/system/_style-caption.js +19 -0
  235. package/dist/system/_style-card-pad.js +43 -0
  236. package/dist/system/_style-check.js +33 -0
  237. package/dist/system/_style-chip.js +103 -0
  238. package/dist/system/_style-code.js +13 -0
  239. package/dist/system/_style-collapse.js +14 -0
  240. package/dist/system/_style-control-face.js +29 -0
  241. package/dist/system/_style-control-label.js +22 -0
  242. package/dist/system/_style-control-step.js +22 -0
  243. package/dist/system/_style-control.js +76 -0
  244. package/dist/system/_style-data-face.js +28 -0
  245. package/dist/system/_style-description.js +23 -0
  246. package/dist/system/_style-eyebrow.js +43 -0
  247. package/dist/system/_style-footer-rule.js +47 -0
  248. package/dist/system/_style-gutter.js +17 -0
  249. package/dist/system/_style-help-ink.js +14 -0
  250. package/dist/system/_style-help.js +29 -0
  251. package/dist/system/_style-input-face.js +34 -0
  252. package/dist/system/_style-kbd.js +46 -0
  253. package/dist/system/_style-label-case.js +36 -0
  254. package/dist/system/_style-label-face.js +32 -0
  255. package/dist/system/_style-label-ink.js +29 -0
  256. package/dist/system/_style-label-leading.js +14 -0
  257. package/dist/system/_style-label-size.js +36 -0
  258. package/dist/system/_style-label-tracking.js +45 -0
  259. package/dist/system/_style-label-weight.js +40 -0
  260. package/dist/system/_style-lede.js +49 -0
  261. package/dist/system/_style-link.js +46 -0
  262. package/dist/system/_style-menu.js +30 -0
  263. package/dist/system/_style-nav-item.js +41 -0
  264. package/dist/system/_style-nav-voice.js +43 -0
  265. package/dist/system/_style-option.js +42 -0
  266. package/dist/system/_style-overlay-title.js +35 -0
  267. package/dist/system/_style-page-title.js +48 -0
  268. package/dist/system/_style-popover-pad.js +13 -0
  269. package/dist/system/_style-quiet-ink.js +13 -0
  270. package/dist/system/_style-row-pad.js +13 -0
  271. package/dist/system/_style-seam.js +43 -0
  272. package/dist/system/_style-section-rule.js +26 -0
  273. package/dist/system/_style-segment.js +30 -0
  274. package/dist/system/_style-segmented-control.js +86 -0
  275. package/dist/system/_style-selected.js +36 -0
  276. package/dist/system/_style-stage-marks.js +26 -0
  277. package/dist/system/_style-tab.js +71 -0
  278. package/dist/system/_style-textarea.js +21 -0
  279. package/dist/system/_style-title.js +37 -0
  280. package/dist/system/_style-tooltip.js +17 -0
  281. package/dist/system/density.d.ts +15 -5
  282. package/dist/system/density.js +188 -25
  283. package/dist/system/index.d.ts +2 -2
  284. package/dist/system/index.js +2 -2
  285. package/dist/system/overrides.d.ts +1 -0
  286. package/dist/system/overrides.js +151 -3
  287. package/dist/system/portal.d.ts +3 -2
  288. package/dist/system/portal.js +22 -10
  289. package/dist/system/prepaint.d.ts +21 -5
  290. package/dist/system/prepaint.js +3 -1
  291. package/dist/system/published.d.ts +1 -0
  292. package/dist/system/published.js +131 -0
  293. package/dist/system/theme-provider.d.ts +118 -21
  294. package/dist/system/theme-provider.js +362 -73
  295. package/dist/system/theme-registry.d.ts +2 -1
  296. package/dist/system/theme-registry.js +27 -10
  297. package/dist/system/use-density.js +4 -3
  298. package/dist/system/use-theme.d.ts +5 -2
  299. package/dist/system/use-theme.js +7 -4
  300. package/dist/system/vocabulary.js +2 -2
  301. package/dist/theming/create-theme.js +12 -6
  302. package/dist/theming/serialize.d.ts +34 -2
  303. package/dist/theming/serialize.js +86 -4
  304. package/manifest/components/accordion.json +7 -1
  305. package/manifest/components/agent-pile.json +3 -0
  306. package/manifest/components/alert-dialog.json +29 -3
  307. package/manifest/components/app-bar.json +19 -2
  308. package/manifest/components/app-shell.json +5 -0
  309. package/manifest/components/ask-box.json +3 -1
  310. package/manifest/components/autocomplete.json +38 -1
  311. package/manifest/components/band.json +7 -3
  312. package/manifest/components/bento.json +12 -1
  313. package/manifest/components/breadcrumb.json +8 -1
  314. package/manifest/components/button.json +27 -3
  315. package/manifest/components/calendar.json +7 -0
  316. package/manifest/components/card.json +22 -1
  317. package/manifest/components/carousel.json +4 -1
  318. package/manifest/components/channel-matrix.json +31 -3
  319. package/manifest/components/chart-tooltip-content.json +29 -3
  320. package/manifest/components/chat-empty-state.json +3 -1
  321. package/manifest/components/checkbox-group.json +14 -0
  322. package/manifest/components/checkbox.json +14 -0
  323. package/manifest/components/chip.json +16 -1
  324. package/manifest/components/clamp.json +3 -1
  325. package/manifest/components/code-block.json +10 -1
  326. package/manifest/components/collapsible.json +13 -2
  327. package/manifest/components/color-area.json +4 -2
  328. package/manifest/components/color-field.json +10 -0
  329. package/manifest/components/color-picker.json +10 -0
  330. package/manifest/components/color-slider.json +3 -1
  331. package/manifest/components/colors-section.json +9 -1
  332. package/manifest/components/combobox.json +38 -1
  333. package/manifest/components/command-palette.json +28 -3
  334. package/manifest/components/composer-actions.json +3 -0
  335. package/manifest/components/composer-attach-button.json +3 -0
  336. package/manifest/components/composer-attachment-chip.json +3 -0
  337. package/manifest/components/composer-attachments.json +3 -0
  338. package/manifest/components/composer-bar.json +3 -0
  339. package/manifest/components/composer-command-item.json +3 -0
  340. package/manifest/components/composer-context.json +3 -0
  341. package/manifest/components/composer-input.json +3 -0
  342. package/manifest/components/composer-menu-item.json +3 -0
  343. package/manifest/components/composer-menu.json +3 -0
  344. package/manifest/components/composer-model-item.json +3 -0
  345. package/manifest/components/composer-model-trigger.json +3 -0
  346. package/manifest/components/composer-person-item.json +3 -0
  347. package/manifest/components/composer-send.json +3 -0
  348. package/manifest/components/composer-toolbar.json +3 -0
  349. package/manifest/components/composer-voice-button.json +3 -0
  350. package/manifest/components/composer-voice.json +3 -0
  351. package/manifest/components/composer.json +10 -0
  352. package/manifest/components/confidence-marker.json +3 -1
  353. package/manifest/components/container.json +2 -1
  354. package/manifest/components/context-menu.json +29 -3
  355. package/manifest/components/conversation-search.json +3 -1
  356. package/manifest/components/cue-mark.json +2 -2
  357. package/manifest/components/cue-portal-frame.json +1 -1
  358. package/manifest/components/data-row.json +3 -1
  359. package/manifest/components/data-tree.json +3 -1
  360. package/manifest/components/date-field.json +10 -0
  361. package/manifest/components/date-picker.json +10 -0
  362. package/manifest/components/date-range-picker.json +10 -0
  363. package/manifest/components/delegation-card.json +3 -1
  364. package/manifest/components/density.json +15 -7
  365. package/manifest/components/description-list.json +6 -1
  366. package/manifest/components/dialog.json +30 -3
  367. package/manifest/components/disclosure.json +13 -2
  368. package/manifest/components/dmx-bar.json +28 -3
  369. package/manifest/components/dmx-strip.json +28 -3
  370. package/manifest/components/drawer.json +29 -3
  371. package/manifest/components/dropdown-menu.json +29 -3
  372. package/manifest/components/edit-message.json +3 -1
  373. package/manifest/components/elements-command-palette.json +3 -1
  374. package/manifest/components/elements-composer.json +3 -0
  375. package/manifest/components/empty-state-composer.json +3 -1
  376. package/manifest/components/empty-state-greeting.json +3 -1
  377. package/manifest/components/empty-state-suggestion.json +3 -1
  378. package/manifest/components/empty-state-suggestions.json +3 -1
  379. package/manifest/components/env-var-input.json +10 -1
  380. package/manifest/components/export-dialog.json +6 -1
  381. package/manifest/components/eyebrow.json +13 -2
  382. package/manifest/components/feedback-dialog.json +3 -0
  383. package/manifest/components/field-description.json +14 -0
  384. package/manifest/components/field-error.json +14 -0
  385. package/manifest/components/field-label.json +15 -1
  386. package/manifest/components/field.json +14 -0
  387. package/manifest/components/file-upload.json +3 -0
  388. package/manifest/components/footer.json +14 -1
  389. package/manifest/components/frames.json +14 -1
  390. package/manifest/components/hover-card.json +29 -3
  391. package/manifest/components/info-tip.json +3 -0
  392. package/manifest/components/input-group.json +10 -0
  393. package/manifest/components/input.json +10 -0
  394. package/manifest/components/item.json +3 -1
  395. package/manifest/components/kbd.json +10 -1
  396. package/manifest/components/ledger.json +9 -2
  397. package/manifest/components/link.json +10 -0
  398. package/manifest/components/log-viewer.json +3 -0
  399. package/manifest/components/map-answer.json +3 -1
  400. package/manifest/components/markdown-text.json +3 -0
  401. package/manifest/components/menubar.json +32 -4
  402. package/manifest/components/message-list.json +3 -0
  403. package/manifest/components/message.json +6 -1
  404. package/manifest/components/mobile-composer.json +3 -1
  405. package/manifest/components/multi-select.json +38 -1
  406. package/manifest/components/musical-time-input.json +10 -0
  407. package/manifest/components/navigation-menu.json +32 -3
  408. package/manifest/components/node-card.json +3 -0
  409. package/manifest/components/number-field.json +10 -1
  410. package/manifest/components/otp-field.json +9 -0
  411. package/manifest/components/page-shell.json +14 -0
  412. package/manifest/components/pagination.json +3 -0
  413. package/manifest/components/panel-header.json +10 -0
  414. package/manifest/components/panel.json +11 -1
  415. package/manifest/components/password-input.json +10 -1
  416. package/manifest/components/permission-scopes.json +3 -1
  417. package/manifest/components/piano-keyboard.json +3 -0
  418. package/manifest/components/popover.json +30 -3
  419. package/manifest/components/preset-section.json +9 -1
  420. package/manifest/components/preview.json +24 -10
  421. package/manifest/components/progress.json +6 -1
  422. package/manifest/components/prompt-library.json +3 -1
  423. package/manifest/components/queue-dock.json +3 -1
  424. package/manifest/components/radio-group.json +8 -0
  425. package/manifest/components/radio.json +8 -0
  426. package/manifest/components/rating.json +4 -1
  427. package/manifest/components/reasoning-panel.json +3 -1
  428. package/manifest/components/recommendation-card.json +1 -1
  429. package/manifest/components/resizable.json +4 -1
  430. package/manifest/components/revert-dock.json +3 -1
  431. package/manifest/components/row.json +5 -1
  432. package/manifest/components/scroll-area.json +4 -2
  433. package/manifest/components/scrollable-tabs-list.json +18 -0
  434. package/manifest/components/scrub-input.json +10 -1
  435. package/manifest/components/seam-cell.json +1 -0
  436. package/manifest/components/seam-grid.json +1 -0
  437. package/manifest/components/seam-list.json +5 -1
  438. package/manifest/components/search-input.json +10 -1
  439. package/manifest/components/section-header.json +15 -2
  440. package/manifest/components/segmented-control.json +16 -0
  441. package/manifest/components/select.json +17 -0
  442. package/manifest/components/settings-panel.json +3 -0
  443. package/manifest/components/shape-section.json +9 -1
  444. package/manifest/components/sheet.json +29 -3
  445. package/manifest/components/shimmer-label.json +3 -0
  446. package/manifest/components/sidebar.json +19 -2
  447. package/manifest/components/slider.json +8 -0
  448. package/manifest/components/sources.json +3 -1
  449. package/manifest/components/stat.json +9 -0
  450. package/manifest/components/status-bar.json +4 -0
  451. package/manifest/components/stepper.json +8 -0
  452. package/manifest/components/swap-label.json +3 -0
  453. package/manifest/components/switch.json +8 -0
  454. package/manifest/components/table-scroll-region.json +20 -2
  455. package/manifest/components/table.json +20 -2
  456. package/manifest/components/tabs.json +19 -1
  457. package/manifest/components/tags-input.json +38 -1
  458. package/manifest/components/terminal-frame.json +3 -0
  459. package/manifest/components/textarea.json +12 -0
  460. package/manifest/components/theme-configurator.json +29 -3
  461. package/manifest/components/theme-provider.json +31 -19
  462. package/manifest/components/thread-search.json +3 -1
  463. package/manifest/components/threshold-rail.json +3 -0
  464. package/manifest/components/time-field.json +10 -0
  465. package/manifest/components/toast.json +30 -2
  466. package/manifest/components/toggle.json +4 -0
  467. package/manifest/components/token-editor.json +6 -1
  468. package/manifest/components/tool-call-card.json +9 -2
  469. package/manifest/components/tool-call.json +3 -1
  470. package/manifest/components/tool-timeline.json +3 -1
  471. package/manifest/components/toolbar.json +3 -1
  472. package/manifest/components/tooltip.json +31 -3
  473. package/manifest/components/tree-visibility-toggle.json +3 -0
  474. package/manifest/components/tree.json +3 -0
  475. package/manifest/components/universe-grid.json +3 -0
  476. package/manifest/components/voice-conversation.json +3 -0
  477. package/manifest/components/work-collapse.json +3 -1
  478. package/manifest/manifest.json +204 -184
  479. package/manifest/tokens.json +241 -4
  480. package/package.json +5 -5
@@ -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 };
@@ -0,0 +1,43 @@
1
+ //#region src/system/_style-eyebrow.ts
2
+ /**
3
+ * The eyebrow's voice: its face, size, ink, weight and whether it prints the
4
+ * `//` glyph — the console's by default, the style set's choice inside one.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2). `Eyebrow` is the one caption the
7
+ * four measured Looks each draw differently from the rest of their labels:
8
+ * zine's is a 1–1.125rem kicker, kiln's a mono 0.8125rem at weight 500 in a
9
+ * softened heading ink, tender's is in the body ink, and none of the four
10
+ * prints the slashes. So it has names of its own rather than riding the label
11
+ * names — but it falls back THROUGH them, so a set that restyles its labels
12
+ * and says nothing about its eyebrow gets an eyebrow that matches its labels.
13
+ *
14
+ * Every name is optional (spec §3.0, F-3), emitted as `initial` on the shared
15
+ * `[data-style]` reset, so under no set, `console` and every set that declines
16
+ * them each reader resolves to exactly what the class it replaced resolved to:
17
+ *
18
+ * - face: `LABEL_FACE`'s own chain, `var(--cue-style-label-face, var(--cue-font-mono))`;
19
+ * - size: `var(--cue-style-label-size, var(--cue-text-label))`, the label size's chain;
20
+ * - ink: `var(--cue-accent)`, what `text-accent` compiled to;
21
+ * - weight: `inherit` — the eyebrow declared none (see `_style-label-weight.ts`
22
+ * on why a literal `400` would not be a no-op, and on the `font-[number:…]`
23
+ * spelling);
24
+ * - glyph: `inline`, the slashes' own display. A flex item is blockified either
25
+ * way, so under no set it computes what it computed before; `none` removes it.
26
+ *
27
+ * **One module for the five**, because `Eyebrow` is their only reader:
28
+ * `@repo/docgen` attributes a token by the file its class string lives in, and
29
+ * every importer of this file reads every name in it.
30
+ *
31
+ * @internal Not part of the public API.
32
+ */
33
+ const EYEBROW_FACE = "font-[family-name:var(--cue-style-eyebrow-face,var(--cue-style-label-face,var(--cue-font-mono)))]";
34
+ /** @see EYEBROW_FACE — the eyebrow's size, falling back through the label size. */
35
+ const EYEBROW_SIZE = "text-[length:var(--cue-style-eyebrow-size,var(--cue-style-label-size,var(--cue-text-label)))]";
36
+ /** @see EYEBROW_FACE — the eyebrow's ink; the accent by default. */
37
+ const EYEBROW_INK = "text-[color:var(--cue-style-eyebrow-ink,var(--cue-accent))]";
38
+ /** @see EYEBROW_FACE — the eyebrow's weight; inherited by default. */
39
+ const EYEBROW_WEIGHT = "font-[number:var(--cue-style-eyebrow-weight,inherit)]";
40
+ /** @see EYEBROW_FACE — the `//` glyph's display: `inline` by default, `none` to drop it. */
41
+ const EYEBROW_GLYPH = "[display:var(--cue-style-eyebrow-glyph,inline)]";
42
+ //#endregion
43
+ export { EYEBROW_FACE, EYEBROW_GLYPH, EYEBROW_INK, EYEBROW_SIZE, EYEBROW_WEIGHT };
@@ -0,0 +1,47 @@
1
+ //#region src/system/_style-footer-rule.ts
2
+ /**
3
+ * The width of the rule across the top of `Footer`, and the line style of
4
+ * both of its rules.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.11 (plan R4). `Footer` spends `Band`'s
7
+ * recipe, whose rule is `--cue-band-rule` wide, and a Look whose bands carry
8
+ * no rule but whose footer does (kiln) needs the footer's width on its own.
9
+ * `--cue-style-footer-rule` is that width, and this reads it.
10
+ *
11
+ * **The fallback is the class it replaces**: `bandClasses("rule")`'s
12
+ * `border-t-(length:--cue-band-rule)`, which compiles to
13
+ * `var(--cue-band-rule)`. Composed after it, so `tailwind-merge` drops the
14
+ * recipe's own width and keeps this one; `Band` is untouched.
15
+ *
16
+ * **The line style fills Tailwind's own slot** (`style-footer-rule-style`,
17
+ * round 5 of plan V.2: `tender` dashes both rules, T120 and T121). Both of
18
+ * the footer's rules are written by width utilities — the band rule by
19
+ * `border-t-[length:…]` above, the fine print's by `border-t` — and each
20
+ * writes `border-top-style: var(--tw-border-style)`, a slot Tailwind
21
+ * registers as `@property` with `inherits: false` and `initial-value: solid`,
22
+ * which is the solid rule the footer always drew. So `Footer` spends
23
+ * {@link FOOTER_RULE_STYLE} on both elements, as `_style-app-bar.ts` fills the
24
+ * same slot for the bar's rule: one declaration each, rather than a raw
25
+ * `[border-top-style:…]` that Tailwind would emit after `border-dotted` and
26
+ * that would beat a caller's own style class. Through the slot, a caller's
27
+ * `className="border-dotted"` still wins on the landmark, because a style
28
+ * utility writes `border-style` itself and is emitted after the width
29
+ * utilities. The slot does not inherit, so filling it on the landmark reaches
30
+ * no descendant's border, which is why the fine-print row fills it too.
31
+ *
32
+ * Its own name rather than `style-chrome-rule-style`, the bar's: the sources
33
+ * style the two ends of a page apart. Tender's dashes its footer's rules and
34
+ * draws the rule under its header solid; zine's dashes its header rule.
35
+ *
36
+ * **Its own module, and not in `_band.ts`**, whose docblock says why: docgen
37
+ * publishes every `--cue-*` in that file as a token both `Band` and `Footer`
38
+ * paint, and `Band` reads neither name here. A band's rule keeps its solid
39
+ * under every set.
40
+ *
41
+ * @internal Not part of the public API.
42
+ */
43
+ const FOOTER_RULE = "border-t-[length:var(--cue-style-footer-rule,var(--cue-band-rule))]";
44
+ /** Both footer rules' line style, filling the slot their `border-t` utilities read. */
45
+ const FOOTER_RULE_STYLE = "[--tw-border-style:var(--cue-style-footer-rule-style,solid)]";
46
+ //#endregion
47
+ export { FOOTER_RULE, FOOTER_RULE_STYLE };
@@ -0,0 +1,17 @@
1
+ //#region src/system/_style-gutter.ts
2
+ /**
3
+ * A padded `Container`'s gutter (plan V.2, T119): `style-gutter`, falling back
4
+ * to the `space-6` it drew. Tender's page column is 16px in from the viewport
5
+ * on a phone and its band column is 1232px wide at 1440, where `space-6` is
6
+ * 24px. A proportion of the rung (RUNG(`space-6`)), so it follows density.
7
+ *
8
+ * Spec §3.11 withdrew a `style-gutter` in round 1 because no row needed it;
9
+ * T38 and T119 are the rows.
10
+ *
11
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const GUTTER = "px-[var(--cue-style-gutter,var(--cue-space-6))]";
16
+ //#endregion
17
+ export { GUTTER };