@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,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 };
@@ -0,0 +1,14 @@
1
+ //#region src/system/_style-help-ink.ts
2
+ /**
3
+ * The help ink, for a site that reads it without the help size: a table's
4
+ * caption and the breadcrumb's separator (plan V.2, P122, P128) —
5
+ * `style-help-ink`, falling back to the `fg-subtle` both drew. The same class
6
+ * `_style-help.ts`'s `HELP_INK` spells for a field's description, restated in
7
+ * a module of its own so docgen does not publish `style-help-size` as a
8
+ * token of a table or a breadcrumb.
9
+ *
10
+ * @internal Not part of the public API.
11
+ */
12
+ const HELP_INK = "text-[color:var(--cue-style-help-ink,var(--cue-fg-subtle))]";
13
+ //#endregion
14
+ export { HELP_INK };
@@ -0,0 +1,29 @@
1
+ //#region src/system/_style-help.ts
2
+ /**
3
+ * The size and ink of a field's helper text: the micro rung in `fg-subtle`,
4
+ * until a style set says otherwise.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.5, plan R1. `FieldDescription` and
7
+ * `FieldError` each spelt `font-mono text-(length:--cue-text-micro)`, the
8
+ * description in `fg-subtle` and the error in `danger`. Tender and Porcelain set
9
+ * helper text a rung larger and a step darker (T55, P48), in the Look's label
10
+ * face — so both lines now wear `LABEL_FACE` and read the size here, and the
11
+ * description reads the ink. The error keeps `danger`: a Look's helper ink is
12
+ * not a reason to quieten a validation message.
13
+ *
14
+ * | property | reads | fallback |
15
+ * |-----------|-------------------|---------------------------|
16
+ * | font-size | `style-help-size` | `var(--cue-text-micro)` |
17
+ * | color | `style-help-ink` | `var(--cue-fg-subtle)` |
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 each reader computes the
21
+ * old class's value at the element.
22
+ *
23
+ * @internal Not part of the public API.
24
+ */
25
+ const HELP_SIZE = "text-[length:var(--cue-style-help-size,var(--cue-text-micro))]";
26
+ /** @see HELP_SIZE — the description's ink; `FieldError` keeps `text-danger`. */
27
+ const HELP_INK = "text-[color:var(--cue-style-help-ink,var(--cue-fg-subtle))]";
28
+ //#endregion
29
+ export { HELP_INK, HELP_SIZE };
@@ -0,0 +1,34 @@
1
+ //#region src/system/_style-input-face.ts
2
+ /**
3
+ * The face a typing surface wears: mono by default, the style set's choice
4
+ * inside one.
5
+ *
6
+ * Spec 2026-09-26 (the label-voice brief). `forms/_chassis.ts`'s
7
+ * `controlSurface` and `bareControlClasses` — the shared recessed-control
8
+ * chassis a text field, a textarea, a number field, a combobox, a select
9
+ * trigger and everything else a person types into all ride — spoke
10
+ * `font-mono` before this existed, the same fact `_style-control-face.ts`
11
+ * records for `Button`. What was missing was a way for a sans-voiced Look to
12
+ * change the ONE surface that is neither a control nor a caption: text a
13
+ * person types, which a face chosen per call site would not follow. So the
14
+ * style set says it, through `--cue-style-input-face`, and this reads it.
15
+ *
16
+ * **The fallback is the old class, spelt out**, for the identical reason
17
+ * `_style-control-face.ts` gives: `font-mono` compiles to
18
+ * `font-family: var(--cue-font-mono)`, and `--cue-style-input-face` is
19
+ * declared on no `:root`, so under no set this resolves to exactly what
20
+ * `font-mono` resolved to, at the control itself. A call site that
21
+ * deliberately keeps a typed value in mono regardless of the set — a hex
22
+ * colour code, a DMX value, anything code-shaped rather than prose — restates
23
+ * `font-mono` directly instead of importing this, exactly as `color-picker.tsx`
24
+ * already did for its hex field before this axis existed.
25
+ *
26
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
27
+ * reader per file, so `@repo/docgen` attributes exactly this token to exactly
28
+ * the components that import it.
29
+ *
30
+ * @internal Not part of the public API.
31
+ */
32
+ const INPUT_FACE = "font-[family-name:var(--cue-style-input-face,var(--cue-font-mono))]";
33
+ //#endregion
34
+ export { INPUT_FACE };
@@ -0,0 +1,46 @@
1
+ //#region src/system/_style-kbd.ts
2
+ /**
3
+ * A key cap's rim and size: the box edge and the micro rung by default, the
4
+ * style set's choice inside one.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2), F-16. `Kbd` spent `border-border`
7
+ * and `text-(length:--cue-text-micro)`. Porcelain's `MenuShortcut` key caps
8
+ * have no rim at all and sit at 0.75rem (coss.md, P55), which a set says as
9
+ * `--cue-style-kbd-edge: transparent` and `--cue-style-chip-size: 0.75rem` —
10
+ * the chip's size name, because `Kbd` is sized off `h-chip` to sit on a chip's
11
+ * row, and a Look that retunes one retunes both. The border's width stays, so
12
+ * a key cap keeps its box and its baseline in every Look.
13
+ *
14
+ * Both names are optional (spec §3.0, F-3): under no set, `console` and every
15
+ * set that declines them each reader resolves to exactly what the class it
16
+ * replaced resolved to, at the key cap itself.
17
+ *
18
+ * **Put {@link KBD_SIZE} before `leading-none` in the same `cn()`**, as
19
+ * `_style-label-size.ts` explains: `tailwind-merge` drops a `leading-*` that a
20
+ * later font-size follows.
21
+ *
22
+ * **Its own module**, apart from `_style-chip.ts` though it reads one of the
23
+ * chip's names, because `@repo/docgen` credits every importer with every token
24
+ * in a file, and `Kbd` reads none of the chip's other names.
25
+ *
26
+ * @internal Not part of the public API.
27
+ */
28
+ const KBD_EDGE = "border-[color:var(--cue-style-kbd-edge,var(--cue-border))]";
29
+ /** @see KBD_EDGE — the key cap's size: the chip's size name, the micro rung by default. */
30
+ const KBD_SIZE = "text-[length:var(--cue-style-kbd-size,var(--cue-style-chip-size,var(--cue-text-micro)))]";
31
+ /**
32
+ * The key cap's own box (plan V.2, P55, P111): its height and minimum width
33
+ * (`style-kbd-height`, the `chip-h` it shared with the chip), its inline
34
+ * padding (`style-kbd-pad`, `space-2`) and its corner (`style-kbd-radius`, the
35
+ * `rounded-control` corner). Porcelain's key caps are 20px, 4px in and
36
+ * rounded at 0.4 of its control corner, while its chips are a phone-to-desktop
37
+ * clamp — so the cap stopped riding the chip's `h-chip`.
38
+ *
39
+ * The size above reads `style-kbd-size` first for the same reason (P14):
40
+ * Porcelain's chip text ramps from 14px on a phone to 12px on a desktop,
41
+ * where its key caps stay 12px. It falls back through the chip's size, so a
42
+ * Look that names only the chip's keeps its key caps beside it.
43
+ */
44
+ const KBD_BOX = "h-[var(--cue-style-kbd-height,var(--cue-chip-h))] min-w-[var(--cue-style-kbd-height,var(--cue-chip-h))] px-[var(--cue-style-kbd-pad,var(--cue-space-2))] rounded-[var(--cue-style-kbd-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
45
+ //#endregion
46
+ export { KBD_BOX, KBD_EDGE, KBD_SIZE };
@@ -0,0 +1,36 @@
1
+ //#region src/system/_style-label-case.ts
2
+ /**
3
+ * The `text-transform` a chassis caption wears: `uppercase` by default, the
4
+ * style set's choice inside one.
5
+ *
6
+ * Spec 2026-09-26 (the label-voice brief). Every mono-uppercase chassis
7
+ * caption spent a literal `uppercase` utility before this existed, and a face
8
+ * changed to sans through {@link LABEL_FACE} alone still shouts — a sentence-
9
+ * case label rendered in a sans face and still transformed to caps is a sans
10
+ * label wearing the console's voice, not the source site's. So the two travel
11
+ * together at every call site.
12
+ *
13
+ * **The fallback is the old class, spelt out.** `uppercase` compiles to
14
+ * `text-transform: uppercase`, and `--cue-style-label-case` is declared on no
15
+ * `:root` — deliberately, for the identical reason `_style-control-face.ts`
16
+ * gives for its own name: a `:root` declaration would freeze the page's
17
+ * choice into every nested font or theme island. So under no set this
18
+ * resolves to exactly what `uppercase` resolved to, at the label itself; and
19
+ * every shipped set but a sans-voiced one restates `uppercase`, which
20
+ * `@cueplusplus/tokens` refuses to build otherwise for `console`.
21
+ *
22
+ * Written as a bare arbitrary property (`[text-transform:…]`) rather than a
23
+ * named Tailwind utility because none of Tailwind's `uppercase` / `lowercase`
24
+ * / `capitalize` / `normal-case` utilities take a dynamic value — the same
25
+ * reason `_paint-*` readers reach for `[mask-image:…]` and `[background-*:…]`
26
+ * instead of a utility that does not exist for a `var()`-driven keyword.
27
+ *
28
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
29
+ * reader per file, so `@repo/docgen` attributes exactly this token to exactly
30
+ * the components that import it.
31
+ *
32
+ * @internal Not part of the public API.
33
+ */
34
+ const LABEL_CASE = "[text-transform:var(--cue-style-label-case,uppercase)]";
35
+ //#endregion
36
+ export { LABEL_CASE };
@@ -0,0 +1,32 @@
1
+ //#region src/system/_style-label-face.ts
2
+ /**
3
+ * The face a chassis caption wears: mono by default, the style set's choice inside one.
4
+ *
5
+ * Spec 2026-09-26 (the label-voice brief). `FieldLabel`, `Eyebrow`, a table head,
6
+ * a `Stat` label, a group or section heading and a dozen more chassis sites all
7
+ * spoke `font-mono … uppercase` before this existed — the same fact
8
+ * `_style-control-face.ts` records for `Button` and the `Tabs` trigger, one
9
+ * layer over. What was missing was a way for a sans-voiced Look (stripe's,
10
+ * replit's, coss's) to change a LABEL's face rather than only a control's, and
11
+ * a face chosen per call site would not follow the Look. So the style set says
12
+ * it, through `--cue-style-label-face`, and this reads it.
13
+ *
14
+ * Always paired with {@link LABEL_CASE}: a sans face still shouting in caps is
15
+ * still the console's voice, not the source site's, so the two travel
16
+ * together at every call site.
17
+ *
18
+ * **The fallback is the old class, spelt out**, for the identical reason
19
+ * `_style-control-face.ts` gives: `font-mono` compiles to
20
+ * `font-family: var(--cue-font-mono)`, and `--cue-style-label-face` is
21
+ * declared on no `:root`, so under no set this resolves to exactly what
22
+ * `font-mono` resolved to, at the label itself.
23
+ *
24
+ * **Its own module**, because `@repo/docgen` attributes a token to a component
25
+ * by the file its class string lives in, following only `_`-prefixed imports.
26
+ * One reader per file — see `_style-control-face.ts`'s note.
27
+ *
28
+ * @internal Not part of the public API.
29
+ */
30
+ const LABEL_FACE = "font-[family-name:var(--cue-style-label-face,var(--cue-font-mono))]";
31
+ //#endregion
32
+ export { LABEL_FACE };
@@ -0,0 +1,29 @@
1
+ //#region src/system/_style-label-ink.ts
2
+ /**
3
+ * A chassis caption's ink: its own historic role by default, one shared ink
4
+ * inside a style set that declares `--cue-style-label-ink`.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2). Two inks, both already on the
7
+ * page: `FieldLabel`, a `SectionHeader` label and the `Checkbox` and `Switch`
8
+ * labels spent `text-fg-muted`; a table head and a group row, a
9
+ * `Sidebar.Section` label, a `Stat` label and a menu group label spent the
10
+ * quieter `text-fg-subtle`. Tender and porcelain draw every caption in the
11
+ * body ink (`var(--cue-fg)`), kiln in the muted one — one value a set says
12
+ * once, which is why the name exists.
13
+ *
14
+ * **Optional, so each reader keeps its own fallback** (spec §3.0, F-3): under
15
+ * no set, `console` and every set that declines the name this resolves to
16
+ * exactly what `text-fg-muted` or `text-fg-subtle` resolved to, at the label
17
+ * itself — so a nested theme island still repaints it.
18
+ *
19
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
20
+ * token per file, so `@repo/docgen` credits exactly the components that read
21
+ * the label ink with it.
22
+ *
23
+ * @internal Not part of the public API.
24
+ */
25
+ const LABEL_INK = "text-[color:var(--cue-style-label-ink,var(--cue-fg-muted))]";
26
+ /** @see LABEL_INK — for a reader that spent `text-fg-subtle` before this existed. */
27
+ const LABEL_INK_SUBTLE = "text-[color:var(--cue-style-label-ink,var(--cue-fg-subtle))]";
28
+ //#endregion
29
+ export { LABEL_INK, LABEL_INK_SUBTLE };
@@ -0,0 +1,14 @@
1
+ //#region src/system/_style-label-leading.ts
2
+ /**
3
+ * A field label's leading (plan V.2, P10): `style-label-leading`, falling back
4
+ * to the `leading-none` (`1`) the label drew. Porcelain's field label is 16px
5
+ * on 14px type, a 1.143 leading.
6
+ *
7
+ * **Optional** (spec §3.0). Its own module because docgen attributes a token
8
+ * to a component by the file its class string lives in.
9
+ *
10
+ * @internal Not part of the public API.
11
+ */
12
+ const LABEL_LEADING = "leading-[var(--cue-style-label-leading,1)]";
13
+ //#endregion
14
+ export { LABEL_LEADING };
@@ -0,0 +1,36 @@
1
+ //#region src/system/_style-label-size.ts
2
+ /**
3
+ * A chassis caption's size: its own historic rung by default, one shared size
4
+ * inside a style set that declares `--cue-style-label-size`.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2). `FieldLabel`, a `SectionHeader`
7
+ * label, a table head and a group row, a `Sidebar.Section` label and a menu
8
+ * group label all spent `text-(length:--cue-text-label)`; the `Stat` label
9
+ * alone spent `text-(length:--cue-text-micro)`. The four measured Looks set
10
+ * their captions at one size (tender and porcelain 0.875rem, zine and kiln
11
+ * 0.75rem), and a size chosen per call site would not follow the Look.
12
+ *
13
+ * **Optional, so each reader keeps its own fallback** (spec §3.0, F-3): the
14
+ * name is emitted as `initial` on the shared `[data-style]` reset, so under no
15
+ * set, `console` and every set that declines it this resolves to exactly what
16
+ * the class it replaced resolved to, at the label itself — which is also what
17
+ * keeps a `<Density>` island's rung reaching it.
18
+ *
19
+ * **Put it before any `leading-*` class in the same `cn()`.** `tailwind-merge`
20
+ * reads a font-size utility as overriding an earlier line-height one (Tailwind's
21
+ * named sizes carry a line-height), so `cn("leading-none", LABEL_SIZE)` drops
22
+ * the `leading-none`. The class this replaced had the same rule; the order at
23
+ * each call site is the order it already had.
24
+ *
25
+ * **Its own module**, for the reason `_style-control-face.ts` gives:
26
+ * `@repo/docgen` attributes a token to a component by the file its class
27
+ * string lives in, so a component that reads the label ink but not the label
28
+ * size (`Checkbox`, `Switch`) is not credited with this one.
29
+ *
30
+ * @internal Not part of the public API.
31
+ */
32
+ const LABEL_SIZE = "text-[length:var(--cue-style-label-size,var(--cue-text-label))]";
33
+ /** @see LABEL_SIZE — for the `Stat` label, which read the micro rung before this existed. */
34
+ const LABEL_SIZE_MICRO = "text-[length:var(--cue-style-label-size,var(--cue-text-micro))]";
35
+ //#endregion
36
+ export { LABEL_SIZE, LABEL_SIZE_MICRO };
@@ -0,0 +1,45 @@
1
+ //#region src/system/_style-label-tracking.ts
2
+ /**
3
+ * A label's tracking: its own historic rung of the caps ladder by default, one
4
+ * shared tracking inside a style set that declares it.
5
+ *
6
+ * Spec 2026-09-26 (the label-voice brief). Unlike {@link LABEL_FACE} and the
7
+ * case reader beside it, this name is **optional**
8
+ * (`@cueplusplus/tokens`' `STYLE_SET_OPTIONAL`), because its readers do not
9
+ * share one fallback. `FieldLabel`, `Slider`, a calendar weekday and the
10
+ * stepper trail all read `tracking-caps-tight`; `Eyebrow` alone reads
11
+ * `tracking-caps-loose`; a table head, a `Stat` label, a group heading and
12
+ * most of the rest read plain `tracking-caps` — three different values, each
13
+ * already what that component renders today. A set that declines the name (as
14
+ * every mono set does) leaves every reader at its own historic tier, which is
15
+ * the no-op this axis promises; a set that declares one real value (`normal`,
16
+ * for `tender`, `kiln` and `porcelain`) overrides every reader to that SAME
17
+ * tracking at once, regardless of which tier it used to read — which is the
18
+ * point under a sans, sentence-case voice: there is no caps rung left to
19
+ * space out.
20
+ *
21
+ * Three exports, one token: each pairs `--cue-style-label-tracking` with the
22
+ * one ladder rung that call site read before this existed, so a component
23
+ * that switches to one of these keeps rendering its own historic value under
24
+ * every set that declines the name — which today is every set but the three
25
+ * sans ones.
26
+ *
27
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
28
+ * reader per file, so `@repo/docgen` attributes exactly this token to exactly
29
+ * the components that import it, regardless of which of the three exports a
30
+ * given file reaches for.
31
+ *
32
+ * @internal Not part of the public API.
33
+ */
34
+ const LABEL_TRACKING = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps))]";
35
+ /** @see LABEL_TRACKING — for a reader that read `tracking-caps-tight` before this existed. */
36
+ const LABEL_TRACKING_TIGHT = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps-tight))]";
37
+ /** @see LABEL_TRACKING — for a reader that read `tracking-caps-loose` before this existed. */
38
+ const LABEL_TRACKING_LOOSE = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps-loose))]";
39
+ /**
40
+ * {@link LABEL_TRACKING} for a caption that declared no tracking of its own
41
+ * (plan V.2, K131): the label tracking, falling back to `inherit`.
42
+ */
43
+ const LABEL_TRACKING_INHERIT = "tracking-[var(--cue-style-label-tracking,inherit)]";
44
+ //#endregion
45
+ export { LABEL_TRACKING, LABEL_TRACKING_INHERIT, LABEL_TRACKING_LOOSE, LABEL_TRACKING_TIGHT };
@@ -0,0 +1,40 @@
1
+ //#region src/system/_style-label-weight.ts
2
+ /**
3
+ * A chassis caption's weight: what it rendered before by default, one shared
4
+ * weight inside a style set that declares `--cue-style-label-weight`.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.6 (R2). Porcelain's captions, table heads,
7
+ * group labels, tags and key caps are `font-medium` (coss.md §4); every other
8
+ * Look's are regular. The label readers, `Chip` and `Kbd` read it.
9
+ *
10
+ * **Two fallbacks, because the sites declared two different things.** The
11
+ * table head and the table group row are `<th>` cells, whose user-agent weight
12
+ * is bold, and they spent `font-normal` to undo it: their reader falls back to
13
+ * `400`, {@link LABEL_WEIGHT_NORMAL}. Every other reader declared no weight at
14
+ * all and inherited its parent's, so its fallback is `inherit`,
15
+ * {@link LABEL_WEIGHT} — the spec's `400` is what each of them computes on a
16
+ * page, but a literal `400` would override the weight a `Kbd` or a `Chip`
17
+ * inherits from a heavier parent today, which a fallback may not do (the R
18
+ * lanes' rule: the fallback is the site's current value).
19
+ *
20
+ * **Written `font-[number:…]`, not as a bare `[font-weight:…]` property.** The
21
+ * `number:` hint is what makes Tailwind emit `font-weight` (and not a family)
22
+ * for a `var()`, and it is also what `tailwind-merge` reads as a font weight: a
23
+ * caller's `className="font-medium"` replaces this class, as it replaced
24
+ * `font-normal`. A bare `[font-weight:…]` would not merge, and Tailwind sorts
25
+ * it AFTER every named `font-*` utility (measured: a named weight declares
26
+ * `--tw-font-weight` too, and a rule with more declarations sorts first), so
27
+ * the caller's weight would silently lose — against every `className` prop's
28
+ * "merged over the defaults" contract.
29
+ *
30
+ * **Its own module**, for the reason `_style-control-face.ts` gives: one
31
+ * token per file, so `@repo/docgen` credits `Chip` and `Kbd` with the label
32
+ * weight and not with the label size or ink they do not read.
33
+ *
34
+ * @internal Not part of the public API.
35
+ */
36
+ const LABEL_WEIGHT = "font-[number:var(--cue-style-label-weight,inherit)]";
37
+ /** @see LABEL_WEIGHT — for a `<th>` reader that spent `font-normal` before this existed. */
38
+ const LABEL_WEIGHT_NORMAL = "font-[number:var(--cue-style-label-weight,400)]";
39
+ //#endregion
40
+ export { LABEL_WEIGHT, LABEL_WEIGHT_NORMAL };
@@ -0,0 +1,49 @@
1
+ //#region src/system/_style-lede.ts
2
+ /**
3
+ * The `PageShell` subtitle's size and ink: the lede under a page title.
4
+ *
5
+ * Spec 2026-09-26-looks-fidelity §3.5 and §10.4, plan R1 and its Graphite
6
+ * addition. The subtitle spelt `text-(length:--cue-text-ui) … text-fg-muted`.
7
+ * It is a lede — the one sentence under a title, which three Looks set a rung
8
+ * above their body copy (T2, Z43, P1) — so it reads `style-lede-size`; and a
9
+ * lede's ink is `style-lede-ink`, which falls back to the prose ink, which falls
10
+ * back to the old class. Two names for one colour because Graphite's docs body
11
+ * reads in `fg` while its ledes stay muted (G5 against G74), and Kiln's ledes
12
+ * read in `fg` with its prose (K49): so a set that names only the prose ink
13
+ * moves the ledes with it, and one that also names the lede ink parts them.
14
+ *
15
+ * | property | reads | fallback |
16
+ * |-----------|--------------------------------------------|------------------------|
17
+ * | font-size | `style-lede-size` | `var(--cue-text-ui)` |
18
+ * | color | `style-lede-ink`, then `style-prose-ink` | `var(--cue-fg-muted)` |
19
+ *
20
+ * `style-lede-ink` enters the contract with Graphite's round (plan L5.1); until
21
+ * it does, nothing declares it and the chain reads the prose ink, and nothing
22
+ * declares that either — so under every shipped set the subtitle computes
23
+ * `fg-muted`, as it did. The docs site's ledes size from `--docs-text-body`
24
+ * instead and are the docs site's own readers (spec §5.2), not this constant.
25
+ *
26
+ * Two constants, not one, because the subtitle's `leading-*` sits between them:
27
+ * `tailwind-merge` drops a `leading-*` that precedes a font size in one list.
28
+ *
29
+ * @internal Not part of the public API.
30
+ */
31
+ const LEDE_SIZE = "text-[length:var(--cue-style-lede-size,var(--cue-text-ui))]";
32
+ /** @see LEDE_SIZE — the lede's ink, through the prose ink to `fg-muted`. */
33
+ const LEDE_INK = "text-[color:var(--cue-style-lede-ink,var(--cue-style-prose-ink,var(--cue-fg-muted)))]";
34
+ /**
35
+ * The lede's leading (plan V.2, T110, Z95, Z96, P1): `style-lede-leading`,
36
+ * falling back to the `leading-ui` the subtitle drew. Three Looks set their
37
+ * ledes on a leading of their own — Tender 1.4, Porcelain 1.5 and Zine a clamp
38
+ * from 1.4 on a phone to 1.3333 on a desktop — none of which is their body's.
39
+ */
40
+ const LEDE_LEADING = "leading-[var(--cue-style-lede-leading,var(--cue-leading-ui))]";
41
+ /**
42
+ * The lede's tracking (plan V.2, Z96): the prose tracking, which spec §3.5
43
+ * already gives "the prose readers and ledes", falling back to `inherit` — the
44
+ * subtitle declared none. Kiln (-0.02em) and Zine (-0.01em) declare it, so
45
+ * their `PageShell` subtitles take their prose's tracking with this.
46
+ */
47
+ const LEDE_TRACKING = "tracking-[var(--cue-style-prose-tracking,inherit)]";
48
+ //#endregion
49
+ export { LEDE_INK, LEDE_LEADING, LEDE_SIZE, LEDE_TRACKING };
@@ -0,0 +1,46 @@
1
+ //#region src/system/_style-link.ts
2
+ /**
3
+ * `Link`'s ink, rule, offset, weight and hover ink, each a style-set name read
4
+ * with the class it replaced as its fallback.
5
+ *
6
+ * Fidelity spec 2026-09-26 §3.7 (plan R3). Tender inks its links in the
7
+ * accent, kiln its prose links in the focus colour; four Looks rule the
8
+ * underline in the text's own colour rather than a hairline, tender draws it
9
+ * 2px under rather than 4px, porcelain sets its links at 500, and kiln and
10
+ * zine hover to an ink other than the accent. Each is the set's to say.
11
+ *
12
+ * **Every fallback is what the site rendered before this existed**, so under
13
+ * no set, and under every set that declines a name, the reader is a no-op:
14
+ * `fg` for the ink, `border` for the rule, `4px` for the offset, the
15
+ * accent on hover, and `inherit` for the weight — the link set no weight, and
16
+ * took its parent's.
17
+ *
18
+ * `INLINE_LINK_INK` falls back through `style-link-ink`, so a set that inks
19
+ * every link (tender) inks the prose link too without saying so twice, and a
20
+ * set that inks only prose links (kiln) leaves the plain link alone.
21
+ *
22
+ * **Its own module**, for the reason `_style-control-face.ts` gives:
23
+ * `@repo/docgen` attributes every token a file spells to each component that
24
+ * imports it. Only `layout/link.tsx` imports this.
25
+ *
26
+ * @internal Not part of the public API.
27
+ */
28
+ /** Every link's ink: `fg`, or the set's `style-link-ink`. */
29
+ const LINK_INK = "text-[color:var(--cue-style-link-ink,var(--cue-fg))]";
30
+ /** The `underline` variant's ink: the set's `style-inline-link-ink`, else {@link LINK_INK}'s chain. */
31
+ const INLINE_LINK_INK = "text-[color:var(--cue-style-inline-link-ink,var(--cue-style-link-ink,var(--cue-fg)))]";
32
+ /** The underline's colour: `border`, or the set's `style-link-rule`. */
33
+ const LINK_RULE = "decoration-[color:var(--cue-style-link-rule,var(--cue-border))]";
34
+ /** The underline's offset: 4px, or the set's `style-link-offset`. */
35
+ const LINK_OFFSET = "underline-offset-[var(--cue-style-link-offset,4px)]";
36
+ /**
37
+ * Every link's weight: its parent's, or the set's `style-link-weight`.
38
+ * `font-[number:…]` rather than an arbitrary `[font-weight:…]`, so a caller's
39
+ * `font-*` weight still replaces it through `twMerge` — `_style-control.ts`'s
40
+ * `CONTROL_WEIGHT` says why.
41
+ */
42
+ const LINK_WEIGHT = "font-[number:var(--cue-style-link-weight,inherit)]";
43
+ /** Every link's hover ink: the accent, or the set's `style-hover-ink`. */
44
+ const HOVER_INK = "hover:text-[color:var(--cue-style-hover-ink,var(--cue-accent))]";
45
+ //#endregion
46
+ export { HOVER_INK, INLINE_LINK_INK, LINK_INK, LINK_OFFSET, LINK_RULE, LINK_WEIGHT };
@@ -0,0 +1,30 @@
1
+ //#region src/system/_style-menu.ts
2
+ /**
3
+ * A menu row's resting ink and its highlight.
4
+ *
5
+ * Spec 2026-09-26-looks-fidelity §3.7 and §3.8 (plan R4). `menuItemClasses`
6
+ * said `text-fg-muted` and `data-[highlighted]:bg-accent-soft`. A Look whose
7
+ * menu rows are full-contrast (tender, porcelain) or whose highlight is a
8
+ * faint neutral or none (porcelain, kiln) reads these names instead.
9
+ *
10
+ * **The fallbacks are the classes they replace**: `var(--cue-fg-muted)` —
11
+ * spec §3.7 gives `style-quiet-ink` that fallback for a menu row — and
12
+ * `var(--cue-accent-soft)`.
13
+ *
14
+ * **Its own module**, for the docgen reason `_style-nav-voice.ts` gives. It is
15
+ * reached through `overlays/_surface.ts`, whose every importer docgen already
16
+ * credits with the whole overlay recipe.
17
+ *
18
+ * @internal Not part of the public API.
19
+ */
20
+ const MENU_ITEM_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))] data-[highlighted]:bg-[color:var(--cue-style-menu-highlight,var(--cue-accent-soft))]";
21
+ /**
22
+ * A menu row's corner (plan V.2, P112): `style-menu-item-radius`, falling back
23
+ * to the `rounded-control` corner the row drew. Porcelain rounds its menu and
24
+ * select rows at 0.6 of its control corner. A select's and a filterable list's
25
+ * rows read the same name with a `0px` fallback (`_style-option.ts`), since
26
+ * they drew no corner.
27
+ */
28
+ const MENU_ITEM_RADIUS = "rounded-[var(--cue-style-menu-item-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
29
+ //#endregion
30
+ export { MENU_ITEM_INK, MENU_ITEM_RADIUS };
@@ -0,0 +1,41 @@
1
+ //#region src/system/_style-nav-item.ts
2
+ /**
3
+ * What a `Sidebar.Item` reads from the style set: its resting ink, and the
4
+ * ground, ink and weight of the item that is the current page.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.8 and §10.4 (plan R4 and its Graphite
7
+ * addition). The item said `text-fg-muted` at rest and, as the current page, an
8
+ * `accent-soft` ground under an `accent` ink. A Look whose sidebar is a softer
9
+ * ink (porcelain), whose current page is inverted (kiln), tinted and medium
10
+ * (porcelain) or marked by ink alone (graphite) reads these names instead.
11
+ *
12
+ * **Every fallback is the class it replaced**, for the reason
13
+ * `_style-control-face.ts` gives: `var(--cue-fg-muted)`, `var(--cue-accent-soft)`
14
+ * and `var(--cue-accent)`, and `400` for the weight, which the item inherited
15
+ * and computed under every shipped set.
16
+ *
17
+ * **The active weight yields to a caller's own weight.** The item set no
18
+ * weight in any state, so `<Sidebar.Item className="font-medium">` was 500
19
+ * whether current or not. A `data-[active]:` weight is `(0,2,0)` and would
20
+ * beat that class on the current item alone, so it is written
21
+ * `[:where(&[data-active])]:` — the same state at zero specificity — and a
22
+ * caller's weight class wins in both states again. The active ground and ink
23
+ * replaced `data-[active]:` classes and keep their standing, as those did.
24
+ *
25
+ * **The active ground reads two names, the sidebar's own first.**
26
+ * `style-selected-ground` is also the selected table row's ground
27
+ * (`_style-selected.ts`), where `transparent` would leave a selection with no
28
+ * mark at all; graphite's sidebar has no fill (G57). So the item reads
29
+ * `style-nav-active-ground` and falls back through `style-selected-ground`,
30
+ * which keeps kiln's and porcelain's values here, and the table reads
31
+ * `style-selected-ground` alone (spec §10.4). `style-nav-active-ground`
32
+ * entered the contract in the fidelity plan's L5.1, and `graphite` declares it
33
+ * `transparent` (G57).
34
+ *
35
+ * **Its own module**, for the docgen reason `_style-nav-voice.ts` gives.
36
+ *
37
+ * @internal Not part of the public API.
38
+ */
39
+ const NAV_ITEM = "text-[color:var(--cue-style-nav-ink,var(--cue-fg-muted))] data-[active]:bg-[color:var(--cue-style-nav-active-ground,var(--cue-style-selected-ground,var(--cue-accent-soft)))] data-[active]:text-[color:var(--cue-style-selected-ink,var(--cue-accent))] [:where(&[data-active])]:font-[number:var(--cue-style-selected-weight,400)]";
40
+ //#endregion
41
+ export { NAV_ITEM };