@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
@@ -11,8 +11,13 @@ import { type PrimitiveProps } from "reka-ui";
11
11
  * overlay — heaviest (~0.95α + blur) : modal-on-modal, dialog over content
12
12
  * opaque — `--glass-level:0` escape : the solid-card opt-out (AX.W54), maps to
13
13
  * `.glass-opaque` through the same `glass-${tier}` rung as the rest
14
+ * deep — `--glass-blur-deep-*` OPT-IN : the maximal iOS-27 Liquid-Glass tier
15
+ * ABOVE the W-GLASS-CAL calm default (Apple saturate-1.5/blur-16px),
16
+ * maps to `.glass-floating glass-deep` (a base rung + the deep
17
+ * decoration, mirroring opaque) — the hero glass / CTA register
18
+ * (BB.W-DEEP-GLASS). The calm content default is byte-unchanged.
14
19
  */
15
- export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay" | "opaque";
20
+ export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay" | "opaque" | "deep";
16
21
  /**
17
22
  * Surface decoration register — orthogonal to `tier`/`shadow`/`grain`.
18
23
  *
@@ -62,6 +67,15 @@ interface Props extends PrimitiveProps {
62
67
  /** `::after` paper-grain overlay. Off for scroll panes (the grain conflicts
63
68
  * with overflow:auto repaints). */
64
69
  grain?: boolean;
70
+ /** BB.W-PAPER-GRID-TEXTURE — the GEOMETRIC paper register: a `::after`
71
+ * blueprint/graph-paper grid felt THROUGH the card interior (the math/grid
72
+ * brand pillar, read through the plate rather than only in the page
73
+ * margin). Default **OFF** — a bare card is byte-identical to HEAD; a
74
+ * document-register card opts in. ORTHOGONAL to `grain` (organic) — a card
75
+ * may carry BOTH the turbulence grain and the geometric grid. The register
76
+ * doctrine (paper-register cards opt in, instrument-glass surfaces do NOT)
77
+ * is a CONSUMER choice the default-OFF honors by construction. */
78
+ grid?: boolean;
65
79
  /** Specular catch-light register (AX.W09). `off` (default) keeps the card
66
80
  * CLEAN — no pointer-anchored lens, clean over any backplate (the §24
67
81
  * three-consumer-confirmed default for a data/content card). `subtle` wakes
@@ -69,19 +83,35 @@ interface Props extends PrimitiveProps {
69
83
  * hero/chrome opt-in); `full` runs the brighter pre-tune rung set for a busy
70
84
  * backdrop. Only `glass` surfaces wire it; `cartoon` owns its own sticker lift. */
71
85
  specular?: CardSpecular;
86
+ /** BB.W-PRESS-UNIFY — the interactive PRESS register, default **OFF**. A bare
87
+ * Card is a static content PLATE and never presses (a press on a static surface
88
+ * is the visual-load-bearing anti-pattern). A `:pressable` Card is a TAPPABLE
89
+ * LIST-CARD (a selectable result row, a navigable tile) — it gains the ONE
90
+ * interruptible coupled spring-press (`useLiquidPress`): the reciprocal X/Y squish
91
+ * + a sub-perceptual brightness lift on the `--card-press-t` drive, on the
92
+ * `--spring-snappy`-class clock, INTERRUPTIBLE (a rapid re-tap re-seats the spring
93
+ * velocity-continuously), PRM-instant (the press snaps with zero in-between
94
+ * frames). Card is the SECOND binary the dead `useSpringPress` primitive reaches
95
+ * (Button is the first — direct; Card via `useLiquidPress` which composes it — the
96
+ * J-inv-10 ≥2-consumer bar met; the dock control is the booked third). The press is
97
+ * compositor-only (`scale` + a custom property); the `.glass-press` CSS `:active`
98
+ * scale is the no-JS / SSR floor. */
99
+ pressable?: boolean;
72
100
  class?: HTMLAttributes["class"];
73
101
  }
74
- declare var __VLS_10: {};
102
+ declare var __VLS_13: {};
75
103
  type __VLS_Slots = {} & {
76
- default?: (props: typeof __VLS_10) => any;
104
+ default?: (props: typeof __VLS_13) => any;
77
105
  };
78
106
  declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
79
107
  shadow: boolean;
80
- as: import("reka-ui").AsTag | import("vue").Component;
108
+ grid: boolean;
81
109
  surface: CardSurface;
110
+ as: import("reka-ui").AsTag | import("vue").Component;
82
111
  tier: CardTier;
83
112
  grain: boolean;
84
113
  specular: CardSpecular;
114
+ pressable: boolean;
85
115
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
86
116
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
87
117
  declare const _default: typeof __VLS_export;
@@ -5,30 +5,56 @@ import type { HTMLAttributes } from 'vue';
5
5
  * AI.W1-α additive `shrink` modifier — when true, the header binds to the
6
6
  * `--card-scroll` named scroll-timeline (emitted by the canonical
7
7
  * `.card-scroll-host` utility on a scroll-overflow ancestor) and runs a
8
- * 3-lane choreography as the host scrolls:
8
+ * 3-lane choreography as the host scrolls. The 3 lanes are now
9
+ * COMPOSITOR-SAFE (transform/opacity only — BB.W-CARD-COMPOSITE) so ZERO
10
+ * reflow fires per scroll frame (the A'-3 CLS 1.03 worst-cluster killed):
9
11
  *
10
- * 1. Header padding shrink (0..120px scroll range) — top/bottom padding
11
- * collapses from 1rem/0.5rem to 0.5rem/0.25rem.
12
- * 2. Title font-size shrink (0..120px) — `[data-slot="card-title"]`
13
- * glyph scales from `--type-heading` down to `--type-prose`.
14
- * 3. Description grid-row collapse (0..80px, faster fade) —
15
- * `[data-slot="card-description"]` collapses its 1fr → 0fr grid
16
- * row while fading opacity → 0; the slot retires entirely past the
17
- * 80px boundary, freeing vertical real estate for the body.
12
+ * 1. Header content compress (0..120px scroll range) — the header content
13
+ * slides up via `transform: translateY` as the host scrolls so the top
14
+ * breathing room visually compresses; the header box keeps its layout
15
+ * size (no padding reflow). The visual gestalt — ~0.5rem of top space
16
+ * collapses — reads identically.
17
+ * 2. Title shrink (0..120px) — `[data-slot="card-title"]` scales DOWN via
18
+ * `transform: scale(--card-title-shrink-ratio)` (origin: leading edge),
19
+ * so the glyph visually shrinks from `--type-heading` to roughly
20
+ * `--type-prose` while the text run lays out ONCE (no per-frame
21
+ * `font-size` text re-measure — the worst reflow lane, killed).
22
+ * 3. Description retire (0..80px, faster fade) —
23
+ * `[data-slot="card-description"]` fades `opacity: 1 → 0` AND collapses
24
+ * `transform: scaleY(1 → 0)` (origin: top) so the slot visually retires
25
+ * upward; the real-estate reclaim is the composited scaleY, NOT a
26
+ * `grid-template-rows` relayout.
27
+ * 4. Header background lift (0..120px — BB.W-SCROLL-CARD) — a `::before`
28
+ * BACKPLATE carrying the `--card-header-bg` tint fades `opacity: 0 → 1`
29
+ * on the same timeline, so a stuck header reads transparent over the
30
+ * body at scroll-top and lifts to the painted tint as it sticks. The
31
+ * opacity channel keeps the lift compositor-safe.
18
32
  *
19
- * The choreography migrates verbatim from value.js's `PaneHeader.vue`
20
- * (the load-bearing pane-scroll-fade pattern that ran across the 9 panes)
21
- * — same `--card-scroll` timeline, same `0..120px` / `0..80px` ranges,
22
- * same animation keyframes (renamed `pane-*` → `card-*`).
33
+ * BB.W-SCROLL-CARD — the two text lanes (2 + 3) re-target via `:slotted()`
34
+ * (the precise Vue scoped-CSS slotted-content selector, the MetricRow.vue
35
+ * idiom) so they MATCH a consumer-SLOTTED <CardTitle>/<CardDescription>; the
36
+ * prior `:deep()` enabler was the W-CARD-COMPOSITE minimal stopgap, replaced
37
+ * here by the precise tool (no descendant-leak sledgehammer).
38
+ *
39
+ * The choreography ORIGINALLY migrated verbatim from value.js's
40
+ * `PaneHeader.vue`, which animated LAYOUT properties (padding/font-size/
41
+ * grid-template-rows/margin) — a per-scroll-frame reflow storm (CLS 1.03,
42
+ * the A'-3 P0 that shipped at 4.0.0). BB.W-CARD-COMPOSITE re-expresses each
43
+ * lane as the compositor-transform equivalent the house already speaks
44
+ * (the `scroll-driven.css` scaleX/translateY/opacity idiom) — the visual
45
+ * choreography is IDENTICAL; only the mechanism changed. The
46
+ * `proof:no-layout-animation` gate makes the layout-property class
47
+ * structurally impossible to re-ship.
23
48
  *
24
49
  * **Required ancestor**: when `shrink` is true, `.card-scroll-host` MUST
25
50
  * sit on the scroll-overflow ancestor (typically the same `<Card>` host's
26
51
  * scroll wrapper). Without that host the named timeline never emits and
27
52
  * the choreography sits idle. Documented in DESIGN.md `## Card` section.
28
53
  *
29
- * Sticky positioning + background tint stay consumer-side (the consumer
30
- * adds `class="sticky top-0 backdrop-blur-md"` etc. via `props.class`);
31
- * `--card-header-bg` is the canonical tint token for that backdrop.
54
+ * Sticky positioning stays consumer-side (the consumer adds
55
+ * `class="sticky top-0 backdrop-blur-md"` etc. via `props.class`); the
56
+ * background TINT is now scroll-driven by lane 4 (the `::before` backplate),
57
+ * reading `--card-header-bg` as the canonical tint token.
32
58
  */
33
59
  type __VLS_Props = {
34
60
  /**
@@ -0,0 +1,33 @@
1
+ import type { HTMLAttributes } from "vue";
2
+ import type { CardTier, CardSurface, CardSpecular } from "./Card.vue";
3
+ /** Props for `<ScrollCard>` — the first-class scroll-shrink card. */
4
+ export interface ScrollCardProps {
5
+ /** Card surface tier — forwarded to the inner `<Card>`. Default `resting`. */
6
+ tier?: CardTier;
7
+ /** Surface decoration register — forwarded to `<Card>`. Default `glass`. */
8
+ surface?: CardSurface;
9
+ /** Surface drop shadow — forwarded to `<Card>`. Default `true`. */
10
+ shadow?: boolean;
11
+ /** Specular catch-light — forwarded to `<Card>`. Default `off`. */
12
+ specular?: CardSpecular;
13
+ /** Max scroll-port height. The scroll region needs a bounded height for
14
+ * the `--card-scroll` timeline to have a scroll range. Default `18rem`. */
15
+ maxHeight?: string;
16
+ class?: HTMLAttributes["class"];
17
+ }
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
20
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ScrollCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ScrollCardProps> & Readonly<{}>, {
21
+ shadow: boolean;
22
+ maxHeight: string;
23
+ surface: CardSurface;
24
+ tier: CardTier;
25
+ specular: CardSpecular;
26
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
27
+ default?: (props: {}) => any;
28
+ }>;
29
+ type __VLS_WithSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -0,0 +1,17 @@
1
+ import type { HTMLAttributes } from "vue";
2
+ /** Props for `<ScrollCardHeader>` — the larger-header-items scroll-shrink header. */
3
+ export interface ScrollCardHeaderProps {
4
+ /** A consumer that wants the header NOT pinned passes `:sticky="false"`. */
5
+ sticky?: boolean;
6
+ class?: HTMLAttributes["class"];
7
+ }
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ScrollCardHeaderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ScrollCardHeaderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
11
+ default?: (props: {}) => any;
12
+ }>;
13
+ type __VLS_WithSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
@@ -1,5 +1,7 @@
1
1
  export { default as Card, type CardTier, type CardSurface, type CardSpecular, } from "./Card.vue";
2
2
  export { default as CardHeader } from "./CardHeader.vue";
3
+ export { default as ScrollCard, type ScrollCardProps } from "./ScrollCard.vue";
4
+ export { default as ScrollCardHeader, type ScrollCardHeaderProps, } from "./ScrollCardHeader.vue";
3
5
  export { default as CardTitle } from "./CardTitle.vue";
4
6
  export { default as CardDescription } from "./CardDescription.vue";
5
7
  export { default as CardContent } from "./CardContent.vue";
@@ -9,8 +9,8 @@ type __VLS_Slots = {} & {
9
9
  default?: (props: typeof __VLS_10) => any;
10
10
  };
11
11
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
- size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null;
13
- variant: "link" | "default" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
12
+ size: "default" | "icon" | "xs" | "sm" | "lg" | "icon-sm" | null;
13
+ variant: "link" | "default" | "glass" | "outline" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "secondary" | "accent" | "ghost" | "glass-wash" | "ai" | null;
14
14
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
15
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
16
  declare const _default: typeof __VLS_export;
@@ -9,8 +9,8 @@ type __VLS_Slots = {} & {
9
9
  default?: (props: typeof __VLS_10) => any;
10
10
  };
11
11
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
- size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null;
13
- variant: "link" | "default" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
12
+ size: "default" | "icon" | "xs" | "sm" | "lg" | "icon-sm" | null;
13
+ variant: "link" | "default" | "glass" | "outline" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "secondary" | "accent" | "ghost" | "glass-wash" | "ai" | null;
14
14
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
15
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
16
  declare const _default: typeof __VLS_export;
@@ -29,12 +29,12 @@ type __VLS_Slots = {} & {
29
29
  };
30
30
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
31
31
  select: (index: number) => any;
32
- prev: () => any;
33
32
  next: () => any;
33
+ prev: () => any;
34
34
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
35
35
  onSelect?: ((index: number) => any) | undefined;
36
- onPrev?: (() => any) | undefined;
37
36
  onNext?: (() => any) | undefined;
37
+ onPrev?: (() => any) | undefined;
38
38
  }>, {
39
39
  loop: boolean;
40
40
  orientation: "horizontal" | "vertical";
@@ -24,9 +24,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
24
24
  } | undefined) => any) | undefined;
25
25
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
26
26
  }>, {
27
- modelValue: import("reka-ui").AcceptableValue | import("reka-ui").AcceptableValue[];
28
27
  open: boolean;
29
28
  surface: Surface;
29
+ modelValue: import("reka-ui").AcceptableValue | import("reka-ui").AcceptableValue[];
30
30
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
31
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
32
32
  declare const _default: typeof __VLS_export;
@@ -1,48 +1,61 @@
1
- import type { DrawerRootProps } from 'vaul-vue';
2
- import type { DrawerMode } from './index';
1
+ import type { DrawerDirection, DrawerMode } from './index';
3
2
  /**
4
- * `mode` — additive shorthand (AN.W3). `"modal"` (default) keeps the iOS
5
- * scale-down look: `shouldScaleBackground: true`, `modal: true`. `"live-behind"`
6
- * bundles the non-modal peek/half/full bottom-sheet contract — `modal: false`
7
- * (no focus trap, no page `aria-hidden`, page-behind stays interactive),
8
- * `shouldScaleBackground: false` (page-behind stays at native size), and the
9
- * default `snapPoints: [0.12, 0.5, 1]` detent ladder. Every prop the mode sets
10
- * is still overridable by an explicit prop — `mode` only supplies defaults.
3
+ * BB.W-DRAWER-ABROGATE — the Drawer root on the HOUSE reka `DialogRoot` substrate
4
+ * (the SAME shape `Dialog.vue` binds). vaul-vue is gone: reka owns the open-control,
5
+ * the portal, the focus management (trap when `modal`, free when `live-behind`) and
6
+ * the scrim; the house `useDrawerSnap` engine (provided here, bound in DrawerContent)
7
+ * owns the snap math vaul used to own.
11
8
  *
12
- * NOTE: we do NOT route through `useForwardPropsEmits` here. That helper
13
- * reflects only props the parent vnode actually passed (plus component-declared
14
- * defaults), so the values our `resolved` computed derives for keys the consumer
15
- * did NOT pass (e.g. `modal:false` under `mode="live-behind"`) would be dropped.
16
- * Binding `resolved` directly + merging emit-as-props is the correct shape for a
17
- * computed-default wrapper.
9
+ * `mode` — additive shorthand (AN.W3). `"modal"` (default) keeps the iOS scale-down
10
+ * look: `modal: true` (reka focus-traps + page-occludes). `"live-behind"` is the
11
+ * non-modal peek/half/full bottom sheet — `modal: false` (no focus trap, no page
12
+ * `aria-hidden`, page-behind stays interactive — reka delivers this natively),
13
+ * `shouldScaleBackground: false`, and the direction-derived snap ladder. Every prop
14
+ * the mode sets is still overridable by an explicit prop — `mode` only supplies
15
+ * defaults.
16
+ *
17
+ * The snap props (`snapPoints`/`activeSnapPoint`/`direction`/`shouldScaleBackground`)
18
+ * are HOUSE props now (they were vaul's `DrawerRootProps` surface — preserved by
19
+ * shape so the consumer binding is byte-identical, but resolved by the house engine,
20
+ * not forwarded to reka, which knows only `open`/`defaultOpen`/`modal`).
18
21
  */
19
- type __VLS_Props = DrawerRootProps & {
22
+ type __VLS_Props = {
23
+ /** The controlled open state (`v-model:open`). */
24
+ open?: boolean;
25
+ /** Initial open state for the uncontrolled case. */
26
+ defaultOpen?: boolean;
27
+ /** reka modality — defaulted by `mode`; an explicit value overrides. */
28
+ modal?: boolean;
29
+ /** Presentation mode shorthand. */
20
30
  mode?: DrawerMode;
31
+ /** The detent ladder (fractions 0..1). When omitted, resolved from `direction` (BB-2). */
32
+ snapPoints?: (number | string)[];
33
+ /** The active detent fraction (`v-model:active-snap-point`). */
34
+ activeSnapPoint?: number | string | null;
35
+ /** Drag/slide axis (BB-2 default-ladder source). */
36
+ direction?: DrawerDirection;
37
+ /** iOS page scale-down on open (the modal look). Defaulted by `mode`. */
38
+ shouldScaleBackground?: boolean;
21
39
  };
22
- declare var __VLS_8: {};
40
+ declare var __VLS_10: {};
23
41
  type __VLS_Slots = {} & {
24
- default?: (props: typeof __VLS_8) => any;
42
+ default?: (props: typeof __VLS_10) => any;
25
43
  };
26
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
27
- "update:open": (open: boolean) => any;
28
- close: () => any;
29
- drag: (percentageDragged: number) => any;
30
- animationEnd: (open: boolean) => any;
31
- release: (open: boolean) => any;
32
- "update:activeSnapPoint": (val: string | number) => any;
44
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
45
+ "update:open": (value: boolean) => any;
46
+ "update:activeSnapPoint": (value: string | number | null) => any;
33
47
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
34
- "onUpdate:open"?: ((open: boolean) => any) | undefined;
35
- onClose?: (() => any) | undefined;
36
- onDrag?: ((percentageDragged: number) => any) | undefined;
37
- onAnimationEnd?: ((open: boolean) => any) | undefined;
38
- onRelease?: ((open: boolean) => any) | undefined;
39
- "onUpdate:activeSnapPoint"?: ((val: string | number) => any) | undefined;
48
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
49
+ "onUpdate:activeSnapPoint"?: ((value: string | number | null) => any) | undefined;
40
50
  }>, {
41
- mode: DrawerMode;
51
+ direction: DrawerDirection;
42
52
  open: boolean;
53
+ mode: DrawerMode;
54
+ defaultOpen: boolean;
43
55
  modal: boolean;
44
- shouldScaleBackground: boolean;
45
56
  snapPoints: (number | string)[];
57
+ activeSnapPoint: number | string | null;
58
+ shouldScaleBackground: boolean;
46
59
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
60
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
48
61
  declare const _default: typeof __VLS_export;
@@ -1,13 +1,12 @@
1
- import type { DialogContentProps } from 'reka-ui';
2
- import type { HtmlHTMLAttributes } from 'vue';
1
+ import { type HtmlHTMLAttributes } from 'vue';
2
+ import { type DialogContentProps } from 'reka-ui';
3
3
  import { type Surface } from '../_shared/useSurfaceAxis';
4
4
  /**
5
- * `showOverlay` — render the scrim (AN.W3). Defaults `true` for the modal
6
- * sheet. The live-behind pattern (`<Drawer mode="live-behind">`) passes
7
- * `:show-overlay="false"` so the page-behind stays visible AND interactive;
8
- * vaul-vue's `modal:false` already drops `disableOutsidePointerEvents`, but a
9
- * painted scrim would still visually occlude the live verdict, so the overlay
10
- * is opt-out at the content level.
5
+ * `showOverlay` — render the scrim (AN.W3). Defaults `true` for the modal sheet. The
6
+ * live-behind pattern (`<Drawer mode="live-behind">`) passes `:show-overlay="false"`
7
+ * so the page-behind stays visible AND interactive; reka's `:modal="false"` already
8
+ * drops outside-pointer-capture + the focus trap, but a painted scrim would still
9
+ * visually occlude the live surface, so the overlay is opt-out at the content level.
11
10
  */
12
11
  type __VLS_Props = DialogContentProps & {
13
12
  class?: HtmlHTMLAttributes['class'];
@@ -1,6 +1,6 @@
1
- import type { DrawerDescriptionProps } from 'vaul-vue';
1
+ import { type DialogDescriptionProps } from 'reka-ui';
2
2
  import { type HtmlHTMLAttributes } from 'vue';
3
- type __VLS_Props = DrawerDescriptionProps & {
3
+ type __VLS_Props = DialogDescriptionProps & {
4
4
  class?: HtmlHTMLAttributes['class'];
5
5
  };
6
6
  declare var __VLS_8: {};
@@ -1,4 +1,4 @@
1
- import type { DialogOverlayProps } from 'reka-ui';
1
+ import { type DialogOverlayProps } from 'reka-ui';
2
2
  import { type HtmlHTMLAttributes } from 'vue';
3
3
  type __VLS_Props = DialogOverlayProps & {
4
4
  class?: HtmlHTMLAttributes['class'];
@@ -1,6 +1,6 @@
1
- import type { DrawerTitleProps } from 'vaul-vue';
1
+ import { type DialogTitleProps } from 'reka-ui';
2
2
  import { type HtmlHTMLAttributes } from 'vue';
3
- type __VLS_Props = DrawerTitleProps & {
3
+ type __VLS_Props = DialogTitleProps & {
4
4
  class?: HtmlHTMLAttributes['class'];
5
5
  };
6
6
  declare var __VLS_8: {};
@@ -0,0 +1,26 @@
1
+ import type { Ref } from "vue";
2
+ import type { DrawerDirection } from "../index";
3
+ /**
4
+ * The snap seam the root provides + the content consumes. The root resolves the
5
+ * effective ladder (consumer `snapPoints` ?? the direction-derived default) + the
6
+ * direction; the content binds the drag gesture against it. The read-only refs
7
+ * (`snapPoints`/`direction`) are root-derived computeds; `open`/`activeSnapPoint`
8
+ * are writable so the engine round-trips the open-control + the snap-fraction.
9
+ */
10
+ export interface DrawerSnapContext {
11
+ /** The drawer's open state (mirrors the reka root's `v-model:open`). */
12
+ open: Ref<boolean>;
13
+ /** The resolved detent ladder (fractions 0..1; empty = full-slide side-lens). */
14
+ snapPoints: Readonly<Ref<readonly number[]>>;
15
+ /** The drag/slide axis. */
16
+ direction: Readonly<Ref<DrawerDirection>>;
17
+ /** The live active detent fraction (the `v-model:active-snap-point` writeback). */
18
+ activeSnapPoint: Ref<number | string | null>;
19
+ }
20
+ export declare const DRAWER_SNAP_KEY: import("vue").InjectionKey<DrawerSnapContext>;
21
+ export declare function provideDrawerSnapContext(context: DrawerSnapContext): void;
22
+ /**
23
+ * Befitting-silent — returns `null` for a `<DrawerContent>` rendered outside a
24
+ * `<Drawer>` (a misuse the optional context renders bare for, rather than throwing).
25
+ */
26
+ export declare const useOptionalDrawerSnapContext: () => DrawerSnapContext | null;
@@ -0,0 +1,17 @@
1
+ import { type Ref } from "vue";
2
+ import type { DrawerSnapContext } from "./drawerSnapContext";
3
+ export interface UseDrawerSnapOptions {
4
+ /** The content sheet element (the `--glass-drawer-t` host + the drag bound box). */
5
+ contentEl: Ref<HTMLElement | null>;
6
+ /** The handle element (the grip the user drags to cycle detents). */
7
+ handleEl: Ref<HTMLElement | null>;
8
+ /** The provided snap seam (the ladder, open ref, direction, snap-fraction writeback). */
9
+ ctx: DrawerSnapContext;
10
+ }
11
+ export interface UseDrawerSnapReturn {
12
+ /** Whether a pointer drag is in flight (drives the grip's "live" affordance). */
13
+ dragging: Ref<boolean>;
14
+ /** Programmatically settle to a detent fraction (the open-sheet re-snap seam). */
15
+ snapTo(fraction: number): void;
16
+ }
17
+ export declare function useDrawerSnap(options: UseDrawerSnapOptions): UseDrawerSnapReturn;
@@ -0,0 +1,45 @@
1
+ import type { DrawerDirection } from "./index";
2
+ /**
3
+ * The ONE drawer-snap spring authority — the sheet-settle (response, ζ) register the
4
+ * house `SpringProgress` snap engine (`useDrawerSnap.ts`) drives `--glass-drawer-t`
5
+ * off. This is the drawer's OWN settle clock — NOT a re-use of the dock's
6
+ * `DOCK_SPRING` morph-settle (the per-spring-clock §6 doctrine: each register is its
7
+ * own clock; a sheet that flings up to a detent settles slower + with a touch more
8
+ * give than the dock's crisp 0.32/0.7 box-morph). Co-located here so the pair is
9
+ * defined ONCE rather than at the top of the composable.
10
+ *
11
+ * `response 0.4` — the angular period (≈ the swing time); a hair looser than the
12
+ * dock so the sheet reads as a heavier surface settling. `dampingFraction 0.82` —
13
+ * the iOS "smooth" register: sub-perceptual overshoot (a settled sheet, not a
14
+ * bouncing one) while staying alive on a flung release.
15
+ */
16
+ export declare const DRAWER_SNAP: {
17
+ readonly response: 0.4;
18
+ readonly dampingFraction: 0.82;
19
+ };
20
+ /**
21
+ * BB-2 (the direction-aware default snap ladder fold) — the peek/half/full detent
22
+ * ladder a bottom/top sheet resolves when the consumer passes no `snapPoints`. The
23
+ * value (12% peek · 50% half · 100% full) is the `DEFAULT_LIVE_SNAP_POINTS` shape
24
+ * the prior vaul wrapper hardcoded, re-homed into the engine as the bottom/top
25
+ * default. A side-lens (left/right) sheet resolves a FULL-SLIDE instead (no detents)
26
+ * — `resolveDefaultSnapPoints` returns `[]` for the side axis.
27
+ */
28
+ export declare const BOTTOM_SHEET_LADDER: readonly number[];
29
+ /**
30
+ * BB-2 — resolve the DEFAULT snap ladder from `direction` natively (retiring the
31
+ * Atlas `:snap-points="[]"` workaround). A bottom/top sheet gets the peek/half/full
32
+ * ladder; a left/right side-lens gets a full-slide (no detents — an empty ladder, so
33
+ * `useDrawerSnap` treats it as a single open/closed slide). A consumer-supplied
34
+ * `snapPoints` always wins over this default.
35
+ */
36
+ export declare function resolveDefaultSnapPoints(direction: DrawerDirection): readonly number[];
37
+ /**
38
+ * The drag-release velocity threshold (px/s). A flung drag whose release velocity
39
+ * exceeds this advances a detent in the drag direction (the `useDockState`-style
40
+ * velocity-aware decision); a slow release below it snaps to the NEAREST detent. The
41
+ * sign of the velocity selects the direction (toward-open vs toward-closed).
42
+ */
43
+ export declare const DRAWER_FLING_VELOCITY = 450;
44
+ /** `Symbol()` label for the `DrawerSnapContext` injection key (`drawerSnapContext.ts`). */
45
+ export declare const DRAWER_SNAP_LABEL = "glass-ui:drawer-snap-context";
@@ -1,17 +1,25 @@
1
- export { DrawerPortal, DrawerTrigger, DrawerClose } from 'vaul-vue';
1
+ export { DialogPortal as DrawerPortal, DialogTrigger as DrawerTrigger, DialogClose as DrawerClose, } from "reka-ui";
2
2
  /**
3
- * Drawer presentation mode (AN.W3). `"modal"` is the default iOS scale-down
4
- * sheet (focus-trapped, page `aria-hidden`, page-behind scaled). `"live-behind"`
5
- * is the non-modal peek/half/full bottom sheet — no focus trap, no page
6
- * `aria-hidden`, page-behind at native size — bundling the
7
- * `modal:false` + `shouldScaleBackground:false` + `snapPoints:[0.12,0.5,1]`
8
- * defaults. Explicit props still override the mode's defaults.
3
+ * Drawer drag/slide direction (BB.W-DRAWER-ABROGATE). `bottom` (default) + `top`
4
+ * are the peek/half/full bottom-sheet axes; `left`/`right` are the side-lens
5
+ * full-slide axes. The house snap engine (`useDrawerSnap`) resolves the default
6
+ * detent ladder FROM this (BB-2): bottom/top → `[0.12, 0.5, 1]`, left/right →
7
+ * a full-slide (no detents).
9
8
  */
10
- export type DrawerMode = 'modal' | 'live-behind';
11
- export { default as Drawer } from './Drawer.vue';
12
- export { default as DrawerOverlay } from './DrawerOverlay.vue';
13
- export { default as DrawerContent } from './DrawerContent.vue';
14
- export { default as DrawerHeader } from './DrawerHeader.vue';
15
- export { default as DrawerFooter } from './DrawerFooter.vue';
16
- export { default as DrawerTitle } from './DrawerTitle.vue';
17
- export { default as DrawerDescription } from './DrawerDescription.vue';
9
+ export type DrawerDirection = "top" | "bottom" | "left" | "right";
10
+ /**
11
+ * Drawer presentation mode (AN.W3). `"modal"` is the default iOS scale-down sheet —
12
+ * focus-trapped (reka `:modal="true"`), page-behind scaled. `"live-behind"` is the
13
+ * non-modal peek/half/full bottom sheet — reka `:modal="false"` (no focus trap, no
14
+ * page `aria-hidden`, page-behind at native size + interactive) — bundling the
15
+ * `modal:false` + `shouldScaleBackground:false` + the direction-derived snap ladder.
16
+ * Explicit props still override the mode's defaults.
17
+ */
18
+ export type DrawerMode = "modal" | "live-behind";
19
+ export { default as Drawer } from "./Drawer.vue";
20
+ export { default as DrawerOverlay } from "./DrawerOverlay.vue";
21
+ export { default as DrawerContent } from "./DrawerContent.vue";
22
+ export { default as DrawerHeader } from "./DrawerHeader.vue";
23
+ export { default as DrawerFooter } from "./DrawerFooter.vue";
24
+ export { default as DrawerTitle } from "./DrawerTitle.vue";
25
+ export { default as DrawerDescription } from "./DrawerDescription.vue";
@@ -0,0 +1,20 @@
1
+ import { type FocusScopeProps } from 'reka-ui';
2
+ declare var __VLS_8: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_8) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<FocusScopeProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
+ mountAutoFocus: (event: Event) => any;
8
+ unmountAutoFocus: (event: Event) => any;
9
+ }, string, import("vue").PublicProps, Readonly<FocusScopeProps> & Readonly<{
10
+ onMountAutoFocus?: ((event: Event) => any) | undefined;
11
+ onUnmountAutoFocus?: ((event: Event) => any) | undefined;
12
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
16
+ type __VLS_WithSlots<T, S> = T & {
17
+ new (): {
18
+ $slots: S;
19
+ };
20
+ };
@@ -0,0 +1,2 @@
1
+ export { default as FocusScope } from './FocusScope.vue';
2
+ export type { FocusScopeProps, FocusScopeEmits } from 'reka-ui';
@@ -14,6 +14,7 @@ export * from "./data-table";
14
14
  export * from "./dialog";
15
15
  export * from "./drawer";
16
16
  export * from "./dropdown-menu";
17
+ export * from "./focus-scope";
17
18
  export * from "./hover-card";
18
19
  export * from "./input";
19
20
  export * from "./label";
@@ -7,8 +7,9 @@ import { type ProgressRootProps } from "reka-ui";
7
7
  * dispatcher routes here for `variant="default"`.
8
8
  *
9
9
  * Token-read parity with the `gradient` variant (AX.W24 F1): the rail/indicator
10
- * colour read `--progress-track`/`--progress-fill` (fallbacks `var(--secondary)`/
11
- * `var(--primary)`) as Tailwind arbitrary properties — `bg-[var(--token,…)]` /
10
+ * colour read `--progress-track`/`--progress-fill` (fallbacks
11
+ * `var(--progress-track-on-glass)`/`var(--primary)`) as Tailwind arbitrary
12
+ * properties — `bg-[var(--token,…)]` /
12
13
  * `[background:var(--token,…)]` — NOT the `bg-secondary`/`bg-primary` utility
13
14
  * classes. A `bg-primary` utility lives in `@layer utilities`, which ALWAYS
14
15
  * outranks the `@layer components` `.glass-progress-rail` recipe regardless of
@@ -18,7 +18,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
18
18
  }>, {
19
19
  position: "item-aligned" | "popper";
20
20
  align: "start" | "center" | "end";
21
- collisionPadding: number | Partial<Record<"top" | "right" | "bottom" | "left", number>>;
21
+ collisionPadding: number | Partial<Record<"bottom" | "left" | "right" | "top", number>>;
22
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
24
24
  declare const _default: typeof __VLS_export;
@@ -8,6 +8,6 @@ export { default as SheetTitle } from './SheetTitle.vue';
8
8
  export { default as SheetDescription } from './SheetDescription.vue';
9
9
  export { default as SheetFooter } from './SheetFooter.vue';
10
10
  export declare const sheetVariants: (props?: ({
11
- side?: "top" | "right" | "bottom" | "left" | null | undefined;
11
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
12
12
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
13
  export type SheetVariants = VariantProps<typeof sheetVariants>;