@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
@@ -0,0 +1,109 @@
1
+ /* BB.W-BORDER-PROGRESS — progress IS the element's border.
2
+ *
3
+ * The masked-conic ring consumption (the registration lives in
4
+ * tokens/property-regs.css §18, mirroring the specular split: the @property reg
5
+ * there, the consumption here). The ring paints a `conic-gradient` MASK-COMPOSITED
6
+ * into the border band so ONLY the band paints AND it FOLLOWS the host
7
+ * `border-radius` — a `border-image` SQUARES the corners (measured inferior,
8
+ * forbidden), a floating-bar child re-introduces allocation (forbidden). The host
9
+ * INTERIOR is untouched: a glass card still transmits the backdrop THROUGH its
10
+ * content box (the AX.W54 glass-first identity — the ring is a border-band cut-out,
11
+ * not an opaque overlay).
12
+ *
13
+ * Compositor-only: the sweep rides the registered `--border-progress-fill`
14
+ * <percentage>; no layout property animates (`proof:no-layout-animation`). The
15
+ * unregistered fallback is safe (the `initial-value` paints the resting ring; the
16
+ * cross-fade collapses to it on a non-supporting engine — Chromium 85+/Safari
17
+ * 16.4+, within the deployment floor). */
18
+
19
+ .border-progress {
20
+ position: relative;
21
+ display: block;
22
+ border-radius: var(--border-progress-radius, 16px);
23
+ /* The host reserves the border band the ring paints into (allocation-free —
24
+ the content box is untouched, no reflow). */
25
+ padding: 0;
26
+ }
27
+
28
+ /* The ring layer — inset over the host, the border band the conic paints into.
29
+ The `border` width IS the band thickness; the conic is mask-composited so the
30
+ padding-box (interior) is EXCLUDED from the border-box (the radius-following
31
+ cut-out). */
32
+ .border-progress__ring {
33
+ position: absolute;
34
+ inset: 0;
35
+ border-radius: inherit;
36
+ border: var(--border-progress-width, 12px) solid transparent;
37
+ pointer-events: none;
38
+ /* The spectrum conic, swept to --border-progress-fill. The colored arc runs
39
+ from the top (12 o'clock) clockwise to the fill fraction; past it is
40
+ transparent so the resting band shows ONLY the filled spectrum. */
41
+ background:
42
+ conic-gradient(
43
+ from 0deg,
44
+ var(--border-progress-spectrum, var(--section-color-7)),
45
+ transparent var(--border-progress-fill, 0%),
46
+ transparent 100%
47
+ );
48
+ /* THE RADIUS-FOLLOWING CUT-OUT — the house border-ring idiom: paint a
49
+ border-box fill, EXCLUDE a padding-box fill, leaving only the border band,
50
+ which follows `border-radius` exactly (a border-image cannot). */
51
+ -webkit-mask:
52
+ linear-gradient(#fff 0 0) padding-box,
53
+ linear-gradient(#fff 0 0) border-box;
54
+ -webkit-mask-composite: xor;
55
+ mask:
56
+ linear-gradient(#fff 0 0) padding-box,
57
+ linear-gradient(#fff 0 0) border-box;
58
+ mask-composite: exclude;
59
+ }
60
+
61
+ /* THE COVERAGE AXIS — ONE conic-mask mechanism, two coverage masks (NOT a second
62
+ recipe). `bottom-edge` adds a SECOND mask layer scoping the painted band to the
63
+ bottom edge only; it composes WITH the border-band cut-out above (the mask
64
+ stack intersects), so the bottom register reuses the exact conic + radius
65
+ cut-out — the dock-orientation `dim`-idiom discipline (no parallel fork). */
66
+ .border-progress[data-coverage="bottom-edge"] .border-progress__ring {
67
+ -webkit-mask:
68
+ linear-gradient(#fff 0 0) padding-box,
69
+ linear-gradient(#fff 0 0) border-box,
70
+ linear-gradient(to top, #fff 0, #fff var(--border-progress-width, 12px), transparent var(--border-progress-width, 12px));
71
+ -webkit-mask-composite: xor, source-in;
72
+ mask:
73
+ linear-gradient(#fff 0 0) padding-box,
74
+ linear-gradient(#fff 0 0) border-box,
75
+ linear-gradient(to top, #fff 0, #fff var(--border-progress-width, 12px), transparent var(--border-progress-width, 12px));
76
+ mask-composite: exclude, intersect;
77
+ }
78
+
79
+ /* The content box — the host's own surface (a glass card, a chassis). It is
80
+ untouched by the ring (backdrop-intact); the ring sits over the border band
81
+ only. */
82
+ .border-progress__content {
83
+ position: relative;
84
+ z-index: 1;
85
+ border-radius: inherit;
86
+ height: 100%;
87
+ }
88
+
89
+ /* THE MILESTONE PULSE — a brief brightness bloom on a crossed phase edge. The
90
+ pulse is PRM-gated (no edge-pulse under reduced motion — the ring snaps to the
91
+ new value). Compositor-only (filter brightness, never a layout property). */
92
+ @media (prefers-reduced-motion: no-preference) {
93
+ .border-progress[data-milestone] .border-progress__ring {
94
+ animation: border-progress-milestone-pulse
95
+ var(--spring-snappy-duration, 0.34s) var(--ease-out, ease-out);
96
+ }
97
+ }
98
+
99
+ @keyframes border-progress-milestone-pulse {
100
+ 0% {
101
+ filter: brightness(1);
102
+ }
103
+ 40% {
104
+ filter: brightness(1.35);
105
+ }
106
+ 100% {
107
+ filter: brightness(1);
108
+ }
109
+ }
@@ -17,6 +17,82 @@
17
17
  :where(.dark) .paper-texture {
18
18
  background-blend-mode: screen;
19
19
  }
20
+
21
+ /* BB.W-PAPER-GRID-TEXTURE — the GEOMETRIC sibling of `.paper-texture`.
22
+ Paints the two-frequency `--paper-grid-texture` engineering-grid as a
23
+ card's INTERIOR ground, clipped to the plate's own `border-radius`
24
+ automatically (a host `background-image`), so the math/grid brand pillar
25
+ reads THROUGH a document-register card at the ambient `--paper-grid-
26
+ opacity` — not only in the page margin an opaque plate occludes. A
27
+ decoration-only register (NOT a tier): it composes ON TOP of any glass/
28
+ paper tier, exactly like `.paper-texture` / `cartoon-surface` /
29
+ `veil-surface`.
30
+
31
+ THE SEAM (the two-pseudo-budget reveal, recorded — the Triumvirate's
32
+ through-glass-read locate-the-seam, NOT a token-α loop): a glass tier
33
+ already claims BOTH pseudos — `::before` is the moving-specular catch-
34
+ light (glass/material.css) and `::after` is the grain overlay
35
+ (glass/ladder.css). A `.paper-grid::after` would CLOBBER the grain's
36
+ `background-image` on the SAME single pseudo — so the grid + grain could
37
+ not compose (the orthogonality the spec requires). The grid therefore
38
+ rides the HOST element's `background-image` longhand: the glass tier's
39
+ `background:` SHORTHAND sets the translucent fill `background-color`, and
40
+ a later `background-image` longhand COEXISTS with that color (the image
41
+ paints OVER the color, UNDER the content + UNDER both pseudos), so the
42
+ grid is the card's own underlay felt THROUGH the glass tint with ZERO
43
+ pseudo contention — grain (`::after`) + specular (`::before`) + grid
44
+ (host bg-image) all paint at once. The host bg-image is clipped by the
45
+ host `border-radius` by construction (no `border-radius: inherit` pseudo
46
+ needed). A STATIC raster — gradient-stack `background-image`, one
47
+ compositor-cached paint, no per-frame repaint (the W6 paint-path
48
+ discipline). The ambient strength lives in the line-ink alpha (the
49
+ `--paper-grid-opacity`-scaled `--foreground` mix, scale-paper.css) since
50
+ a host bg-image has no independent layer-opacity — so ONE knob
51
+ (`--paper-grid-opacity`) still tunes the through-card strength. */
52
+ .paper-grid {
53
+ background-image: var(--paper-grid-texture);
54
+ background-repeat: repeat;
55
+ background-size:
56
+ calc(var(--paper-grid-texture-size) * 4)
57
+ calc(var(--paper-grid-texture-size) * 4),
58
+ calc(var(--paper-grid-texture-size) * 4)
59
+ calc(var(--paper-grid-texture-size) * 4),
60
+ var(--paper-grid-texture-size) var(--paper-grid-texture-size),
61
+ var(--paper-grid-texture-size) var(--paper-grid-texture-size);
62
+ background-blend-mode: multiply;
63
+ }
64
+
65
+ /* The scheme-aware dark arm — PLAIN-ancestor `.dark` (NOT a scoped
66
+ `:global()`; the recurring scoped-global-drop trap, recorded; this is a
67
+ library CSS partial, but the discipline holds). The line ink is
68
+ `--foreground`-derived, so the warm-cream foreground flips dark→light in
69
+ the `.dark` block and the grid ink auto-lifts off the near-black `--card`
70
+ interior with NO parallel `--paper-grid-*-dark` family — only the BLEND
71
+ flips (light `multiply` → dark `screen`, the legible-on-dark equivalent
72
+ the `.paper-texture` dark arm uses). */
73
+ :where(.dark) .paper-grid,
74
+ .dark .paper-grid {
75
+ background-blend-mode: screen;
76
+ }
77
+ }
78
+
79
+ /* ═══════════════════════════════════════════════
80
+ A11y — the geometric grid honors the SAME transparency idiom the organic
81
+ paper register establishes (paper.css). A reduced-transparency user gets a
82
+ clean card interior, no texture; the static grid needs no motion gate (the
83
+ PRM block guards a future drift only). One a11y idiom, not a grid-local fork.
84
+ ═══════════════════════════════════════════════ */
85
+ @media (prefers-reduced-transparency: reduce) {
86
+ .paper-grid {
87
+ background-image: none;
88
+ }
89
+ }
90
+
91
+ @media (prefers-reduced-motion: reduce) {
92
+ .paper-grid {
93
+ /* Static raster at rest; guard a future `@property` transform drift. */
94
+ animation: none !important;
95
+ }
20
96
  }
21
97
 
22
98
  /* ── Cartoon surface decoration ───────────────────────────────────
@@ -0,0 +1,140 @@
1
+ /*
2
+ * critical-partition.mjs — the CRITICAL_PARTITION boundary manifest
3
+ * (BB.W-CSS-CRITICAL — the render-blocking `/styles` split).
4
+ *
5
+ * The SINGLE source of the critical/deferred partition of the resolved
6
+ * `@mkbabb/glass-ui/styles` draw. The build (vite.style-assets.ts
7
+ * publishStyleAssets) reads it to emit `dist/styles/critical.css` +
8
+ * `dist/styles/deferred.css`; the gate (scripts/proof-css-critical.mjs) reads
9
+ * it to assert the partition is byte-complete + manifest-driven. There is NO
10
+ * second hand-extracted critical block (W4 — the manifest is the sole source).
11
+ *
12
+ * The partition is drawn at the EXISTING thin-root-over-partials cascade
13
+ * boundary (AY.W-CSS1) — whole `src/styles/index.css` @import partials are
14
+ * bucketed, never a partial-content re-author (the partial CONTENTS are
15
+ * untouched; a cross-partial rule move is a triumvirate trigger, see the wave
16
+ * spec §Triumvirate). The two emitted files each @import their bucket's
17
+ * partials in the SAME cascade order the monolith index.css declares (load
18
+ * order is load-bearing), and CRITICAL loads BEFORE DEFERRED in the consumer
19
+ * so the deferred component recipes still cascade-correctly over the critical
20
+ * glass ladder.
21
+ *
22
+ * CRITICAL (./styles/critical) — the above-the-fold paint surface a consumer's
23
+ * FIRST PAINT requires: the whole token cascade (every visual axis is a custom
24
+ * property the chrome reads), the √φ typography scale + semantic type classes,
25
+ * the @theme aliases + the `.dark` variant selector, and the 5-rung glass
26
+ * ladder + specular/refract. Small (the token + ladder + type surface, not the
27
+ * component recipes) — under the recorded gzip ceiling (W3).
28
+ *
29
+ * DEFERRED (./styles/deferred) — the below-the-fold + late-mount tail: every
30
+ * component recipe + the transitions/animations/scroll-driven/view-transition
31
+ * grammar + utilities + the menu/configurator/instrument-chassis/hover-popover/
32
+ * drawer/segmented-tabs/select/icon-chip component partials, PLUS the folded SFC
33
+ * `<style scoped>` payload (`../glass-ui.css`) and the emitted Tailwind
34
+ * component-utility surface (`components.css`). These decorate components that
35
+ * mount after first paint or sit below the fold; their late arrival shifts no
36
+ * above-the-fold pixel (the FOUC-safe floor, W5).
37
+ *
38
+ * The `paper.css` partial is bucketed DEFERRED — the paper underpaint/grain
39
+ * utilities pair with glass for paper-on-glass compositions that mount with the
40
+ * content surfaces (below-the-fold), not the chrome's first paint.
41
+ */
42
+
43
+ /**
44
+ * The two non-fold buckets — each entry is a `src/styles/*.css` partial that the
45
+ * monolith `src/styles/index.css` @imports at the top level (lines 149-182).
46
+ * The order within each list mirrors the monolith's declared cascade order.
47
+ */
48
+ export const CRITICAL_PARTIALS = Object.freeze([
49
+ "tokens.css",
50
+ "typography.css",
51
+ "theme.css",
52
+ "glass.css",
53
+ "glass-specular-track.css",
54
+ "glass-refract.css",
55
+ ]);
56
+
57
+ export const DEFERRED_PARTIALS = Object.freeze([
58
+ "paper.css",
59
+ "dock.css",
60
+ "dock-controls.css",
61
+ "cards.css",
62
+ "feedback-tone.css",
63
+ "floating-panel.css",
64
+ "transitions.css",
65
+ "animations.css",
66
+ "scroll-driven.css",
67
+ "scroll-choreography.css",
68
+ "view-transition.css",
69
+ "utilities.css",
70
+ "menu.css",
71
+ "configurator.css",
72
+ "instrument-chassis.css",
73
+ "hover-popover.css",
74
+ "drawer.css",
75
+ "segmented-tabs.css",
76
+ "select.css",
77
+ "icon-chip.css",
78
+ "border-progress.css",
79
+ ]);
80
+
81
+ /**
82
+ * The build-time folds that land in DEFERRED (NOT a `src/styles/*.css` partial;
83
+ * the publishStyleAssets folds appended to the dist copy of index.css). The SFC
84
+ * scoped payload (`../glass-ui.css`) + the Tailwind component-utility surface
85
+ * (`./components.css`) are below-the-fold component decoration — they MUST NOT
86
+ * leak into critical (the W2 byte-complete-in-one-bucket + W3 ceiling bite).
87
+ * Relative to `dist/styles/` (where critical.css/deferred.css are emitted).
88
+ */
89
+ export const DEFERRED_FOLDS = Object.freeze([
90
+ "../glass-ui.css",
91
+ "./components.css",
92
+ ]);
93
+
94
+ /**
95
+ * The `@source` build-scan backstop directive (the consumer-JIT content-scan
96
+ * reach for glass-ui's own component utilities — a backstop for the
97
+ * components.css self-emit). It backstops the DEFERRED component utilities, so
98
+ * it rides DEFERRED. The value is the exact directive the monolith index.css
99
+ * carries (re-grounded at HEAD: `@source "../*.js";`).
100
+ */
101
+ export const DEFERRED_SOURCE_DIRECTIVE = '@source "../*.js";';
102
+
103
+ /**
104
+ * The recorded critical-subset gzip ceiling (bytes), measured on the FULLY
105
+ * RESOLVED consumer draw (the critical partials' @import roots resolved
106
+ * RECURSIVELY through their nested tokens/* + glass/* sub-partials — the real
107
+ * first-paint byte a consumer's bundler emits, NOT the one-level approximation
108
+ * profile-bundle uses for the monolith budget). The committed, reviewed
109
+ * baseline (the profile-bundle read-baseline discipline): a regression that
110
+ * folds a component recipe back into critical climbs the emitted critical.css
111
+ * resolved gzip over this → RED (W3). Re-base via the gate's `--rebaseline`
112
+ * flag with a recorded rationale, never silently.
113
+ *
114
+ * Measured at this authoring (HEAD bdbcd479, post-build): the critical subset
115
+ * resolved to raw 347266 / gzip 105460 — the token cascade (tokens.css gzip
116
+ * ~62KiB) + the 5-rung glass ladder (glass.css gzip ~27KiB) + typography +
117
+ * theme + specular/refract. It is roughly half the monolith's fully-resolved
118
+ * gzip (~230KiB), so the deferred tail (component recipes + SFC scoped payload
119
+ * + components.css utility surface, ~125KiB gzip) loads NON-blocking after
120
+ * first paint — the render-block win. The ceiling carries ~4% headroom over
121
+ * the measured baseline (the profile-bundle re-base convention). If the
122
+ * re-measured render-block under W-LIGHTHOUSE shows this critical subset is
123
+ * STILL over the mobile-ms floor, the inline-critical-head-block path routes to
124
+ * the named BB.W-CSS-CRITICAL-INLINE successor (a triumvirate trigger, NOT a
125
+ * token-value edit here).
126
+ *
127
+ * RE-BASE (BB liquid-glass band): the critical subset grew to raw 427015 / gzip
128
+ * 131469 — NOT a component-recipe leak (the critical bucket is still the 6
129
+ * documented token+glass+type partials; w2 partials-disjoint + w4 hold), but the
130
+ * legitimate GROWTH of the critical token cascade + glass ladder by the BB
131
+ * liquid-glass band: the deep-glass token family (tokens/glass-deep.css), the
132
+ * --glass-accent rim axis, the W-LENSING refract evolution, the W-DARK-MATERIAL
133
+ * dark-arm + the on-glass-fg / surface-axis registers — all of which live in the
134
+ * critical tokens/* + glass/* sub-partials by construction. Ceiling lifted
135
+ * 110000 → 137000 (~4.2% headroom over the measured 131469, the profile-bundle
136
+ * re-base convention) to carry the BB glass-band critical surface. The
137
+ * render-block FLOOR stays W-LIGHTHOUSE's W3-arm-1 mobile-ms gate (the binding
138
+ * perf truth); this ceiling guards against a recipe revert-toward-monolith.
139
+ */
140
+ export const CRITICAL_GZIP_CEILING = 137000;
@@ -11,6 +11,30 @@
11
11
  * @import-ed by dock.css in cascade order, in the SAME `@layer components` — the
12
12
  * carve is isomorphic (same layer, same source order → ZERO visual delta). */
13
13
 
14
+ /* ── BB.W-HIERARCHY2 — the CONTENT-side anti-collision gutter ───────────────────
15
+ `--dock-content-safe-inset` is the structural CONTENT-side counterpart to the
16
+ dock-collision SEAT fix (W-CHIP-GRAZE + W-DOCK-RAIL-SEAT-FINAL own the chip-fan
17
+ SEAT — the chips fan off-canvas into the rail's dead gutter, chipOverMain:false on
18
+ EVERY route by topology). This token reserves a guaranteed safe-inset gutter on the
19
+ CONTENT column so the page-title band is structurally clear of any chip reach even
20
+ on a route added WITHOUT a per-route audit (the anti-gameability the gestalt gate
21
+ wants). It is keyed to the dock reach (`--dock-rail-extend-length`, the rail's
22
+ beyond-edge overrun) so the content gutter tracks the dock geometry in lockstep,
23
+ and it rides `--dock-scale` transitively through that reach token.
24
+
25
+ THE DE-OVERLOAD IS BINDING (distinct geometry concerns, distinct tokens):
26
+ `--dock-control-safe-inset` (per-density, below) is the dock CONTROL plate-clearance
27
+ inset (the painted plate floors a notch below its track cell — BA.W-DOCK-GEOMETRY,
28
+ owned by proof:dock-plate-clearance); `--dock-content-safe-inset` is the CONTENT-band
29
+ gutter (the content column reserves dead inline space the chips can never share).
30
+ The two close the collision from BOTH sides — the chip seat (the SEAT waves) AND the
31
+ content gutter (this token) — coordinated on the SAME dead inline gutter: the content
32
+ gutter is the RESERVE, the gutter-fan lands the chips in it (ONE gutter, two
33
+ consumers). NEVER re-point this AT --dock-control-safe-inset (the de-overload). */
34
+ :root {
35
+ --dock-content-safe-inset: var(--dock-rail-extend-length, 2.5rem);
36
+ }
37
+
14
38
  @layer components {
15
39
  /* AX.W45 — the density cascade is threaded by the ONE `--dock-scale`
16
40
  multiplier (default 1, lifted to `--dock-mobile-scale` on coarse pointers).
@@ -222,6 +246,27 @@
222
246
  );
223
247
  }
224
248
 
249
+ /* BB.W-PERF-PRODUCER A′-6 — RE-RESOLVE the glyph token inside the density-painted
250
+ scope. `--dock-icon-glyph` (offsets-sizing.css) is a RATIO of
251
+ `--dock-layer-height`, but density.css paints `--dock-layer-height` ONLY on
252
+ `.glass-dock[data-density]` — the `:root` `--dock-icon-glyph` definition reads
253
+ `--dock-layer-height` at `:root` (the inline fallback ladder), so it would
254
+ FREEZE at the fallback rather than track the per-rung painted height (the SAME
255
+ substitution-vs-inheritance trap the R5-1 sweep fixed for
256
+ `--dock-collapsed-summary-min-size` in overflow.css). Re-resolving it HERE, on
257
+ the element that paints `--dock-layer-height`, lets the per-density height flow
258
+ into the glyph so a `spacious` dock's glyph grows in lockstep with the shelf
259
+ (the value.js D5-1 defect). The formula is IDENTICAL to the `:root` definition;
260
+ only the resolution element moves. The WCAG floor + the `--dock-icon-glyph-ratio`
261
+ knob ride through unchanged; the `.dark-mode-toggle-button > svg` mirror reads
262
+ the same re-resolved token so both glyphs track the density axis. */
263
+ .glass-dock[data-density] {
264
+ --dock-icon-glyph: max(
265
+ calc(var(--dock-layer-height, calc(2.5rem * var(--dock-scale))) * var(--dock-icon-glyph-ratio)),
266
+ var(--dock-icon-glyph-floor)
267
+ );
268
+ }
269
+
225
270
  /* Density-audacious narrow-box carve (AV.W16 TW3) — when the dock's OWN
226
271
  box is narrow the audacious-dock label glyphs compress so the chrome
227
272
  doesn't overflow its host (≤14px below 30rem, 15px 30–45rem). Keyed off
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * Carved from the dock.css god-module (slice 25). This partial owns the dock's
5
5
  * layer model: the `.dock-layers` grid container + the FLIP-driven box-size morph
6
- * (the `--dock-morph-size` calc off the ONE `--dock-morph-t` scalar), the unified
6
+ * (BB.W-DOCK-MORPH-FAMILY — a `transform: scale()` over a reserved settled `to`
7
+ * footprint, the live `--dock-morph-scale` derived off the ONE `--dock-morph-t`
8
+ * scalar; NO per-frame layout-axis lerp), the unified
7
9
  * `.is-active` / `.is-leaving` 3-state crossfade + hit-test contract (the
8
10
  * a11y-006 anchor), the per-child reveal stagger (the `--dock-stagger-*` ramp),
9
11
  * and the `layout="grid"` 2D tile-grid arrangement. The `.dock-layer-group` /
@@ -37,46 +39,66 @@
37
39
  }
38
40
 
39
41
 
40
- /* AX.W01 — the box size morph reads the SAME `--dock-morph-t` scalar as the
41
- root chrome (ONE clock, co-temporal by construction). `useLayerTransition`
42
- measures the from→to size ONCE per swap (the allowed one-time FLIP
43
- measurement) and writes `--dock-morph-from`/`--dock-morph-to` px on the
44
- morphing element; the live scalar interpolates between them. The size lands
45
- on the morph AXIS — `inline-size` for a horizontal `.dock-layers` (always
46
- inline) + a horizontal inner stack, `block-size` for a vertical inner stack.
47
- Gated on the root `[data-morphing]`, so at REST the intrinsic / `width:100%`
48
- rules below hold (the morph vars are cleared on settle). Replaces the prior
49
- `transition: width var(--dock-motion-resize)` inline-FLIP — there is NO CSS
50
- transition on the size axis; the spring writes the scalar, CSS reads it. The
51
- active pane is REVEALED through the clip aperture as the box grows (the W2
52
- clip-reveal contract). */
42
+ /* BB.W-DOCK-MORPH-FAMILY (a)/(b) — the box morph is now a COMPOSITOR TRANSFORM
43
+ over a RESERVED SETTLED footprint, NOT a per-frame `inline-size` lerp (the C3
44
+ "too slow and laggy" relayout-every-frame defect). `useLayerTransition` /
45
+ the orchestrator still measure the from→to size ONCE per swap (the allowed
46
+ one-time FLIP measurement) and write `--dock-morph-from`/`--dock-morph-to` px
47
+ on the morphing element — but the layout axis is set to the SETTLED `to`
48
+ value (ONE layout solve, the box reserves its end footprint from frame 0), and
49
+ the live `--dock-morph-t` scalar drives a `transform: scale()` between the
50
+ from/to RATIO and 1. The content lays out COMPLETE at `to` behind the
51
+ `overflow: clip` aperture (shell.css), and the scaled-down box reads as the
52
+ smaller in-flight footprint (the clip uncovers the scaled box, never a
53
+ half-painted growing layout — the reveal-seat (b) fix). `--dock-morph-ratio`
54
+ is `from/to` (guarded: `to:0` → ratio 0); `--dock-morph-scale` runs
55
+ `ratio → 1` as `t: 0 → 1`. `transform-origin` anchors the pinned edge
56
+ (inline-start for the horizontal aperture) so the box grows from the correct
57
+ side. NO `inline-size`/`block-size` reads the live scalar — the CDP Layout
58
+ track stays FLAT through the morph (the F1 compositor-bound floor). */
53
59
  .glass-dock[data-morphing] .dock-layers,
54
60
  .glass-dock[data-morphing] .dock-layer-stack {
55
- --dock-morph-size: calc(
56
- var(--dock-morph-from, 0px) +
57
- (var(--dock-morph-to, 0px) - var(--dock-morph-from, 0px)) *
58
- var(--dock-morph-t, 0)
61
+ --dock-morph-ratio: calc(
62
+ var(--dock-morph-from, 0px) / max(var(--dock-morph-to, 1px), 1px)
59
63
  );
60
- inline-size: var(--dock-morph-size);
64
+ --dock-morph-scale: calc(
65
+ var(--dock-morph-ratio) +
66
+ (1 - var(--dock-morph-ratio)) * var(--dock-morph-t, 0)
67
+ );
68
+ /* The box RESERVES its settled `to` footprint — a single layout solve, NOT
69
+ the live scalar calc. The transform composites over it. */
70
+ inline-size: var(--dock-morph-to);
71
+ transform: scaleX(var(--dock-morph-scale));
72
+ transform-origin: left center;
73
+ will-change: transform;
61
74
  }
62
75
 
63
76
  /* AZ.W-DOCK-TAXONOMY (move 2) — a VERTICAL dock's outer `.dock-layers` morphs the
64
77
  BLOCK axis (its collapse↔expand shrinks `height`, not `width`). The orchestrator
65
78
  measures/writes the same `--dock-morph-from/to` span on the block axis
66
79
  (`outerLayerAxis` is now the resolved orientation; `morphAxisProp` maps
67
- vertical→`block-size`), so the CSS lands the scalar on `block-size` and lets the
68
- inline axis stay intrinsic. This is the wiring that gives a collapsible vertical
69
- dock the height-morph the mandate names. */
80
+ vertical→`block-size`).
81
+ BB.W-DOCK-MORPH-FAMILY (a)/(b) — the vertical box reserves its settled `to`
82
+ BLOCK footprint + composites a `scaleY()` over it on the SAME `--dock-morph-t`
83
+ scalar (the inverse axis of the horizontal `scaleX`), `transform-origin` at the
84
+ block-start pinned edge. NO live-scalar `block-size` calc → no per-frame
85
+ relayout on the vertical axis either. */
70
86
  .glass-dock.vertical[data-morphing] .dock-layers {
71
87
  inline-size: auto;
72
- block-size: var(--dock-morph-size);
88
+ block-size: var(--dock-morph-to);
89
+ transform: scaleY(var(--dock-morph-scale));
90
+ transform-origin: center top;
91
+ will-change: transform;
73
92
  }
74
93
 
75
- /* A vertical inner group morphs the BLOCK axis — the same span lands on
76
- block-size, and the inline axis stays intrinsic. */
94
+ /* A vertical inner group morphs the BLOCK axis — the same settled-footprint
95
+ reserve + `scaleY()` composite over it. */
77
96
  .glass-dock[data-morphing] .dock-layer-group.vertical .dock-layer-stack {
78
97
  inline-size: auto;
79
- block-size: var(--dock-morph-size);
98
+ block-size: var(--dock-morph-to);
99
+ transform: scaleY(var(--dock-morph-scale));
100
+ transform-origin: center top;
101
+ will-change: transform;
80
102
  }
81
103
 
82
104
  /* The inner DockLayerGroup stack has no collapsed/expanded class, so its
@@ -311,10 +333,12 @@
311
333
  from these state rules; they keep only their non-overflow concerns.
312
334
 
313
335
  AX.W01 — `:not([data-morphing])` gate: at REST expanded the layers fill the
314
- box (`width:100%`), but DURING the morph the FLIP from→to px (the
315
- `--dock-morph-size` calc above) is the SOLE size authority — a `width:100%`
316
- here would win on specificity and snap the box past the spring. The gate
317
- hands the size to the scalar for the morph and back to 100% on settle. */
336
+ box (`width:100%`), but DURING the morph the reserved `to`-footprint +
337
+ `transform: scale()` (BB.W-DOCK-MORPH-FAMILY, above) is the SOLE size
338
+ authority — a `width:100%` here would win on specificity and fight the
339
+ reserved footprint. The gate hands the box to the transform for the morph and
340
+ back to 100% on settle (the transform/reserve vanish when `[data-morphing]`
341
+ clears). */
318
342
  .glass-dock.expanded:not(.fit-content):not([data-morphing]) .dock-layers {
319
343
  width: 100%;
320
344
  }