@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,48 @@
1
+ //#region src/system/_style-page-title.ts
2
+ /**
3
+ * The `PageShell` h1's voice: mono, `text-title`, weight 500, at the page's own
4
+ * tracking and leading, in `fg`, until a style set says otherwise.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.2 (and §3.1 for the ink and the variation),
7
+ * plan R1. The page title and a card's title are separate voices, because three
8
+ * Looks measure them apart: Porcelain 36px against 16px, Kiln 64px against 32px,
9
+ * Zine a display face against a sans. So the h1 reads its own five
10
+ * `style-page-title-*` names rather than the title voice's
11
+ * (`_style-title.ts`), and shares only the two names every heading shares:
12
+ * `style-heading-ink` and `style-display-variation`.
13
+ *
14
+ * | property | reads | fallback (the class it replaced) |
15
+ * |-------------------------|--------------------------------|----------------------------------|
16
+ * | font-family | `style-page-title-face` | `var(--cue-font-mono)` (`font-mono`) |
17
+ * | font-size | `style-page-title-size` | `var(--cue-text-title)` |
18
+ * | font-weight | `style-page-title-weight` | `500` (`font-medium`) |
19
+ * | letter-spacing | `style-page-title-tracking` | `normal` |
20
+ * | line-height | `style-page-title-leading` | `inherit` |
21
+ * | font-variation-settings | `style-display-variation` | `normal` |
22
+ * | color | `style-heading-ink` | `var(--cue-fg)` (`text-fg`) |
23
+ *
24
+ * **Every name is optional** (spec §3.0): none is declared on `:root`, `console`
25
+ * declines each, and every shipped set leaves them at the shared
26
+ * `[data-style] { …: initial }` reset, so each `var()` resolves its fallback at
27
+ * the h1 itself — the value the old class computed there, under every set and in
28
+ * every density island.
29
+ *
30
+ * **Weight is `font-[number:…]`**, the typed form: a bare `font-[var(…)]` is
31
+ * read as a family by `tailwind-merge`, and the arbitrary property
32
+ * `[font-weight:…]` is in no `tailwind-merge` group at all, so a caller's
33
+ * `font-bold` would no longer replace it — and it sorts after `font-bold` in the
34
+ * built stylesheet, so it would win. `number:` keeps both Tailwind and
35
+ * `tailwind-merge` reading a weight.
36
+ *
37
+ * **Size before leading**, because `tailwind-merge` drops a `leading-*` that
38
+ * precedes a font size in the same list.
39
+ *
40
+ * **Its own module**, because `@repo/docgen` attributes a token to a component by
41
+ * the file its class string lives in, following only `_`-prefixed imports:
42
+ * every name here is one the page title spends, and nothing else imports it.
43
+ *
44
+ * @internal Not part of the public API.
45
+ */
46
+ const PAGE_TITLE_VOICE = "font-[family-name:var(--cue-style-page-title-face,var(--cue-font-mono))] text-[length:var(--cue-style-page-title-size,var(--cue-text-title))] font-[number:var(--cue-style-page-title-weight,500)] tracking-[var(--cue-style-page-title-tracking,normal)] leading-[var(--cue-style-page-title-leading,inherit)] [font-variation-settings:var(--cue-style-display-variation,normal)] text-[color:var(--cue-style-heading-ink,var(--cue-fg))] [overflow-wrap:anywhere]";
47
+ //#endregion
48
+ export { PAGE_TITLE_VOICE };
@@ -0,0 +1,17 @@
1
+ //#region src/system/_style-page.ts
2
+ /**
3
+ * Pagination's current page (round 6, spec §11, lane R6.P:
4
+ * `style-page-current-ground`, `style-page-current-rim`, `style-page-current-edge`),
5
+ * falling back to the `accent-soft` fill and no rim, as it drew. coss.com/ui marks the
6
+ * current page as an outline button: the surface, in a 1px rim (P167.current,
7
+ * P167.current-edge).
8
+ *
9
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
10
+ * reader falls back to what the component drew. Its own module for docgen's
11
+ * reason: one component's tokens per file.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const PAGE_CURRENT = "border-solid border-[length:var(--cue-style-page-current-rim,0px)] border-[color:var(--cue-style-page-current-edge,transparent)] bg-[color:var(--cue-style-page-current-ground,var(--cue-accent-soft))] text-accent";
16
+ //#endregion
17
+ export { PAGE_CURRENT };
@@ -0,0 +1,18 @@
1
+ //#region src/system/_style-palette.ts
2
+ /**
3
+ * The command palette's own parts (round 6, spec §11, lane R6.P): the rule under
4
+ * its search field (`style-palette-rule`), falling back to the `border` it
5
+ * drew, and its footer's block padding (`style-palette-footer-pad`), falling
6
+ * back to `space-2`. coss.com/ui draws no rule there and pads its footer 12px
7
+ * (P152.input-rule, P152.footer).
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 PALETTE_RULE = "border-[color:var(--cue-style-palette-rule,var(--cue-border))]";
15
+ /** @see PALETTE_RULE */
16
+ const PALETTE_FOOTER_PAD = "py-[var(--cue-style-palette-footer-pad,var(--cue-space-2))]";
17
+ //#endregion
18
+ export { PALETTE_FOOTER_PAD, PALETTE_RULE };
@@ -0,0 +1,21 @@
1
+ //#region src/system/_style-panel.ts
2
+ /**
3
+ * A panel header's padding and rule (round 6, spec §11, lane R6.P:
4
+ * `style-panel-pad-y`, `style-panel-pad-x`, `style-panel-rule`), falling back
5
+ * to the row paddings and the `border` it drew. coss.com/ui's frame panel pads
6
+ * its header 16px by 20px and draws no rule under it (P158, P158.pad-inline,
7
+ * P158.header-rule).
8
+ *
9
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
10
+ * reader falls back to what the component drew. Its own module for docgen's
11
+ * reason: one component's tokens per file.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const PANEL_PAD_Y = "py-[var(--cue-style-panel-pad-y,var(--cue-pad-row-y))]";
16
+ /** @see PANEL_PAD_Y */
17
+ const PANEL_PAD_X = "px-[var(--cue-style-panel-pad-x,var(--cue-pad-row-x))]";
18
+ /** @see PANEL_PAD_Y */
19
+ const PANEL_RULE = "border-[color:var(--cue-style-panel-rule,var(--cue-border))]";
20
+ //#endregion
21
+ export { PANEL_PAD_X, PANEL_PAD_Y, PANEL_RULE };
@@ -0,0 +1,13 @@
1
+ //#region src/system/_style-popover-pad.ts
2
+ /**
3
+ * The popover's padding (plan V.2, P131): the `space-4` rung times
4
+ * `style-popover-pad`, `1` under a set that has none. Porcelain's popover is
5
+ * 16px in.
6
+ *
7
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
8
+ *
9
+ * @internal Not part of the public API.
10
+ */
11
+ const POPOVER_PAD = "p-[calc(var(--cue-space-4)*var(--cue-style-popover-pad,1))]";
12
+ //#endregion
13
+ export { POPOVER_PAD };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-popover-width.ts
2
+ /**
3
+ * A popover's width (round 6, spec §11, lane R6.P: `style-popover-width`), falling
4
+ * back to the `auto` it drew, sized to its content under its viewport cap.
5
+ * coss.com/ui's popover is 320px (`w-80`, P168.width).
6
+ *
7
+ * **Optional** (spec §3.0): declared by `porcelain` alone, and the reader falls
8
+ * back to what the component drew. Its own module for docgen's reason: one
9
+ * component's tokens per file.
10
+ *
11
+ * @internal Not part of the public API.
12
+ */
13
+ const POPOVER_WIDTH = "w-[var(--cue-style-popover-width,auto)]";
14
+ //#endregion
15
+ export { POPOVER_WIDTH };
@@ -0,0 +1,13 @@
1
+ //#region src/system/_style-quiet-ink.ts
2
+ /**
3
+ * The quiet ink, for a site that reads it without the rest of the control
4
+ * vocabulary: the disclosure trigger (plan V.2, P125) — `style-quiet-ink`,
5
+ * falling back to the `fg-muted` it drew. The same class `_style-control.ts`
6
+ * spells as `GHOST_INK`, restated in a module of its own so docgen does not
7
+ * publish every button name as a token of an accordion.
8
+ *
9
+ * @internal Not part of the public API.
10
+ */
11
+ const QUIET_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
12
+ //#endregion
13
+ export { QUIET_INK };
@@ -0,0 +1,19 @@
1
+ //#region src/system/_style-radio.ts
2
+ /**
3
+ * A checked radio (round 6, spec §11, lane R6.P): its ground
4
+ * (`style-radio-checked-ground`), falling back to the `sunken` it keeps; its dot's
5
+ * ink and size (`style-radio-dot-ink`, `style-radio-dot-size`), falling back to
6
+ * the `accent` half-size dot it drew. coss.com/ui fills a checked radio in `fg`
7
+ * around a 6px dot in the page ground (P171.checked-edge, P171.dot-size).
8
+ *
9
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
10
+ * reader falls back to what the component drew. Its own module for docgen's
11
+ * reason: one component's tokens per file.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const RADIO_CHECKED_GROUND = "data-[checked]:bg-[color:var(--cue-style-radio-checked-ground,var(--cue-sunken))]";
16
+ /** @see RADIO_CHECKED_GROUND */
17
+ const RADIO_DOT = "size-[var(--cue-style-radio-dot-size,calc(1/2*100%))] bg-[color:var(--cue-style-radio-dot-ink,var(--cue-accent))]";
18
+ //#endregion
19
+ export { RADIO_CHECKED_GROUND, RADIO_DOT };
@@ -0,0 +1,17 @@
1
+ //#region src/system/_style-row-disabled.ts
2
+ /**
3
+ * A disabled row's fade in a menu, a command palette and a listbox (round 6,
4
+ * spec §11, lane R6.P: `style-row-disabled-opacity`), falling back to the 0.4 it
5
+ * drew. Its own name rather than `style-disabled-opacity`: a set that lifts the
6
+ * controls' fade to 1 and dims them by ink (Tender) would otherwise leave a
7
+ * disabled row undimmed. coss.com/ui fades its disabled menu row to 0.64
8
+ * (P163.disabled).
9
+ *
10
+ * **Optional** (spec §3.0). Its own module for docgen's reason: one token per
11
+ * file, so only the components that read it are credited with it.
12
+ *
13
+ * @internal Not part of the public API.
14
+ */
15
+ const ROW_DISABLED_OPACITY = "data-[disabled]:opacity-[var(--cue-style-row-disabled-opacity,0.4)]";
16
+ //#endregion
17
+ export { ROW_DISABLED_OPACITY };
@@ -0,0 +1,13 @@
1
+ //#region src/system/_style-row-pad.ts
2
+ /**
3
+ * A table row's block padding (plan V.2, P121): the `pad-row-y` rung times
4
+ * `style-row-pad`, `1` under a set that has none. Porcelain's table rows are
5
+ * 40px, half again its rung's padding.
6
+ *
7
+ * **Optional** (spec §3.0). Its own module for docgen's reason.
8
+ *
9
+ * @internal Not part of the public API.
10
+ */
11
+ const ROW_PAD_Y = "py-[calc(var(--cue-pad-row-y)*var(--cue-style-row-pad,1))]";
12
+ //#endregion
13
+ export { ROW_PAD_Y };
@@ -0,0 +1,30 @@
1
+ //#region src/system/_style-row.ts
2
+ /**
3
+ * `Row` in the rule idiom (round 6, spec §11, lane R6.T: `style-row-ink`,
4
+ * `style-row-block-pad`, `style-row-rule-style`).
5
+ *
6
+ * stripe.com's list with dividers (`.hds-list--show-dividers`) draws each item
7
+ * in its soft ink (`--hds-color-text-soft`), pads its foot 16px and rules it
8
+ * 1px dashed in its quiet border ink (`.hds-list__item--showDivider`, T136).
9
+ * Each reader falls back to the class it replaced: `text-fg`, the row's
10
+ * `--cue-pad-row-y`, and the solid of the `--tw-border-style` slot the rule's
11
+ * `border-t` reads (`_style-footer-rule.ts` gives the reason for the slot).
12
+ * The block pad and the rule style apply to the rule idiom only; a seam row
13
+ * (`SeamList`) keeps its own.
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ const ROW_INK = "text-[color:var(--cue-style-row-ink,var(--cue-fg))]";
18
+ /**
19
+ * A ruled row's block padding, at zero specificity (`:where()`), the only
20
+ * `py` a ruled row carries: a consumer's own `py-*` beats it wherever
21
+ * Tailwind emits the two, as it beat the `py-(--cue-pad-row-y)` this replaced —
22
+ * a consumer composing `rowVariants({ className: "py-2" })` on its own element
23
+ * kept its padding before round 6, and an arbitrary-value reader, emitted after
24
+ * `py-2`, took it away (the closing pass's adversarial review).
25
+ */
26
+ const ROW_BLOCK_PAD = "[:where(&)]:py-[var(--cue-style-row-block-pad,var(--cue-pad-row-y))]";
27
+ /** The line style of the rule a ruled row draws above itself. */
28
+ const ROW_RULE_STYLE = "[--tw-border-style:var(--cue-style-row-rule-style,solid)]";
29
+ //#endregion
30
+ export { ROW_BLOCK_PAD, ROW_INK, ROW_RULE_STYLE };
@@ -0,0 +1,19 @@
1
+ //#region src/system/_style-scrollbar.ts
2
+ /**
3
+ * A scroll area's bar and thumb (round 6, spec §11, lane R6.P: `style-scrollbar-size`,
4
+ * `style-scrollbar-thumb`), falling back to the `space-3` bar and the
5
+ * `border-strong` thumb it drew. coss.com/ui's bar is 6px (P172, P172.thumb).
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 SCROLLBAR_SIZE_V = "data-[orientation=vertical]:w-[var(--cue-style-scrollbar-size,var(--cue-space-3))]";
14
+ /** @see SCROLLBAR_SIZE_V */
15
+ const SCROLLBAR_SIZE_H = "data-[orientation=horizontal]:h-[var(--cue-style-scrollbar-size,var(--cue-space-3))]";
16
+ /** @see SCROLLBAR_SIZE_V */
17
+ const SCROLLBAR_THUMB = "bg-[color:var(--cue-style-scrollbar-thumb,var(--cue-border-strong))]";
18
+ //#endregion
19
+ export { SCROLLBAR_SIZE_H, SCROLLBAR_SIZE_V, SCROLLBAR_THUMB };
@@ -0,0 +1,43 @@
1
+ //#region src/system/_style-seam.ts
2
+ /**
3
+ * The seam idiom's ink: the colour that shows through a 1px gap and becomes the
4
+ * hairline between two filled cells.
5
+ *
6
+ * Spec 2026-09-26 R-8. `SeamGrid`, `SeamList` and `<Card seam>` each hard-coded
7
+ * `bg-border` for it, so a style set could say how its bands are ruled
8
+ * (`--cue-band-rule-color`) and had no way to say that the line INSIDE a
9
+ * component is lighter than a box edge — which is what every site in the
10
+ * 2026-09-22 corpus that draws seams does (agent-native's seam is its subtle
11
+ * line, not its default border). `--cue-style-seam-color` is that statement.
12
+ *
13
+ * **The fallback is the old class, spelt out.** `bg-border` compiles to
14
+ * `background-color: var(--cue-border)`, and `--cue-style-seam-color` is on no
15
+ * `:root` — a `:root` `var(--cue-border)` would be substituted at `<html>` and
16
+ * freeze the page's border into every theme island. Under no set this resolves
17
+ * at the grid itself, exactly as `bg-border` did.
18
+ *
19
+ * @internal Not part of the public API.
20
+ */
21
+ const SEAM_INK = "bg-[color:var(--cue-style-seam-color,var(--cue-border))]";
22
+ /**
23
+ * The rim a bordered seam container draws around its cells, in the seam's ink.
24
+ *
25
+ * The rim is part of the idiom rather than an unrelated border: `SeamGrid`'s
26
+ * `bordered` is "a hairline rim around the whole grid as well as between the
27
+ * cells", and a rim in the box-edge colour around seams in a lighter one reads
28
+ * as a box drawn around a grid — the one thing the idiom exists not to be.
29
+ *
30
+ * **`bg-clip-padding` is what keeps a translucent seam honest.** The container's
31
+ * own background is the seam, and by default it paints under the border too; an
32
+ * opaque ink hides that, but a share over transparency — graphite's
33
+ * `color-mix(in oklch, var(--cue-border) 60%, transparent)` — would lay the rim
34
+ * over a second copy of itself and draw it darker than the seams it encloses.
35
+ * Under an opaque ink, which is every set but graphite and every page under no
36
+ * set, the clip changes nothing a reader can see: the border covers exactly the
37
+ * area it removes the background from.
38
+ *
39
+ * @internal Not part of the public API.
40
+ */
41
+ const SEAM_RIM = "border-[color:var(--cue-style-seam-color,var(--cue-border))] bg-clip-padding";
42
+ //#endregion
43
+ export { SEAM_INK, SEAM_RIM };
@@ -0,0 +1,26 @@
1
+ //#region src/system/_style-section-rule.ts
2
+ /**
3
+ * The ink of a rule that divides a section: `SectionHeader`'s hairline and the
4
+ * rule over `Footer`'s fine print.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.11 (plan R4). Both drew `var(--cue-border)`
7
+ * through `bg-border` and `border-border`, and a Look that sets its sections
8
+ * apart by space alone (kiln) had no way to take the line away without taking
9
+ * the box edges with it. `--cue-style-section-rule` says it, and these read it.
10
+ *
11
+ * **The fallbacks are the old classes, spelt out**, for the reason
12
+ * `_style-control-face.ts` gives. Two exports because the two readers paint
13
+ * the same ink through two properties: the header's rule is a `h-px` block
14
+ * with a ground, the footer's is a top border.
15
+ *
16
+ * **Its own module**, for the docgen reason `_style-nav-voice.ts` gives: both
17
+ * readers read exactly this one name.
18
+ *
19
+ * @internal Not part of the public API.
20
+ */
21
+ /** A rule drawn as a filled hairline block (`SectionHeader`). */
22
+ const SECTION_RULE_FILL = "bg-[color:var(--cue-style-section-rule,var(--cue-border))]";
23
+ /** A rule drawn as a border (`Footer`'s fine print); the element sets which side. */
24
+ const SECTION_RULE_EDGE = "border-[color:var(--cue-style-section-rule,var(--cue-border))]";
25
+ //#endregion
26
+ export { SECTION_RULE_EDGE, SECTION_RULE_FILL };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-segment-pad.ts
2
+ /**
3
+ * A tab's and a segment's inline padding at the md step (round 6, spec §11, lane
4
+ * R6.P: `style-segment-pad`), falling back to the `space-4` both drew. coss.com/ui
5
+ * pads both 9px (P182.pad, P173.item-pad).
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 SEGMENT_PAD = "px-[var(--cue-style-segment-pad,var(--cue-space-4))]";
14
+ //#endregion
15
+ export { SEGMENT_PAD };
@@ -0,0 +1,30 @@
1
+ //#region src/system/_style-segment.ts
2
+ /**
3
+ * The segment family's shared half: the ink of a choice that is not the
4
+ * current one — read by `SegmentedControl` and `Tabs` alike.
5
+ *
6
+ * Spec 2026-09-26-looks-fidelity §3.8 and §3.10 (plan R4). Both components
7
+ * mark the current choice their own way — a tinted segment, an underlined
8
+ * tab — and two Looks draw both as one object: a filled track with the choice
9
+ * raised on it as a pill with an edge and a resting shade (kiln, porcelain).
10
+ * The segment names say it, in both components at once. Where each component
11
+ * draws the track, and what it reads for its current choice, has a fallback of
12
+ * its own, so it lives with that component: `SegmentedControl`'s frame and
13
+ * pressed segment in `_style-segmented-control.ts`, the `Tabs` list and active
14
+ * tab in `_style-tab.ts`.
15
+ *
16
+ * **The fallback is the class it replaced**, for the reason
17
+ * `_style-control-face.ts` gives: an idle choice was `text-fg-muted`.
18
+ *
19
+ * **Its own module, holding only what both read**, because `@repo/docgen`
20
+ * credits a component with every `--cue-*` in each `_`-prefixed file it
21
+ * imports (`_style-nav-voice.ts`'s note). When the pressed segment's constants
22
+ * lived here, `Tabs` was published as a user of `--cue-accent-soft`, the
23
+ * pressed segment's fallback, which no tab paints.
24
+ *
25
+ * @internal Not part of the public API.
26
+ */
27
+ /** A choice that is not the current one. */
28
+ const SEGMENT_IDLE_INK = "text-[color:var(--cue-style-segment-idle-ink,var(--cue-fg-muted))]";
29
+ //#endregion
30
+ export { SEGMENT_IDLE_INK };
@@ -0,0 +1,86 @@
1
+ //#region src/system/_style-segmented-control.ts
2
+ /**
3
+ * What `SegmentedControl` reads from the style set: the track its segments sit
4
+ * in, and the pressed segment's ground, ink, weight, edge, resting shade and
5
+ * corners.
6
+ *
7
+ * Spec 2026-09-26-looks-fidelity §3.8 and §3.10 (plan R4). The shared half of
8
+ * the segment family — the track and the idle ink — is `_style-segment.ts`,
9
+ * whose docblock tells the family's story; the active tab's counterpart is in
10
+ * `_style-tab.ts`.
11
+ *
12
+ * **The track is the frame.** Spec §3.8 names "the list" as the reader of
13
+ * `style-segment-track` and `style-segment-inset`, and R4 first read them on
14
+ * the `ToggleGroup` inside the frame. That box has no corners and sits inside
15
+ * the frame's own ground, border and padding, so a Look's track (kiln's
16
+ * `surface-3`, porcelain's tint inset 2px) drew a square box within a rounded
17
+ * `surface-1` rim instead of a rounded track with the pill on it. The frame is
18
+ * the rounded object — `rounded-control`, the rim, the ground, the inset — so
19
+ * it reads both names, with its own classes as the fallbacks:
20
+ * `var(--cue-surface-1)` and `var(--cue-space-1)`. The list reads nothing.
21
+ * The overflow chevrons sit in the frame's padding over the segments, so their
22
+ * ground follows the track too, laid over an opaque `surface-1` so a
23
+ * translucent track (porcelain's) still hides the segments scrolled beneath.
24
+ *
25
+ * **Every fallback is the class it replaced**, for the reason
26
+ * `_style-control-face.ts` gives:
27
+ *
28
+ * - the frame: `bg-surface-1` and `p-(--cue-space-1)`; the chevrons:
29
+ * `bg-surface-1`, under a transparent layer;
30
+ * - the ground and ink: `bg-accent-soft` and `text-accent`;
31
+ * - weight `400`, which the segment inherited and computed under every
32
+ * shipped set;
33
+ * - the edge: `transparent`, drawn as an inset ring so it never moves layout;
34
+ * - the resting shade: `paint-rest-shade`, `transparent` under every pack but
35
+ * glaze;
36
+ * - the corners: `rounded-control`'s own value (below).
37
+ *
38
+ * **The edge and the rest shade are one `shadow-[…]` list**, and it is written
39
+ * out in full rather than built from `REST_SHADE`: Tailwind finds a class by
40
+ * scanning source text, so a class assembled at runtime is a class it never
41
+ * generates (`_focus-ring.ts` records the failure). `test/system/style-navigation.test.tsx`
42
+ * holds the literal to `REST_SHADE`, spaces as underscores. A transparent
43
+ * layer paints nothing, so the list is a rendered no-op until a Look names an
44
+ * edge or a pack a shade.
45
+ *
46
+ * **What the segment never had yields to a caller's class.** The ground and
47
+ * ink replaced `data-[pressed]:bg-accent-soft` and `data-[pressed]:text-accent`
48
+ * and keep the standing those classes had. The weight and the shadow are
49
+ * declarations the segment had in no state, so a caller's
50
+ * `itemClassName="font-medium shadow-sm"` applied to the pressed segment as to
51
+ * the others. A `data-[pressed]:` utility is `(0,2,0)` and would beat such a
52
+ * class on the pressed segment alone, so these are written
53
+ * `[:where(&[data-pressed])]:` — the same state at zero specificity — and a
54
+ * caller's class wins in every state again. The weight is `font-[number:…]`
55
+ * for `_style-nav-voice.ts`'s reason.
56
+ *
57
+ * **The segment's radius nests in the track's inset**:
58
+ * `radius-control` less `style-segment-inset`, so a pill inset 2px into its
59
+ * track keeps concentric corners. Its fallback is `0px`, not the frame's
60
+ * `space-1`: at `0px` it is `rounded-control`'s own value, which is what the
61
+ * segment drew, and one name's readers keep their own fallbacks (spec §3.0).
62
+ * Only a set that names an inset nests the corners.
63
+ *
64
+ * **Its own module**, for the docgen reason `_style-segment.ts` gives: the
65
+ * frame, the `accent-soft` fallback and the nested radius are this
66
+ * component's alone.
67
+ *
68
+ * @internal Not part of the public API.
69
+ */
70
+ /** The frame, which is the track: its ground and its inset. */
71
+ const SEGMENTED_TRACK = "bg-[color:var(--cue-style-segment-track,var(--cue-surface-1))] p-[var(--cue-style-segment-inset,var(--cue-space-1))]";
72
+ /** The overflow chevrons' ground: the track's colour over an opaque `surface-1`. */
73
+ const SEGMENTED_CHEVRON_GROUND = "bg-surface-1 bg-[image:linear-gradient(var(--cue-style-segment-track,transparent),var(--cue-style-segment-track,transparent))]";
74
+ /** A segment's corners, nested inside the track's inset. */
75
+ const SEGMENT_RADIUS = "rounded-[calc(var(--cue-radius-control)*var(--cue-radius-scale)-var(--cue-style-segment-inset,0px))]";
76
+ /** `SegmentedControl`'s pressed segment. */
77
+ const SEGMENT_PRESSED = "data-[pressed]:bg-[color:var(--cue-style-segment-ground,var(--cue-accent-soft))] data-[pressed]:text-[color:var(--cue-style-segment-ink,var(--cue-accent))] [:where(&[data-pressed])]:font-[number:var(--cue-style-segment-weight,400)] [:where(&[data-pressed])]:shadow-[inset_0_0_0_var(--cue-border-width)_var(--cue-style-segment-edge,transparent),0_calc(2px*var(--cue-paint-shadow-scale))_calc(4px*var(--cue-paint-shadow-scale))_var(--cue-paint-rest-shade,transparent)]";
78
+ /**
79
+ * The frame's rim (plan V.2, K129): `style-segment-rim`, falling back to the
80
+ * `border-border` the frame drew. Kiln's source draws its segmented track with
81
+ * no rim at all — a `surface-3` ground and nothing around it — and the frame's
82
+ * border was the one part of the control no name reached.
83
+ */
84
+ const SEGMENTED_RIM = "border-[color:var(--cue-style-segment-rim,var(--cue-border))]";
85
+ //#endregion
86
+ export { SEGMENTED_CHEVRON_GROUND, SEGMENTED_RIM, SEGMENTED_TRACK, SEGMENT_PRESSED, SEGMENT_RADIUS };
@@ -0,0 +1,36 @@
1
+ //#region src/system/_style-selected.ts
2
+ /**
3
+ * The ground and ink of a selected table row.
4
+ *
5
+ * Spec 2026-09-26-looks-fidelity §3.8 (plan R4). `Table.Row` said
6
+ * `data-[selected]:bg-accent-soft` and set no ink of its own. Spec §3.8 names
7
+ * this row as a reader of both `style-selected-ground` and
8
+ * `style-selected-ink`, and the two travel together for a reason a Look makes
9
+ * concrete: kiln's selection is inverted, `var(--cue-fg)` behind
10
+ * `var(--cue-bg)`, and a row that took the ground without the ink would set
11
+ * the table's `fg` text on an `fg` ground.
12
+ *
13
+ * **Each fallback is this reader's own value**, which is not the sidebar's
14
+ * (spec §3.0: readers of one name keep their own fallbacks). The ground was
15
+ * `var(--cue-accent-soft)`. The ink was inherited from the table's `text-fg`,
16
+ * so its fallback is `currentColor`, which on `color` computes exactly the
17
+ * inherited value — under no set and every set that declines the name, the
18
+ * row renders what it did.
19
+ *
20
+ * **The ink yields to a caller's own ink.** The row set no colour, so
21
+ * `<Table.Row selected className="text-fg-muted">` stayed muted when selected.
22
+ * A `data-[selected]:` ink is `(0,2,0)` and would beat that class, and
23
+ * `currentColor` on `color` takes the PARENT's colour, not the row's own class;
24
+ * so the ink is written `[:where(&[data-selected])]:` — the same state at zero
25
+ * specificity — and a caller's ink class wins again. The ground replaced
26
+ * `data-[selected]:bg-accent-soft` and keeps its standing, as that did.
27
+ *
28
+ * **Its own module**, for the docgen reason `_style-nav-voice.ts` gives: the
29
+ * table reads neither `style-nav-active-ground` nor `style-selected-weight`,
30
+ * so it does not share `_style-nav-item.ts`.
31
+ *
32
+ * @internal Not part of the public API.
33
+ */
34
+ const SELECTED_ROW = "data-[selected]:bg-[color:var(--cue-style-selected-ground,var(--cue-accent-soft))] [:where(&[data-selected])]:text-[color:var(--cue-style-selected-ink,currentColor)]";
35
+ //#endregion
36
+ export { SELECTED_ROW };
@@ -0,0 +1,15 @@
1
+ //#region src/system/_style-skeleton.ts
2
+ /**
3
+ * A skeleton block's corner (round 6, spec §11, lane R6.P: `style-skeleton-radius`),
4
+ * falling back to the `rounded-control` corner it drew. coss.com/ui rounds its
5
+ * skeletons 6px (P177.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 SKELETON_RADIUS = "rounded-[var(--cue-style-skeleton-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
14
+ //#endregion
15
+ export { SKELETON_RADIUS };
@@ -0,0 +1,26 @@
1
+ //#region src/system/_style-slider.ts
2
+ /**
3
+ * A slider's rail and thumb (round 6, spec §11, lane R6.P): the rail's height and
4
+ * ink (`style-slider-track-height`, `style-slider-track-ink`), falling back to
5
+ * the `h-0.5` and `border` it drew; the thumb's size, fill, rim width and rim
6
+ * ink (`style-slider-thumb-size`, `-fill`, `-rim`, `-edge`), falling back to
7
+ * its 8px `accent` dot with no rim. coss.com/ui draws a 4px rail in its input
8
+ * ink and a 16px (20px on a phone) white thumb in a 1px rim (P178).
9
+ *
10
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
11
+ * reader falls back to what the component drew. Its own module for docgen's
12
+ * reason: one component's tokens per file.
13
+ *
14
+ * @internal Not part of the public API.
15
+ */
16
+ const SLIDER_TRACK_HEIGHT = "h-[var(--cue-style-slider-track-height,0.125rem)]";
17
+ /** @see SLIDER_TRACK_HEIGHT */
18
+ const SLIDER_TRACK_INK = "bg-[color:var(--cue-style-slider-track-ink,var(--cue-border))]";
19
+ /** @see SLIDER_TRACK_HEIGHT */
20
+ const SLIDER_THUMB_SIZE = "size-[var(--cue-style-slider-thumb-size,0.5rem)]";
21
+ /** @see SLIDER_TRACK_HEIGHT */
22
+ const SLIDER_THUMB_FILL = "bg-[color:var(--cue-style-slider-thumb-fill,var(--cue-accent))]";
23
+ /** @see SLIDER_TRACK_HEIGHT — a width, so a set that names none draws no rim at all. */
24
+ const SLIDER_THUMB_RIM = "border-solid border-[length:var(--cue-style-slider-thumb-rim,0px)] border-[color:var(--cue-style-slider-thumb-edge,transparent)]";
25
+ //#endregion
26
+ export { SLIDER_THUMB_FILL, SLIDER_THUMB_RIM, SLIDER_THUMB_SIZE, SLIDER_TRACK_HEIGHT, SLIDER_TRACK_INK };
@@ -0,0 +1,26 @@
1
+ //#region src/system/_style-stage-marks.ts
2
+ /**
3
+ * Whether a preview frame draws its registration marks — spec
4
+ * 2026-09-26-looks-fidelity §3.11, `style-stage-marks` (row P52).
5
+ *
6
+ * The four crosshairs at a frame's stage corners are this library's own
7
+ * furniture, and four of the measured Looks' sources draw nothing there. A
8
+ * mark is decoration, so a set says `none` and the marks go; `inline` keeps
9
+ * them.
10
+ *
11
+ * **The fallback is the old value, spelt out.** A mark is an absolutely
12
+ * positioned `<span>`, which the engine blockifies: `inline` computes
13
+ * `display: block`, exactly what the span computed with no `display` class at
14
+ * all. `--cue-style-stage-marks` is on no `:root` (contract round 2's optional
15
+ * names are reset to `initial` under every `[data-style]` that declines them),
16
+ * so under no set and every shipped set today the marks draw as they did.
17
+ *
18
+ * **Its own module**, because `@repo/docgen` attributes a token to a component
19
+ * by the file its class string lives in, following only `_`-prefixed imports.
20
+ * `Preview` is this file's only reader.
21
+ *
22
+ * @internal Not part of the public API.
23
+ */
24
+ const STAGE_MARKS = "[display:var(--cue-style-stage-marks,inline)]";
25
+ //#endregion
26
+ export { STAGE_MARKS };
@@ -0,0 +1,31 @@
1
+ //#region src/system/_style-stat.ts
2
+ /**
3
+ * `Stat`'s value, detail and gap (round 6, spec §11, lane R6.T:
4
+ * `style-stat-size`, `-weight`, `-leading`, `-tracking`,
5
+ * `style-stat-detail-size`, `-detail-leading`, `style-stat-gap`).
6
+ *
7
+ * stripe.com sets a stat's value in its xxl text rung (`hds-text--xxl`: 48px,
8
+ * 40px on phones, at 300, 1.0 and 1.07 leading, −0.02em and −0.01em
9
+ * tracking) and its description in its body rung (`hds-text--md`: 16px at
10
+ * 300 and 1.4), 12px apart (`.hds-stat`'s gap), T137. Each reader falls back
11
+ * to the class it replaced: the value's `text-title`, inherited weight,
12
+ * `leading-none` and inherited tracking; the detail's `text-label` and
13
+ * inherited leading; and `space-2` times 1.
14
+ *
15
+ * @internal Not part of the public API.
16
+ */
17
+ const STAT_SIZE = "text-[length:var(--cue-style-stat-size,var(--cue-text-title))]";
18
+ /** The value's weight. */
19
+ const STAT_WEIGHT = "font-[number:var(--cue-style-stat-weight,inherit)]";
20
+ /** The value's leading. */
21
+ const STAT_LEADING = "leading-[var(--cue-style-stat-leading,1)]";
22
+ /** The value's tracking. */
23
+ const STAT_TRACKING = "tracking-[var(--cue-style-stat-tracking,inherit)]";
24
+ /** The detail's size. */
25
+ const STAT_DETAIL_SIZE = "text-[length:var(--cue-style-stat-detail-size,var(--cue-text-label))]";
26
+ /** The detail's leading. */
27
+ const STAT_DETAIL_LEADING = "leading-[var(--cue-style-stat-detail-leading,inherit)]";
28
+ /** The gap between the label, the value and the detail. */
29
+ const STAT_GAP = "gap-[calc(var(--cue-space-2)*var(--cue-style-stat-gap,1))]";
30
+ //#endregion
31
+ export { STAT_DETAIL_LEADING, STAT_DETAIL_SIZE, STAT_GAP, STAT_LEADING, STAT_SIZE, STAT_TRACKING, STAT_WEIGHT };
@@ -0,0 +1,16 @@
1
+ //#region src/system/_style-stepper.ts
2
+ /**
3
+ * A number field's stepper width at the md step (round 6, spec §11, lane R6.P:
4
+ * `style-stepper-width`), falling back to the square `control-md` box it drew.
5
+ * coss.com/ui's steppers are 38px wide (40px on a phone) beside a 32px field
6
+ * (P165.stepper).
7
+ *
8
+ * **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
9
+ * reader falls back to what the component drew. Its own module for docgen's
10
+ * reason: one component's tokens per file.
11
+ *
12
+ * @internal Not part of the public API.
13
+ */
14
+ const STEPPER_WIDTH = "w-[var(--cue-style-stepper-width,var(--cue-control-md))]";
15
+ //#endregion
16
+ export { STEPPER_WIDTH };