@cueplusplus/ui 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/CHANGELOG.md +901 -0
  2. package/README.md +1 -1
  3. package/dist/agent-runtime/tool-call-card.js +7 -3
  4. package/dist/brand/_chassis.d.ts +1 -1
  5. package/dist/brand/cue-mark.d.ts +1 -1
  6. package/dist/brand/cue-mark.js +1 -1
  7. package/dist/charts/ramps.js +1 -1
  8. package/dist/chat/agent-pile.js +2 -1
  9. package/dist/chat/ask-box.js +4 -3
  10. package/dist/chat/delegation-card.js +3 -2
  11. package/dist/chat/message-list.js +3 -2
  12. package/dist/chat/message.js +17 -7
  13. package/dist/chrome/_edge-scroller.js +2 -1
  14. package/dist/chrome/_status-bar.js +9 -3
  15. package/dist/chrome/_tabs-scroll.d.ts +1 -1
  16. package/dist/chrome/_tabs-scroll.js +1 -1
  17. package/dist/chrome/app-bar.js +9 -3
  18. package/dist/chrome/app-shell.js +2 -1
  19. package/dist/chrome/band.d.ts +18 -12
  20. package/dist/chrome/band.js +18 -32
  21. package/dist/chrome/empty-state.js +8 -4
  22. package/dist/chrome/eyebrow.d.ts +13 -5
  23. package/dist/chrome/eyebrow.js +18 -7
  24. package/dist/chrome/footer.d.ts +5 -0
  25. package/dist/chrome/footer.js +14 -3
  26. package/dist/chrome/navigation-menu.js +6 -3
  27. package/dist/chrome/page-shell.js +8 -5
  28. package/dist/chrome/panel.d.ts +5 -2
  29. package/dist/chrome/panel.js +10 -5
  30. package/dist/chrome/row.js +9 -5
  31. package/dist/chrome/scroll-area.js +6 -4
  32. package/dist/chrome/section-header.js +13 -4
  33. package/dist/chrome/segmented-control.js +14 -4
  34. package/dist/chrome/status-bar.js +2 -1
  35. package/dist/chrome/tabs.js +14 -3
  36. package/dist/chrome/toolbar.js +6 -3
  37. package/dist/chrome/tree.js +3 -2
  38. package/dist/color/_thumb.js +9 -3
  39. package/dist/color/color-area.js +1 -1
  40. package/dist/color/color-swatch.js +1 -1
  41. package/dist/configurator/_overrides.js +13 -4
  42. package/dist/configurator/configurator.js +4 -1
  43. package/dist/configurator/export-dialog.js +5 -2
  44. package/dist/configurator/panel-sections.js +6 -2
  45. package/dist/configurator/token-editor.js +4 -1
  46. package/dist/date/_trigger.js +4 -1
  47. package/dist/date/calendar.js +22 -12
  48. package/dist/dmx/channel-matrix.js +3 -2
  49. package/dist/dmx/dmx-bar.js +1 -1
  50. package/dist/dmx/dmx-strip.js +1 -1
  51. package/dist/dmx/universe-grid.js +3 -2
  52. package/dist/elements/activity-graph.js +3 -3
  53. package/dist/elements/agent-card.js +3 -3
  54. package/dist/elements/approval-card.js +3 -3
  55. package/dist/elements/artifact-card.js +2 -2
  56. package/dist/elements/background-inbox.js +2 -2
  57. package/dist/elements/canvas-split.js +2 -2
  58. package/dist/elements/chart.js +1 -1
  59. package/dist/elements/chat-panel.js +2 -2
  60. package/dist/elements/checkpoint-history.js +2 -2
  61. package/dist/elements/clamp.js +2 -1
  62. package/dist/elements/code-diff.js +1 -1
  63. package/dist/elements/code-runner.js +1 -1
  64. package/dist/elements/command-palette.js +6 -5
  65. package/dist/elements/comparison-card.js +2 -2
  66. package/dist/elements/composer.js +9 -8
  67. package/dist/elements/computer-use.js +1 -1
  68. package/dist/elements/confidence-marker.js +2 -1
  69. package/dist/elements/connection-state.js +1 -1
  70. package/dist/elements/context-breakdown.js +1 -1
  71. package/dist/elements/context-usage.js +1 -1
  72. package/dist/elements/conversation-search.js +4 -3
  73. package/dist/elements/cost-meter.js +1 -1
  74. package/dist/elements/data-table.js +2 -2
  75. package/dist/elements/day-separator.js +1 -1
  76. package/dist/elements/diagram.js +1 -1
  77. package/dist/elements/document-reference.js +3 -3
  78. package/dist/elements/draft-restore.js +1 -1
  79. package/dist/elements/edit-message.js +4 -3
  80. package/dist/elements/elements.css +26 -5
  81. package/dist/elements/elicitation-form.js +3 -3
  82. package/dist/elements/empty-state.js +2 -1
  83. package/dist/elements/error-state.js +1 -1
  84. package/dist/elements/feedback-dialog.js +4 -3
  85. package/dist/elements/file-tree.js +2 -2
  86. package/dist/elements/flow-graph.js +2 -2
  87. package/dist/elements/guardrail-notice.js +3 -3
  88. package/dist/elements/image-generation.js +1 -1
  89. package/dist/elements/inline-citation.js +3 -3
  90. package/dist/elements/job-progress.js +3 -3
  91. package/dist/elements/launcher-bubble.js +2 -2
  92. package/dist/elements/loading-state.js +1 -1
  93. package/dist/elements/map-answer.js +3 -2
  94. package/dist/elements/markdown.js +5 -4
  95. package/dist/elements/math-block.js +1 -1
  96. package/dist/elements/mcp-server-panel.js +3 -3
  97. package/dist/elements/message-attachment.js +4 -4
  98. package/dist/elements/message-pair.js +1 -1
  99. package/dist/elements/message-queue.js +2 -2
  100. package/dist/elements/mobile-composer.js +4 -3
  101. package/dist/elements/model-picker.js +3 -3
  102. package/dist/elements/onboarding.js +2 -2
  103. package/dist/elements/permission-grant.js +2 -2
  104. package/dist/elements/permission-scopes.js +5 -4
  105. package/dist/elements/prompt-library.js +7 -6
  106. package/dist/elements/queue-dock.js +4 -3
  107. package/dist/elements/quota-banner.js +1 -1
  108. package/dist/elements/quote-reply.js +1 -1
  109. package/dist/elements/read-aloud.js +2 -2
  110. package/dist/elements/reasoning-panel.js +2 -1
  111. package/dist/elements/recommendation-card.d.ts +1 -1
  112. package/dist/elements/recommendation-card.js +2 -2
  113. package/dist/elements/regenerate-menu.js +2 -2
  114. package/dist/elements/research-report.js +1 -1
  115. package/dist/elements/retrieval-chunks.js +1 -1
  116. package/dist/elements/revert-dock.js +5 -4
  117. package/dist/elements/reviewable-diff.js +1 -1
  118. package/dist/elements/schedule-card.js +3 -3
  119. package/dist/elements/score-breakdown.js +1 -1
  120. package/dist/elements/scroll-anchor.js +2 -2
  121. package/dist/elements/settings-panel.js +3 -2
  122. package/dist/elements/shared-conversation.js +2 -2
  123. package/dist/elements/sources.js +4 -3
  124. package/dist/elements/speaker-identity.js +1 -1
  125. package/dist/elements/spec-sheet.js +1 -1
  126. package/dist/elements/streaming-text.js +1 -1
  127. package/dist/elements/subagent-list.js +2 -2
  128. package/dist/elements/suggestions.js +1 -1
  129. package/dist/elements/surfaces.d.ts +1 -1
  130. package/dist/elements/surfaces.js +2 -1
  131. package/dist/elements/tail-status.js +1 -1
  132. package/dist/elements/terminal-block.js +1 -1
  133. package/dist/elements/thread-list.js +1 -1
  134. package/dist/elements/thread-search.js +5 -4
  135. package/dist/elements/timeline.js +1 -1
  136. package/dist/elements/todo-list.js +2 -2
  137. package/dist/elements/tool-call.js +4 -3
  138. package/dist/elements/tool-error.js +2 -2
  139. package/dist/elements/tool-group.js +1 -1
  140. package/dist/elements/tool-timeline.js +4 -3
  141. package/dist/elements/trace-waterfall.js +1 -1
  142. package/dist/elements/verdict-row.js +2 -2
  143. package/dist/elements/voice-conversation.js +3 -2
  144. package/dist/elements/web-preview.js +1 -1
  145. package/dist/elements/web-search.js +2 -2
  146. package/dist/elements/work-collapse.js +2 -1
  147. package/dist/flow/node-card.js +3 -2
  148. package/dist/flow/use-flow-theme.js +2 -1
  149. package/dist/forms/_chassis.d.ts +34 -6
  150. package/dist/forms/_chassis.js +44 -9
  151. package/dist/forms/_listbox.js +22 -14
  152. package/dist/forms/checkbox.js +13 -4
  153. package/dist/forms/env-var-input.js +3 -2
  154. package/dist/forms/field.d.ts +2 -1
  155. package/dist/forms/field.js +16 -5
  156. package/dist/forms/file-upload.js +3 -2
  157. package/dist/forms/input-group.js +11 -2
  158. package/dist/forms/multi-select.js +4 -3
  159. package/dist/forms/number-field.js +7 -3
  160. package/dist/forms/otp-field.js +15 -6
  161. package/dist/forms/password-input.js +4 -2
  162. package/dist/forms/radio-group.js +10 -4
  163. package/dist/forms/rating.js +2 -1
  164. package/dist/forms/scrub-input.js +2 -1
  165. package/dist/forms/search-input.js +2 -1
  166. package/dist/forms/select.js +10 -4
  167. package/dist/forms/slider.js +9 -3
  168. package/dist/forms/switch.js +9 -3
  169. package/dist/forms/tags-input.js +4 -3
  170. package/dist/forms/textarea.js +3 -1
  171. package/dist/forms/toggle-group.js +2 -1
  172. package/dist/forms/toggle.js +5 -1
  173. package/dist/index.d.ts +2 -2
  174. package/dist/index.js +2 -2
  175. package/dist/instruments/_data-row.js +2 -1
  176. package/dist/instruments/app-window-frame.js +1 -1
  177. package/dist/instruments/code-block.js +8 -2
  178. package/dist/instruments/group-bar.js +1 -1
  179. package/dist/instruments/ledger.js +6 -2
  180. package/dist/instruments/log-viewer.js +4 -3
  181. package/dist/instruments/meter.js +2 -1
  182. package/dist/instruments/progress.js +9 -3
  183. package/dist/instruments/seam-grid.js +5 -3
  184. package/dist/instruments/stat.js +13 -4
  185. package/dist/instruments/table.js +29 -10
  186. package/dist/instruments/terminal-frame.js +4 -2
  187. package/dist/instruments/usage-chart.js +1 -1
  188. package/dist/layout/_collapse.js +26 -5
  189. package/dist/layout/accordion.js +2 -1
  190. package/dist/layout/bento.js +7 -4
  191. package/dist/layout/breadcrumb.js +10 -5
  192. package/dist/layout/card.js +14 -7
  193. package/dist/layout/carousel.js +3 -2
  194. package/dist/layout/collapsible.js +6 -1
  195. package/dist/layout/container.js +2 -1
  196. package/dist/layout/description-list.js +4 -1
  197. package/dist/layout/frames.js +11 -5
  198. package/dist/layout/item.js +3 -2
  199. package/dist/layout/link.d.ts +30 -0
  200. package/dist/layout/link.js +22 -3
  201. package/dist/layout/pagination.js +8 -8
  202. package/dist/layout/preview.d.ts +32 -12
  203. package/dist/layout/preview.js +149 -40
  204. package/dist/layout/resizable.js +2 -1
  205. package/dist/layout/sidebar.js +11 -3
  206. package/dist/layout/stepper.js +6 -2
  207. package/dist/lib/cn.js +29 -2
  208. package/dist/midi/piano-keyboard.js +3 -2
  209. package/dist/midi/spectrum-visualizer.js +1 -1
  210. package/dist/midi/threshold-rail.js +2 -1
  211. package/dist/midi/timeline-ruler.js +1 -1
  212. package/dist/overlays/_surface.d.ts +74 -14
  213. package/dist/overlays/_surface.js +87 -14
  214. package/dist/overlays/alert-dialog.js +1 -1
  215. package/dist/overlays/command-palette.js +28 -9
  216. package/dist/overlays/dialog.d.ts +5 -0
  217. package/dist/overlays/dialog.js +6 -1
  218. package/dist/overlays/drawer.js +8 -1
  219. package/dist/overlays/hover-card.js +3 -1
  220. package/dist/overlays/info-tip.js +2 -1
  221. package/dist/overlays/menubar.js +3 -1
  222. package/dist/overlays/popover.js +3 -1
  223. package/dist/overlays/toast.js +14 -6
  224. package/dist/overlays/tooltip.js +3 -1
  225. package/dist/primitives/avatar.js +6 -2
  226. package/dist/primitives/button.d.ts +16 -1
  227. package/dist/primitives/button.js +44 -12
  228. package/dist/primitives/chip.d.ts +11 -29
  229. package/dist/primitives/chip.js +40 -50
  230. package/dist/primitives/icon-button.d.ts +1 -1
  231. package/dist/primitives/kbd.d.ts +6 -0
  232. package/dist/primitives/kbd.js +10 -1
  233. package/dist/primitives/skeleton.js +2 -1
  234. package/dist/system/_focus-ring-field.js +29 -0
  235. package/dist/system/_focus-ring.js +125 -0
  236. package/dist/system/_paint-glow.js +22 -3
  237. package/dist/system/_paint-rest-shade.js +32 -0
  238. package/dist/system/_paint-rim.js +22 -4
  239. package/dist/system/_paint-stroke-surface-1.js +1 -1
  240. package/dist/system/_paint-stroke-surface-2.js +14 -1
  241. package/dist/system/_paint-texture.js +5 -2
  242. package/dist/system/_style-accordion-rule.js +32 -0
  243. package/dist/system/_style-app-bar.js +65 -0
  244. package/dist/system/_style-avatar.js +20 -0
  245. package/dist/system/_style-band.js +57 -0
  246. package/dist/system/_style-body-leading.js +19 -0
  247. package/dist/system/_style-body-size.js +30 -0
  248. package/dist/system/_style-body-weight.js +24 -0
  249. package/dist/system/_style-body.js +32 -0
  250. package/dist/system/_style-caption-ink.js +17 -0
  251. package/dist/system/_style-caption-size.js +19 -0
  252. package/dist/system/_style-caption-weight.js +18 -0
  253. package/dist/system/_style-caption.js +19 -0
  254. package/dist/system/_style-card-gap.js +14 -0
  255. package/dist/system/_style-card-pad.js +43 -0
  256. package/dist/system/_style-cell.js +18 -0
  257. package/dist/system/_style-check-glyph.js +14 -0
  258. package/dist/system/_style-check.js +40 -0
  259. package/dist/system/_style-chip.js +143 -0
  260. package/dist/system/_style-choice-gap.js +15 -0
  261. package/dist/system/_style-code.js +13 -0
  262. package/dist/system/_style-collapse.js +94 -0
  263. package/dist/system/_style-control-face.js +29 -0
  264. package/dist/system/_style-control-gap.js +14 -0
  265. package/dist/system/_style-control-label.js +29 -0
  266. package/dist/system/_style-control-step.js +22 -0
  267. package/dist/system/_style-control.js +76 -0
  268. package/dist/system/_style-crumb.js +44 -0
  269. package/dist/system/_style-data-face.js +28 -0
  270. package/dist/system/_style-day.js +25 -0
  271. package/dist/system/_style-description.js +23 -0
  272. package/dist/system/_style-disabled.js +70 -0
  273. package/dist/system/_style-disclosure.js +21 -0
  274. package/dist/system/_style-empty-state.js +42 -0
  275. package/dist/system/_style-eyebrow.js +43 -0
  276. package/dist/system/_style-field-chassis.js +38 -0
  277. package/dist/system/_style-field-gap.js +12 -0
  278. package/dist/system/_style-footer-rule.js +47 -0
  279. package/dist/system/_style-glyph-ink.js +20 -0
  280. package/dist/system/_style-glyph-opacity.js +20 -0
  281. package/dist/system/_style-glyph-size.js +21 -0
  282. package/dist/system/_style-group-gap.js +15 -0
  283. package/dist/system/_style-group-label-pad.js +14 -0
  284. package/dist/system/_style-group-label.js +24 -0
  285. package/dist/system/_style-gutter.js +17 -0
  286. package/dist/system/_style-help-ink.js +14 -0
  287. package/dist/system/_style-help.js +38 -0
  288. package/dist/system/_style-hover-card-width.js +15 -0
  289. package/dist/system/_style-input-face.js +34 -0
  290. package/dist/system/_style-kbd.js +58 -0
  291. package/dist/system/_style-label-case.js +36 -0
  292. package/dist/system/_style-label-face.js +32 -0
  293. package/dist/system/_style-label-ink.js +29 -0
  294. package/dist/system/_style-label-leading.js +14 -0
  295. package/dist/system/_style-label-size.js +36 -0
  296. package/dist/system/_style-label-tracking.js +45 -0
  297. package/dist/system/_style-label-weight.js +40 -0
  298. package/dist/system/_style-lede.js +49 -0
  299. package/dist/system/_style-link.js +58 -0
  300. package/dist/system/_style-menu.js +43 -0
  301. package/dist/system/_style-meter.js +15 -0
  302. package/dist/system/_style-nav-item.js +41 -0
  303. package/dist/system/_style-nav-menu.js +48 -0
  304. package/dist/system/_style-nav-voice.js +43 -0
  305. package/dist/system/_style-option.js +99 -0
  306. package/dist/system/_style-otp.js +15 -0
  307. package/dist/system/_style-outline-hover.js +18 -0
  308. package/dist/system/_style-overlay-title.js +35 -0
  309. package/dist/system/_style-page-title.js +48 -0
  310. package/dist/system/_style-page.js +17 -0
  311. package/dist/system/_style-palette.js +18 -0
  312. package/dist/system/_style-panel.js +21 -0
  313. package/dist/system/_style-popover-pad.js +13 -0
  314. package/dist/system/_style-popover-width.js +15 -0
  315. package/dist/system/_style-quiet-ink.js +13 -0
  316. package/dist/system/_style-radio.js +19 -0
  317. package/dist/system/_style-row-disabled.js +17 -0
  318. package/dist/system/_style-row-pad.js +13 -0
  319. package/dist/system/_style-row.js +30 -0
  320. package/dist/system/_style-scrollbar.js +19 -0
  321. package/dist/system/_style-seam.js +43 -0
  322. package/dist/system/_style-section-rule.js +26 -0
  323. package/dist/system/_style-segment-pad.js +15 -0
  324. package/dist/system/_style-segment.js +30 -0
  325. package/dist/system/_style-segmented-control.js +86 -0
  326. package/dist/system/_style-selected.js +36 -0
  327. package/dist/system/_style-skeleton.js +15 -0
  328. package/dist/system/_style-slider.js +26 -0
  329. package/dist/system/_style-stage-marks.js +26 -0
  330. package/dist/system/_style-stat.js +31 -0
  331. package/dist/system/_style-stepper.js +16 -0
  332. package/dist/system/_style-switch.js +26 -0
  333. package/dist/system/_style-tab-hover.js +15 -0
  334. package/dist/system/_style-tab.js +71 -0
  335. package/dist/system/_style-text-focus.js +26 -0
  336. package/dist/system/_style-textarea.js +21 -0
  337. package/dist/system/_style-title.js +37 -0
  338. package/dist/system/_style-toast.js +22 -0
  339. package/dist/system/_style-toggle.js +50 -0
  340. package/dist/system/_style-toolbar.js +23 -0
  341. package/dist/system/_style-tooltip.js +46 -0
  342. package/dist/system/density.d.ts +15 -5
  343. package/dist/system/density.js +188 -25
  344. package/dist/system/index.d.ts +2 -2
  345. package/dist/system/index.js +2 -2
  346. package/dist/system/overrides.d.ts +1 -0
  347. package/dist/system/overrides.js +151 -3
  348. package/dist/system/portal.d.ts +3 -2
  349. package/dist/system/portal.js +22 -10
  350. package/dist/system/prepaint.d.ts +21 -5
  351. package/dist/system/prepaint.js +3 -1
  352. package/dist/system/published.d.ts +1 -0
  353. package/dist/system/published.js +131 -0
  354. package/dist/system/theme-provider.d.ts +118 -21
  355. package/dist/system/theme-provider.js +362 -73
  356. package/dist/system/theme-registry.d.ts +2 -1
  357. package/dist/system/theme-registry.js +27 -10
  358. package/dist/system/use-density.js +4 -3
  359. package/dist/system/use-theme.d.ts +5 -2
  360. package/dist/system/use-theme.js +7 -4
  361. package/dist/system/vocabulary.js +2 -2
  362. package/dist/theming/create-theme.js +12 -6
  363. package/dist/theming/serialize.d.ts +34 -2
  364. package/dist/theming/serialize.js +86 -4
  365. package/manifest/components/accordion.json +29 -2
  366. package/manifest/components/agent-pile.json +3 -0
  367. package/manifest/components/alert-dialog.json +36 -3
  368. package/manifest/components/app-bar.json +61 -2
  369. package/manifest/components/app-shell.json +5 -0
  370. package/manifest/components/ask-box.json +3 -1
  371. package/manifest/components/autocomplete.json +85 -1
  372. package/manifest/components/avatar-group.json +7 -0
  373. package/manifest/components/avatar.json +7 -0
  374. package/manifest/components/band.json +7 -3
  375. package/manifest/components/bento.json +12 -1
  376. package/manifest/components/breadcrumb.json +12 -0
  377. package/manifest/components/button.json +43 -4
  378. package/manifest/components/calendar.json +13 -0
  379. package/manifest/components/card.json +23 -1
  380. package/manifest/components/carousel.json +4 -1
  381. package/manifest/components/channel-matrix.json +37 -3
  382. package/manifest/components/chart-tooltip-content.json +35 -3
  383. package/manifest/components/chat-empty-state.json +3 -1
  384. package/manifest/components/checkbox-group.json +36 -1
  385. package/manifest/components/checkbox.json +36 -1
  386. package/manifest/components/chip.json +22 -1
  387. package/manifest/components/clamp.json +3 -1
  388. package/manifest/components/code-block.json +10 -1
  389. package/manifest/components/collapsible.json +35 -2
  390. package/manifest/components/color-area.json +4 -2
  391. package/manifest/components/color-field.json +29 -0
  392. package/manifest/components/color-picker.json +29 -0
  393. package/manifest/components/color-slider.json +3 -1
  394. package/manifest/components/colors-section.json +9 -1
  395. package/manifest/components/combobox.json +85 -1
  396. package/manifest/components/command-palette.json +39 -3
  397. package/manifest/components/composer-actions.json +3 -0
  398. package/manifest/components/composer-attach-button.json +3 -0
  399. package/manifest/components/composer-attachment-chip.json +3 -0
  400. package/manifest/components/composer-attachments.json +3 -0
  401. package/manifest/components/composer-bar.json +3 -0
  402. package/manifest/components/composer-command-item.json +3 -0
  403. package/manifest/components/composer-context.json +3 -0
  404. package/manifest/components/composer-input.json +3 -0
  405. package/manifest/components/composer-menu-item.json +3 -0
  406. package/manifest/components/composer-menu.json +3 -0
  407. package/manifest/components/composer-model-item.json +3 -0
  408. package/manifest/components/composer-model-trigger.json +3 -0
  409. package/manifest/components/composer-person-item.json +3 -0
  410. package/manifest/components/composer-send.json +3 -0
  411. package/manifest/components/composer-toolbar.json +3 -0
  412. package/manifest/components/composer-voice-button.json +3 -0
  413. package/manifest/components/composer-voice.json +3 -0
  414. package/manifest/components/composer.json +29 -0
  415. package/manifest/components/confidence-marker.json +3 -1
  416. package/manifest/components/container.json +2 -1
  417. package/manifest/components/context-menu.json +35 -3
  418. package/manifest/components/conversation-search.json +3 -1
  419. package/manifest/components/cue-mark.json +2 -2
  420. package/manifest/components/cue-portal-frame.json +1 -1
  421. package/manifest/components/data-row.json +3 -1
  422. package/manifest/components/data-tree.json +3 -1
  423. package/manifest/components/date-field.json +28 -0
  424. package/manifest/components/date-picker.json +32 -0
  425. package/manifest/components/date-range-picker.json +32 -0
  426. package/manifest/components/delegation-card.json +3 -1
  427. package/manifest/components/density.json +15 -7
  428. package/manifest/components/description-list.json +6 -1
  429. package/manifest/components/dialog.json +37 -3
  430. package/manifest/components/disclosure.json +35 -2
  431. package/manifest/components/dmx-bar.json +34 -3
  432. package/manifest/components/dmx-strip.json +34 -3
  433. package/manifest/components/drawer.json +36 -3
  434. package/manifest/components/dropdown-menu.json +35 -3
  435. package/manifest/components/edit-message.json +3 -1
  436. package/manifest/components/elements-command-palette.json +3 -1
  437. package/manifest/components/elements-composer.json +3 -0
  438. package/manifest/components/empty-state-composer.json +3 -1
  439. package/manifest/components/empty-state-greeting.json +3 -1
  440. package/manifest/components/empty-state-suggestion.json +3 -1
  441. package/manifest/components/empty-state-suggestions.json +3 -1
  442. package/manifest/components/empty-state.json +13 -0
  443. package/manifest/components/env-var-input.json +28 -0
  444. package/manifest/components/export-dialog.json +6 -1
  445. package/manifest/components/eyebrow.json +13 -2
  446. package/manifest/components/feedback-dialog.json +3 -0
  447. package/manifest/components/field-description.json +15 -0
  448. package/manifest/components/field-error.json +15 -0
  449. package/manifest/components/field-label.json +16 -1
  450. package/manifest/components/field.json +15 -0
  451. package/manifest/components/file-upload.json +3 -0
  452. package/manifest/components/footer.json +14 -1
  453. package/manifest/components/frames.json +14 -1
  454. package/manifest/components/hover-card.json +37 -3
  455. package/manifest/components/info-tip.json +3 -0
  456. package/manifest/components/input-group.json +31 -0
  457. package/manifest/components/input.json +29 -0
  458. package/manifest/components/item.json +3 -1
  459. package/manifest/components/kbd.json +12 -1
  460. package/manifest/components/ledger.json +9 -2
  461. package/manifest/components/link.json +33 -0
  462. package/manifest/components/log-viewer.json +3 -0
  463. package/manifest/components/map-answer.json +3 -1
  464. package/manifest/components/markdown-text.json +3 -0
  465. package/manifest/components/menubar.json +38 -4
  466. package/manifest/components/message-list.json +3 -0
  467. package/manifest/components/message.json +6 -1
  468. package/manifest/components/meter.json +1 -0
  469. package/manifest/components/mobile-composer.json +3 -1
  470. package/manifest/components/multi-select.json +86 -1
  471. package/manifest/components/musical-time-input.json +29 -0
  472. package/manifest/components/navigation-menu.json +48 -3
  473. package/manifest/components/node-card.json +3 -0
  474. package/manifest/components/number-field.json +30 -0
  475. package/manifest/components/otp-field.json +29 -0
  476. package/manifest/components/page-shell.json +14 -0
  477. package/manifest/components/pagination.json +22 -0
  478. package/manifest/components/panel-header.json +13 -0
  479. package/manifest/components/panel.json +14 -1
  480. package/manifest/components/password-input.json +28 -0
  481. package/manifest/components/permission-scopes.json +3 -1
  482. package/manifest/components/piano-keyboard.json +3 -0
  483. package/manifest/components/popover.json +37 -3
  484. package/manifest/components/preset-section.json +9 -1
  485. package/manifest/components/preview.json +24 -10
  486. package/manifest/components/progress.json +10 -1
  487. package/manifest/components/prompt-library.json +3 -1
  488. package/manifest/components/queue-dock.json +3 -1
  489. package/manifest/components/radio-group.json +14 -0
  490. package/manifest/components/radio.json +14 -0
  491. package/manifest/components/rating.json +4 -1
  492. package/manifest/components/reasoning-panel.json +3 -1
  493. package/manifest/components/recommendation-card.json +1 -1
  494. package/manifest/components/resizable.json +4 -1
  495. package/manifest/components/revert-dock.json +3 -1
  496. package/manifest/components/row.json +8 -1
  497. package/manifest/components/scroll-area.json +6 -2
  498. package/manifest/components/scrollable-tabs-list.json +21 -0
  499. package/manifest/components/scrub-input.json +28 -0
  500. package/manifest/components/seam-cell.json +1 -0
  501. package/manifest/components/seam-grid.json +1 -0
  502. package/manifest/components/seam-list.json +8 -1
  503. package/manifest/components/search-input.json +28 -0
  504. package/manifest/components/section-header.json +15 -2
  505. package/manifest/components/segmented-control.json +17 -0
  506. package/manifest/components/select.json +42 -0
  507. package/manifest/components/settings-panel.json +3 -0
  508. package/manifest/components/shape-section.json +9 -1
  509. package/manifest/components/sheet.json +35 -3
  510. package/manifest/components/shimmer-label.json +3 -0
  511. package/manifest/components/sidebar.json +19 -2
  512. package/manifest/components/skeleton.json +2 -0
  513. package/manifest/components/slider.json +16 -0
  514. package/manifest/components/sources.json +3 -1
  515. package/manifest/components/stat.json +17 -0
  516. package/manifest/components/status-bar.json +4 -0
  517. package/manifest/components/stepper.json +8 -0
  518. package/manifest/components/swap-label.json +3 -0
  519. package/manifest/components/switch.json +30 -0
  520. package/manifest/components/table-scroll-region.json +22 -2
  521. package/manifest/components/table.json +22 -2
  522. package/manifest/components/tabs.json +22 -1
  523. package/manifest/components/tags-input.json +86 -1
  524. package/manifest/components/terminal-frame.json +3 -0
  525. package/manifest/components/textarea.json +31 -0
  526. package/manifest/components/theme-configurator.json +35 -3
  527. package/manifest/components/theme-provider.json +31 -19
  528. package/manifest/components/thread-search.json +3 -1
  529. package/manifest/components/threshold-rail.json +3 -0
  530. package/manifest/components/time-field.json +28 -0
  531. package/manifest/components/toast.json +39 -2
  532. package/manifest/components/toggle-group.json +2 -1
  533. package/manifest/components/toggle.json +32 -0
  534. package/manifest/components/token-editor.json +6 -1
  535. package/manifest/components/tool-call-card.json +9 -2
  536. package/manifest/components/tool-call.json +3 -1
  537. package/manifest/components/tool-timeline.json +3 -1
  538. package/manifest/components/toolbar.json +22 -1
  539. package/manifest/components/tooltip.json +42 -3
  540. package/manifest/components/tree-visibility-toggle.json +3 -0
  541. package/manifest/components/tree.json +3 -0
  542. package/manifest/components/universe-grid.json +3 -0
  543. package/manifest/components/voice-conversation.json +3 -0
  544. package/manifest/components/work-collapse.json +3 -1
  545. package/manifest/fixtures.json +15 -0
  546. package/manifest/manifest.json +210 -190
  547. package/manifest/tokens.json +395 -4
  548. package/package.json +6 -6
@@ -0,0 +1,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,58 @@
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
+ /**
44
+ * Every link's hover ink: the set's `style-link-hover-ink`, else its
45
+ * `style-hover-ink`, else the accent.
46
+ *
47
+ * Round 6 (spec §11, lane R6.T) splits the link's hover from the header
48
+ * nav's: `style-hover-ink` also colours `AppBar.Link` under the pointer, and
49
+ * stripe.com draws the two apart (its links hover to its brand-800, #2e2b8c;
50
+ * its nav's triggers stay in their solid ink, #061b31, T144, T151). So the
51
+ * link reads a name of its own first, falling back to the shared one, and a
52
+ * set that names neither renders exactly what it did.
53
+ */
54
+ const HOVER_INK = "hover:text-[color:var(--cue-style-link-hover-ink,var(--cue-style-hover-ink,var(--cue-accent)))]";
55
+ /** An underlined link's rule under the pointer: the same chain as {@link HOVER_INK}. */
56
+ const HOVER_RULE = "hover:decoration-[color:var(--cue-style-link-hover-ink,var(--cue-style-hover-ink,var(--cue-accent)))]";
57
+ //#endregion
58
+ export { HOVER_INK, HOVER_RULE, INLINE_LINK_INK, LINK_INK, LINK_OFFSET, LINK_RULE, LINK_WEIGHT };
@@ -0,0 +1,43 @@
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
+ /**
30
+ * A menu popup's minimum width (round 6, spec §11, lane R6.P:
31
+ * `style-menu-min-width`), falling back to the `10rem` it drew. coss.com/ui's
32
+ * menus start at 8rem (`min-w-32`, P163.min-width).
33
+ */
34
+ const MENU_MIN_WIDTH = "min-w-[var(--cue-style-menu-min-width,10rem)]";
35
+ /**
36
+ * The inline inset of the rule between a menu's groups (round 6, spec §11, lane
37
+ * R6.P: `style-menu-separator-inset`), falling back to the `0px` it drew: the
38
+ * rule ran rim to rim. coss.com/ui's stops 8px short of each side
39
+ * (P163.separator-inset).
40
+ */
41
+ const MENU_SEPARATOR_INSET = "mx-[var(--cue-style-menu-separator-inset,0px)]";
42
+ //#endregion
43
+ export { MENU_ITEM_INK, MENU_ITEM_RADIUS, MENU_MIN_WIDTH, MENU_SEPARATOR_INSET };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-meter.ts
2
+ /**
3
+ * A meter track's corner (round 6, spec §11, lane R6.P: `style-meter-radius`),
4
+ * falling back to the `rounded-full` it drew. coss.com/ui's meter track is
5
+ * square (P164.radius).
6
+ *
7
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
8
+ * reader falls back to what the component drew. Its own module for docgen's
9
+ * reason: one component's tokens per file.
10
+ *
11
+ * @internal Not part of the public API.
12
+ */
13
+ const METER_RADIUS = "rounded-[var(--cue-style-meter-radius,calc(infinity*1px))]";
14
+ //#endregion
15
+ export { METER_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 };
@@ -0,0 +1,48 @@
1
+ //#region src/system/_style-nav-menu.ts
2
+ /**
3
+ * `NavigationMenu`'s trigger (round 6, spec §11, lane R6.T): the header nav's
4
+ * voice, padding and resting ink, and two names of its own, `style-nav-height`
5
+ * and `style-nav-open-ground`.
6
+ *
7
+ * **It reads the header nav's names**, because a site's header draws its menu
8
+ * triggers and its plain links as one row, in one voice: stripe.com's four
9
+ * triggers and its Pricing link are all 14px, 400, #061b31 with no inline
10
+ * padding (T16, T151); replit.com's are 13.3px and 14px, one ink, one
11
+ * padding; greptile.com, coss.com and agent-native.com draw no header menu
12
+ * trigger, only links (probed 2026-09-28). So the trigger reads
13
+ * `style-nav-face`, `-case`, `-tracking`, `-size`, `-weight` and `-pad`,
14
+ * which `AppBar.Link` reads, and `style-quiet-ink`, `AppBar.Link`'s muted
15
+ * register. Each falls back to what the trigger drew — the control face, its
16
+ * own `text-ui`, an inherited weight, tracking and case, `0 space-3` and
17
+ * `fg-muted` — so a set that names none of them renders the trigger it did.
18
+ *
19
+ * The height and the open ground are its own: stripe.com's triggers stand
20
+ * 40px on the nav's own padding (ours ride the `md` control rung) and draw no
21
+ * ground when their panel is open (ours tint it `accent-soft`), T151.
22
+ *
23
+ * @internal Not part of the public API.
24
+ */
25
+ const NAV_TRIGGER_VOICE = "font-[family-name:var(--cue-style-nav-face,var(--cue-style-control-face,var(--cue-font-mono)))] [text-transform:var(--cue-style-nav-case,inherit)] tracking-[var(--cue-style-nav-tracking,inherit)] text-[length:var(--cue-style-nav-size,var(--cue-text-ui))] font-[number:var(--cue-style-nav-weight,inherit)]";
26
+ /** The trigger's resting ink: the header nav's muted register. */
27
+ const NAV_TRIGGER_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
28
+ /** The trigger's padding: the header nav's. */
29
+ const NAV_TRIGGER_PAD = "p-[var(--cue-style-nav-pad,0_var(--cue-space-3))]";
30
+ /** The trigger's height. */
31
+ const NAV_TRIGGER_HEIGHT = "h-[var(--cue-style-nav-height,var(--cue-control-md))]";
32
+ /** An open trigger's ground. */
33
+ const NAV_OPEN_GROUND = "data-[popup-open]:bg-[color:var(--cue-style-nav-open-ground,var(--cue-accent-soft))]";
34
+ /**
35
+ * The caret's ink (round 6, spec §11, lane R6.K: `style-nav-caret-ink`),
36
+ * falling back to the `fg-subtle` it drew. replit.com draws its menu
37
+ * triggers' carets in the trigger's own ink, #37383c (K159).
38
+ */
39
+ const NAV_CARET_INK = "text-[color:var(--cue-style-nav-caret-ink,var(--cue-fg-subtle))]";
40
+ /**
41
+ * The trigger's hover ink: the header nav's `style-hover-ink`, falling back to
42
+ * the `fg` it hovered to. replit.com's triggers hover to #2c2e31, the same
43
+ * ink its header links hover to (K51, K159), so the trigger reads the name
44
+ * `AppBar.Link` reads rather than a fixed `fg`.
45
+ */
46
+ const NAV_TRIGGER_HOVER_INK = "hover:text-[color:var(--cue-style-hover-ink,var(--cue-fg))]";
47
+ //#endregion
48
+ export { NAV_CARET_INK, NAV_OPEN_GROUND, NAV_TRIGGER_HEIGHT, NAV_TRIGGER_HOVER_INK, NAV_TRIGGER_INK, NAV_TRIGGER_PAD, NAV_TRIGGER_VOICE };
@@ -0,0 +1,43 @@
1
+ //#region src/system/_style-nav-voice.ts
2
+ /**
3
+ * The voice a navigation link speaks in — face, case, tracking, size and
4
+ * weight — each the style set's choice, each falling back to what its reader
5
+ * rendered before this existed.
6
+ *
7
+ * Spec 2026-09-26-looks-fidelity §3.8 (plan R4). `AppBar.Link` and `Footer`'s
8
+ * column both said `font-mono text-(length:--cue-text-ui)` and nothing more,
9
+ * so a Look whose header links are sans (tender, kiln, porcelain), uppercase
10
+ * and tracked (zine) or medium (porcelain) could only say so with a class at
11
+ * every call site, which a Look does not follow.
12
+ *
13
+ * **The fallbacks are the old classes, spelt out**, for the reason
14
+ * `_style-control-face.ts` gives: none of these names is declared on `:root`,
15
+ * and every set that declines one resets it to `initial` on the shared
16
+ * `[data-style]` block (spec §3.0), so a reader resolves its own fallback at
17
+ * itself. `font-mono` compiled to `var(--cue-font-mono)` and
18
+ * `text-(length:--cue-text-ui)` to `var(--cue-text-ui)`. Case, tracking and
19
+ * weight were inherited, and computed `none`, `normal` and `400` at both
20
+ * readers under every shipped set — spec §3.8's three fallbacks.
21
+ *
22
+ * **Weight is written `font-[number:…]`.** A bare `font-[var(…)]` is read as a
23
+ * family (plan §R1), and the `number` label makes it a weight to Tailwind —
24
+ * which emits exactly what `font-medium` emits, `--tw-font-weight` included —
25
+ * and to `tailwind-merge`, so a caller's `className="font-medium"` replaces it
26
+ * through `cn()`. Spelt as an arbitrary `[font-weight:…]` property it survived
27
+ * the merge beside the caller's class and won the cascade, because Tailwind
28
+ * emits it after `font-medium`: `<AppBar.Link className="font-medium">` drew
29
+ * 400. Case is an arbitrary property for the reason `_style-label-case.ts`
30
+ * gives — no case utility takes a value — and nothing merges it with a
31
+ * caller's `uppercase`, but Tailwind emits it before `uppercase`,
32
+ * `normal-case` and the rest, so the caller's case still wins the cascade.
33
+ *
34
+ * **Its own module**, because `@repo/docgen` credits a component with every
35
+ * `--cue-*` in each `_`-prefixed file it imports (`_style-control-face.ts`'s
36
+ * note). `Footer` reads this voice and none of `AppBar.Link`'s own names, which
37
+ * live in `_style-app-bar.ts`.
38
+ *
39
+ * @internal Not part of the public API.
40
+ */
41
+ const NAV_VOICE = "font-[family-name:var(--cue-style-nav-face,var(--cue-font-mono))] [text-transform:var(--cue-style-nav-case,none)] tracking-[var(--cue-style-nav-tracking,normal)] text-[length:var(--cue-style-nav-size,var(--cue-text-ui))] font-[number:var(--cue-style-nav-weight,400)]";
42
+ //#endregion
43
+ export { NAV_VOICE };
@@ -0,0 +1,99 @@
1
+ //#region src/system/_style-option.ts
2
+ /**
3
+ * One row of a list a control opens: `Select`'s items and the filterable
4
+ * lists' (`Combobox`, `Autocomplete`, `MultiSelect`, `TagsInput`).
5
+ *
6
+ * Plan V.2 (T112, P112, P127). The two shared one class string —
7
+ * `text-fg-muted … data-[highlighted]:bg-accent-soft … data-[selected]:text-accent`
8
+ * — which no Look could reach, so a select under Tender drew a lilac selected
9
+ * row on a lilac highlight where the source draws navy on a 5% wash, and under
10
+ * Porcelain a square muted row where the source draws a rounded `fg` one.
11
+ *
12
+ * | part | reads | fallback |
13
+ * |-----------------|-----------------------------------------------|------------------------------|
14
+ * | idle ink | `style-option-ink` | `var(--cue-fg-muted)` |
15
+ * | highlight | `style-menu-highlight`, as a menu row's does | `var(--cue-accent-soft)` |
16
+ * | selected ink | `style-option-selected-ink` | `var(--cue-accent)` |
17
+ * | idle weight | `style-body-weight`, on an unselected row | `inherit` |
18
+ * | corner | `style-menu-item-radius` | `0px` |
19
+ *
20
+ * **Its own two inks**, not `style-quiet-ink` and `style-selected-ink`. The
21
+ * quiet ink is a ghost button's and a menu row's; Tender's is `fg`, and its
22
+ * select rows measure a 55% share of `fg` into `fg-muted`. The selected ink is
23
+ * the sidebar's active item's and a table's selected row's; Tender's option
24
+ * ink is navy where its sidebar keeps the lilac accent. Porcelain's rows,
25
+ * which do measure `fg`, declare the option ink as `var(--cue-fg)`.
26
+ *
27
+ * **The weight goes on the unselected row only**, at zero specificity
28
+ * (`[:where(&:not([data-selected]))]:`): Tender's body copy is 300 and its
29
+ * selected row keeps the 400 it inherits, and a caller's `font-*` class on a
30
+ * row still beats both, as it beat nothing before.
31
+ *
32
+ * The highlighted row's ink reads `style-option-highlight-ink` (round 6, lane
33
+ * R6.G), falling back to the `fg` every Look's highlighted row drew:
34
+ * agent-native.com's language listbox keeps its rows' `#3d3d3d` under the
35
+ * pointer (G143.hover-ink). The weight is spelt out whole rather than composed from
36
+ * `_style-body-weight.ts`: a variant prefixed onto an interpolated constant is
37
+ * a class that appears in no source file, and a consumer's Tailwind, which
38
+ * scans this package's build for candidates, would never generate it.
39
+ *
40
+ * @internal Not part of the public API.
41
+ */
42
+ const OPTION_ROW = "rounded-[var(--cue-style-menu-item-radius,0px)] text-[color:var(--cue-style-option-ink,var(--cue-fg-muted))] [:where(&:not([data-selected]))]:font-[number:var(--cue-style-body-weight,inherit)] data-[highlighted]:bg-[color:var(--cue-style-menu-highlight,var(--cue-accent-soft))] data-[highlighted]:text-[color:var(--cue-style-option-highlight-ink,var(--cue-fg))] data-[selected]:text-[color:var(--cue-style-option-selected-ink,var(--cue-accent))]";
43
+ /**
44
+ * A listbox row's box (round 6, spec §11, lane R6.T: `style-option-pad`,
45
+ * `style-option-leading`, `style-option-height`): the select's rows and the
46
+ * combobox, autocomplete and multi-select rows (`forms/_listbox.ts`).
47
+ *
48
+ * stripe.com's rows (`.hds-listbox__item`) pad 12px, set 16px at 1.25 and
49
+ * stand 36px tall (T149, T154), where ours pad `space-3` (8px at normal), set
50
+ * an inherited leading, and ride the control ladder's `sm` rung (40px). Each
51
+ * falls back to the class it replaced.
52
+ */
53
+ const OPTION_PAD = "px-[calc(var(--cue-space-3)*var(--cue-style-option-pad,1))]";
54
+ /** A listbox row's leading. */
55
+ const OPTION_LEADING = "leading-[var(--cue-style-option-leading,inherit)]";
56
+ /** A listbox row's height. */
57
+ const OPTION_HEIGHT = "h-[var(--cue-style-option-height,var(--cue-control-sm))]";
58
+ /**
59
+ * A selected row's ground (round 6, spec §11, lane R6.K:
60
+ * `style-option-selected-ground`), falling back to the `transparent` a
61
+ * selected row drew: the recipe above marks selection by ink alone.
62
+ * replit.com's credit-tier listbox fills its selected row with a warm tint,
63
+ * #f5e7e2, under a deep accent ink (K147).
64
+ */
65
+ const OPTION_SELECTED_GROUND = "data-[selected]:bg-[color:var(--cue-style-option-selected-ground,transparent)]";
66
+ /**
67
+ * A row that is selected *and* highlighted — the row a select opens on, and
68
+ * the selected row under the pointer — keeps the highlight ground it drew
69
+ * before `style-option-selected-ground` existed. The name's fallback here is
70
+ * the highlight's own chain, and the two attributes together outrank either
71
+ * alone, so the order Tailwind emits `data-[selected]` and `data-[highlighted]`
72
+ * in cannot decide it. A set that names a selected ground (Kiln) paints it
73
+ * under the pointer too. The closing pass's full runs found the gap
74
+ * (T112.ground): with {@link OPTION_SELECTED_GROUND} alone, the open row lost
75
+ * its highlight in every Look but Kiln, and in no Look at all.
76
+ */
77
+ const OPTION_SELECTED_HIGHLIGHT_GROUND = "data-[selected]:data-[highlighted]:bg-[color:var(--cue-style-option-selected-ground,var(--cue-style-menu-highlight,var(--cue-accent-soft)))]";
78
+ /**
79
+ * A selected row under the pointer (the closing pass, lane R6.G:
80
+ * `style-option-selected-hover-ground`), falling back to what the row paints
81
+ * selected and highlighted ({@link OPTION_SELECTED_HIGHLIGHT_GROUND}), which a
82
+ * pointer over it always is. A list opens with its selected row highlighted, so
83
+ * a set that grounds that row needs the pointer's own ground to answer a hover:
84
+ * agent-native.com's selected option sits on its raised ground, #ffffff /
85
+ * #0f0f0f, until the pointer paints its hover fill over it (G143). `hover:` is
86
+ * the pointer's alone, so a list opened from the keyboard keeps the selected
87
+ * ground, and the third attribute outranks the two above.
88
+ */
89
+ const OPTION_SELECTED_POINTER_GROUND = "data-[selected]:data-[highlighted]:hover:bg-[color:var(--cue-style-option-selected-hover-ground,var(--cue-style-option-selected-ground,var(--cue-style-menu-highlight,var(--cue-accent-soft))))]";
90
+ /**
91
+ * A listbox popup's own padding (lane R6.K: `style-listbox-pad`, PAD2),
92
+ * falling back to the `space-1` block and `0` inline it drew (`py-(--cue-space-1)`).
93
+ * replit.com's listbox pads 4px all round, so its rows sit inside the popup's
94
+ * edge (K146). Read by `Select`'s popup and the listbox family's
95
+ * (`forms/_listbox.ts`).
96
+ */
97
+ const LISTBOX_PAD = "p-[var(--cue-style-listbox-pad,var(--cue-space-1)_0)]";
98
+ //#endregion
99
+ export { LISTBOX_PAD, OPTION_HEIGHT, OPTION_LEADING, OPTION_PAD, OPTION_ROW, OPTION_SELECTED_GROUND, OPTION_SELECTED_HIGHLIGHT_GROUND, OPTION_SELECTED_POINTER_GROUND };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-otp.ts
2
+ /**
3
+ * The gap between an OTP field's slots (round 6, spec §11, lane R6.P:
4
+ * `style-otp-gap`), falling back to the `space-2` it drew. coss.com/ui sets its
5
+ * slots 8px apart (P166.gap).
6
+ *
7
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
8
+ * reader falls back to what the component drew. Its own module for docgen's
9
+ * reason: one component's tokens per file.
10
+ *
11
+ * @internal Not part of the public API.
12
+ */
13
+ const OTP_GAP = "gap-[var(--cue-style-otp-gap,var(--cue-space-2))]";
14
+ //#endregion
15
+ export { OTP_GAP };
@@ -0,0 +1,18 @@
1
+ //#region src/system/_style-outline-hover.ts
2
+ /**
3
+ * An outline button's hover (round 6, spec §11, lane R6.P:
4
+ * `style-outline-hover-ground`, `style-outline-hover-edge`), falling back to
5
+ * the transparent ground and `accent` edge it drew. coss.com/ui's outline
6
+ * button fills a faint ink on hover and keeps its rim grey (P145.outline,
7
+ * P145.outline-edge).
8
+ *
9
+ * **Optional** (spec §3.0). Its own module for docgen's reason: one token per
10
+ * file, so only the components that read it are credited with it.
11
+ *
12
+ * @internal Not part of the public API.
13
+ */
14
+ const OUTLINE_HOVER_GROUND = "hover:bg-[color:var(--cue-style-outline-hover-ground,transparent)]";
15
+ /** @see OUTLINE_HOVER_GROUND */
16
+ const OUTLINE_HOVER_EDGE = "hover:border-[color:var(--cue-style-outline-hover-edge,var(--cue-accent))]";
17
+ //#endregion
18
+ export { OUTLINE_HOVER_EDGE, OUTLINE_HOVER_GROUND };
@@ -0,0 +1,35 @@
1
+ //#region src/system/_style-overlay-title.ts
2
+ /**
3
+ * The heading line of a dialog, an alert dialog, a drawer, a sheet or a popover:
4
+ * the title voice's face, weight, ink and variation, at its own size.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.3, plan R1. `overlayTitleClasses` spelt
7
+ * `font-mono text-(length:--cue-text-emphasis) font-medium text-fg`. It reads
8
+ * `style-title-face` and `style-title-weight` because a Look's dialog title is
9
+ * its card title's face and weight, but `style-overlay-title-size` rather than
10
+ * `style-title-size`, because the one Look that sizes it measured them apart
11
+ * (Porcelain: a 20px dialog title over 16px card titles, P42). It reads no
12
+ * tracking and no leading: no Look measured either on an overlay.
13
+ *
14
+ * | property | reads | fallback (the class it replaced) |
15
+ * |-------------------------|----------------------------|----------------------------------|
16
+ * | font-family | `style-title-face` | `var(--cue-font-mono)` (`font-mono`) |
17
+ * | font-size | `style-overlay-title-size` | `var(--cue-text-emphasis)` |
18
+ * | font-weight | `style-title-weight` | `500` (`font-medium`) |
19
+ * | font-variation-settings | `style-display-variation` | `normal` |
20
+ * | color | `style-heading-ink` | `var(--cue-fg)` (`text-fg`) |
21
+ *
22
+ * `style-display-variation` is here although the plan's R1 list for this site
23
+ * leaves it out: the spec (§3.1) names "the title-voice readers" as its readers,
24
+ * and §3.3 names this title as one of them.
25
+ *
26
+ * **Every name is optional** (spec §3.0), so under every shipped set each
27
+ * `var()` resolves its fallback at the title. A module of its own and not an
28
+ * import of `_style-title.ts`, which would publish that file's size, tracking and
29
+ * leading as tokens every overlay paints.
30
+ *
31
+ * @internal Not part of the public API.
32
+ */
33
+ const OVERLAY_TITLE_VOICE = "font-[family-name:var(--cue-style-title-face,var(--cue-font-mono))] text-[length:var(--cue-style-overlay-title-size,var(--cue-text-emphasis))] leading-[var(--cue-style-overlay-title-leading,inherit)] font-[number:var(--cue-style-title-weight,500)] [font-variation-settings:var(--cue-style-display-variation,normal)] text-[color:var(--cue-style-heading-ink,var(--cue-fg))]";
34
+ //#endregion
35
+ export { OVERLAY_TITLE_VOICE };