@cueplusplus/ui 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/CHANGELOG.md +1083 -0
  2. package/README.md +26 -0
  3. package/dist/agent-runtime/tool-call-card.js +7 -3
  4. package/dist/brand/_chassis.d.ts +1 -1
  5. package/dist/brand/cue-mark.d.ts +1 -1
  6. package/dist/brand/cue-mark.js +1 -1
  7. package/dist/charts/ramps.js +1 -1
  8. package/dist/chat/agent-pile.js +2 -1
  9. package/dist/chat/ask-box.js +4 -3
  10. package/dist/chat/delegation-card.js +3 -2
  11. package/dist/chat/message-list.js +4 -2
  12. package/dist/chat/message.js +17 -7
  13. package/dist/chrome/_edge-scroller.js +2 -1
  14. package/dist/chrome/_status-bar.js +9 -3
  15. package/dist/chrome/_tabs-scroll.d.ts +17 -1
  16. package/dist/chrome/_tabs-scroll.js +20 -3
  17. package/dist/chrome/app-bar.js +10 -3
  18. package/dist/chrome/app-shell.js +2 -1
  19. package/dist/chrome/band.d.ts +18 -12
  20. package/dist/chrome/band.js +19 -31
  21. package/dist/chrome/eyebrow.d.ts +13 -5
  22. package/dist/chrome/eyebrow.js +18 -7
  23. package/dist/chrome/footer.d.ts +5 -0
  24. package/dist/chrome/footer.js +14 -3
  25. package/dist/chrome/navigation-menu.js +4 -2
  26. package/dist/chrome/page-shell.js +8 -5
  27. package/dist/chrome/panel.d.ts +5 -2
  28. package/dist/chrome/panel.js +9 -4
  29. package/dist/chrome/row.js +6 -3
  30. package/dist/chrome/scroll-area.js +2 -1
  31. package/dist/chrome/section-header.js +13 -4
  32. package/dist/chrome/segmented-control.js +12 -3
  33. package/dist/chrome/status-bar.js +2 -1
  34. package/dist/chrome/tabs.js +11 -3
  35. package/dist/chrome/toolbar.js +2 -1
  36. package/dist/chrome/tree.js +3 -2
  37. package/dist/color/_thumb.js +9 -3
  38. package/dist/color/color-area.js +1 -1
  39. package/dist/color/color-field.d.ts +2 -1
  40. package/dist/color/color-picker.d.ts +2 -1
  41. package/dist/color/color-swatch.js +1 -1
  42. package/dist/configurator/_overrides.js +13 -4
  43. package/dist/configurator/configurator.js +4 -1
  44. package/dist/configurator/export-dialog.js +5 -2
  45. package/dist/configurator/panel-sections.js +6 -2
  46. package/dist/configurator/token-editor.js +4 -1
  47. package/dist/date/calendar.js +12 -8
  48. package/dist/date/date-field.d.ts +2 -1
  49. package/dist/date/date-picker.d.ts +2 -1
  50. package/dist/date/date-range-picker.d.ts +2 -1
  51. package/dist/date/time-field.d.ts +2 -1
  52. package/dist/dmx/channel-matrix.js +3 -2
  53. package/dist/dmx/dmx-bar.js +1 -1
  54. package/dist/dmx/dmx-strip.js +1 -1
  55. package/dist/dmx/universe-grid.js +3 -2
  56. package/dist/elements/activity-graph.js +3 -3
  57. package/dist/elements/agent-card.js +3 -3
  58. package/dist/elements/approval-card.js +3 -3
  59. package/dist/elements/artifact-card.js +2 -2
  60. package/dist/elements/background-inbox.js +2 -2
  61. package/dist/elements/canvas-split.js +2 -2
  62. package/dist/elements/chart.js +1 -1
  63. package/dist/elements/chat-panel.js +2 -2
  64. package/dist/elements/checkpoint-history.js +2 -2
  65. package/dist/elements/clamp.js +2 -1
  66. package/dist/elements/code-diff.js +1 -1
  67. package/dist/elements/code-runner.js +1 -1
  68. package/dist/elements/command-palette.js +6 -5
  69. package/dist/elements/comparison-card.js +2 -2
  70. package/dist/elements/composer.js +9 -8
  71. package/dist/elements/computer-use.js +1 -1
  72. package/dist/elements/confidence-marker.js +2 -1
  73. package/dist/elements/connection-state.js +1 -1
  74. package/dist/elements/context-breakdown.js +1 -1
  75. package/dist/elements/context-usage.js +1 -1
  76. package/dist/elements/conversation-search.js +4 -3
  77. package/dist/elements/cost-meter.js +1 -1
  78. package/dist/elements/data-table.js +2 -2
  79. package/dist/elements/day-separator.js +1 -1
  80. package/dist/elements/diagram.js +1 -1
  81. package/dist/elements/document-reference.js +3 -3
  82. package/dist/elements/draft-restore.js +1 -1
  83. package/dist/elements/edit-message.js +4 -3
  84. package/dist/elements/elements.css +26 -5
  85. package/dist/elements/elicitation-form.js +3 -3
  86. package/dist/elements/empty-state.js +2 -1
  87. package/dist/elements/error-state.js +1 -1
  88. package/dist/elements/feedback-dialog.js +4 -3
  89. package/dist/elements/file-tree.js +2 -2
  90. package/dist/elements/flow-graph.js +2 -2
  91. package/dist/elements/guardrail-notice.js +3 -3
  92. package/dist/elements/image-generation.js +1 -1
  93. package/dist/elements/inline-citation.js +3 -3
  94. package/dist/elements/job-progress.js +3 -3
  95. package/dist/elements/launcher-bubble.js +2 -2
  96. package/dist/elements/loading-state.js +1 -1
  97. package/dist/elements/map-answer.js +3 -2
  98. package/dist/elements/markdown.js +5 -4
  99. package/dist/elements/math-block.js +1 -1
  100. package/dist/elements/mcp-server-panel.js +3 -3
  101. package/dist/elements/message-attachment.js +4 -4
  102. package/dist/elements/message-pair.js +1 -1
  103. package/dist/elements/message-queue.js +2 -2
  104. package/dist/elements/mobile-composer.js +4 -3
  105. package/dist/elements/model-picker.js +3 -3
  106. package/dist/elements/onboarding.js +2 -2
  107. package/dist/elements/permission-grant.js +2 -2
  108. package/dist/elements/permission-scopes.js +5 -4
  109. package/dist/elements/prompt-library.js +7 -6
  110. package/dist/elements/queue-dock.js +4 -3
  111. package/dist/elements/quota-banner.js +1 -1
  112. package/dist/elements/quote-reply.js +1 -1
  113. package/dist/elements/read-aloud.js +2 -2
  114. package/dist/elements/reasoning-panel.js +2 -1
  115. package/dist/elements/recommendation-card.d.ts +1 -1
  116. package/dist/elements/recommendation-card.js +2 -2
  117. package/dist/elements/regenerate-menu.js +2 -2
  118. package/dist/elements/research-report.js +1 -1
  119. package/dist/elements/retrieval-chunks.js +1 -1
  120. package/dist/elements/revert-dock.js +5 -4
  121. package/dist/elements/reviewable-diff.js +1 -1
  122. package/dist/elements/schedule-card.js +3 -3
  123. package/dist/elements/score-breakdown.js +1 -1
  124. package/dist/elements/scroll-anchor.js +2 -2
  125. package/dist/elements/settings-panel.js +3 -2
  126. package/dist/elements/shared-conversation.js +2 -2
  127. package/dist/elements/sources.js +4 -3
  128. package/dist/elements/speaker-identity.js +1 -1
  129. package/dist/elements/spec-sheet.js +1 -1
  130. package/dist/elements/streaming-text.js +1 -1
  131. package/dist/elements/subagent-list.js +2 -2
  132. package/dist/elements/suggestions.js +1 -1
  133. package/dist/elements/surfaces.d.ts +1 -1
  134. package/dist/elements/surfaces.js +2 -1
  135. package/dist/elements/tail-status.js +1 -1
  136. package/dist/elements/terminal-block.js +1 -1
  137. package/dist/elements/thread-list.js +1 -1
  138. package/dist/elements/thread-search.js +5 -4
  139. package/dist/elements/timeline.js +1 -1
  140. package/dist/elements/todo-list.js +2 -2
  141. package/dist/elements/tool-call.js +4 -3
  142. package/dist/elements/tool-error.js +2 -2
  143. package/dist/elements/tool-group.js +1 -1
  144. package/dist/elements/tool-timeline.js +4 -3
  145. package/dist/elements/trace-waterfall.js +1 -1
  146. package/dist/elements/verdict-row.js +2 -2
  147. package/dist/elements/voice-conversation.js +3 -2
  148. package/dist/elements/web-preview.js +1 -1
  149. package/dist/elements/web-search.js +2 -2
  150. package/dist/elements/work-collapse.js +2 -1
  151. package/dist/flow/node-card.js +3 -2
  152. package/dist/flow/use-flow-theme.js +2 -1
  153. package/dist/forms/_chassis-size.d.ts +22 -0
  154. package/dist/forms/_chassis.d.ts +28 -15
  155. package/dist/forms/_chassis.js +34 -8
  156. package/dist/forms/_listbox.js +8 -5
  157. package/dist/forms/autocomplete.d.ts +2 -1
  158. package/dist/forms/checkbox.js +8 -2
  159. package/dist/forms/combobox.d.ts +2 -1
  160. package/dist/forms/env-var-input.d.ts +2 -1
  161. package/dist/forms/env-var-input.js +3 -2
  162. package/dist/forms/field.d.ts +2 -1
  163. package/dist/forms/field.js +15 -4
  164. package/dist/forms/file-upload.js +3 -2
  165. package/dist/forms/index.d.ts +2 -1
  166. package/dist/forms/input-group.d.ts +2 -1
  167. package/dist/forms/input.d.ts +2 -1
  168. package/dist/forms/multi-select.d.ts +2 -1
  169. package/dist/forms/number-field.js +2 -1
  170. package/dist/forms/otp-field.d.ts +2 -1
  171. package/dist/forms/password-input.d.ts +2 -1
  172. package/dist/forms/password-input.js +4 -2
  173. package/dist/forms/radio-group.js +6 -2
  174. package/dist/forms/rating.js +2 -1
  175. package/dist/forms/scrub-input.d.ts +2 -1
  176. package/dist/forms/scrub-input.js +2 -1
  177. package/dist/forms/search-input.d.ts +2 -1
  178. package/dist/forms/search-input.js +2 -1
  179. package/dist/forms/select.d.ts +2 -1
  180. package/dist/forms/select.js +6 -2
  181. package/dist/forms/slider.js +6 -2
  182. package/dist/forms/switch.js +6 -2
  183. package/dist/forms/tags-input.d.ts +2 -1
  184. package/dist/forms/textarea.js +2 -1
  185. package/dist/forms/toggle-group.d.ts +1 -1
  186. package/dist/forms/toggle.d.ts +1 -1
  187. package/dist/forms/toggle.js +3 -1
  188. package/dist/index.d.ts +4 -3
  189. package/dist/index.js +2 -2
  190. package/dist/instruments/_data-row.js +2 -1
  191. package/dist/instruments/app-window-frame.js +1 -1
  192. package/dist/instruments/code-block.js +8 -2
  193. package/dist/instruments/group-bar.js +1 -1
  194. package/dist/instruments/ledger.js +6 -2
  195. package/dist/instruments/log-viewer.js +5 -3
  196. package/dist/instruments/progress.js +5 -2
  197. package/dist/instruments/seam-grid.js +5 -3
  198. package/dist/instruments/stat.js +10 -3
  199. package/dist/instruments/table.js +28 -10
  200. package/dist/instruments/terminal-frame.js +4 -2
  201. package/dist/instruments/usage-chart.js +1 -1
  202. package/dist/layout/_collapse.js +6 -1
  203. package/dist/layout/bento.js +7 -4
  204. package/dist/layout/breadcrumb.js +7 -3
  205. package/dist/layout/card.js +14 -6
  206. package/dist/layout/carousel.js +3 -2
  207. package/dist/layout/collapsible.js +5 -1
  208. package/dist/layout/container.js +2 -1
  209. package/dist/layout/description-list.js +4 -1
  210. package/dist/layout/frames.js +11 -5
  211. package/dist/layout/item.js +3 -2
  212. package/dist/layout/link.d.ts +16 -0
  213. package/dist/layout/link.js +22 -3
  214. package/dist/layout/pagination.js +2 -1
  215. package/dist/layout/preview.d.ts +32 -12
  216. package/dist/layout/preview.js +149 -40
  217. package/dist/layout/resizable.js +2 -1
  218. package/dist/layout/sidebar.js +11 -3
  219. package/dist/layout/stepper.js +6 -2
  220. package/dist/lib/cn.js +29 -2
  221. package/dist/midi/musical-time-input.d.ts +2 -1
  222. package/dist/midi/piano-keyboard.js +3 -2
  223. package/dist/midi/spectrum-visualizer.js +1 -1
  224. package/dist/midi/threshold-rail.js +2 -1
  225. package/dist/midi/timeline-ruler.js +1 -1
  226. package/dist/overlays/_surface.d.ts +72 -12
  227. package/dist/overlays/_surface.js +86 -12
  228. package/dist/overlays/command-palette.js +9 -5
  229. package/dist/overlays/dialog.d.ts +5 -0
  230. package/dist/overlays/dialog.js +6 -1
  231. package/dist/overlays/info-tip.js +2 -1
  232. package/dist/overlays/menubar.js +3 -1
  233. package/dist/overlays/popover.js +2 -1
  234. package/dist/overlays/toast.js +6 -2
  235. package/dist/overlays/tooltip.js +4 -1
  236. package/dist/primitives/button.d.ts +15 -0
  237. package/dist/primitives/button.js +40 -10
  238. package/dist/primitives/chip.d.ts +20 -2
  239. package/dist/primitives/chip.js +39 -17
  240. package/dist/primitives/kbd.d.ts +6 -0
  241. package/dist/primitives/kbd.js +10 -1
  242. package/dist/primitives/skeleton.js +1 -1
  243. package/dist/system/_focus-ring-field.js +29 -0
  244. package/dist/system/_focus-ring.js +125 -0
  245. package/dist/system/_paint-elevation.js +9 -0
  246. package/dist/system/_paint-glass.js +46 -0
  247. package/dist/system/_paint-glow.js +51 -0
  248. package/dist/system/_paint-ground-pattern.js +30 -0
  249. package/dist/system/_paint-rest-shade.js +32 -0
  250. package/dist/system/_paint-rim.js +59 -0
  251. package/dist/system/_paint-stroke-sunken.js +19 -0
  252. package/dist/system/_paint-stroke-surface-1.js +19 -0
  253. package/dist/system/_paint-stroke-surface-2.js +40 -0
  254. package/dist/system/_paint-texture.js +56 -0
  255. package/dist/system/_style-app-bar.js +65 -0
  256. package/dist/system/_style-band.js +57 -0
  257. package/dist/system/_style-body-leading.js +21 -0
  258. package/dist/system/_style-body-size.js +30 -0
  259. package/dist/system/_style-body-weight.js +24 -0
  260. package/dist/system/_style-body.js +27 -0
  261. package/dist/system/_style-caption.js +19 -0
  262. package/dist/system/_style-card-pad.js +43 -0
  263. package/dist/system/_style-check.js +33 -0
  264. package/dist/system/_style-chip.js +103 -0
  265. package/dist/system/_style-code.js +13 -0
  266. package/dist/system/_style-collapse.js +14 -0
  267. package/dist/system/_style-control-face.js +29 -0
  268. package/dist/system/_style-control-label.js +22 -0
  269. package/dist/system/_style-control-step.js +22 -0
  270. package/dist/system/_style-control.js +76 -0
  271. package/dist/system/_style-data-face.js +28 -0
  272. package/dist/system/_style-description.js +23 -0
  273. package/dist/system/_style-eyebrow.js +43 -0
  274. package/dist/system/_style-footer-rule.js +47 -0
  275. package/dist/system/_style-gutter.js +17 -0
  276. package/dist/system/_style-help-ink.js +14 -0
  277. package/dist/system/_style-help.js +29 -0
  278. package/dist/system/_style-input-face.js +34 -0
  279. package/dist/system/_style-kbd.js +46 -0
  280. package/dist/system/_style-label-case.js +36 -0
  281. package/dist/system/_style-label-face.js +32 -0
  282. package/dist/system/_style-label-ink.js +29 -0
  283. package/dist/system/_style-label-leading.js +14 -0
  284. package/dist/system/_style-label-size.js +36 -0
  285. package/dist/system/_style-label-tracking.js +45 -0
  286. package/dist/system/_style-label-weight.js +40 -0
  287. package/dist/system/_style-lede.js +49 -0
  288. package/dist/system/_style-link.js +46 -0
  289. package/dist/system/_style-menu.js +30 -0
  290. package/dist/system/_style-nav-item.js +41 -0
  291. package/dist/system/_style-nav-voice.js +43 -0
  292. package/dist/system/_style-option.js +42 -0
  293. package/dist/system/_style-overlay-title.js +35 -0
  294. package/dist/system/_style-page-title.js +48 -0
  295. package/dist/system/_style-popover-pad.js +13 -0
  296. package/dist/system/_style-quiet-ink.js +13 -0
  297. package/dist/system/_style-row-pad.js +13 -0
  298. package/dist/system/_style-seam.js +43 -0
  299. package/dist/system/_style-section-rule.js +26 -0
  300. package/dist/system/_style-segment.js +30 -0
  301. package/dist/system/_style-segmented-control.js +86 -0
  302. package/dist/system/_style-selected.js +36 -0
  303. package/dist/system/_style-stage-marks.js +26 -0
  304. package/dist/system/_style-tab.js +71 -0
  305. package/dist/system/_style-textarea.js +21 -0
  306. package/dist/system/_style-title.js +37 -0
  307. package/dist/system/_style-tooltip.js +17 -0
  308. package/dist/system/density.d.ts +15 -5
  309. package/dist/system/density.js +188 -25
  310. package/dist/system/index.d.ts +2 -2
  311. package/dist/system/index.js +2 -2
  312. package/dist/system/overrides.d.ts +1 -0
  313. package/dist/system/overrides.js +151 -3
  314. package/dist/system/portal.d.ts +3 -2
  315. package/dist/system/portal.js +22 -10
  316. package/dist/system/prepaint.d.ts +21 -5
  317. package/dist/system/prepaint.js +3 -1
  318. package/dist/system/published.d.ts +1 -0
  319. package/dist/system/published.js +131 -0
  320. package/dist/system/theme-provider.d.ts +168 -60
  321. package/dist/system/theme-provider.js +375 -79
  322. package/dist/system/theme-registry.d.ts +2 -1
  323. package/dist/system/theme-registry.js +27 -10
  324. package/dist/system/use-density.js +4 -3
  325. package/dist/system/use-theme.d.ts +5 -2
  326. package/dist/system/use-theme.js +7 -4
  327. package/dist/system/vocabulary.js +2 -2
  328. package/dist/theming/create-theme.js +12 -6
  329. package/dist/theming/serialize.d.ts +34 -2
  330. package/dist/theming/serialize.js +86 -4
  331. package/manifest/components/accordion.json +7 -1
  332. package/manifest/components/agent-pile.json +3 -0
  333. package/manifest/components/alert-dialog.json +38 -1
  334. package/manifest/components/app-bar.json +23 -2
  335. package/manifest/components/app-shell.json +5 -0
  336. package/manifest/components/ask-box.json +3 -1
  337. package/manifest/components/autocomplete.json +49 -1
  338. package/manifest/components/band.json +14 -3
  339. package/manifest/components/bento.json +12 -1
  340. package/manifest/components/breadcrumb.json +8 -1
  341. package/manifest/components/button.json +31 -3
  342. package/manifest/components/calendar.json +7 -0
  343. package/manifest/components/card.json +28 -1
  344. package/manifest/components/carousel.json +4 -1
  345. package/manifest/components/channel-matrix.json +40 -1
  346. package/manifest/components/chart-tooltip-content.json +38 -1
  347. package/manifest/components/chat-empty-state.json +3 -1
  348. package/manifest/components/checkbox-group.json +14 -0
  349. package/manifest/components/checkbox.json +14 -0
  350. package/manifest/components/chip.json +16 -1
  351. package/manifest/components/clamp.json +3 -1
  352. package/manifest/components/code-block.json +10 -1
  353. package/manifest/components/collapsible.json +13 -2
  354. package/manifest/components/color-area.json +4 -2
  355. package/manifest/components/color-field.json +14 -0
  356. package/manifest/components/color-picker.json +14 -0
  357. package/manifest/components/color-slider.json +3 -1
  358. package/manifest/components/colors-section.json +9 -1
  359. package/manifest/components/combobox.json +49 -1
  360. package/manifest/components/command-palette.json +37 -1
  361. package/manifest/components/composer-actions.json +3 -0
  362. package/manifest/components/composer-attach-button.json +3 -0
  363. package/manifest/components/composer-attachment-chip.json +3 -0
  364. package/manifest/components/composer-attachments.json +3 -0
  365. package/manifest/components/composer-bar.json +3 -0
  366. package/manifest/components/composer-command-item.json +3 -0
  367. package/manifest/components/composer-context.json +3 -0
  368. package/manifest/components/composer-input.json +3 -0
  369. package/manifest/components/composer-menu-item.json +3 -0
  370. package/manifest/components/composer-menu.json +3 -0
  371. package/manifest/components/composer-model-item.json +3 -0
  372. package/manifest/components/composer-model-trigger.json +3 -0
  373. package/manifest/components/composer-person-item.json +3 -0
  374. package/manifest/components/composer-send.json +3 -0
  375. package/manifest/components/composer-toolbar.json +3 -0
  376. package/manifest/components/composer-voice-button.json +3 -0
  377. package/manifest/components/composer-voice.json +3 -0
  378. package/manifest/components/composer.json +14 -0
  379. package/manifest/components/confidence-marker.json +3 -1
  380. package/manifest/components/container.json +2 -1
  381. package/manifest/components/context-menu.json +38 -1
  382. package/manifest/components/conversation-search.json +3 -1
  383. package/manifest/components/cue-mark.json +2 -2
  384. package/manifest/components/cue-portal-frame.json +1 -1
  385. package/manifest/components/data-row.json +3 -1
  386. package/manifest/components/data-tree.json +3 -1
  387. package/manifest/components/date-field.json +14 -0
  388. package/manifest/components/date-picker.json +14 -0
  389. package/manifest/components/date-range-picker.json +14 -0
  390. package/manifest/components/delegation-card.json +3 -1
  391. package/manifest/components/density.json +21 -7
  392. package/manifest/components/description-list.json +6 -1
  393. package/manifest/components/dialog.json +39 -1
  394. package/manifest/components/disclosure.json +13 -2
  395. package/manifest/components/dmx-bar.json +37 -1
  396. package/manifest/components/dmx-strip.json +37 -1
  397. package/manifest/components/drawer.json +38 -1
  398. package/manifest/components/dropdown-menu.json +38 -1
  399. package/manifest/components/edit-message.json +3 -1
  400. package/manifest/components/elements-command-palette.json +3 -1
  401. package/manifest/components/elements-composer.json +3 -0
  402. package/manifest/components/empty-state-composer.json +3 -1
  403. package/manifest/components/empty-state-greeting.json +3 -1
  404. package/manifest/components/empty-state-suggestion.json +3 -1
  405. package/manifest/components/empty-state-suggestions.json +3 -1
  406. package/manifest/components/env-var-input.json +14 -1
  407. package/manifest/components/export-dialog.json +6 -1
  408. package/manifest/components/eyebrow.json +13 -2
  409. package/manifest/components/feedback-dialog.json +3 -0
  410. package/manifest/components/field-description.json +14 -0
  411. package/manifest/components/field-error.json +14 -0
  412. package/manifest/components/field-label.json +15 -1
  413. package/manifest/components/field.json +14 -0
  414. package/manifest/components/file-upload.json +3 -0
  415. package/manifest/components/footer.json +14 -1
  416. package/manifest/components/frames.json +14 -1
  417. package/manifest/components/hover-card.json +38 -1
  418. package/manifest/components/info-tip.json +3 -0
  419. package/manifest/components/input-group.json +14 -0
  420. package/manifest/components/input.json +14 -0
  421. package/manifest/components/item.json +3 -1
  422. package/manifest/components/kbd.json +10 -1
  423. package/manifest/components/ledger.json +9 -2
  424. package/manifest/components/link.json +10 -0
  425. package/manifest/components/log-viewer.json +10 -0
  426. package/manifest/components/map-answer.json +3 -1
  427. package/manifest/components/markdown-text.json +3 -0
  428. package/manifest/components/menubar.json +41 -2
  429. package/manifest/components/message-list.json +10 -0
  430. package/manifest/components/message.json +6 -1
  431. package/manifest/components/mobile-composer.json +3 -1
  432. package/manifest/components/multi-select.json +49 -1
  433. package/manifest/components/musical-time-input.json +14 -0
  434. package/manifest/components/navigation-menu.json +41 -1
  435. package/manifest/components/node-card.json +3 -0
  436. package/manifest/components/number-field.json +14 -1
  437. package/manifest/components/otp-field.json +13 -0
  438. package/manifest/components/page-shell.json +14 -0
  439. package/manifest/components/pagination.json +3 -0
  440. package/manifest/components/panel-header.json +12 -0
  441. package/manifest/components/panel.json +13 -1
  442. package/manifest/components/password-input.json +14 -1
  443. package/manifest/components/permission-scopes.json +3 -1
  444. package/manifest/components/piano-keyboard.json +3 -0
  445. package/manifest/components/popover.json +39 -1
  446. package/manifest/components/preset-section.json +9 -1
  447. package/manifest/components/preview.json +30 -10
  448. package/manifest/components/progress.json +6 -1
  449. package/manifest/components/prompt-library.json +3 -1
  450. package/manifest/components/queue-dock.json +3 -1
  451. package/manifest/components/radio-group.json +8 -0
  452. package/manifest/components/radio.json +8 -0
  453. package/manifest/components/rating.json +4 -1
  454. package/manifest/components/reasoning-panel.json +3 -1
  455. package/manifest/components/recommendation-card.json +1 -1
  456. package/manifest/components/resizable.json +4 -1
  457. package/manifest/components/revert-dock.json +3 -1
  458. package/manifest/components/row.json +5 -1
  459. package/manifest/components/scroll-area.json +4 -2
  460. package/manifest/components/scrollable-tabs-list.json +19 -0
  461. package/manifest/components/scrub-input.json +14 -1
  462. package/manifest/components/seam-cell.json +1 -0
  463. package/manifest/components/seam-grid.json +1 -0
  464. package/manifest/components/seam-list.json +5 -1
  465. package/manifest/components/search-input.json +14 -1
  466. package/manifest/components/section-header.json +15 -2
  467. package/manifest/components/segmented-control.json +17 -0
  468. package/manifest/components/select.json +28 -0
  469. package/manifest/components/settings-panel.json +3 -0
  470. package/manifest/components/shape-section.json +9 -1
  471. package/manifest/components/sheet.json +38 -1
  472. package/manifest/components/shimmer-label.json +3 -0
  473. package/manifest/components/sidebar.json +19 -2
  474. package/manifest/components/slider.json +8 -0
  475. package/manifest/components/sources.json +3 -1
  476. package/manifest/components/stat.json +9 -0
  477. package/manifest/components/status-bar.json +4 -0
  478. package/manifest/components/stepper.json +8 -0
  479. package/manifest/components/swap-label.json +3 -0
  480. package/manifest/components/switch.json +8 -0
  481. package/manifest/components/table-scroll-region.json +20 -2
  482. package/manifest/components/table.json +20 -2
  483. package/manifest/components/tabs.json +20 -1
  484. package/manifest/components/tags-input.json +49 -1
  485. package/manifest/components/terminal-frame.json +3 -0
  486. package/manifest/components/textarea.json +16 -0
  487. package/manifest/components/theme-configurator.json +38 -1
  488. package/manifest/components/theme-provider.json +37 -19
  489. package/manifest/components/thread-search.json +3 -1
  490. package/manifest/components/threshold-rail.json +3 -0
  491. package/manifest/components/time-field.json +14 -0
  492. package/manifest/components/toast.json +39 -0
  493. package/manifest/components/toggle-group.json +1 -19
  494. package/manifest/components/toggle.json +3 -5
  495. package/manifest/components/token-editor.json +6 -1
  496. package/manifest/components/tool-call-card.json +9 -2
  497. package/manifest/components/tool-call.json +3 -1
  498. package/manifest/components/tool-timeline.json +3 -1
  499. package/manifest/components/toolbar.json +4 -1
  500. package/manifest/components/tooltip.json +40 -1
  501. package/manifest/components/tree-visibility-toggle.json +3 -0
  502. package/manifest/components/tree.json +3 -0
  503. package/manifest/components/universe-grid.json +3 -0
  504. package/manifest/components/voice-conversation.json +3 -0
  505. package/manifest/components/work-collapse.json +3 -1
  506. package/manifest/manifest.json +205 -185
  507. package/manifest/tokens.json +260 -4
  508. package/package.json +6 -6
@@ -1,13 +1,6 @@
1
1
  import { ClassProp, VariantProps } from "../lib/cva.js";
2
+ import { FormControlSize } from "./_chassis-size.js";
2
3
  //#region src/forms/_chassis.d.ts
3
- /**
4
- * The rung of the density control ladder a form control sits on.
5
- *
6
- * Named `FormControlSize` rather than `ControlSize` because
7
- * `@cueplusplus/ui/system` already exports a `ControlSize` for
8
- * `useControlHeight`, and the root barrel re-exports both.
9
- */
10
- type FormControlSize = "sm" | "md" | "lg";
11
4
  /**
12
5
  * Everything the recessed control chassis paints except the box itself.
13
6
  *
@@ -90,14 +83,34 @@ type FormControlSize = "sm" | "md" | "lg";
90
83
  *
91
84
  * The compound modifier outranks the plain one on specificity — an attribute
92
85
  * selector and a pseudo-class against one pseudo-class — so its position in
93
- * Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
94
- * `focus-visible:outline-2` still supply the style and the width in both cases,
95
- * which is why only the colour is restated.
86
+ * Tailwind's utility order cannot decide it. {@link FOCUS_RING_FIELD} still
87
+ * supplies the style and the width in both cases, which is why only the
88
+ * colour is restated.
96
89
  *
97
90
  * `focus-visible:outline-solid` re-declares the outline style the sibling
98
91
  * `outline-none` switched off — see the note on `buttonChassis`.
92
+ *
93
+ * The width is {@link FOCUS_RING_FIELD}'s, read from `--cue-style-focus-width`
94
+ * (`_focus-ring.ts` says why every ring in this system shares one module); the
95
+ * border it is pulled back over reads `--cue-style-focus-edge` for the same
96
+ * reason a Look needs to move it — tender's dark band and kiln both do.
97
+ *
98
+ * The face (mono, unless a style set names another — `INPUT_FACE` says why) is
99
+ * what a person's typing renders in, at the body weight (`BODY_WEIGHT`:
100
+ * inherited, as it was before the name existed, unless a style set names one);
101
+ * a call site that deliberately keeps a typed value in mono regardless of the
102
+ * set (a hex colour code, a DMX value) restates `font-mono` on top, as
103
+ * `color-picker.tsx`'s hex field does.
104
+ *
105
+ * **The resting shade** ({@link REST_SHADE_CLASS}, spec §3.10) is the one
106
+ * shadow this recipe draws: the stroke paints a border and a ground and no
107
+ * shadow, so the shade is added as a utility of its own rather than composed
108
+ * into a list. It paints nothing until a pack tints `paint-rest-shade` —
109
+ * measured in `tests/browser/paint-elevation-noop.spec.ts` — and a caller's
110
+ * own `shadow-` utility replaces it through `twMerge`, as it would have
111
+ * replaced nothing before.
99
112
  */
100
- declare const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
113
+ declare const controlSurface = "w-full rounded-control border-transparent border-(length:--cue-paint-stroke-width) bg-[linear-gradient(var(--cue-sunken),var(--cue-sunken)),linear-gradient(var(--cue-paint-stroke-angle),var(--cue-paint-stroke-from,var(--cue-border)),var(--cue-paint-stroke-to,var(--cue-border)))] bg-origin-border [background-clip:padding-box,border-box] shadow-[shadow:0_calc(2px*var(--cue-paint-shadow-scale))_calc(4px*var(--cue-paint-shadow-scale))_var(--cue-paint-rest-shade,transparent)] font-[family-name:var(--cue-style-input-face,var(--cue-font-mono))] font-[number:var(--cue-style-body-weight,inherit)] text-fg placeholder:text-fg-subtle outline-none focus:border-[color:var(--cue-style-focus-edge,var(--cue-border-strong))] focus-visible:outline-solid focus-visible:outline-[length:var(--cue-style-focus-width,var(--cue-focus-ring))] focus-visible:outline-(--cue-focus) focus-visible:outline-offset-[var(--cue-style-field-focus-offset,-1px)] disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
101
114
  /**
102
115
  * The full recessed-control recipe, one variant per rung of the control ladder.
103
116
  *
@@ -127,7 +140,7 @@ declare const controlClasses: string;
127
140
  * inherits the font size from the wrapper so the two never disagree about which
128
141
  * density rung they are on.
129
142
  */
130
- declare const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
143
+ declare const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-[family-name:var(--cue-style-input-face,var(--cue-font-mono))] font-[number:var(--cue-style-body-weight,inherit)] text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
131
144
  /**
132
145
  * Focus feedback for a wrapper that owns the rim on behalf of an inner control.
133
146
  *
@@ -159,6 +172,6 @@ declare const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 f
159
172
  * UI's `Field` stamps it and where the group already takes
160
173
  * `data-[invalid]:border-danger` from {@link controlVariants}.
161
174
  */
162
- declare const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
175
+ declare const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-solid has-focus-visible:outline-[length:var(--cue-style-focus-width,var(--cue-focus-ring))] has-focus-visible:outline-(--cue-focus) has-focus-visible:outline-offset-[var(--cue-style-field-focus-offset,-1px)] data-[invalid]:has-focus-visible:outline-danger";
163
176
  //#endregion
164
- export { ControlVariantProps, FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
177
+ export { ControlVariantProps, type FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
@@ -1,4 +1,10 @@
1
+ import { REST_SHADE_CLASS } from "../system/_paint-rest-shade.js";
1
2
  import { cva } from "../lib/cva.js";
3
+ import { FOCUS_RING_FIELD, FOCUS_RING_GROUP_FIELD } from "../system/_focus-ring-field.js";
4
+ import { CONTROL_STEP_SIZE_BODY, CONTROL_STEP_SIZE_SM } from "../system/_style-control-step.js";
5
+ import { STROKE_SUNKEN } from "../system/_paint-stroke-sunken.js";
6
+ import { BODY_WEIGHT } from "../system/_style-body-weight.js";
7
+ import { INPUT_FACE } from "../system/_style-input-face.js";
2
8
  //#region src/forms/_chassis.ts
3
9
  /**
4
10
  * Everything the recessed control chassis paints except the box itself.
@@ -82,14 +88,34 @@ import { cva } from "../lib/cva.js";
82
88
  *
83
89
  * The compound modifier outranks the plain one on specificity — an attribute
84
90
  * selector and a pseudo-class against one pseudo-class — so its position in
85
- * Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
86
- * `focus-visible:outline-2` still supply the style and the width in both cases,
87
- * which is why only the colour is restated.
91
+ * Tailwind's utility order cannot decide it. {@link FOCUS_RING_FIELD} still
92
+ * supplies the style and the width in both cases, which is why only the
93
+ * colour is restated.
88
94
  *
89
95
  * `focus-visible:outline-solid` re-declares the outline style the sibling
90
96
  * `outline-none` switched off — see the note on `buttonChassis`.
97
+ *
98
+ * The width is {@link FOCUS_RING_FIELD}'s, read from `--cue-style-focus-width`
99
+ * (`_focus-ring.ts` says why every ring in this system shares one module); the
100
+ * border it is pulled back over reads `--cue-style-focus-edge` for the same
101
+ * reason a Look needs to move it — tender's dark band and kiln both do.
102
+ *
103
+ * The face (mono, unless a style set names another — `INPUT_FACE` says why) is
104
+ * what a person's typing renders in, at the body weight (`BODY_WEIGHT`:
105
+ * inherited, as it was before the name existed, unless a style set names one);
106
+ * a call site that deliberately keeps a typed value in mono regardless of the
107
+ * set (a hex colour code, a DMX value) restates `font-mono` on top, as
108
+ * `color-picker.tsx`'s hex field does.
109
+ *
110
+ * **The resting shade** ({@link REST_SHADE_CLASS}, spec §3.10) is the one
111
+ * shadow this recipe draws: the stroke paints a border and a ground and no
112
+ * shadow, so the shade is added as a utility of its own rather than composed
113
+ * into a list. It paints nothing until a pack tints `paint-rest-shade` —
114
+ * measured in `tests/browser/paint-elevation-noop.spec.ts` — and a caller's
115
+ * own `shadow-` utility replaces it through `twMerge`, as it would have
116
+ * replaced nothing before.
91
117
  */
92
- const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
118
+ const controlSurface = `w-full rounded-control ${STROKE_SUNKEN} ${REST_SHADE_CLASS} ${INPUT_FACE} ${BODY_WEIGHT} text-fg placeholder:text-fg-subtle outline-none focus:border-[color:var(--cue-style-focus-edge,var(--cue-border-strong))] ${FOCUS_RING_FIELD} disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger`;
93
119
  /**
94
120
  * The full recessed-control recipe, one variant per rung of the control ladder.
95
121
  *
@@ -102,9 +128,9 @@ const controlSurface = "w-full rounded-(--radius-control) border border-border b
102
128
  */
103
129
  const controlVariants = cva(controlSurface, {
104
130
  variants: { size: {
105
- sm: "h-control-sm px-(--cue-space-3) text-(length:--cue-text-label)",
131
+ sm: `h-control-sm px-(--cue-space-3) ${CONTROL_STEP_SIZE_SM}`,
106
132
  md: "h-control-md px-(--cue-space-4) text-(length:--cue-text-ui)",
107
- lg: "h-control-lg px-(--cue-space-5) text-(length:--cue-text-body)"
133
+ lg: `h-control-lg px-(--cue-space-5) ${CONTROL_STEP_SIZE_BODY}`
108
134
  } },
109
135
  defaultVariants: { size: "md" }
110
136
  });
@@ -122,7 +148,7 @@ const controlClasses = controlVariants();
122
148
  * inherits the font size from the wrapper so the two never disagree about which
123
149
  * density rung they are on.
124
150
  */
125
- const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
151
+ const bareControlClasses = `min-w-0 flex-1 border-0 bg-transparent p-0 ${INPUT_FACE} ${BODY_WEIGHT} text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40`;
126
152
  /**
127
153
  * Focus feedback for a wrapper that owns the rim on behalf of an inner control.
128
154
  *
@@ -154,6 +180,6 @@ const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono
154
180
  * UI's `Field` stamps it and where the group already takes
155
181
  * `data-[invalid]:border-danger` from {@link controlVariants}.
156
182
  */
157
- const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
183
+ const controlGroupFocusClasses = `focus-within:border-border-strong ${FOCUS_RING_GROUP_FIELD} data-[invalid]:has-focus-visible:outline-danger`;
158
184
  //#endregion
159
185
  export { bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
@@ -1,4 +1,7 @@
1
+ import { FOCUS_RING } from "../system/_focus-ring.js";
2
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
1
3
  import { overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses } from "../overlays/_surface.js";
4
+ import { OPTION_ROW } from "../system/_style-option.js";
2
5
  //#region src/forms/_listbox.ts
3
6
  /**
4
7
  * The shared skin of every filterable list in this group — `Combobox`,
@@ -26,9 +29,9 @@ const listboxListClasses = "max-h-[min(var(--available-height),18rem)] overflow-
26
29
  * navigation and the pointer agree on which row is active, and the tint is
27
30
  * `accent-soft` rather than a solid fill (the luma defect ruling).
28
31
  */
29
- const listboxItemClasses = "flex h-control-sm cursor-default items-center gap-(--cue-space-2) px-(--cue-space-3) font-mono text-(length:--cue-text-ui) text-fg-muted outline-none select-none data-[highlighted]:bg-accent-soft data-[highlighted]:text-fg data-[selected]:text-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-40";
32
+ const listboxItemClasses = `flex h-control-sm cursor-default items-center gap-(--cue-space-2) px-(--cue-space-3) ${CONTROL_FACE} text-(length:--cue-text-ui) ${OPTION_ROW} outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-40`;
30
33
  /** The "nothing matched" line: same rhythm as a row, but muted and unreachable. */
31
- const listboxEmptyClasses = "flex h-control-sm items-center px-(--cue-space-3) font-mono text-(length:--cue-text-ui) text-fg-subtle select-none";
34
+ const listboxEmptyClasses = `flex h-control-sm items-center px-(--cue-space-3) ${CONTROL_FACE} text-(length:--cue-text-ui) text-fg-subtle select-none`;
32
35
  /** The tick gutter, always reserved so labels never jog sideways. */
33
36
  const listboxIndicatorClasses = "flex size-icon-sm shrink-0 items-center justify-center";
34
37
  /**
@@ -46,10 +49,10 @@ const chipFieldClasses = "flex w-full cursor-text flex-wrap items-center gap-(--
46
49
  * user data throws away information the user typed on purpose. Same shape, same
47
50
  * palette, ordinary casing.
48
51
  */
49
- const valueChipClasses = "group/chip inline-flex h-chip max-w-full min-w-0 cursor-default items-center gap-(--cue-space-1) rounded-(--radius-control) border border-border bg-surface-2 py-0 pr-(--cue-space-1) pl-(--cue-space-2) font-mono text-(length:--cue-text-label) leading-none text-fg-muted outline-none select-none data-[highlighted]:border-accent/60 data-[highlighted]:text-fg focus-within:border-accent/60 focus-within:text-fg";
52
+ const valueChipClasses = "group/chip inline-flex h-chip max-w-full min-w-0 cursor-default items-center gap-(--cue-space-1) rounded-control border border-border bg-surface-2 py-0 pr-(--cue-space-1) pl-(--cue-space-2) font-mono text-(length:--cue-text-label) leading-none text-fg-muted outline-none select-none data-[highlighted]:border-accent/60 data-[highlighted]:text-fg focus-within:border-accent/60 focus-within:text-fg";
50
53
  /** The chip's remove affordance. */
51
- const chipRemoveClasses = "flex size-icon-sm shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent";
54
+ const chipRemoveClasses = `flex size-icon-sm shrink-0 cursor-pointer items-center justify-center rounded-control border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING}`;
52
55
  /** The trailing caret / clear affordance beside a filterable input. */
53
- const listboxAdornmentClasses = "flex shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent";
56
+ const listboxAdornmentClasses = `flex shrink-0 cursor-pointer items-center justify-center rounded-control border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING}`;
54
57
  //#endregion
55
58
  export { chipFieldClasses, chipRemoveClasses, listboxAdornmentClasses, listboxEmptyClasses, listboxIndicatorClasses, listboxItemClasses, listboxListClasses, listboxPopupClasses, listboxPositionerClasses, valueChipClasses };
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/autocomplete.d.ts
4
5
  interface AutocompleteProps {
@@ -1,5 +1,11 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
4
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
5
+ import { LABEL_INK } from "../system/_style-label-ink.js";
6
+ import { REST_SHADE_CLASS } from "../system/_paint-rest-shade.js";
7
+ import { CHECK_EDGE, CHECK_RADIUS, CHECK_SIZE_MD } from "../system/_style-check.js";
8
+ import { CONTROL_LABEL_WEIGHT } from "../system/_style-control-label.js";
3
9
  import * as React from "react";
4
10
  import { jsx, jsxs } from "react/jsx-runtime";
5
11
  import { Checkbox } from "@base-ui/react/checkbox";
@@ -53,7 +59,7 @@ const Checkbox$1 = React.forwardRef(function Checkbox$2({ className, label, size
53
59
  ref,
54
60
  "data-slot": "checkbox",
55
61
  "aria-labelledby": hasLabel ? labelId : void 0,
56
- className: cn("flex shrink-0 items-center justify-center rounded-(--radius-control) border border-border bg-sunken text-accent-fg outline-none transition-colors", size === "sm" ? "size-icon-sm" : "size-icon-md", "hover:border-border-strong", "data-[checked]:border-accent data-[checked]:bg-accent", "data-[indeterminate]:border-accent data-[indeterminate]:bg-accent", "focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent", "data-[disabled]:pointer-events-none data-[disabled]:opacity-40", "data-[invalid]:border-danger", className),
62
+ className: cn(`flex shrink-0 items-center justify-center ${CHECK_RADIUS} border ${CHECK_EDGE} bg-sunken text-accent-fg outline-none transition-colors ${REST_SHADE_CLASS}`, size === "sm" ? "size-icon-sm" : CHECK_SIZE_MD, "hover:border-border-strong", "data-[checked]:border-accent data-[checked]:bg-accent", "data-[indeterminate]:border-accent data-[indeterminate]:bg-accent", `${FOCUS_RING}`, "data-[disabled]:pointer-events-none data-[disabled]:opacity-40", "data-[invalid]:border-danger", className),
57
63
  ...elementProps,
58
64
  children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
59
65
  className: "flex size-full items-center justify-center data-[unchecked]:hidden",
@@ -66,7 +72,7 @@ const Checkbox$1 = React.forwardRef(function Checkbox$2({ className, label, size
66
72
  if (!hasLabel) return box;
67
73
  return /* @__PURE__ */ jsxs("label", {
68
74
  "data-slot": "checkbox-label",
69
- className: "inline-flex cursor-pointer items-center gap-(--cue-space-3) font-mono text-(length:--cue-text-ui) text-fg-muted select-none has-[[data-disabled]]:cursor-default has-[[data-disabled]]:opacity-40",
75
+ className: cn("inline-flex cursor-pointer items-center gap-(--cue-space-3) text-(length:--cue-text-ui) select-none has-[[data-disabled]]:cursor-default has-[[data-disabled]]:opacity-40", LABEL_INK, CONTROL_LABEL_WEIGHT, CONTROL_FACE),
70
76
  children: [box, /* @__PURE__ */ jsx("span", {
71
77
  id: labelId,
72
78
  children: label
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/combobox.d.ts
4
5
  /** One row in a {@link Combobox} or {@link MultiSelect}. */
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/env-var-input.d.ts
4
5
  /**
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { Input } from "./input.js";
4
5
  import { CrossGlyph, VariableGlyph } from "./_glyphs.js";
5
6
  import { PasswordInput } from "./password-input.js";
@@ -89,7 +90,7 @@ const EnvVarInput = React.forwardRef(function EnvVarInput({ className, value: va
89
90
  ...elementProps,
90
91
  children: variable === null ? secret ? /* @__PURE__ */ jsx(PasswordInput, { ...controlProps }) : /* @__PURE__ */ jsx(Input, { ...controlProps }) : /* @__PURE__ */ jsxs("div", {
91
92
  "data-slot": "env-var-pill",
92
- className: cn("flex w-full items-center gap-(--cue-space-2) rounded-(--radius-control) border border-warn/35 bg-warn/10 font-mono text-warn", PILL_SIZES[size], disabled === true && "opacity-40"),
93
+ className: cn("flex w-full items-center gap-(--cue-space-2) rounded-control border border-warn/35 bg-warn/10 font-mono text-warn", PILL_SIZES[size], disabled === true && "opacity-40"),
93
94
  children: [
94
95
  /* @__PURE__ */ jsx(VariableGlyph, {
95
96
  "aria-hidden": "true",
@@ -105,7 +106,7 @@ const EnvVarInput = React.forwardRef(function EnvVarInput({ className, value: va
105
106
  "aria-label": clearLabel,
106
107
  disabled,
107
108
  onClick: () => commit(""),
108
- className: "ml-auto flex size-icon-md shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) border-0 bg-transparent p-0 text-warn outline-none transition-colors hover:bg-warn/20 focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:pointer-events-none",
109
+ className: `ml-auto flex size-icon-md shrink-0 cursor-pointer items-center justify-center rounded-control border-0 bg-transparent p-0 text-warn outline-none transition-colors hover:bg-warn/20 ${FOCUS_RING} disabled:pointer-events-none`,
109
110
  children: /* @__PURE__ */ jsx(CrossGlyph, { className: "size-icon-sm" })
110
111
  })
111
112
  ]
@@ -29,7 +29,8 @@ interface FieldLabelProps extends Omit<Field.Label.Props, "className"> {
29
29
  className?: string;
30
30
  }
31
31
  /**
32
- * The name of a field: mono, uppercase, tracked out, one rung below body text.
32
+ * The name of a field: mono, uppercase, tracked out, one rung below body
33
+ * text — by default, the style set's choice inside one.
33
34
  *
34
35
  * Renders a real `<label>` wired to the field's control, so clicking it focuses
35
36
  * (or toggles) that control.
@@ -1,5 +1,15 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { LABEL_INK } from "../system/_style-label-ink.js";
4
+ import { BODY_WEIGHT } from "../system/_style-body-weight.js";
5
+ import { LABEL_FACE } from "../system/_style-label-face.js";
6
+ import { LABEL_WEIGHT } from "../system/_style-label-weight.js";
7
+ import { LABEL_CASE } from "../system/_style-label-case.js";
8
+ import { LABEL_TRACKING_TIGHT } from "../system/_style-label-tracking.js";
9
+ import { LABEL_SIZE } from "../system/_style-label-size.js";
10
+ import { BODY_LEADING_INHERIT } from "../system/_style-body-leading.js";
11
+ import { HELP_INK, HELP_SIZE } from "../system/_style-help.js";
12
+ import { LABEL_LEADING } from "../system/_style-label-leading.js";
3
13
  import * as React from "react";
4
14
  import { jsx } from "react/jsx-runtime";
5
15
  import { Field } from "@base-ui/react/field";
@@ -31,7 +41,8 @@ const Field$1 = React.forwardRef(function Field$2({ className, ...elementProps }
31
41
  });
32
42
  });
33
43
  /**
34
- * The name of a field: mono, uppercase, tracked out, one rung below body text.
44
+ * The name of a field: mono, uppercase, tracked out, one rung below body
45
+ * text — by default, the style set's choice inside one.
35
46
  *
36
47
  * Renders a real `<label>` wired to the field's control, so clicking it focuses
37
48
  * (or toggles) that control.
@@ -43,7 +54,7 @@ const FieldLabel = React.forwardRef(function FieldLabel({ className, ...elementP
43
54
  return /* @__PURE__ */ jsx(Field.Label, {
44
55
  ref,
45
56
  "data-slot": "field-label",
46
- className: cn("font-mono text-(length:--cue-text-label) leading-none tracking-(--cue-tracking-caps-tight) text-fg-muted uppercase select-none data-[disabled]:opacity-40", className),
57
+ className: cn(LABEL_SIZE, LABEL_LEADING, "select-none data-[disabled]:opacity-40", LABEL_INK, LABEL_WEIGHT, LABEL_FACE, LABEL_TRACKING_TIGHT, LABEL_CASE, className),
47
58
  ...elementProps
48
59
  });
49
60
  });
@@ -58,7 +69,7 @@ const FieldDescription = React.forwardRef(function FieldDescription({ className,
58
69
  return /* @__PURE__ */ jsx(Field.Description, {
59
70
  ref,
60
71
  "data-slot": "field-description",
61
- className: cn("font-mono text-(length:--cue-text-micro) text-fg-subtle", className),
72
+ className: cn(LABEL_FACE, HELP_SIZE, BODY_LEADING_INHERIT, HELP_INK, BODY_WEIGHT, className),
62
73
  ...elementProps
63
74
  });
64
75
  });
@@ -77,7 +88,7 @@ const FieldDescription = React.forwardRef(function FieldDescription({ className,
77
88
  */
78
89
  const FieldError = React.forwardRef(function FieldError({ className, issues, match, children, ...elementProps }, ref) {
79
90
  if (issues !== void 0 && issues.length === 0) return null;
80
- const classes = cn("font-mono text-(length:--cue-text-micro) text-danger", className);
91
+ const classes = cn(LABEL_FACE, HELP_SIZE, "text-danger", BODY_WEIGHT, className);
81
92
  if (issues === void 0) return /* @__PURE__ */ jsx(Field.Error, {
82
93
  ref,
83
94
  "data-slot": "field-error",
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { CrossGlyph } from "./_glyphs.js";
4
5
  import * as React from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -143,7 +144,7 @@ const FileUpload = React.forwardRef(function FileUpload({ className, zoneClassNa
143
144
  setDragging(false);
144
145
  intake(event.dataTransfer?.files ?? null);
145
146
  },
146
- className: cn("flex w-full cursor-pointer flex-col items-center justify-center gap-(--cue-space-1) rounded-(--radius-control) border border-dashed border-border bg-sunken px-(--cue-space-4) py-(--cue-space-5) font-mono text-(length:--cue-text-ui) text-fg-muted outline-none transition-colors duration-150 hover:border-border-strong hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40 data-[dragging=true]:border-accent data-[dragging=true]:bg-accent-soft data-[dragging=true]:text-fg motion-reduce:transition-none", zoneClassName),
147
+ className: cn(`flex w-full cursor-pointer flex-col items-center justify-center gap-(--cue-space-1) rounded-control border border-dashed border-border bg-sunken px-(--cue-space-4) py-(--cue-space-5) font-mono text-(length:--cue-text-ui) text-fg-muted outline-none transition-colors duration-150 hover:border-border-strong hover:text-fg ${FOCUS_RING} disabled:pointer-events-none disabled:opacity-40 data-[dragging=true]:border-accent data-[dragging=true]:bg-accent-soft data-[dragging=true]:text-fg motion-reduce:transition-none`, zoneClassName),
147
148
  children: [/* @__PURE__ */ jsx("span", { children: label }), hint === void 0 ? null : /* @__PURE__ */ jsx("span", {
148
149
  className: "text-(length:--cue-text-label) text-fg-subtle",
149
150
  children: hint
@@ -222,7 +223,7 @@ function FileUploadRow({ file, onRemove, removeLabel }) {
222
223
  "aria-label": removeLabel(file),
223
224
  "data-slot": "file-upload-remove",
224
225
  onClick: () => onRemove(file.id),
225
- className: "flex size-icon-sm shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent motion-reduce:transition-none",
226
+ className: `flex size-icon-sm shrink-0 cursor-pointer items-center justify-center rounded-control border-0 bg-transparent p-0 text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING} motion-reduce:transition-none`,
226
227
  children: /* @__PURE__ */ jsx(CrossGlyph, { className: "size-full" })
227
228
  })
228
229
  ]
@@ -1,4 +1,5 @@
1
- import { ControlVariantProps, FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import { ControlVariantProps, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants } from "./_chassis.js";
2
3
  import { Autocomplete, AutocompleteProps } from "./autocomplete.js";
3
4
  import { ButtonGroup, ButtonGroupOrientation, ButtonGroupProps } from "./button-group.js";
4
5
  import { Checkbox, CheckboxGroup, CheckboxGroupProps, CheckboxProps } from "./checkbox.js";
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/input-group.d.ts
4
5
  interface InputGroupProps extends React.ComponentPropsWithoutRef<"div"> {
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  import { Input } from "@base-ui/react/input";
4
5
  //#region src/forms/input.d.ts
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import { ComboboxOption } from "./combobox.js";
3
4
  import * as React from "react";
4
5
  //#region src/forms/multi-select.d.ts
@@ -1,12 +1,13 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_INSET } from "../system/_focus-ring.js";
3
4
  import { bareControlClasses, controlGroupFocusClasses, controlSurface } from "./_chassis.js";
4
5
  import * as React from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
7
  import { NumberField } from "@base-ui/react/number-field";
7
8
  //#region src/forms/number-field.tsx
8
9
  /** The − and + affordances: square, borderless, and quiet until hovered. */
9
- const stepperClasses = "flex shrink-0 items-center justify-center border-0 bg-transparent p-0 font-mono text-fg-muted leading-none select-none outline-none transition-colors hover:bg-surface-2 hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-40";
10
+ const stepperClasses = `flex shrink-0 items-center justify-center border-0 bg-transparent p-0 font-mono text-fg-muted leading-none select-none outline-none transition-colors hover:bg-surface-2 hover:text-fg ${FOCUS_RING_INSET} data-[disabled]:pointer-events-none data-[disabled]:opacity-40`;
10
11
  /**
11
12
  * A numeric control with explicit − / + affordances and no native spinners.
12
13
  *
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  import { OTPField } from "@base-ui/react/otp-field";
4
5
  //#region src/forms/otp-field.d.ts
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import { InputProps } from "./input.js";
3
4
  import * as React from "react";
4
5
  //#region src/forms/password-input.d.ts
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { InputGroup } from "./input-group.js";
4
5
  import { Input } from "./input.js";
5
6
  import { EyeGlyph, EyeOffGlyph } from "./_glyphs.js";
@@ -35,6 +36,7 @@ const PasswordInput = React.forwardRef(function PasswordInput({ className, revea
35
36
  revealed,
36
37
  revealedProp
37
38
  ]);
39
+ const RevealGlyph = revealed ? EyeOffGlyph : EyeGlyph;
38
40
  return /* @__PURE__ */ jsx(InputGroup, {
39
41
  size,
40
42
  className,
@@ -44,8 +46,8 @@ const PasswordInput = React.forwardRef(function PasswordInput({ className, revea
44
46
  "aria-label": revealed ? hideLabel : revealLabel,
45
47
  disabled,
46
48
  onClick: toggle,
47
- className: "flex shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40 aria-pressed:text-fg",
48
- children: /* @__PURE__ */ jsx(revealed ? EyeOffGlyph : EyeGlyph, { className: "size-icon-md" })
49
+ className: `flex shrink-0 cursor-pointer items-center justify-center rounded-control text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING} disabled:pointer-events-none disabled:opacity-40 aria-pressed:text-fg`,
50
+ children: /* @__PURE__ */ jsx(RevealGlyph, { className: "size-icon-md" })
49
51
  }) : void 0,
50
52
  children: /* @__PURE__ */ jsx(Input, {
51
53
  ref,
@@ -1,5 +1,9 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
4
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
5
+ import { LABEL_INK } from "../system/_style-label-ink.js";
6
+ import { CONTROL_LABEL_WEIGHT } from "../system/_style-control-label.js";
3
7
  import * as React from "react";
4
8
  import { jsx, jsxs } from "react/jsx-runtime";
5
9
  import { Radio } from "@base-ui/react/radio";
@@ -46,14 +50,14 @@ const Radio$1 = React.forwardRef(function Radio$2({ className, label, size = "md
46
50
  ref,
47
51
  "data-slot": "radio",
48
52
  "aria-labelledby": hasLabel ? labelId : void 0,
49
- className: cn("flex shrink-0 items-center justify-center rounded-full border border-border bg-sunken text-accent outline-none transition-colors", size === "sm" ? "size-icon-sm" : "size-icon-md", "hover:border-border-strong", "data-[checked]:border-accent", "focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent", "data-[disabled]:pointer-events-none data-[disabled]:opacity-40", "data-[invalid]:border-danger", className),
53
+ className: cn("flex shrink-0 items-center justify-center rounded-full border border-border bg-sunken text-accent outline-none transition-colors", size === "sm" ? "size-icon-sm" : "size-icon-md", "hover:border-border-strong", "data-[checked]:border-accent", `${FOCUS_RING}`, "data-[disabled]:pointer-events-none data-[disabled]:opacity-40", "data-[invalid]:border-danger", className),
50
54
  ...elementProps,
51
55
  children: /* @__PURE__ */ jsx(Radio.Indicator, { className: "block size-1/2 rounded-full bg-accent data-[unchecked]:hidden" })
52
56
  });
53
57
  if (!hasLabel) return dot;
54
58
  return /* @__PURE__ */ jsxs("label", {
55
59
  "data-slot": "radio-label",
56
- className: "inline-flex cursor-pointer items-center gap-(--cue-space-3) font-mono text-(length:--cue-text-ui) text-fg-muted select-none has-[[data-disabled]]:cursor-default has-[[data-disabled]]:opacity-40",
60
+ className: cn("inline-flex cursor-pointer items-center gap-(--cue-space-3) text-(length:--cue-text-ui) select-none has-[[data-disabled]]:cursor-default has-[[data-disabled]]:opacity-40", LABEL_INK, CONTROL_LABEL_WEIGHT, CONTROL_FACE),
57
61
  children: [dot, /* @__PURE__ */ jsx("span", {
58
62
  id: labelId,
59
63
  children: label
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
3
4
  import { StarGlyph } from "./_glyphs.js";
4
5
  import * as React from "react";
5
6
  import { jsx } from "react/jsx-runtime";
@@ -10,7 +11,7 @@ const MARK_SIZES = {
10
11
  md: "size-icon-md",
11
12
  lg: "size-[calc(var(--cue-icon-md)*1.35)]"
12
13
  };
13
- const MARK_CLASSES = "flex cursor-pointer items-center justify-center border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-150 outline-none hover:text-accent focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40 aria-checked:text-accent";
14
+ const MARK_CLASSES = `flex cursor-pointer items-center justify-center border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-150 outline-none hover:text-accent ${FOCUS_RING_OFFSET_2} disabled:pointer-events-none disabled:opacity-40 aria-checked:text-accent`;
14
15
  /**
15
16
  * A 0–N rating, drawn as marks.
16
17
  *
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/scrub-input.d.ts
4
5
  interface ScrubInputProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue" | "onDragStart" | "onDragEnd"> {
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { bareControlClasses, controlGroupFocusClasses, controlVariants } from "./_chassis.js";
4
5
  import * as React from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -240,7 +241,7 @@ const ScrubInput = React.forwardRef(function ScrubInput({ className, value, onCh
240
241
  disabled,
241
242
  onPointerDown: (event) => event.stopPropagation(),
242
243
  onClick: cycleUnit,
243
- className: "shrink-0 cursor-pointer rounded-(--radius-control) border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:pointer-events-none",
244
+ className: `shrink-0 cursor-pointer rounded-control border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING} disabled:pointer-events-none`,
244
245
  children: unit
245
246
  })]
246
247
  });
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import { InputProps } from "./input.js";
3
4
  import * as React from "react";
4
5
  //#region src/forms/search-input.d.ts
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { FOCUS_RING } from "../system/_focus-ring.js";
3
4
  import { InputGroup } from "./input-group.js";
4
5
  import { Input } from "./input.js";
5
6
  import { CrossGlyph, SearchGlyph } from "./_glyphs.js";
@@ -93,7 +94,7 @@ const SearchInput = React.forwardRef(function SearchInput({ className, value, de
93
94
  type: "button",
94
95
  "aria-label": clearLabel,
95
96
  onClick: clear,
96
- className: "flex shrink-0 cursor-pointer items-center justify-center rounded-(--radius-control) text-fg-subtle outline-none transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent",
97
+ className: `flex shrink-0 cursor-pointer items-center justify-center rounded-control text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING}`,
97
98
  children: /* @__PURE__ */ jsx(CrossGlyph, { className: "size-icon-sm" })
98
99
  }),
99
100
  children: /* @__PURE__ */ jsx(Input, {
@@ -1,4 +1,5 @@
1
- import { FormControlSize } from "./_chassis.js";
1
+ import { FormControlSize } from "./_chassis-size.js";
2
+ import "./_chassis.js";
2
3
  import * as React from "react";
3
4
  //#region src/forms/select.d.ts
4
5
  /** One row in a {@link Select}. */
@@ -1,8 +1,12 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { CONTROL_FACE } from "../system/_style-control-face.js";
3
4
  import { controlVariants } from "./_chassis.js";
5
+ import { ELEVATION_2 } from "../system/_paint-elevation.js";
4
6
  import { useCuePortalProps } from "../system/portal.js";
7
+ import { STROKE_SURFACE_2 } from "../system/_paint-stroke-surface-2.js";
5
8
  import { CaretGlyph, TickGlyph } from "./_glyphs.js";
9
+ import { OPTION_ROW } from "../system/_style-option.js";
6
10
  import * as React from "react";
7
11
  import { jsx, jsxs } from "react/jsx-runtime";
8
12
  import { Select } from "@base-ui/react/select";
@@ -65,14 +69,14 @@ const Select$1 = React.forwardRef(function Select$2({ items, value, defaultValue
65
69
  alignItemWithTrigger: false,
66
70
  children: /* @__PURE__ */ jsx(Select.Popup, {
67
71
  "data-slot": "select-popup",
68
- className: cn("min-w-(--anchor-width) origin-(--transform-origin) overflow-hidden rounded-(--radius-overlay) border border-border-overlay bg-surface-2 py-(--cue-space-1) shadow-[0_8px_24px_rgba(0,0,0,0.4)] outline-none", "transition-[opacity,scale] duration-100 ease-out motion-reduce:transition-none", "data-[starting-style]:scale-[0.98] data-[starting-style]:opacity-0", "data-[ending-style]:scale-[0.98] data-[ending-style]:opacity-0", popupClassName),
72
+ className: cn(`min-w-(--anchor-width) origin-(--transform-origin) overflow-hidden rounded-overlay ${STROKE_SURFACE_2} py-(--cue-space-1) ${ELEVATION_2} outline-none`, "transition-[opacity,scale] duration-100 ease-out motion-reduce:transition-none", "data-[starting-style]:scale-[0.98] data-[starting-style]:opacity-0", "data-[ending-style]:scale-[0.98] data-[ending-style]:opacity-0", popupClassName),
69
73
  children: /* @__PURE__ */ jsx(Select.List, {
70
74
  className: "max-h-(--available-height) overflow-y-auto",
71
75
  children: items.map((item) => /* @__PURE__ */ jsxs(Select.Item, {
72
76
  value: item.value,
73
77
  disabled: item.disabled,
74
78
  "data-slot": "select-item",
75
- className: "flex h-control-sm cursor-default items-center gap-(--cue-space-2) px-(--cue-space-3) font-mono text-(length:--cue-text-ui) text-fg-muted outline-none select-none data-[highlighted]:bg-accent-soft data-[highlighted]:text-fg data-[selected]:text-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
79
+ className: cn("flex h-control-sm cursor-default items-center gap-(--cue-space-2) px-(--cue-space-3) text-(length:--cue-text-ui) outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-40", OPTION_ROW, CONTROL_FACE),
76
80
  children: [/* @__PURE__ */ jsx("span", {
77
81
  className: "flex size-icon-sm shrink-0 items-center justify-center",
78
82
  children: /* @__PURE__ */ jsx(Select.ItemIndicator, { children: /* @__PURE__ */ jsx(TickGlyph, { className: "size-icon-sm" }) })