@mkbabb/glass-ui 4.0.0 → 4.0.1

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 (394) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-DvZNQ_HF.js} +4 -4
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-ON3x7cuk.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-CuKwF7wr.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-DcKK8k9i.js} +5 -5
  9. package/dist/{DialogFooter-8eZbdmPc.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DI6hQhT9.js} +1 -1
  11. package/dist/{HoverCardContent-DkMaQzH5.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/{IconChip-BDw1j5mu.js → IconChip-BTD-nay5.js} +3 -2
  14. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DVG_J0ne.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  20. package/dist/{Progress-hAT4gqGH.js → Progress-DctG61iZ.js} +4 -4
  21. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-CrA8F0iV.js} +18 -19
  23. package/dist/Toaster-Bw4xR8xV.js +274 -0
  24. package/dist/{ToggleGroupItem-Dzk9hWsF.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  25. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  26. package/dist/animated-digit.js +2 -2
  27. package/dist/api/index.d.ts +8 -3
  28. package/dist/api/types-extra.d.ts +6 -0
  29. package/dist/aurora.js +885 -242
  30. package/dist/badge.js +1 -1
  31. package/dist/border-progress.d.ts +1 -0
  32. package/dist/border-progress.js +106 -0
  33. package/dist/{button-BNDWhAZb.js → button-DYCUa-tH.js} +71 -26
  34. package/dist/button.js +1 -1
  35. package/dist/canvas.js +2 -2
  36. package/dist/card.js +2 -2
  37. package/dist/carousel.js +93 -110
  38. package/dist/collapsible.js +1 -1
  39. package/dist/command.js +1 -1
  40. package/dist/compile-CQEFRTmx.js +19 -0
  41. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  42. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  44. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  45. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  46. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  47. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  48. package/dist/components/custom/aurora/constants/presets.d.ts +2 -2
  49. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -12
  50. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  51. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  52. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  53. package/dist/components/custom/aurora/index.d.ts +2 -1
  54. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  55. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  56. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  57. package/dist/components/custom/border-progress/index.d.ts +4 -0
  58. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  59. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  60. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  61. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  62. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  63. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  64. package/dist/components/custom/concentric/constants.d.ts +43 -0
  65. package/dist/components/custom/concentric/index.d.ts +5 -0
  66. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  67. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  68. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  69. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  70. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  71. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  72. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  73. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  74. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  75. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  76. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  77. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  78. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  79. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  80. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  81. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  82. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  83. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  84. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  85. package/dist/components/custom/easing/constants.d.ts +28 -0
  86. package/dist/components/custom/easing/index.d.ts +3 -0
  87. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +12 -2
  88. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  89. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  90. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  91. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  92. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  93. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  94. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  95. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  96. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  97. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  98. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  99. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  100. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  101. package/dist/components/custom/spa-view/index.d.ts +2 -0
  102. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +10 -0
  103. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  104. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +1 -1
  105. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  106. package/dist/components/ui/badge/index.d.ts +1 -1
  107. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  108. package/dist/components/ui/button/index.d.ts +2 -2
  109. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  110. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  111. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  112. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  113. package/dist/components/ui/card/index.d.ts +2 -0
  114. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  115. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  116. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  117. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  118. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  119. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  120. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  121. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  122. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  123. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  124. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  125. package/dist/components/ui/drawer/constants.d.ts +45 -0
  126. package/dist/components/ui/drawer/index.d.ts +23 -15
  127. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  128. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  129. package/dist/components/ui/index.d.ts +1 -0
  130. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  131. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  132. package/dist/components/ui/sheet/index.d.ts +1 -1
  133. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  134. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  135. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  136. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  137. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  138. package/dist/composables/glass/index.d.ts +5 -2
  139. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  140. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  141. package/dist/composables/glass/vSpecular.d.ts +2 -0
  142. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  143. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  144. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  145. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  146. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  147. package/dist/composables/motion/core/index.d.ts +1 -0
  148. package/dist/composables/motion/index.d.ts +4 -0
  149. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  150. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  151. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  152. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  153. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  154. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  155. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  156. package/dist/concentric.d.ts +1 -0
  157. package/dist/concentric.js +562 -0
  158. package/dist/configurator.js +3 -2
  159. package/dist/confirm-dialog.js +22 -24
  160. package/dist/constellation.js +11 -11
  161. package/dist/context-menu.js +3 -3
  162. package/dist/controls.js +1 -1
  163. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  164. package/dist/data-table.js +1 -1
  165. package/dist/dialog.js +2 -2
  166. package/dist/dock.js +564 -457
  167. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  168. package/dist/dom.js +5 -5
  169. package/dist/dot-flow-field.d.ts +1 -0
  170. package/dist/dot-flow-field.js +604 -0
  171. package/dist/drawer.d.ts +1 -0
  172. package/dist/drawer.js +380 -0
  173. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-CofSZuk8.js} +14 -15
  174. package/dist/dropdown-menu.js +1 -1
  175. package/dist/easing.d.ts +1 -0
  176. package/dist/easing.js +463 -0
  177. package/dist/expandable-container.js +7 -4
  178. package/dist/fading-scroll.js +1 -1
  179. package/dist/focus-scope.d.ts +1 -0
  180. package/dist/focus-scope.js +23 -0
  181. package/dist/forms.js +7 -7
  182. package/dist/fourier-field.js +128 -116
  183. package/dist/fourier-math.js +1 -1
  184. package/dist/glass-panel.js +2 -2
  185. package/dist/glass-ui.css +1 -1
  186. package/dist/glass-ui.js +149 -341
  187. package/dist/goo-blob.js +830 -224
  188. package/dist/handmark.js +2 -2
  189. package/dist/header-ribbon.js +1 -1
  190. package/dist/hover-card.js +1 -1
  191. package/dist/hover-popover.js +1 -1
  192. package/dist/icon-chip.js +1 -1
  193. package/dist/icon-tooltip.js +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/instrument-chassis.js +1 -1
  196. package/dist/label.js +1 -1
  197. package/dist/labeled-field.js +6 -6
  198. package/dist/metric-badge.js +1 -1
  199. package/dist/metric-cell.js +1 -1
  200. package/dist/metric-stack.js +4 -8
  201. package/dist/motion-core.js +36 -36
  202. package/dist/motion-curves.js +1 -1
  203. package/dist/motion.js +157 -55
  204. package/dist/notification.js +1 -1
  205. package/dist/number-field.js +1 -1
  206. package/dist/pager-dots.js +1 -1
  207. package/dist/paper-backdrop.js +1 -1
  208. package/dist/popover.js +1 -1
  209. package/dist/{compile-EXXzEr1q.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  210. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  211. package/dist/progress.js +1 -1
  212. package/dist/pulse.js +1 -1
  213. package/dist/reactive.js +2 -2
  214. package/dist/scrolling-text.js +1 -1
  215. package/dist/search.js +9 -11
  216. package/dist/select.js +3 -3
  217. package/dist/separator.js +1 -1
  218. package/dist/{sheet-CquRYOAw.js → sheet-tZMg0E0w.js} +5 -5
  219. package/dist/sheet.js +1 -1
  220. package/dist/{slider-DQ95MET2.js → slider-DVb4HXU-.js} +3 -3
  221. package/dist/slider.js +1 -1
  222. package/dist/sortable-list.js +3 -3
  223. package/dist/spa-view.d.ts +1 -0
  224. package/dist/spa-view.js +46 -0
  225. package/dist/styles/animations.css +33 -9
  226. package/dist/styles/border-progress.css +109 -0
  227. package/dist/styles/cards.css +76 -0
  228. package/dist/styles/components.css +1 -1
  229. package/dist/styles/critical-partition.mjs +140 -0
  230. package/dist/styles/critical.css +12 -0
  231. package/dist/styles/deferred.css +31 -0
  232. package/dist/styles/dock/density.css +45 -0
  233. package/dist/styles/dock/layers.css +54 -30
  234. package/dist/styles/dock/morph.css +124 -7
  235. package/dist/styles/dock/overflow.css +16 -2
  236. package/dist/styles/dock/shell.css +54 -16
  237. package/dist/styles/dock.css +32 -0
  238. package/dist/styles/drawer.css +81 -35
  239. package/dist/styles/glass/deep.css +44 -0
  240. package/dist/styles/glass/ladder.css +87 -31
  241. package/dist/styles/glass/material.css +78 -15
  242. package/dist/styles/glass/reveal.css +136 -0
  243. package/dist/styles/glass/rim.css +100 -0
  244. package/dist/styles/glass/surfaces.css +101 -3
  245. package/dist/styles/glass-refract.css +96 -44
  246. package/dist/styles/glass-specular-track.css +7 -0
  247. package/dist/styles/glass.css +3 -0
  248. package/dist/styles/hover-popover.css +7 -6
  249. package/dist/styles/icon-chip.css +77 -15
  250. package/dist/styles/index.css +21 -9
  251. package/dist/styles/instrument-chassis.css +66 -3
  252. package/dist/styles/scroll-choreography.css +300 -0
  253. package/dist/styles/segmented-tabs.css +31 -0
  254. package/dist/styles/theme/bridges.css +11 -0
  255. package/dist/styles/theme/literals.css +11 -2
  256. package/dist/styles/theme/radius.css +6 -1
  257. package/dist/styles/tokens/dark-arm.css +98 -26
  258. package/dist/styles/tokens/glass-deep.css +75 -0
  259. package/dist/styles/tokens/glass-fx.css +333 -0
  260. package/dist/styles/tokens/glass.css +39 -319
  261. package/dist/styles/tokens/light-dark.css +15 -2
  262. package/dist/styles/tokens/offsets.css +116 -0
  263. package/dist/styles/tokens/on-glass-fg.css +39 -0
  264. package/dist/styles/tokens/property-regs.css +127 -0
  265. package/dist/styles/tokens/scale-paper.css +117 -89
  266. package/dist/styles/tokens/scheme-motion.css +70 -32
  267. package/dist/styles/tokens/scroll-tokens.css +123 -0
  268. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  269. package/dist/styles/tokens.css +9 -3
  270. package/dist/styles/typography/semantic.css +8 -8
  271. package/dist/styles/typography/utilities.css +22 -7
  272. package/dist/styles/utilities/animate.css +27 -24
  273. package/dist/styles/utilities/base-misc.css +255 -0
  274. package/dist/styles/utilities/base.css +47 -261
  275. package/dist/styles/utilities/btn.css +3 -1
  276. package/dist/styles/utilities/metal.css +189 -0
  277. package/dist/styles/utilities.css +14 -7
  278. package/dist/switch.js +1 -1
  279. package/dist/tabs.js +220 -107
  280. package/dist/timeline.js +2 -2
  281. package/dist/toast.js +1 -1
  282. package/dist/toggle-group.js +1 -1
  283. package/dist/tooltip.js +1 -1
  284. package/dist/typewriter.js +1 -1
  285. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  286. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  287. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  288. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  289. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  290. package/dist/useSpring-C0jyvEJB.js +40 -0
  291. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  292. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  293. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  294. package/dist/vSpecular-CQFmLNzA.js +68 -0
  295. package/dist/vendor-CKmzio-i.js +226 -0
  296. package/dist/watercolor-dot.js +2 -2
  297. package/package.json +126 -22
  298. package/src/styles/animations.css +33 -9
  299. package/src/styles/border-progress.css +109 -0
  300. package/src/styles/cards.css +76 -0
  301. package/src/styles/critical-partition.mjs +140 -0
  302. package/src/styles/dock/density.css +45 -0
  303. package/src/styles/dock/layers.css +54 -30
  304. package/src/styles/dock/morph.css +124 -7
  305. package/src/styles/dock/overflow.css +16 -2
  306. package/src/styles/dock/shell.css +54 -16
  307. package/src/styles/dock.css +32 -0
  308. package/src/styles/drawer.css +81 -35
  309. package/src/styles/glass/deep.css +44 -0
  310. package/src/styles/glass/ladder.css +87 -31
  311. package/src/styles/glass/material.css +78 -15
  312. package/src/styles/glass/reveal.css +136 -0
  313. package/src/styles/glass/rim.css +100 -0
  314. package/src/styles/glass/surfaces.css +101 -3
  315. package/src/styles/glass-refract.css +96 -44
  316. package/src/styles/glass-specular-track.css +7 -0
  317. package/src/styles/glass.css +3 -0
  318. package/src/styles/hover-popover.css +7 -6
  319. package/src/styles/icon-chip.css +77 -15
  320. package/src/styles/index.css +12 -0
  321. package/src/styles/instrument-chassis.css +66 -3
  322. package/src/styles/scroll-choreography.css +300 -0
  323. package/src/styles/segmented-tabs.css +31 -0
  324. package/src/styles/theme/bridges.css +11 -0
  325. package/src/styles/theme/literals.css +11 -2
  326. package/src/styles/theme/radius.css +6 -1
  327. package/src/styles/tokens/dark-arm.css +98 -26
  328. package/src/styles/tokens/glass-deep.css +75 -0
  329. package/src/styles/tokens/glass-fx.css +333 -0
  330. package/src/styles/tokens/glass.css +39 -319
  331. package/src/styles/tokens/light-dark.css +15 -2
  332. package/src/styles/tokens/offsets.css +116 -0
  333. package/src/styles/tokens/on-glass-fg.css +39 -0
  334. package/src/styles/tokens/property-regs.css +127 -0
  335. package/src/styles/tokens/scale-paper.css +117 -89
  336. package/src/styles/tokens/scheme-motion.css +70 -32
  337. package/src/styles/tokens/scroll-tokens.css +123 -0
  338. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  339. package/src/styles/tokens.css +9 -3
  340. package/src/styles/typography/semantic.css +8 -8
  341. package/src/styles/typography/utilities.css +22 -7
  342. package/src/styles/utilities/animate.css +27 -24
  343. package/src/styles/utilities/base-misc.css +255 -0
  344. package/src/styles/utilities/base.css +47 -261
  345. package/src/styles/utilities/btn.css +3 -1
  346. package/src/styles/utilities/metal.css +189 -0
  347. package/src/styles/utilities.css +14 -7
  348. package/dist/CardAction-XH4YBVEK.js +0 -158
  349. package/dist/Notification-DKjKsQq8.js +0 -100
  350. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  351. package/dist/Toaster-Bm_HQSpc.js +0 -263
  352. package/dist/check-njhk-vfu.js +0 -7
  353. package/dist/chevron-down-DKkxb4VV.js +0 -7
  354. package/dist/chevron-right-CPXbqQQz.js +0 -7
  355. package/dist/chevron-up-n_24SqI-.js +0 -7
  356. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  357. package/dist/minimize-2-BV31Ob_h.js +0 -38
  358. package/dist/search-BSGrf2Sk.js +0 -12
  359. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  360. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  361. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  362. package/dist/useSpringMount-CvopqiFr.js +0 -108
  363. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  364. package/dist/x-BUwTKe50.js +0 -10
  365. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  366. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  367. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  368. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  369. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  370. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-DwwjicPY.js} +0 -0
  371. /package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-DXswVdRz.js} +0 -0
  372. /package/dist/{Separator-BArl4OaB.js → Separator-pKF0oA4M.js} +0 -0
  373. /package/dist/{Switch-Dr--uLGH.js → Switch-CwYNf8bo.js} +0 -0
  374. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  375. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  376. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  377. /package/dist/{math-DeuJwLFx.js → math-BINYmg5z.js} +0 -0
  378. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  379. /package/dist/{prng-Cg22zv8g.js → prng-Za0Rmgag.js} +0 -0
  380. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  381. /package/dist/{springPresets-WXaLbu8u.js → springPresets-CFQGQfdl.js} +0 -0
  382. /package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-BfUq2bUM.js} +0 -0
  383. /package/dist/{useInterval-CNdua40W.js → useInterval-CvK1mL92.js} +0 -0
  384. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  385. /package/dist/{useRAFLoop-CdwJ7284.js → useRAFLoop-UYa4zoiN.js} +0 -0
  386. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  387. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  388. /package/dist/{useSortable-BVqlJRBR.js → useSortable-DHjtZSEd.js} +0 -0
  389. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  390. /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-CWEi25hf.js} +0 -0
  391. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  392. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  393. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
  394. /package/dist/{vReveal-D9k0jADx.js → vReveal-Czsb7zQC.js} +0 -0
@@ -34,24 +34,55 @@
34
34
  during the morph, so the read resolves the correct in-flight blend (collapse
35
35
  1→0 via `1 - t`; expand 0→1 via `t`); on settle `[data-morphing]` clears and
36
36
  expand-t snaps to the exact class endpoint. */
37
- .glass-dock:not(.vertical).expanded,
38
- .glass-dock:not(.vertical).always-expanded {
37
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the `--dock-expand-t` directional derivation is
38
+ ORIENTATION-AGNOSTIC. The derivation reads the per-swap morph scalar + the
39
+ synchronously-set `.expanded`/`.collapsed` class — there is NO axis in this
40
+ blend (a `t`-vs-`1-t` directional read), so the `:not(.vertical)` qualifier is
41
+ DROPPED here. A collapsing VERTICAL dock now derives the same in-flight
42
+ expand-t (the box-size arm `layers.css` already morphs `block-size` on
43
+ `--dock-morph-t`; this gives the chrome the matching directional scalar). The
44
+ earlier "a vertical rail is ALWAYS-EXPANDED" assumption is retired since
45
+ vertical-collapse shipped — `alwaysExpanded` defaults false (GlassDock.vue),
46
+ so a genuinely-collapsing vertical dock gets its chrome on the ONE clock. */
47
+ .glass-dock.expanded,
48
+ .glass-dock.always-expanded {
39
49
  --dock-expand-t: 1;
40
50
  }
41
51
 
42
- .glass-dock:not(.vertical).collapsed {
52
+ .glass-dock.collapsed {
43
53
  --dock-expand-t: 0;
44
54
  }
45
55
 
46
- .glass-dock:not(.vertical).expanded[data-morphing],
47
- .glass-dock:not(.vertical).always-expanded[data-morphing] {
56
+ .glass-dock.expanded[data-morphing],
57
+ .glass-dock.always-expanded[data-morphing] {
48
58
  --dock-expand-t: var(--dock-morph-t);
49
59
  }
50
60
 
51
- .glass-dock:not(.vertical).collapsed[data-morphing] {
61
+ .glass-dock.collapsed[data-morphing] {
52
62
  --dock-expand-t: calc(1 - var(--dock-morph-t));
53
63
  }
54
64
 
65
+ /* BB.W-LIQUID-REVEAL — the dock-expand LIQUID-OPEN bloom beat (DOCK-EXPAND-CONSUMER).
66
+ The dock pill BLOOMS open from its collapsed circle: a coupled `filter` blur-
67
+ settle decongest reading the SAME `--dock-expand-t` directional scalar the chrome
68
+ interp rides (the W-DOCK-MORPH-FAMILY morph mechanism is UNTOUCHED — this is a
69
+ SURFACE arm, NOT a morph-axis layout edit). Collapsed (`--dock-expand-t` 0) the
70
+ dock content reads a faint `blur(--dock-reveal-blur)` decongest; as it expands
71
+ (`--dock-expand-t` → 1) the blur SETTLES to 0 so the chrome clarifies AS the pill
72
+ blooms — the iOS "light-bending modulation" arrival on the dock's own pixels
73
+ (`filter`, NOT `backdrop-filter`, so the resting glass-tier plate blur the dock
74
+ carries is never clobbered). Compositor-safe (a `filter` radius interp, never a
75
+ layout property — the proof:no-layout-animation floor). The beat rides the ONE
76
+ `--dock-expand-t` scalar, so it tracks the `DOCK_SPRING` clock with NO second
77
+ clock + NO re-added CSS transition (the morph already animates `--dock-morph-t`).
78
+ PRM: the `--dock-reveal-blur` knob is zeroed under reduce (the carve below). */
79
+ .glass-dock {
80
+ --dock-reveal-blur: 3px;
81
+ filter: blur(
82
+ calc(var(--dock-reveal-blur) * (1 - var(--dock-expand-t, 1)))
83
+ );
84
+ }
85
+
55
86
  /* The morphing root chrome — background / border-color interpolate between the
56
87
  collapsed and expanded endpoints on the ONE `--dock-expand-t` scalar. Scoped
57
88
  to the horizontal dock (`:not(.vertical)`) — the inline-axis aperture morph;
@@ -98,6 +129,43 @@
98
129
  );
99
130
  }
100
131
 
132
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the VERTICAL chrome-interp un-gate (BB-1). The
133
+ bg/border interp is AXIS-INVARIANT (a color mix reads the scalar with no
134
+ axis), so the vertical dock interpolates its plate between the SAME
135
+ collapsed↔expanded endpoints on the SAME `--dock-expand-t` scalar the
136
+ horizontal block reads — the ONE `DOCK_SPRING` clock, no second clock, no
137
+ re-added CSS transition. This PARALLEL `.vertical` block (specificity 0,2,0,
138
+ source-order AFTER the shell.css static `.glass-dock.vertical` plate so it
139
+ wins at equal specificity) is the inverse-axis twin of the horizontal block
140
+ above — the box-size morph already rides `block-size` on `layers.css`'s
141
+ `--dock-morph-t`; this gives the plate chrome the matching directional blend
142
+ so the vertical collapse↔expand no longer SNAPS its bg/border discretely. At
143
+ the rest endpoints `--dock-expand-t` resolves to the class value (0 collapsed
144
+ / 1 expanded), so the resting look is exact — byte-equivalent to the shell.css
145
+ static plate it supersedes during the morph. */
146
+ .glass-dock.vertical {
147
+ background: color-mix(
148
+ in srgb,
149
+ color-mix(
150
+ in oklab,
151
+ var(--glass-bg-dock, var(--glass-bg-wash)),
152
+ var(--glass-tint-source) var(--glass-tint-strength)
153
+ )
154
+ calc(var(--dock-expand-t, 1) * 100%),
155
+ color-mix(
156
+ in oklab,
157
+ var(--glass-bg-wash),
158
+ var(--glass-tint-source) var(--glass-tint-strength)
159
+ )
160
+ );
161
+ border-color: color-mix(
162
+ in srgb,
163
+ var(--glass-border-dock, var(--glass-border-wash))
164
+ calc(var(--dock-expand-t, 1) * 100%),
165
+ var(--glass-border-floating)
166
+ );
167
+ }
168
+
101
169
  /* The padding morph is split out + scoped `:not(.dock-overflow-wrap)` so the
102
170
  wrap variant's own padding rules (W04 territory — `.dock-overflow-wrap` +
103
171
  its `@media` snap-back) are NOT clobbered by this higher-specificity longhand.
@@ -142,6 +210,35 @@
142
210
  );
143
211
  }
144
212
 
213
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the VERTICAL padding interp is the AXIS-INVERSE
214
+ of the horizontal layout-isolation contract above. The vertical collapse↔
215
+ expand is a BLOCK-HEIGHT aperture (the box-size arm morphs `block-size`,
216
+ layers.css), so the CROSS (inline) axis MUST be invariant across the morph —
217
+ else the dock's outer WIDTH changes on collapse and reflows its horizontal
218
+ siblings (the §1 contract, mirrored onto the vertical axis). So `padding-
219
+ inline` is PINNED at the expanded inline value in BOTH states, and ONLY
220
+ `padding-block` morphs to tighten the collapsed pill on the morph axis. The
221
+ collapsed block-pad endpoint is the EXPANDED inline pad (max'd with the
222
+ consumer `--dock-collapsed-padding` handle) so the height-pinned-cross collapsed
223
+ pill is SYMMETRIC. Specificity 0,2,0 source-order after shell.css's static
224
+ `.glass-dock.vertical` padding so this wins at equal specificity; at the rest
225
+ endpoints `--dock-expand-t` is the class value so the look is exact. Scoped to
226
+ the NON-scroll/non-wrap vertical dock. */
227
+ .glass-dock.vertical:not(.dock-overflow-wrap) {
228
+ --dock-pad-collapsed: max(
229
+ var(--dock-padding-inline, 0.5rem),
230
+ var(--dock-collapsed-padding, 0px)
231
+ );
232
+ /* inline padding is INVARIANT — the cross axis, pinned both states so the
233
+ outer inline-size never changes → 0px horizontal sibling reflow. */
234
+ padding-inline: var(--dock-padding-inline, 0.5rem);
235
+ padding-block: calc(
236
+ var(--dock-pad-collapsed) +
237
+ (var(--dock-padding-block, 0.375rem) - var(--dock-pad-collapsed)) *
238
+ var(--dock-expand-t, 1)
239
+ );
240
+ }
241
+
145
242
  /* AX.W01 — the collapsed padding / background / border-color are RETIRED here
146
243
  (the `--dock-expand-t` morph block above is the single authority for those
147
244
  three axes — they interpolate, never snap). `.collapsed` keeps only its
@@ -330,7 +427,15 @@
330
427
  ink, which clears ~10:1). */
331
428
  :where(.glass-dock) {
332
429
  --glass-tint-source: var(--glass-tint-ink);
333
- --glass-tint-strength: var(--glass-tint-strength-aa);
430
+ /* BC.W-AUDIT — the scope-7 completion: the dock JOINS the content-tier
431
+ sub-perceptual FLOOR by default (translucent warm liquid glass, NOT a grey
432
+ slab), and the FULL AA darken engages ONLY under the genuine bright signal —
433
+ the `@container --glass-backdrop: light` bucket below, written by the dock's
434
+ own sampled-luminance observer over a bright backdrop (aurora/DockStage) OR a
435
+ consumer's explicit bucket. The prior unconditional AA (20% ink-ward) darkened
436
+ the dock to grey over EVERY calm light page — the iOS-27 dynamic model done
437
+ wrong (darken-always vs darken-when-bright). The full glass rebuild is BC. */
438
+ --glass-tint-strength: var(--glass-tint-strength-floor);
334
439
  --dock-fg-on-aurora: var(--glass-tint-ink);
335
440
  --muted-foreground: var(--foreground);
336
441
  }
@@ -372,3 +477,15 @@
372
477
  }
373
478
  }
374
479
  }
480
+
481
+ /* BB.W-LIQUID-REVEAL — the dock-expand bloom beat's blur-settle is OFF under
482
+ `prefers-reduced-motion: reduce` (the vestibular floor). The morph itself snaps
483
+ instantly under PRM (the `DOCK_SPRING` `respectReducedMotion` in
484
+ dockMorphContext.ts), and zeroing `--dock-reveal-blur` here removes the resting
485
+ collapsed-pill decongest blur too — a reduced-motion dock reads crisp at every
486
+ state, no in-between blur frames. */
487
+ @media (prefers-reduced-motion: reduce) {
488
+ .glass-dock {
489
+ --dock-reveal-blur: 0px;
490
+ }
491
+ }
@@ -246,8 +246,22 @@
246
246
  --dock-collapsed-padding / --dock-layer-tab-size paint at the global 1.5×
247
247
  while the density box paints at 1.17× — a desync the R5-2 register would
248
248
  introduce). The formulas are IDENTICAL to their :root definitions; only
249
- the resolution element moves so the lifted --dock-scale flows in. */
250
- --dock-icon-glyph: calc(1.25rem * var(--dock-scale));
249
+ the resolution element moves so the lifted --dock-scale flows in.
250
+ BB.W-PERF-PRODUCER A′-6 — --dock-icon-glyph is now a RATIO of the
251
+ density-painted --dock-layer-height (offsets-sizing.css + the density.css
252
+ [data-density] re-resolve). This coarse block @imports AFTER density.css
253
+ in the SAME @layer at the SAME specificity, so its --dock-icon-glyph
254
+ source-order-WINS on coarse pointers — it MUST carry the density-aware
255
+ formula too (the flat `1.25rem * --dock-scale` here would re-freeze the
256
+ glyph at the flat rem on touch, re-introducing the D5-1 defect the wave
257
+ fixes). --dock-layer-height re-resolves transitively at the lifted
258
+ --dock-scale (re-declared above), so the glyph tracks both the density
259
+ box AND the coarse register. Formula identical to the :root + density
260
+ re-resolve; only the resolution element moves. */
261
+ --dock-icon-glyph: max(
262
+ calc(var(--dock-layer-height, calc(2.5rem * var(--dock-scale))) * var(--dock-icon-glyph-ratio)),
263
+ var(--dock-icon-glyph-floor)
264
+ );
251
265
  --dock-collapsed-padding: calc(0.25rem * var(--dock-scale));
252
266
  --dock-layer-tab-size: calc(1.75rem * var(--dock-scale));
253
267
  /* --dock-collapsed-summary-min-size derives from --dock-layer-height (the
@@ -87,13 +87,32 @@
87
87
  centered in its cell (≥1px slack/side at hover), the cell sits flush at the
88
88
  dock content edge, and the `--dock-padding-block` (≈6px) padding holds the
89
89
  plate ≥7px clear of the `contain: paint` border-box edge on the block axis.
90
- So `contain: paint` is the NON-proximate second clip box (the lane's
90
+ So the `paint` clip axis is the NON-proximate second clip box (the lane's
91
91
  `probe-bottomdock-nocontain.png` forced-root probe proved the inner
92
- scroll-port box was proximate, not this) and it is UNEDITED here — the
93
- inset + freed cross axis suffice, no containment lift on the control-plate
94
- band. The π readback (W-DOCK-GEOMETRY-DELTA.md) records the live
95
- plate-inside-padding margin number that binds this verdict. */
96
- contain: paint;
92
+ scroll-port box was proximate, not this) and the `paint` axis is RETAINED
93
+ here — the inset + freed cross axis suffice, no containment LIFT on the
94
+ control-plate band. (BB.W-PERF-PRODUCER A′-4 widens the value to
95
+ `contain: layout style paint` — the restyle-scope axes ALONGSIDE the paint
96
+ clip box, see below — but never lifts `paint`.) The π readback
97
+ (W-DOCK-GEOMETRY-DELTA.md) records the live plate-inside-padding margin
98
+ number that binds this verdict. */
99
+ /* BB.W-PERF-PRODUCER A′-4 — the `--dock-morph-t` restyle-scope narrowing.
100
+ The per-frame morph scalar write recomputes the inheriting `calc()` group
101
+ across the dock subtree (dock.css's 10-selector `:where()` consumers); add
102
+ the `layout` + `style` containment axes so a scalar write recomputes
103
+ layout/style WITHIN the dock subtree, not up the document (the value.js A′-4
104
+ ~13fps restyle-cost trace). RECONCILED with the existing axes: `paint`
105
+ (above, the BA.W-DOCK-GEOMETRY clip box) composes — `contain: layout style
106
+ paint` is the union, NEVER `size` (which `container-type: inline-size` carries
107
+ as `inline-size` ONLY on the OPT-IN `containerName` host below; the default
108
+ free-floating dock must stay shrink-to-fit, so `size`/`inline-size` is
109
+ DELIBERATELY excluded here — adding it would re-introduce the 3.3.0 sliver
110
+ regression the §99 comment documents). The morph-axis `overflow: clip`
111
+ (the reveal aperture) + the `.glass-dock-frame` rail-escape are UNAFFECTED:
112
+ `layout`/`style` containment scopes RECALC, it does not establish a paint
113
+ clip beyond the already-present `paint` axis. The `DOCK_SPRING` clock is
114
+ byte-fenced (the value.js letter) — this is restyle COST, not a re-tune. */
115
+ contain: layout style paint;
97
116
  display: inline-flex;
98
117
  align-items: center;
99
118
  /* AW.W1 — the dock does NOT establish a default inline-size container.
@@ -273,16 +292,19 @@
273
292
  shell above; the cross axis stays visible there. */
274
293
  padding: var(--dock-padding-block, 0.375rem);
275
294
  border-radius: var(--radius-dock);
276
- /* AX.W01 — a vertical rail is ALWAYS-EXPANDED (no collapse↔expand morph),
277
- so its root padding/background/border-color never morph; the prior
278
- `padding/background/border-color var(--dock-motion-*)` transition arms
279
- are DELETED (a residual root CSS-transition on the morph-chrome props is
280
- the second-clock smell the single-scalar rebuild retires). The block-axis
281
- (height) morph is owned by the inner `.dock-layer-stack` / DockLayerGroup
282
- via the `--dock-morph-t` scalar (the size `calc()` above), never a CSS
283
- transition here. KEPT: the DECORATIVE hover-scale + press-squish (the
284
- individual `scale`/`transform`) and the box-shadow fade — these are
285
- interaction polish on the static rail, NOT the morph. */
295
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the stale "a vertical rail is ALWAYS-EXPANDED
296
+ (no collapse↔expand morph)" assumption is RETIRED (it was false since
297
+ vertical-collapse shipped: `alwaysExpanded` defaults FALSE, so a vertical
298
+ dock genuinely collapses its `block-size`). The vertical plate's
299
+ bg/border/padding/radius now MORPH on the SAME `--dock-expand-t` scalar
300
+ the horizontal chrome rides (the morph.css `.glass-dock.vertical` interp +
301
+ padding axis-inverse + the radius arm below) — the chrome follows the
302
+ box-size morph, no discrete snap. NO root CSS-transition on the morph-
303
+ chrome props is re-added (a `transition: padding/background/border-color`
304
+ arm is the second-clock smell the single-scalar rebuild forbids — the
305
+ `--dock-expand-t` interp is the single authority). KEPT: the DECORATIVE
306
+ hover-scale + press-squish (the individual `scale`/`transform`) and the
307
+ box-shadow fade — interaction polish on the rail, NOT the morph chrome. */
286
308
  transition:
287
309
  box-shadow var(--dock-motion-standard),
288
310
  transform var(--dock-motion-resize),
@@ -318,6 +340,22 @@
318
340
  border-radius: var(--radius-xl);
319
341
  }
320
342
 
343
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the VERTICAL big-dock CARD radius MORPHS on the
344
+ SAME `--dock-expand-t` scalar the horizontal `.shape-card` rides (the radius
345
+ arm of the vertical chrome un-gate; it lives in shell.css beside the horizontal
346
+ arm, not morph.css). `--radius-pill` at expand-t 0 (collapsed), the finite
347
+ `--dock-card-radius` at expand-t 1 (expanded) — the radius follows the box-size
348
+ block morph, no discrete snap. The static `.shape-pill`/`.shape-rounded` rest
349
+ radii above are the rest endpoints for those shapes; this is the card shape's
350
+ interpolated radius (mirroring the horizontal `:not(.vertical).shape-card`). */
351
+ .glass-dock.vertical.shape-card {
352
+ border-radius: calc(
353
+ var(--radius-pill) +
354
+ (var(--dock-card-radius) - var(--radius-pill)) *
355
+ var(--dock-expand-t, 1)
356
+ );
357
+ }
358
+
321
359
  /* AW.W3b — horizontal-root shape rules. The `shape-*` class once bound ONLY under
322
360
  the vertical surface; on a horizontal dock the prop silently no-op'd (the root
323
361
  hardwired `--radius-dock` = `--radius-pill`). These rules close that
@@ -67,6 +67,38 @@
67
67
  initial-value: 0;
68
68
  }
69
69
 
70
+ /* BB.W-DOCK-MORPH-FAMILY (e) — the `@property`-registered dock-scale axis. The
71
+ dock-scale cascade is `--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale,
72
+ 1))` (tokens/sizing.css). UNregistered, that `calc()` substitutes ONCE at `:root`
73
+ against the `:root` identity `--dock-local-scale: 1`, so a consumer-scope
74
+ `--dock-local-scale` override is INHERITED but never RE-EVALUATED — the dock keeps
75
+ `--dock-scale: calc(1 * 1)` and stays at the unscaled base (the 3rd recurrence of
76
+ the AX.W55 substitution-vs-inheritance trap; the documented-but-broken `:root`
77
+ preset). Registering `--dock-local-scale` as an INHERITING `@property <number>`
78
+ makes a registered inheriting custom property re-substitute PER-ELEMENT, so a
79
+ `--dock-local-scale` override on ANY dock scope re-evaluates the `calc()` at that
80
+ scope and threads the whole geometry cascade (box·pad·gap·tab·tile·glyph) down in
81
+ lockstep — the `:root` preset made real (the `@property --dock-morph-t` house
82
+ idiom above is the precedent). `--dock-scale` itself is ALSO registered (the
83
+ derived axis) so its `calc()` re-resolves per-element when `--dock-local-scale`
84
+ shifts. ADDITIVE ONLY: `initial-value: 1` is the identity, so at the default
85
+ `--dock-local-scale: 1` the resolved `--dock-scale` is byte-IDENTICAL to HEAD (no
86
+ rung re-tune); the `@media (pointer: coarse)` re-declare (overflow.css) STAYS the
87
+ `:root`-equivalent re-resolve, and this registration is the complementary
88
+ non-`:root`-scope thread. DOCK_SPRING is untouched (this is a token registration,
89
+ not a clock). */
90
+ @property --dock-local-scale {
91
+ syntax: "<number>";
92
+ inherits: true;
93
+ initial-value: 1;
94
+ }
95
+
96
+ @property --dock-scale {
97
+ syntax: "<number>";
98
+ inherits: true;
99
+ initial-value: 1;
100
+ }
101
+
70
102
  @layer components {
71
103
  :where(
72
104
  .glass-dock,
@@ -1,21 +1,35 @@
1
1
  /*
2
- * drawer.css — Detented bottom-sheet grammar (AN.W3).
2
+ * drawer.css — Detented bottom-sheet grammar (AN.W3; BB.W-DRAWER-ABROGATE).
3
3
  *
4
- * vaul-vue owns the snap math (the spring transform between snap-points, the
5
- * drag-resistance overshoot, the `data-vaul-*` state attributes). glass-ui owns
6
- * the LOOK: the glass sheet surface, the rounded peek handle, the snap-stop
7
- * indicator rules, and the drag-resistance feel-tuning. This file is the
8
- * substrate so a consumer mounting `<Drawer mode="live-behind">` does not
9
- * re-author the three detents from scratch.
4
+ * THE HOUSE owns the snap math end-to-end now (vaul-vue ABROGATED). The Drawer
5
+ * family composes the reka `DialogRoot`/`DialogPortal`/`DialogContent` headless
6
+ * substrate (the SAME vueuse-free substrate every other compound wrapper binds),
7
+ * and the snap settle is driven by ONE house `SpringProgress` on the `DRAWER_SNAP`
8
+ * register (`useDrawerSnap.ts`, the §6 dock-morph `linear()` clock — NOT a bespoke
9
+ * `cubic-bezier(.32,.72,0,1)` transition; that was vaul's). The engine writes the
10
+ * `--glass-drawer-t` snap-fraction scalar (0 = closed/offscreen, 1 = the fullest
11
+ * detent) the content root reads as its translate; this file owns the LOOK: the
12
+ * glass sheet surface, the rounded peek handle, the snap-stop indicator rules, and
13
+ * the detent-fill geometry. This file is the substrate so a consumer mounting
14
+ * `<Drawer mode="live-behind">` does not re-author the three detents from scratch.
10
15
  *
11
16
  * Token-first — every visual axis reads a custom property. Consumers retune
12
17
  * the sheet by overriding the rungs below, never by editing this file.
13
18
  */
14
19
 
20
+ /* The snap-fraction scalar the house `useDrawerSnap` engine writes per frame. The
21
+ * content root's inline `transform` reads it (DrawerContent.vue) — typed so the
22
+ * default (1 = fully open) keeps a no-snap content-sized sheet seated open. */
23
+ @property --glass-drawer-t {
24
+ syntax: "<number>";
25
+ inherits: false;
26
+ initial-value: 1;
27
+ }
28
+
15
29
  :root {
16
30
  /* Detent grammar knobs — overridable per-consumer */
17
31
  --drawer-handle-w: 2.25rem;
18
- --drawer-handle-h: 0.3125rem; /* 5px — vaul's hit-target rhythm */
32
+ --drawer-handle-h: 0.3125rem; /* 5px — the iOS grip hit-target rhythm */
19
33
  --drawer-handle-color: var(--muted-foreground);
20
34
  --drawer-handle-opacity: 0.45;
21
35
  --drawer-handle-opacity-active: 0.85;
@@ -23,14 +37,15 @@
23
37
  }
24
38
 
25
39
  /*
26
- * The sheet surface. Replaces the prior inline-Tailwind triplet on
27
- * DrawerContent.vue so the glass tier + the snap transform feel live in one
40
+ * The sheet surface. The glass tier + the snap-translate feel live in one
28
41
  * token-driven place. The fixed/inset/z-index layout stays here too.
29
42
  *
30
- * NOTE: vaul-vue sets `transition: transform .5s cubic-bezier(.32,.72,0,1)` and
31
- * `touch-action: none` on `[data-vaul-drawer]` from its injected stylesheet —
32
- * that IS the drag-resistance spring curve. We do NOT override `transition` so
33
- * the snap feel is preserved; we layer border-radius + glass surface on top.
43
+ * NOTE: the snap motion is the house `useDrawerSnap` `SpringProgress` writing
44
+ * `--glass-drawer-t`, which the content root's inline `transform` reads (the §6
45
+ * doctrine — ONE motion vocabulary, no `transition: transform` curve injected on
46
+ * `[data-glass-drawer]`). `touch-action: none` on the handle keeps the drag gesture
47
+ * from scrolling the page. We layer border-radius + glass surface on top of the
48
+ * spring-driven translate.
34
49
  */
35
50
  .glass-drawer {
36
51
  position: fixed;
@@ -101,24 +116,26 @@
101
116
  }
102
117
 
103
118
  /*
104
- * Detented (snap-point) sheets fill the viewport height. vaul positions the
105
- * sheet by translating it DOWN by `innerHeight - (fraction * innerHeight)` —
106
- * so for a snap fraction to read as that fraction OF THE VIEWPORT, the sheet's
107
- * top must sit at the viewport top when fully open (offset 0). A `height: auto`
108
- * content sheet would instead translate off-screen. vaul tags the snap case via
109
- * `[data-vaul-snap-points=true]`; we fill height there and let the content
119
+ * Detented (snap-point) sheets fill the viewport height. The house engine positions
120
+ * the sheet by translating it along its drag axis by `(1 - --glass-drawer-t) * 100%`
121
+ * (DrawerContent.vue's inline transform) — so for a snap fraction to read as that
122
+ * fraction OF THE VIEWPORT, the sheet's top must sit at the viewport top when fully
123
+ * open (translate 0). A `height: auto` content sheet would instead translate
124
+ * off-screen. The content root tags the multi-detent case via
125
+ * `[data-glass-drawer-snap-points=true]`; we fill height there and let the content
110
126
  * scroll inside.
111
127
  */
112
- .glass-drawer[data-vaul-snap-points="true"] {
128
+ .glass-drawer[data-glass-drawer-snap-points="true"] {
113
129
  height: 100%;
114
130
  max-height: 100%;
115
131
  margin-top: 0;
116
132
  }
117
133
 
118
- /* Live-behind direction variants — vaul tags the root with the drag axis.
119
- Bottom is the default + the F-side pattern; the others ride the same surface
120
- so a top/side live-behind sheet inherits the grammar. */
121
- .glass-drawer[data-vaul-drawer-direction="top"] {
134
+ /* Direction variants — the content root tags itself with the drag axis
135
+ (`data-glass-drawer-direction`). Bottom is the default; the others ride the same
136
+ surface so a top/side sheet inherits the grammar. The side-lens (left/right) is
137
+ the BB-2 full-slide axis — it pins to its edge + fills the cross axis. */
138
+ .glass-drawer[data-glass-drawer-direction="top"] {
122
139
  bottom: auto;
123
140
  top: 0;
124
141
  margin-top: 0;
@@ -128,11 +145,35 @@
128
145
  border-radius: 0 0 var(--radius-panel) var(--radius-panel);
129
146
  }
130
147
 
148
+ .glass-drawer[data-glass-drawer-direction="left"],
149
+ .glass-drawer[data-glass-drawer-direction="right"] {
150
+ inset-inline: auto;
151
+ inset-block: 0;
152
+ height: 100%;
153
+ max-height: 100%;
154
+ width: min(24rem, 92vw);
155
+ margin: 0;
156
+ border: 1px solid var(--glass-border-overlay);
157
+ }
158
+
159
+ .glass-drawer[data-glass-drawer-direction="left"] {
160
+ left: 0;
161
+ border-left: 0;
162
+ border-radius: 0 var(--radius-panel) var(--radius-panel) 0;
163
+ }
164
+
165
+ .glass-drawer[data-glass-drawer-direction="right"] {
166
+ right: 0;
167
+ border-right: 0;
168
+ border-radius: var(--radius-panel) 0 0 var(--radius-panel);
169
+ }
170
+
131
171
  /*
132
172
  * Peek handle — the rounded grip at the top of the sheet. It is the visual
133
- * affordance the user drags to cycle peek → half → full. vaul-vue intensifies
134
- * the grip on `:active` via its own `[data-vaul-handle]` rules when the consumer
135
- * uses `<DrawerHandle>`; this is the glass-ui default grip for the common case.
173
+ * affordance the user drags to cycle peek → half → full. The house snap engine
174
+ * (`useDrawerSnap`) binds the pointer-drag gesture directly on this handle (the
175
+ * `[data-glass-drawer-handle]` element) and flags it `[data-dragging]` while a drag
176
+ * is in flight, so the grip intensifies "live" during the gesture.
136
177
  */
137
178
  .glass-drawer-handle {
138
179
  flex-shrink: 0;
@@ -154,10 +195,11 @@
154
195
  width var(--duration-fast) var(--ease-out);
155
196
  }
156
197
 
157
- /* While the sheet is being dragged vaul exposes the gesture; intensify the grip
158
- so the affordance reads as "live". `:active` covers the pointer-held case for
159
- the default grip; consumers using vaul's `<DrawerHandle>` get its own active
160
- rule in addition. */
198
+ /* While the sheet is being dragged the house engine flags the handle
199
+ `[data-dragging]`; intensify the grip so the affordance reads as "live".
200
+ `:active` covers the pointer-held case + `[data-dragging]` covers the captured
201
+ drag; the hover lift is the rest affordance. */
202
+ .glass-drawer-handle[data-dragging] .glass-drawer-grip,
161
203
  .glass-drawer-handle:active .glass-drawer-grip,
162
204
  .glass-drawer:hover .glass-drawer-grip {
163
205
  opacity: var(--drawer-handle-opacity-active);
@@ -170,7 +212,8 @@
170
212
  * `.glass-drawer-snap-rule` to a separator element inside the sheet; it reads as
171
213
  * the detent boundary line without competing with the content. This is the
172
214
  * "snap-stop visual indicator" the spec asks for, expressed as an opt-in class
173
- * (the detents themselves are positional, owned by vaul; the RULE is the look).
215
+ * (the detents themselves are positional, owned by the house snap engine; the
216
+ * RULE is the look).
174
217
  */
175
218
  .glass-drawer-snap-rule {
176
219
  height: 1px;
@@ -179,8 +222,11 @@
179
222
  background-color: var(--drawer-snap-rule-color);
180
223
  }
181
224
 
182
- /* Reduced-motion — vaul's transform transition is its own; we only suppress the
183
- grip's affordance animation so the handle does not pulse for PRM users. */
225
+ /* Reduced-motion — the house `SpringProgress` snaps the detent deterministically
226
+ under `prefers-reduced-motion: reduce` (its `respectReducedMotion` jumps the
227
+ `--glass-drawer-t` scalar to target in one frame, zero motion frames); here we
228
+ only suppress the grip's affordance animation so the handle does not pulse for
229
+ PRM users. */
184
230
  @media (prefers-reduced-motion: reduce) {
185
231
  .glass-drawer-grip {
186
232
  transition: none;
@@ -0,0 +1,44 @@
1
+ /* glass/deep.css — BB.W-DEEP-GLASS — the OPT-IN `.glass-deep` decoration.
2
+ *
3
+ * The deep-glass register: the maximal iOS-27 Liquid-Glass tier ABOVE the
4
+ * W-GLASS-CAL calm default (the Apple `saturate(1.8) blur(20px)` family, landed
5
+ * at the budget-clearing 16px / saturate 1.5; tokens/glass-deep.css). `.glass-deep`
6
+ * is the OPT-IN surface — a consumer adds it to a glass surface that wants the
7
+ * thick refractive liquid read (the hero glass, the dock, the CTA); the bare
8
+ * content default is UNCHANGED (the calm default is the user's call).
9
+ *
10
+ * ── The token-substitution model (the `.glass-opaque` precedent) ───────────
11
+ * `.glass-deep` is a DECORATION ON a base `.glass-*` rung, NOT a parallel solid/
12
+ * blur recipe. It mirrors `.glass-opaque` (ladder.css §opaque-escape — which only
13
+ * sets `--glass-level: 0`, a token re-point, never a competing `backdrop-filter`):
14
+ * `.glass-deep` re-points the floating-rung blur token to the deep family
15
+ * (`--glass-blur-floating: var(--glass-blur-deep)`), so the base `.glass-floating`
16
+ * rule's `backdrop-filter: var(--glass-blur-floating)` resolves to the DEEP blur —
17
+ * NO cascade fight, NO base-rule edit, the glass edge/rim/under-shadow + the W55
18
+ * tint axis + the a11y brackets all compose unchanged. The deep tier rides a base
19
+ * rung exactly as `.glass-opaque` does (the CardTier map is `deep →
20
+ * 'glass-floating glass-deep'`).
21
+ *
22
+ * Because the deep blur (glass-deep.css) COMPOSES `var(--glass-level)`, the a11y
23
+ * brackets (`prefers-reduced-transparency: reduce` / `prefers-contrast: more` set
24
+ * `--glass-level: 0` / 0.3 at :root, a11y-fallback.css) reach the deep plate for
25
+ * FREE — the deep blur collapses to blur(0) under reduced-transparency through the
26
+ * SAME level path (the opaque escape). The W55 bright-bucket darken reaches the
27
+ * deep surface by construction too: `.glass-deep` is composed WITH `.glass-floating`,
28
+ * which is already in the W55 `@container style(--glass-backdrop: light)` material
29
+ * group (ladder.css) AND self-engages the overlay-band darken — the deep tier
30
+ * inherits the legibility tint with no selector-list edit.
31
+ *
32
+ * @import-ed in glass.css AFTER ladder.css/surfaces.css (the same @layer components,
33
+ * source-order-after so the token re-point lands beside the rung it rides) and
34
+ * BEFORE the a11y @media brackets (which still win by the :root level re-point).
35
+ */
36
+ @layer components {
37
+ /* The deep decoration: re-point the floating rung's blur token to the deep
38
+ family. The base `.glass-floating` rule (`backdrop-filter:
39
+ var(--glass-blur-floating)`) then paints the deep `blur(16px) saturate(1.5)`
40
+ at `--glass-depth: 1` — the Apple-deep register, opt-in. */
41
+ .glass-deep {
42
+ --glass-blur-floating: var(--glass-blur-deep);
43
+ }
44
+ }