@mkbabb/glass-ui 3.13.0 → 4.0.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 (304) hide show
  1. package/dist/CardAction-XH4YBVEK.js +158 -0
  2. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DdtWXxOK.js} +57 -52
  3. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-B0Vs6atR.js} +1 -1
  4. package/dist/{DataTable-BCddn3T3.js → DataTable-C464Zbqd.js} +99 -97
  5. package/dist/DialogContent-DDE6pQBU.js +103 -0
  6. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-8eZbdmPc.js} +1 -1
  7. package/dist/FadingScroll-DwNnvKMs.js +76 -0
  8. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-Dpzwvc4t.js} +1 -1
  9. package/dist/IconChip-BDw1j5mu.js +54 -0
  10. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-BpC0R_Ec.js} +1 -1
  11. package/dist/{Notification-DdwNxIrI.js → Notification-DKjKsQq8.js} +8 -8
  12. package/dist/{NumberFieldContent-CqaN-SvN.js → NumberFieldContent-1VtwDSgf.js} +1 -1
  13. package/dist/PopoverContent-BTorlp--.js +127 -0
  14. package/dist/{Progress-DwlUKGbr.js → Progress-hAT4gqGH.js} +97 -77
  15. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-CUVFTWk2.js} +2 -2
  16. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-C1jb3b3K.js} +22 -6
  17. package/dist/{Switch-CsIuYP_e.js → Switch-Dr--uLGH.js} +1 -1
  18. package/dist/{Toaster-D6q4HtXu.js → Toaster-Bm_HQSpc.js} +6 -6
  19. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-Dzk9hWsF.js} +1 -1
  20. package/dist/animated-digit.js +2 -2
  21. package/dist/api/index.d.ts +8 -5
  22. package/dist/api.js +2 -2
  23. package/dist/aurora.js +132 -117
  24. package/dist/{button-ChXMfsud.js → button-BNDWhAZb.js} +2 -2
  25. package/dist/button.js +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.d.ts +1 -1
  28. package/dist/carousel.js +97 -141
  29. package/dist/collapsible.js +1 -1
  30. package/dist/color-swatch.d.ts +1 -0
  31. package/dist/color-swatch.js +47 -0
  32. package/dist/color.js +1 -1
  33. package/dist/command.js +1 -1
  34. package/dist/components/custom/aurora/constants/presets.d.ts +28 -0
  35. package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  38. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  39. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  40. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  41. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  42. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  43. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  44. package/dist/components/custom/constellation/index.d.ts +1 -1
  45. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  46. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  47. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  48. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  49. package/dist/components/custom/dock/constants.d.ts +35 -0
  50. package/dist/components/custom/dock/index.d.ts +2 -0
  51. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  52. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  53. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  54. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  55. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  56. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +7 -0
  57. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  58. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  59. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -0
  60. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -1
  61. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  62. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  63. package/dist/components/custom/handmark/brush.d.ts +269 -0
  64. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  65. package/dist/components/custom/handmark/constants.d.ts +39 -0
  66. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  67. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  68. package/dist/components/custom/handmark/index.d.ts +27 -0
  69. package/dist/components/custom/handmark/ink.d.ts +11 -0
  70. package/dist/components/custom/handmark/texture.d.ts +39 -0
  71. package/dist/components/custom/handmark/types.d.ts +62 -0
  72. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  73. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  74. package/dist/components/custom/icon-chip/types.d.ts +72 -0
  75. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +15 -2
  76. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  77. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  78. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +20 -25
  79. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  80. package/dist/components/custom/tabs/constants.d.ts +9 -3
  81. package/dist/components/custom/tabs/index.d.ts +1 -1
  82. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
  83. package/dist/components/ui/_shared/index.d.ts +2 -0
  84. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  85. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  86. package/dist/components/ui/card/Card.vue.d.ts +1 -1
  87. package/dist/components/ui/carousel/index.d.ts +0 -1
  88. package/dist/components/ui/command/Command.vue.d.ts +3 -0
  89. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  90. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
  91. package/dist/components/ui/index.d.ts +0 -1
  92. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  93. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  94. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  95. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  96. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  97. package/dist/composables/dark/index.d.ts +1 -1
  98. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  99. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  100. package/dist/configurator.js +1 -1
  101. package/dist/confirm-dialog.js +2 -2
  102. package/dist/constellation.js +92 -94
  103. package/dist/context-menu.js +2 -2
  104. package/dist/controls.js +10 -4
  105. package/dist/dark.d.ts +1 -1
  106. package/dist/dark.js +1 -1
  107. package/dist/data-table.js +1 -1
  108. package/dist/dialog.js +2 -2
  109. package/dist/dock.js +510 -321
  110. package/dist/{dockContext-BegmJVmx.js → dockContext-Bu1Avy-a.js} +1 -1
  111. package/dist/dom.js +5 -5
  112. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-BJ7E9js_.js} +2 -2
  113. package/dist/dropdown-menu.js +1 -1
  114. package/dist/expandable-container.js +42 -38
  115. package/dist/fading-scroll.d.ts +1 -0
  116. package/dist/fading-scroll.js +2 -0
  117. package/dist/forms.js +3 -3
  118. package/dist/fourier-field.js +38 -37
  119. package/dist/fourier-math.js +2 -2
  120. package/dist/glass-panel.js +39 -36
  121. package/dist/glass-ui.css +1 -1
  122. package/dist/glass-ui.js +129 -145
  123. package/dist/goo-blob.js +86 -81
  124. package/dist/handmark.d.ts +1 -0
  125. package/dist/handmark.js +707 -0
  126. package/dist/header-ribbon.js +1 -1
  127. package/dist/hover-card.js +1 -1
  128. package/dist/hover-popover.js +1 -1
  129. package/dist/icon-chip.d.ts +1 -0
  130. package/dist/icon-chip.js +2 -0
  131. package/dist/icon-tooltip.js +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/keyboard.js +1 -1
  134. package/dist/label.js +1 -1
  135. package/dist/labeled-field.js +6 -6
  136. package/dist/{math-U6-RrLmV.js → math-DeuJwLFx.js} +11 -3
  137. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-DWRQXBxJ.js} +10 -4
  138. package/dist/metric-badge.js +1 -1
  139. package/dist/metric-cell.js +25 -22
  140. package/dist/metric-stack.js +1 -1
  141. package/dist/motion-core.js +33 -32
  142. package/dist/motion-curves.js +1 -1
  143. package/dist/motion.js +4 -4
  144. package/dist/notification.js +1 -1
  145. package/dist/number-field.js +1 -1
  146. package/dist/pager-dots.d.ts +1 -0
  147. package/dist/pager-dots.js +91 -0
  148. package/dist/paper-backdrop.js +1 -1
  149. package/dist/popover.js +1 -1
  150. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  151. package/dist/progress.js +1 -1
  152. package/dist/pulse.js +1 -1
  153. package/dist/reactive.js +2 -2
  154. package/dist/scrolling-text.js +1 -1
  155. package/dist/search.js +5 -5
  156. package/dist/select.js +3 -3
  157. package/dist/separator.js +1 -1
  158. package/dist/{sheet-1fChZjtw.js → sheet-CquRYOAw.js} +59 -55
  159. package/dist/sheet.js +1 -1
  160. package/dist/{slider-B-JP2JlI.js → slider-DQ95MET2.js} +7 -7
  161. package/dist/slider.js +1 -1
  162. package/dist/sortable-list.js +3 -3
  163. package/dist/styles/animations.css +11 -26
  164. package/dist/styles/components.css +1 -1
  165. package/dist/styles/configurator.css +35 -0
  166. package/dist/styles/dock/density.css +19 -0
  167. package/dist/styles/dock/overflow.css +15 -0
  168. package/dist/styles/dock/rail-extend.css +168 -71
  169. package/dist/styles/dock/section.css +59 -0
  170. package/dist/styles/dock/shell.css +34 -5
  171. package/dist/styles/dock-controls/icon-button.css +11 -1
  172. package/dist/styles/dock-controls/tab-button.css +24 -83
  173. package/dist/styles/dock-controls/triggers.css +7 -0
  174. package/dist/styles/dock.css +6 -3
  175. package/dist/styles/drawer.css +46 -0
  176. package/dist/styles/feedback-tone.css +104 -0
  177. package/dist/styles/glass/ladder.css +68 -22
  178. package/dist/styles/glass/surface-axis.css +113 -0
  179. package/dist/styles/glass/surfaces.css +88 -12
  180. package/dist/styles/glass.css +5 -2
  181. package/dist/styles/icon-chip.css +149 -0
  182. package/dist/styles/index.css +67 -5
  183. package/dist/styles/instrument-chassis.css +42 -0
  184. package/dist/styles/menu.css +127 -0
  185. package/dist/styles/segmented-tabs.css +160 -89
  186. package/dist/styles/select.css +50 -0
  187. package/dist/styles/theme/bridges.css +11 -1
  188. package/dist/styles/tokens/color-radius.css +40 -13
  189. package/dist/styles/tokens/dark-arm.css +124 -16
  190. package/dist/styles/tokens/glass.css +83 -23
  191. package/dist/styles/tokens/light-dark.css +48 -19
  192. package/dist/styles/tokens/offsets-sizing.css +62 -0
  193. package/dist/styles/tokens/property-regs.css +3 -10
  194. package/dist/styles/tokens/scale-paper.css +45 -2
  195. package/dist/styles/tokens/scheme-motion.css +32 -14
  196. package/dist/styles/transitions.css +7 -7
  197. package/dist/styles/typography/scale.css +153 -0
  198. package/dist/styles/typography/semantic.css +220 -0
  199. package/dist/styles/typography/utilities.css +159 -0
  200. package/dist/styles/typography.css +23 -507
  201. package/dist/styles/utilities/a11y-overrides.css +33 -4
  202. package/dist/styles/utilities/base.css +177 -1
  203. package/dist/styles/utilities/btn.css +18 -201
  204. package/dist/styles/view-transition.css +4 -1
  205. package/dist/switch.js +1 -1
  206. package/dist/tabs.js +154 -183
  207. package/dist/timeline.js +2 -2
  208. package/dist/toast.js +1 -1
  209. package/dist/toggle-chip.js +3 -1
  210. package/dist/toggle-group.js +1 -1
  211. package/dist/typewriter.js +1 -1
  212. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
  213. package/dist/useConfiguratorState-kiIlun8I.js +303 -0
  214. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  215. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-CdwJ7284.js} +1 -1
  216. package/dist/{useSpringMount-CI2jOstM.js → useSpringMount-CvopqiFr.js} +1 -1
  217. package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
  218. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-28Tk2-t2.js} +1 -1
  219. package/dist/{vReveal-CqaCz_mC.js → useViewTransition-COsPjQVZ.js} +15 -12
  220. package/dist/vReveal-D9k0jADx.js +10 -0
  221. package/dist/watercolor-dot.js +12 -5
  222. package/package.json +71 -7
  223. package/src/styles/animations.css +11 -26
  224. package/src/styles/configurator.css +35 -0
  225. package/src/styles/dock/density.css +19 -0
  226. package/src/styles/dock/overflow.css +15 -0
  227. package/src/styles/dock/rail-extend.css +168 -71
  228. package/src/styles/dock/section.css +59 -0
  229. package/src/styles/dock/shell.css +34 -5
  230. package/src/styles/dock-controls/icon-button.css +11 -1
  231. package/src/styles/dock-controls/tab-button.css +24 -83
  232. package/src/styles/dock-controls/triggers.css +7 -0
  233. package/src/styles/dock.css +6 -3
  234. package/src/styles/drawer.css +42 -0
  235. package/src/styles/feedback-tone.css +104 -0
  236. package/src/styles/glass/ladder.css +68 -22
  237. package/src/styles/glass/surface-axis.css +113 -0
  238. package/src/styles/glass/surfaces.css +88 -12
  239. package/src/styles/glass.css +5 -2
  240. package/src/styles/icon-chip.css +149 -0
  241. package/src/styles/index.css +66 -4
  242. package/src/styles/instrument-chassis.css +42 -0
  243. package/src/styles/menu.css +127 -0
  244. package/src/styles/segmented-tabs.css +156 -87
  245. package/src/styles/select.css +50 -0
  246. package/src/styles/theme/bridges.css +11 -1
  247. package/src/styles/tokens/color-radius.css +40 -13
  248. package/src/styles/tokens/dark-arm.css +124 -16
  249. package/src/styles/tokens/glass.css +83 -23
  250. package/src/styles/tokens/light-dark.css +48 -19
  251. package/src/styles/tokens/offsets-sizing.css +62 -0
  252. package/src/styles/tokens/property-regs.css +3 -10
  253. package/src/styles/tokens/scale-paper.css +45 -2
  254. package/src/styles/tokens/scheme-motion.css +32 -14
  255. package/src/styles/transitions.css +7 -7
  256. package/src/styles/typography/scale.css +153 -0
  257. package/src/styles/typography/semantic.css +220 -0
  258. package/src/styles/typography/utilities.css +159 -0
  259. package/src/styles/typography.css +23 -507
  260. package/src/styles/utilities/a11y-overrides.css +33 -4
  261. package/src/styles/utilities/base.css +177 -1
  262. package/src/styles/utilities/btn.css +18 -201
  263. package/src/styles/view-transition.css +4 -1
  264. package/dist/CardAction-Cj2eycQ2.js +0 -157
  265. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  266. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  267. package/dist/TabsList-Dttss653.js +0 -105
  268. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  269. package/dist/components/custom/underline/index.d.ts +0 -2
  270. package/dist/components/custom/underline/types.d.ts +0 -56
  271. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  272. package/dist/underline.d.ts +0 -1
  273. package/dist/underline.js +0 -85
  274. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  275. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
  276. /package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-ON3x7cuk.js} +0 -0
  277. /package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-DkMaQzH5.js} +0 -0
  278. /package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-DSjasZIt.js} +0 -0
  279. /package/dist/{Input-DWQQIOC4.js → Input-DVG_J0ne.js} +0 -0
  280. /package/dist/{Label-r3WzWrsj.js → Label-Ck9SWEKM.js} +0 -0
  281. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-CkPRRgl_.js} +0 -0
  282. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-nBKe0vkB.js} +0 -0
  283. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-Dcczq44n.js} +0 -0
  284. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DK2y1Bun.js} +0 -0
  285. /package/dist/{Separator-0JE6LtNu.js → Separator-BArl4OaB.js} +0 -0
  286. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
  287. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  288. /package/dist/{compile-B7NGOBcP.js → compile-EXXzEr1q.js} +0 -0
  289. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  290. /package/dist/{createContext-BM46COQ-.js → createContext-B2RaZ-b8.js} +0 -0
  291. /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
  292. /package/dist/{springPresets--YdWTHtm.js → springPresets-WXaLbu8u.js} +0 -0
  293. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  294. /package/dist/{useInterval-iHludrxk.js → useInterval-CNdua40W.js} +0 -0
  295. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  296. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-C12hXwOZ.js} +0 -0
  297. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-V6nq5gJb.js} +0 -0
  298. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
  299. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  300. /package/dist/{useSortable-muI29agz.js → useSortable-BVqlJRBR.js} +0 -0
  301. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-NmBM5V_4.js} +0 -0
  302. /package/dist/{useTimer-Dzarvzuk.js → useTimer-B_PAasDL.js} +0 -0
  303. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-CDfJuakL.js} +0 -0
  304. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-CvBcCYDf.js} +0 -0
@@ -0,0 +1,149 @@
1
+ /* icon-chip.css — BA.W-ICON-CHIP: the <IconChip> section-color pop primitive.
2
+ *
3
+ * The library's SINGLE section-color icon-chip recipe — the brand's ONE color
4
+ * event per surface (the one-color-event rule, AZ.W-SUFFUSE / proof:suffuse):
5
+ * a `color-mix(… 25%, transparent)` backplate under a full-chroma glyph, walked
6
+ * over the 13-stop `--section-color-N` ramp (or a complete `tone` token). It
7
+ * OWNS the recipe the four inline `:style` pastes (icons.vue / empty-states.vue
8
+ * / auth-shell.vue / the MetricCell glyph-tint) collapsed onto, so the recipe
9
+ * lives ONCE and proof:suffuse asserts against one component, not N pastes.
10
+ *
11
+ * THE INTERPOLATION SPACE — `in srgb` (DELIBERATE, recorded). The backplate is
12
+ * a foreground-over-transparent overlay at a hand-tuned fixed 25% α stop — the
13
+ * SAME shape as the `--surface-tint-*` brand family, which CLAUDE.md fixes at
14
+ * `in srgb` (the brand-calibrated mix; switching the space shifts the resting
15
+ * α off its hand-set value). The chip is byte-faithful to the reference paste
16
+ * register (the binding W7 π target: stop-0 bg `color(srgb 0.915 0.484 0.671 /
17
+ * 0.25)`), so it preserves `in srgb` — the same brand-overlay path, NOT the
18
+ * glass-tint `in oklab` perceptual-mix path. (The spec text says `in oklab`;
19
+ * the resolution preserves the reference-faithful `in srgb` so the pop register
20
+ * does not shift — recorded in PROGRESS / the DELTA.)
21
+ */
22
+
23
+ :root {
24
+ /* The chip≤glyph proportion (d2, structural). The diameter floors at
25
+ `glyph × ratio` so the plate can NEVER paint under the glyph — a
26
+ consumer's tiny `size` is clamped. The default reproduces the reference
27
+ 48/22 ≈ 2.18 register. Token-first: a consumer retunes without a
28
+ component edit. */
29
+ --icon-chip-glyph-ratio: 2.18;
30
+ /* The duotone fill α — a low-alpha fill of the same hue UNDER the
31
+ full-chroma stroke (the iOS/Material filled-tonal move). Mono-hue. */
32
+ --icon-chip-duotone-fill: 18%;
33
+ /* The hover-bloom backplate lift (25% → ~35%) + the glow-ring spread. */
34
+ --icon-chip-bloom-mix: 35%;
35
+ --icon-chip-bloom-glow: 28%;
36
+ /* The reveal stagger step (consumed by the vReveal `--d` index). */
37
+ --icon-chip-reveal-step: 60ms;
38
+ }
39
+
40
+ .icon-chip {
41
+ /* The diameter FLOORS at glyph × ratio — the d2 proportion enforced in the
42
+ component, not a per-consumer hope. */
43
+ --_icon-chip-floor: calc(
44
+ var(--icon-chip-glyph-size, 22px) * var(--icon-chip-glyph-ratio)
45
+ );
46
+ inline-size: max(var(--icon-chip-size, 48px), var(--_icon-chip-floor));
47
+ block-size: max(var(--icon-chip-size, 48px), var(--_icon-chip-floor));
48
+ display: inline-flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ border-radius: var(--radius-pill, 9999px);
52
+ /* The backplate — the reference recipe (`in srgb`, 25% α stop). */
53
+ background-color: color-mix(
54
+ in srgb,
55
+ var(--icon-chip-plate-color, var(--muted)) 25%,
56
+ transparent
57
+ );
58
+ color: var(--icon-chip-event-color, var(--muted-foreground));
59
+ /* The §6 easing doctrine — surface props (bg/box-shadow) on the bezier
60
+ standard ease; the bloom is the smooth-glass register, NOT a sparkle. */
61
+ transition:
62
+ background-color var(--duration-fast, 150ms) var(--ease-standard),
63
+ box-shadow var(--duration-fast, 150ms) var(--ease-standard);
64
+ }
65
+
66
+ .icon-chip__glyph {
67
+ display: block;
68
+ flex-shrink: 0;
69
+ }
70
+
71
+ /* ── The bare register (the MetricCell leading-glyph tint — no backplate) ──── */
72
+ .icon-chip--bare {
73
+ inline-size: auto;
74
+ block-size: auto;
75
+ background-color: transparent;
76
+ border-radius: 0;
77
+ }
78
+
79
+ /* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
80
+ /* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
81
+ presentation attribute, so the `[data-duotone] svg` rule reaches the inner
82
+ paths (they inherit `fill` from the root). Mono-hue, proportion-safe. */
83
+ .icon-chip--duotone[data-duotone] svg,
84
+ .icon-chip[data-duotone] .icon-chip__glyph {
85
+ fill: color-mix(
86
+ in srgb,
87
+ var(--icon-chip-event-color, var(--muted-foreground))
88
+ var(--icon-chip-duotone-fill),
89
+ transparent
90
+ );
91
+ }
92
+
93
+ /* ── The hover-bloom axis — the SMOOTH GLASS register (NO disco) ───────────── */
94
+ /* The backplate mix lifts, a soft same-hue glow ring appears, the glyph stroke
95
+ firms. DISCO FENCE: composes NO sparkle-sweep / btn-audacious / disco-grain —
96
+ the W-GLASS-CAL-retired-disco's calm replacement register only. */
97
+ @media (hover: hover) {
98
+ .icon-chip--bloom:hover {
99
+ background-color: color-mix(
100
+ in srgb,
101
+ var(--icon-chip-plate-color, var(--muted)) var(--icon-chip-bloom-mix),
102
+ transparent
103
+ );
104
+ box-shadow: 0 0 0 0.25rem
105
+ color-mix(
106
+ in srgb,
107
+ var(--icon-chip-event-color, var(--muted-foreground))
108
+ var(--icon-chip-bloom-glow),
109
+ transparent
110
+ );
111
+ }
112
+ /* The glyph stroke firms on the chip's own hover. */
113
+ .icon-chip--bloom:hover .icon-chip__glyph {
114
+ stroke-width: 2;
115
+ }
116
+ }
117
+
118
+ /* ── The entrance-reveal axis — composes the shipped vReveal directive ─────── */
119
+ /* The directive writes `[data-reveal]` + `--d` (the stagger index); this rule
120
+ reacts ONLY on an opted-in chip (`.icon-chip--reveal`) so a non-reveal chip's
121
+ inert `[data-reveal]` hook never animates. PRM-gated. */
122
+ @media (prefers-reduced-motion: no-preference) {
123
+ .icon-chip--reveal[data-reveal] {
124
+ animation: icon-chip-reveal var(--duration-medium, 320ms)
125
+ var(--ease-standard) both;
126
+ animation-delay: calc(var(--d, 0) * var(--icon-chip-reveal-step));
127
+ }
128
+ }
129
+
130
+ @keyframes icon-chip-reveal {
131
+ from {
132
+ opacity: 0;
133
+ transform: scale(0.85) translateY(0.25rem);
134
+ }
135
+ to {
136
+ opacity: 1;
137
+ transform: none;
138
+ }
139
+ }
140
+
141
+ /* ── The deform axes collapse under reduced motion (the PRM guard) ─────────── */
142
+ @media (prefers-reduced-motion: reduce) {
143
+ .icon-chip--bloom:hover .icon-chip__glyph {
144
+ stroke-width: inherit;
145
+ }
146
+ .icon-chip--reveal[data-reveal] {
147
+ animation: none;
148
+ }
149
+ }
@@ -94,6 +94,15 @@
94
94
  * cascades into these control rules.
95
95
  * 7. cards.css — .cartoon-surface, .paper-texture.
96
96
  * Component utility layer.
97
+ * 7a. feedback-tone.css — the ONE shared tinted-glass tone register
98
+ * (BA.W-FEEDBACK-TONE): `.feedback-tone` +
99
+ * `.feedback-tone-{success,warning,info,destructive}`
100
+ * tint a glass rung a bounded % toward a house tone
101
+ * token on the EXISTING color-mix(in oklab, …) seam.
102
+ * Toast / Notification / Alert consume it (the three
103
+ * tone maps collapse). Loads after cards.css (it reads
104
+ * the same `--glass-bg-*` rung tokens cards.css/the
105
+ * ladder mint) and before floating-panel.css.
97
106
  * 8. floating-panel.css — .floating-panel + .floating-panel-item.
98
107
  * Component utility layer.
99
108
  * 9. transitions.css — Vue <Transition> classes (fade, fade-slide,
@@ -114,14 +123,26 @@
114
123
  * K W6 + Q.W3 Lane E), rainbow-vivid +
115
124
  * rainbow-pastel. Consumes earlier animations +
116
125
  * tokens.
126
+ * 11a. menu.css — BA.W-MENU-GLASS the glass MENU-ROW + MENU-SECTION
127
+ * register. AFTER utilities.css so `.glass-menu-row`'s
128
+ * `@layer components` hover/highlight rules source-
129
+ * order-win over `.interactive-item:hover` (same layer
130
+ * + specificity) — the cascade-trap-safe placement.
117
131
  * 12. instrument-chassis.css — P-tranche component CSS (chassis bezel +
118
132
  * groove dividers). Loaded after utilities so
119
133
  * component-local recipes can override.
120
134
  * 13. hover-popover.css — V.W3 popover-animation grammar.
121
135
  * 14. drawer.css — AN.W3 detented bottom-sheet grammar (glass
122
136
  * sheet surface + peek handle + snap-stop rules).
137
+ * 15. segmented-tabs.css — AX.W53 SegmentedTabs overflow/indicator grammar.
138
+ * 16. select.css — BA.W-EMISSION the PRECOMPILED Select content
139
+ * collision-bound (the `[data-slot="select-content"]`
140
+ * max-height rule) — moved off the dead arbitrary-
141
+ * bracket CVA class so the bound SHIPS in dist/glass-ui.css
142
+ * regardless of consumer JIT reach. A structural utility
143
+ * never depends on a content-scan; locked by proof:emission.
123
144
  *
124
- * Per-package component CSS lives at (12)-(14) (loaded after utilities so
145
+ * Per-package component CSS lives at (12)-(16) (loaded after utilities so
125
146
  * component-local recipes can override). New per-package CSS files append
126
147
  * to that tail.
127
148
  */
@@ -135,18 +156,59 @@
135
156
  @import "./dock.css";
136
157
  @import "./dock-controls.css";
137
158
  @import "./cards.css";
159
+ @import "./feedback-tone.css";
138
160
  @import "./floating-panel.css";
139
161
  @import "./transitions.css";
140
162
  @import "./animations.css";
141
163
  @import "./scroll-driven.css";
142
164
  @import "./view-transition.css";
143
165
  @import "./utilities.css";
166
+ /* BA.W-MENU-GLASS — the glass menu-row + menu-section register. @import-ed AFTER
167
+ utilities.css (NOT the floating/transitions band the spec hinted) so the
168
+ `.glass-menu-row` `@layer components` hover/highlight rules source-order-WIN
169
+ over `.interactive-item:hover` (utilities/base.css, same layer + specificity) —
170
+ the cascade-trap-safe placement, mirroring glass/surface-axis.css's "import
171
+ AFTER ladder.css" discipline. */
172
+ @import "./menu.css";
144
173
  @import "./configurator.css";
145
174
  @import "./instrument-chassis.css";
146
175
  @import "./hover-popover.css";
147
176
  @import "./drawer.css";
148
177
  @import "./segmented-tabs.css";
178
+ @import "./select.css";
179
+ /* BA.W-ICON-CHIP — the <IconChip> section-color pop recipe + the three axes
180
+ (duotone/bloom/reveal). A component partial; the token arms (--section-color-N
181
+ / --muted) auto-flip under .dark so the chip is mode-robust by construction. */
182
+ @import "./icon-chip.css";
149
183
 
150
- /* Ensure consumer's Tailwind scans glass-ui components for utility classes
151
- (e.g. CVA button variants like text-destructive-foreground) */
152
- @source "../components";
184
+ /* Ensure Tailwind scans glass-ui's compiled component templates for the utility
185
+ classes they emit (CVA variant classes like text-destructive-foreground,
186
+ layout utilities like h-full/shrink-0).
187
+
188
+ BA.W-EMISSION — re-pointed from the DEAD components-mirror glob (the prior
189
+ `../components` target). That glob resolved correctly in glass-ui's OWN build
190
+ (`src/styles/index.css` → `src/components` carries the real `.vue` source), but the
191
+ SHIPPED dist copy of this file (`dist/styles/index.css`) resolved `../components` to
192
+ `dist/components/` — a
193
+ directory that carries ONLY `.d.ts` mirror files (zero `.js`, zero `.vue`). The
194
+ compiled render-functions live FLAT at `dist/*.js`. So in every consumer that
195
+ re-imported this `@source` line, Tailwind scanned an empty dir and glass-ui's own
196
+ arbitrary utilities silently died (the P9 / valuejs-fold register-B class).
197
+
198
+ `../*.js` reaches the compiled render-functions PRECISELY in the SHIPPED context:
199
+ in dist it is `dist/*.js` (the 150+ flat compiled chunks that carry glass-ui's
200
+ utility class strings — the surface the dead `../components` mirror NEVER held).
201
+ In glass-ui's OWN source build it is `src/*.js` (empty — glass-ui's own components
202
+ compile their CSS through vite, not this `@source`), so the directive is a no-op
203
+ in the own-build and never scans the `src/` shader/`.ts` tree (a bare `../` glob
204
+ tripped Tailwind's dev candidate-extractor on the shader template strings —
205
+ `Missing opening (`). This directive is a BACKSTOP for a consumer that imports
206
+ this exact cascade file — the PRIMARY self-emission path is
207
+ `vite.style-assets.ts emitComponentUtilities` (P9), which ships glass-ui's
208
+ component-utility RULES build-independently into `dist/styles/components.css`.
209
+ Fully-arbitrary BRACKET utilities (`[max-height:…]`, `[--slider-track-height:…]`)
210
+ are rejected by that path's `classish` token filter AND are not reliably reachable
211
+ by a JIT scan, so every STRUCTURAL bracket utility (geometry/bounds/sizing) is
212
+ pre-compiled into shipped CSS instead — never load-bearing on any consumer's
213
+ content-scan reach. Locked by proof:emission. */
214
+ @source "../*.js";
@@ -146,6 +146,48 @@
146
146
  display: none;
147
147
  }
148
148
 
149
+ /* ─────────────────────────────────────────────────────────────
150
+ BA.W-ATLAS-RECONCILE C-3 — structure variant (SILVER MILLED-METAL register)
151
+
152
+ The cool polished-steel housing read: the engraved-bezel `::before` stroke
153
+ AND the structural twin-line grooves re-point from the warm-cream
154
+ `--surface-tint-*` default onto the `--silver` quad (gold's cool mirror).
155
+ The chassis reads as an INDUSTRIAL precision-instrument panel — the
156
+ cool-metal twin of the warm-gold "complete"-phase affirmation.
157
+
158
+ The phase cascade (`[data-phase="…"]`) stays ORTHOGONAL — a `structure`
159
+ chassis still retints its phase fills on `data-phase`; only the
160
+ structure-metal recipe (bezel + grooves) forks here. Consumer #2 of the
161
+ silver quad (the atlas's structure surface is consumer #1).
162
+
163
+ The silver is the W-NO-GRAY NAMED cool-neutral exception (a brand METAL
164
+ identity, not a neutral — its very-low chroma reads as milled steel, the
165
+ cool hue distinguishes it from the warm glass plate).
166
+ ───────────────────────────────────────────────────────────── */
167
+ .instrument-chassis[data-variant="structure"] {
168
+ /* The milled-panel edge: the chassis border lifts off the resting glass
169
+ edge onto a hairline silver structure stroke. */
170
+ border-color: color-mix(in oklab, var(--color-silver-dark) 55%, transparent);
171
+ }
172
+
173
+ /* The engraved bezel re-tints to the cool silver catch (the polished sleeve
174
+ reads as steel, not warm-cream). */
175
+ .instrument-chassis[data-variant="structure"]::before {
176
+ border-color: color-mix(in oklab, var(--color-silver-light) 60%, transparent);
177
+ }
178
+ .dark .instrument-chassis[data-variant="structure"]::before {
179
+ border-color: color-mix(in oklab, var(--color-silver) 40%, transparent);
180
+ }
181
+
182
+ /* The structural grooves re-point to the silver twin-line: the catch reads
183
+ the light silver, the under-shadow the dark silver — a milled seam, not the
184
+ default warm twin-line. ONE re-point at the variant root; every
185
+ `<ChassisDivider>` inside a structure chassis inherits it. */
186
+ .instrument-chassis[data-variant="structure"] {
187
+ --twin-line-catch: color-mix(in oklab, var(--color-silver-light) 50%, transparent);
188
+ --twin-line-shadow: color-mix(in oklab, var(--color-silver-dark) 40%, transparent);
189
+ }
190
+
149
191
  /* Phase-color cascade — single property, full chassis-wide retint.
150
192
  `--phase-color-label` mirrors the cascade through the WCAG companion
151
193
  tokens (AC.W6c F1.V-04). The label register falls back to the canvas
@@ -0,0 +1,127 @@
1
+ /* menu.css — the glass MENU-ROW + MENU-SECTION register (BA.W-MENU-GLASS).
2
+
3
+ The shared `menuItemVariants` CVA's `surface=glass` arm (the DEFAULT, glass-
4
+ first canon AX.W54) composes `.glass-menu-row`; all 13 menu/picker-family SFCs
5
+ inherit the glassy hover-lift register in ONE edit (no per-SFC menu-row CSS).
6
+
7
+ ── The cascade-trap pre-empt (the AZ dock-rail `@layer`-loses-to-utility trap) ──
8
+ `.interactive-item:hover` (utilities/base.css, `@layer components`) paints a flat
9
+ `color-mix(--accent 50%)` hover background. An UNLAYERED Tailwind `hover:bg-accent`
10
+ utility would win over BOTH (the trap). The CVA's glass arm therefore DROPS the
11
+ flat-accent utilities entirely — so the only background-painters on a glass row are
12
+ the `@layer components` `.interactive-item:hover` rule and these `.glass-menu-row`
13
+ rules. This file is `@import`-ed AFTER `utilities.css` in `index.css`, so at equal
14
+ specificity (0-1-1 for the `:hover`/`[data-highlighted]` selectors) and equal layer
15
+ (`components`) the recipe wins by SOURCE ORDER over `.interactive-item:hover` —
16
+ exactly the discipline `glass/surface-axis.css` uses ("@import-ed AFTER ladder.css
17
+ so the attr rules win by source order"). NEVER re-add an unlayered flat-accent
18
+ utility to the glass arm — it would re-introduce the trap.
19
+
20
+ ── The element-level tint discipline (substitution-vs-inheritance) ──
21
+ The row reads the ELEMENT-LEVEL glass-quiet oklab tint
22
+ `color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength))`
23
+ — the SAME seam `glass/ladder.css:58` / `glass/surfaces.css:19` compose — NOT the
24
+ pre-baked `--glass-bg-quiet` raw token. So the row darkens-over-light (W55 bright
25
+ bucket / `--glass-tint-strength` lift) AND lifts-over-dark per W-DARK-MATERIAL's
26
+ tint arm, in lockstep with every other glass surface. */
27
+ @layer components {
28
+ /* ── .glass-menu-row — the glassy hover-lift menu/picker item ──────────────
29
+ Every visual axis reads a `--menu-row-*` knob so a consumer retunes via a
30
+ `:root` override. The REST state is transparent (the row sits on the
31
+ container's own `glass-floating` plate — DropdownMenuContent /
32
+ ContextMenuContent are already `glass-floating rounded-panel`); the glass
33
+ PLATE materializes on hover/focus/highlight. */
34
+ .glass-menu-row {
35
+ /* The glass-quiet plate the row paints AT THE ELEMENT on hover/highlight
36
+ (the element-level oklab tint — see header). Overridable. */
37
+ --menu-row-bg: color-mix(
38
+ in oklab,
39
+ var(--glass-bg-quiet),
40
+ var(--glass-tint-source) var(--glass-tint-strength)
41
+ );
42
+ /* The PRM-gated hover-lift travel (zeroed under reduce, below). */
43
+ --menu-row-lift: -1px;
44
+ /* The 44px WCAG-2.5.5 touch floor (the row never reflows below it). The
45
+ base is the CVA's own py rhythm; the clamp guarantees the floor. Reads
46
+ `--touch-target` (the 44px token declared UNCONDITIONALLY at :root —
47
+ offsets-sizing.css), NOT `--control-floor` (which is declared ONLY inside
48
+ the `@media (pointer: coarse)` block, so on a FINE pointer `var(--control-
49
+ floor)` resolves to the guaranteed-invalid initial value → 0px in the
50
+ max(), and the floor silently vanished — the live π caught the 36px row).
51
+ The `2.75rem` literal fallback covers a consumer who unsets the token. */
52
+ min-block-size: max(2rem, var(--touch-target, 2.75rem));
53
+
54
+ /* The lift transform rides the §6 spring register (`--spring-smooth`); the
55
+ surface props (background) ride the bezier `--ease-standard` via the
56
+ `.interactive-item` base transition (already declared there). The
57
+ explicit transform leg here pairs the spring with the lift. */
58
+ transition: translate var(--duration-fast) var(--spring-smooth);
59
+ translate: 0 0;
60
+ }
61
+
62
+ /* Hover / keyboard-focus / reka internal-highlight / sub-trigger-open all
63
+ reach the SAME glass register (Combobox/Command/Select parity — the CVA
64
+ routes all three input modes through `data-[highlighted]`). */
65
+ .glass-menu-row:hover:not([data-disabled]),
66
+ .glass-menu-row:focus:not([data-disabled]),
67
+ .glass-menu-row[data-highlighted]:not([data-disabled]),
68
+ .glass-menu-row[data-state="open"]:not([data-disabled]) {
69
+ background: var(--menu-row-bg);
70
+ color: var(--accent-foreground);
71
+ translate: 0 var(--menu-row-lift);
72
+ }
73
+
74
+ /* ── .glass-menu-section — the mono section-label + hairline row-group ──────
75
+ The "section caption + hairline over a row group" recipe (the slides gear
76
+ hand-built ~120 lines of). Folds onto `typography.css` `.section-label` (the
77
+ mono / √φ-caption / small-caps register) for the caption and `--border-
78
+ hairline` for the divider. Tokenized on `--menu-section-*` so a consumer
79
+ retunes via a `:root` override. ≥2 consumers: the library menu defaults
80
+ (the section caption a DropdownMenuLabel composes) + the in-repo demo menu
81
+ story (Unit 2 adoption); the slides DeckSettings is the named foreign
82
+ downstream consumer. */
83
+ .glass-menu-section {
84
+ /* The caption register (mono / small-caps / quiet ink) — the same
85
+ vocabulary `.section-label` carries, exposed as overridable knobs. */
86
+ --menu-section-font: var(--font-mono);
87
+ --menu-section-size: var(--type-caption);
88
+ --menu-section-color: var(--muted-foreground);
89
+ --menu-section-tracking: var(--type-tracking-caps);
90
+ /* The hairline divider over the group (the catch-light + under-shadow
91
+ pair). Default-off feather; the rule below paints it. */
92
+ --menu-section-hairline: var(--border-hairline);
93
+ /* The block rhythm above the group (a section is a deliberate break). */
94
+ --menu-section-gap: 0.375rem;
95
+
96
+ display: block;
97
+ margin-block-start: var(--menu-section-gap);
98
+ padding-block-start: var(--menu-section-gap);
99
+ /* The hairline reads as a top divider over the group via box-shadow (the
100
+ house hairline pattern — a whisper, not a hard 1px rule). */
101
+ box-shadow: var(--menu-section-hairline);
102
+ }
103
+
104
+ /* The section CAPTION — a mono small-caps label. Composes onto the label
105
+ element the section recipe wraps (or a nested `.glass-menu-section-label`);
106
+ the demo + library menu labels read this caption register. */
107
+ .glass-menu-section-label,
108
+ .glass-menu-section > [data-menu-section-label] {
109
+ font-family: var(--menu-section-font);
110
+ font-size: var(--menu-section-size);
111
+ color: var(--menu-section-color);
112
+ text-transform: uppercase;
113
+ letter-spacing: var(--menu-section-tracking);
114
+ }
115
+ }
116
+
117
+ /* ── PRM gate — no deform/lift under reduce ───────────────────────────────────
118
+ The hover-lift `translate` is the only motion the row introduces; under
119
+ `prefers-reduced-motion: reduce` it collapses to the identity (0) and the
120
+ transition is removed (the surface bg cross-fade is not motion). The glass
121
+ plate still materializes on hover — only the geometric lift is suppressed. */
122
+ @media (prefers-reduced-motion: reduce) {
123
+ .glass-menu-row {
124
+ --menu-row-lift: 0px;
125
+ transition: none;
126
+ }
127
+ }