@mkbabb/glass-ui 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/dist/{CardFooter-3-VGho1J.js → CardFooter-C390imy7.js} +2 -2
  2. package/dist/{CollapsibleContent-wlmlDujU.js → CollapsibleContent-cauTbZEM.js} +1 -1
  3. package/dist/{CommandShortcut-C6lsz3pG.js → CommandShortcut-BiVyqipe.js} +5 -4
  4. package/dist/DataTable-FfkaAg2z.js +465 -0
  5. package/dist/DialogContent-IQ8_BRrC.js +100 -0
  6. package/dist/{DiscoGlyph-B7YooI2-.js → DiscoGlyph-BaZ8OawK.js} +1 -1
  7. package/dist/{GlyphFace-Bvk6OIas.js → GlyphFace-B_7vOmYn.js} +1 -1
  8. package/dist/HoverPopover-DTSYkJtw.js +96 -0
  9. package/dist/{IconTooltip-DXveGjx7.js → IconTooltip-BTyYn4mr.js} +1 -1
  10. package/dist/Input-CU9CNKmo.js +52 -0
  11. package/dist/{MetricBadge-J_GBCb8e.js → MetricBadge-BlrdbOGN.js} +1 -1
  12. package/dist/{NumberFieldContent-B6L6YrQz.js → NumberFieldContent-iOTQ5rGO.js} +8 -4
  13. package/dist/{PopoverContent-CxEEUL7Y.js → PopoverContent-B8WtJECb.js} +1 -1
  14. package/dist/Progress-DjM86vfb.js +254 -0
  15. package/dist/{ScrollingText-1Qjnwz6H.js → ScrollingText-P9o_DuMn.js} +1 -1
  16. package/dist/{SelectScrollDownButton-BvvvAbuh.js → SelectScrollDownButton-BGn3rjs9.js} +9 -8
  17. package/dist/TabsIndicator-DA0x9gPr.js +97 -0
  18. package/dist/{ToggleGroupItem-Cy7xHFEo.js → ToggleGroupItem-gyXj998A.js} +37 -40
  19. package/dist/UnderlineTabs-Cq_AD03t.js +39 -0
  20. package/dist/animated-digit.js +2 -2
  21. package/dist/api/index.d.ts +2 -0
  22. package/dist/api.js +1 -1
  23. package/dist/aurora.js +454 -271
  24. package/dist/{button-DS3ULf5i.js → button-Ckn3eDfB.js} +27 -22
  25. package/dist/button.js +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.js +2 -2
  28. package/dist/collapsible.js +1 -1
  29. package/dist/color-rkK4RMx2.js +33 -0
  30. package/dist/color.d.ts +1 -0
  31. package/dist/color.js +2 -0
  32. package/dist/command.js +1 -1
  33. package/dist/compile-DVgAxagk.js +106 -0
  34. package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +7 -7
  35. package/dist/components/custom/aurora/Aurora.vue.d.ts +3 -3
  36. package/dist/components/custom/aurora/composables/color.d.ts +3 -25
  37. package/dist/components/custom/aurora/composables/cursorModel.d.ts +45 -0
  38. package/dist/components/custom/aurora/composables/frameLoop.d.ts +30 -0
  39. package/dist/components/custom/aurora/composables/glSetup.d.ts +29 -0
  40. package/dist/components/custom/aurora/composables/runtime.d.ts +45 -35
  41. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +67 -0
  42. package/dist/components/custom/aurora/composables/useAurora.d.ts +14 -1
  43. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +1 -1
  44. package/dist/components/custom/aurora/constants/budget.d.ts +50 -0
  45. package/dist/components/custom/aurora/{presets.d.ts → constants/presets.d.ts} +2 -5
  46. package/dist/components/custom/aurora/constants/shaders/aurora.frag.d.ts +1 -0
  47. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -0
  48. package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -0
  49. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -0
  50. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -0
  51. package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -0
  52. package/dist/components/custom/aurora/index.d.ts +2 -2
  53. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +14 -7
  54. package/dist/components/custom/configurator/density.d.ts +3 -8
  55. package/dist/components/custom/dock/DockBackgroundToggle.vue.d.ts +46 -0
  56. package/dist/components/custom/dock/DockIconButton.vue.d.ts +3 -3
  57. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +2 -2
  58. package/dist/components/custom/dock/GlassDock.vue.d.ts +22 -18
  59. package/dist/components/custom/dock/composables/dockContext.d.ts +4 -4
  60. package/dist/components/custom/dock/composables/dockLayerContext.d.ts +13 -6
  61. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +32 -8
  62. package/dist/components/custom/dock/index.d.ts +1 -0
  63. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  64. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  65. package/dist/components/custom/glyph-face/keys.d.ts +3 -29
  66. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +48 -0
  67. package/dist/components/custom/goo-blob/composables/easing.d.ts +6 -0
  68. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -0
  69. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +18 -0
  70. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +13 -0
  71. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +42 -0
  72. package/dist/components/custom/goo-blob/index.d.ts +7 -0
  73. package/dist/components/custom/goo-blob/shaders/metaball.frag.d.ts +1 -0
  74. package/dist/components/custom/goo-blob/shaders/metaball.vert.d.ts +1 -0
  75. package/dist/components/custom/goo-blob/shaders/oklch-perturb.glsl.d.ts +1 -0
  76. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -0
  77. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -0
  78. package/dist/components/custom/goo-blob/types.d.ts +77 -0
  79. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +48 -9
  80. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +2 -0
  81. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +2 -2
  82. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +2 -2
  83. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +13 -7
  84. package/dist/components/custom/search/FuzzySearch.vue.d.ts +1 -1
  85. package/dist/components/custom/search/SearchBar.vue.d.ts +1 -1
  86. package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +7 -1
  87. package/dist/components/custom/sortable-list/context.d.ts +2 -3
  88. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +6 -3
  89. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +7 -3
  90. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +6 -3
  91. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +39 -0
  92. package/dist/components/custom/timeline/ContinuousMarkers.vue.d.ts +49 -0
  93. package/dist/components/custom/timeline/ContinuousRail.vue.d.ts +26 -0
  94. package/dist/components/custom/timeline/ContinuousTimeline.vue.d.ts +4 -4
  95. package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +2 -2
  96. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +45 -0
  97. package/dist/components/custom/watercolor-dot/index.d.ts +3 -0
  98. package/dist/components/custom/watercolor-dot/prng.d.ts +5 -0
  99. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +24 -0
  100. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  101. package/dist/components/ui/avatar/Avatar.vue.d.ts +1 -1
  102. package/dist/components/ui/avatar/AvatarImage.vue.d.ts +5 -1
  103. package/dist/components/ui/avatar/index.d.ts +1 -1
  104. package/dist/components/ui/badge/index.d.ts +2 -2
  105. package/dist/components/ui/button/Button.vue.d.ts +3 -1
  106. package/dist/components/ui/button/index.d.ts +2 -2
  107. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  108. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  109. package/dist/components/ui/combobox/Combobox.vue.d.ts +2 -2
  110. package/dist/components/ui/combobox/ComboboxInput.vue.d.ts +2 -1
  111. package/dist/components/ui/command/Command.vue.d.ts +3 -3
  112. package/dist/components/ui/command/CommandInput.vue.d.ts +2 -1
  113. package/dist/components/ui/data-table/DataTable.vue.d.ts +5 -4
  114. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -0
  115. package/dist/components/ui/drawer/Drawer.vue.d.ts +4 -4
  116. package/dist/components/ui/input/Input.vue.d.ts +19 -1
  117. package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +8 -4
  118. package/dist/components/ui/progress/Progress.vue.d.ts +26 -88
  119. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -0
  120. package/dist/components/ui/progress/ProgressGradient.vue.d.ts +25 -0
  121. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +36 -0
  122. package/dist/components/ui/progress/index.d.ts +5 -2
  123. package/dist/components/ui/progress/useProgressGeometry.d.ts +60 -0
  124. package/dist/components/ui/select/Select.vue.d.ts +2 -2
  125. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  126. package/dist/components/ui/select/SelectTrigger.vue.d.ts +3 -0
  127. package/dist/components/ui/sheet/index.d.ts +1 -1
  128. package/dist/components/ui/slider/index.d.ts +12 -11
  129. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  130. package/dist/components/ui/textarea/Textarea.vue.d.ts +5 -1
  131. package/dist/components/ui/toast/Toast.vue.d.ts +4 -4
  132. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  133. package/dist/components/ui/toggle/index.d.ts +1 -1
  134. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +2 -3
  135. package/dist/composables/color/index.d.ts +49 -0
  136. package/dist/composables/context/createContext.d.ts +56 -0
  137. package/dist/composables/context/index.d.ts +1 -0
  138. package/dist/composables/dark/darkModeSyncScript.d.ts +23 -0
  139. package/dist/composables/dark/index.d.ts +3 -0
  140. package/dist/composables/dark/useGlobalDark.d.ts +19 -2
  141. package/dist/composables/dom/index.d.ts +0 -3
  142. package/dist/composables/dom/useClipboard.d.ts +35 -12
  143. package/dist/composables/dom/useDocumentVisibility.d.ts +20 -0
  144. package/dist/composables/glass/webgl/compile.d.ts +15 -0
  145. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
  146. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +55 -0
  147. package/dist/composables/motion/core/index.d.ts +1 -1
  148. package/dist/composables/motion/index.d.ts +1 -1
  149. package/dist/composables/motion/useCountup.d.ts +29 -0
  150. package/dist/composables/motion/useNumericTransition.d.ts +14 -3
  151. package/dist/composables/motion/vReveal.d.ts +2 -0
  152. package/dist/composables/sidebar/useSidebarState.d.ts +2 -2
  153. package/dist/composables/sortable/dragController.d.ts +44 -0
  154. package/dist/composables/sortable/dropResolver.d.ts +34 -0
  155. package/dist/composables/sortable/ghostRenderer.d.ts +44 -0
  156. package/dist/composables/sortable/index.d.ts +1 -1
  157. package/dist/composables/sortable/touchGate.d.ts +26 -0
  158. package/dist/composables/sortable/transitionTiming.d.ts +50 -0
  159. package/dist/composables/sortable/types.d.ts +133 -0
  160. package/dist/composables/sortable/useSortable.d.ts +25 -153
  161. package/dist/configurator.js +1 -1
  162. package/dist/confirm-dialog.js +1 -1
  163. package/dist/controls.js +4 -4
  164. package/dist/createContext-DBMGRlx4.js +25 -0
  165. package/dist/dark.d.ts +2 -1
  166. package/dist/dark.js +9 -2
  167. package/dist/data-table.js +1 -1
  168. package/dist/dialog.js +1 -1
  169. package/dist/disco-glyph.js +1 -1
  170. package/dist/dock.js +400 -261
  171. package/dist/dockContext-spUj_-E5.js +9 -0
  172. package/dist/dom.js +6 -6
  173. package/dist/{dropdown-menu-naE0skDg.js → dropdown-menu-EFjl5iKo.js} +1 -1
  174. package/dist/dropdown-menu.js +1 -1
  175. package/dist/expandable-container.js +26 -20
  176. package/dist/fonts/README.md +21 -0
  177. package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
  178. package/dist/forms.js +68 -59
  179. package/dist/glass-panel.js +1 -1
  180. package/dist/glass-ui.css +1 -1
  181. package/dist/glass-ui.js +226 -328
  182. package/dist/glyph-face.js +2 -2
  183. package/dist/goo-blob.d.ts +1 -0
  184. package/dist/goo-blob.js +538 -0
  185. package/dist/header-ribbon.js +2 -2
  186. package/dist/hover-card.js +1 -1
  187. package/dist/hover-popover.js +1 -1
  188. package/dist/icon-tooltip.js +1 -1
  189. package/dist/index.d.ts +1 -0
  190. package/dist/instrument-chassis.js +1 -1
  191. package/dist/instrument-rail.js +1 -1
  192. package/dist/keys-BFoma9vm.js +9 -0
  193. package/dist/label.js +1 -1
  194. package/dist/labeled-field.js +57 -39
  195. package/dist/metric-badge.js +1 -1
  196. package/dist/motion-core.js +82 -123
  197. package/dist/motion.js +62 -14
  198. package/dist/number-field.js +1 -1
  199. package/dist/paper-backdrop.js +1 -1
  200. package/dist/popover.js +1 -1
  201. package/dist/{presets-BpTf63Hp.js → presets-1OhFpaIC.js} +1 -1
  202. package/dist/prng-Bz_1Tydc.js +15 -0
  203. package/dist/progress.js +2 -2
  204. package/dist/reactive.js +2 -2
  205. package/dist/responsive-tabs.js +38 -32
  206. package/dist/scrolling-text.js +1 -1
  207. package/dist/search.js +8 -8
  208. package/dist/select.js +3 -3
  209. package/dist/separator.js +1 -1
  210. package/dist/sheet.js +1 -1
  211. package/dist/{slider-wx8ifVFB.js → slider-BOh8ycfZ.js} +7 -11
  212. package/dist/slider.js +1 -1
  213. package/dist/sortable-list.js +36 -38
  214. package/dist/stacked-icons.js +2 -2
  215. package/dist/styles/animations.css +1 -1
  216. package/dist/styles/cards.css +1 -1
  217. package/dist/styles/components.css +1 -1
  218. package/dist/styles/dock-controls.css +486 -0
  219. package/dist/styles/dock.css +284 -450
  220. package/dist/styles/fonts.css +25 -0
  221. package/dist/styles/glass-specular-track.css +154 -0
  222. package/dist/styles/glass.css +74 -2
  223. package/dist/styles/index.css +21 -2
  224. package/dist/styles/instrument-chassis.css +11 -4
  225. package/dist/styles/theme.css +73 -21
  226. package/dist/styles/tokens.css +271 -140
  227. package/dist/styles/typography.css +14 -8
  228. package/dist/styles/utilities.css +36 -8
  229. package/dist/styles/view-transition.css +10 -4
  230. package/dist/switch.js +1 -1
  231. package/dist/tabs.js +139 -112
  232. package/dist/timeline.js +219 -158
  233. package/dist/toast.js +1 -1
  234. package/dist/toggle-group.js +1 -1
  235. package/dist/tokens.d.ts +1 -1
  236. package/dist/tooltip.js +1 -1
  237. package/dist/{useAnimatedNumber-BOxrS3a6.js → useAnimatedNumber-BF6r64lA.js} +1 -1
  238. package/dist/useClipboard-D8vFyRCa.js +97 -0
  239. package/dist/{useConfiguratorState-Dq2gNv4A.js → useConfiguratorState-DUtC1jxr.js} +82 -86
  240. package/dist/useGlobalDark-CWiaCoEw.js +34 -0
  241. package/dist/useIntersectionPause-DAdVPVp4.js +53 -0
  242. package/dist/useSortable-DnyGXKKY.js +246 -0
  243. package/dist/{useTouchGate-XX8gHfay.js → useTouchGate-CS5Csc2h.js} +1 -1
  244. package/dist/utils/prng.d.ts +4 -0
  245. package/dist/vReveal-u2wSG2El.js +35 -0
  246. package/dist/watercolor-dot.d.ts +1 -0
  247. package/dist/watercolor-dot.js +129 -0
  248. package/package.json +101 -16
  249. package/src/fonts/README.md +21 -0
  250. package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
  251. package/src/styles/animations.css +1 -1
  252. package/src/styles/cards.css +1 -1
  253. package/src/styles/dock-controls.css +486 -0
  254. package/src/styles/dock.css +284 -450
  255. package/src/styles/fonts.css +25 -0
  256. package/src/styles/glass-specular-track.css +154 -0
  257. package/src/styles/glass.css +74 -2
  258. package/src/styles/index.css +21 -2
  259. package/src/styles/instrument-chassis.css +11 -4
  260. package/src/styles/theme.css +73 -21
  261. package/src/styles/tokens.css +271 -140
  262. package/src/styles/typography.css +14 -8
  263. package/src/styles/utilities.css +36 -8
  264. package/src/styles/view-transition.css +10 -4
  265. package/dist/DataTable-BsrDYdoE.js +0 -460
  266. package/dist/DialogContent-B61rP8lj.js +0 -93
  267. package/dist/HoverPopover-BlEwqG7S.js +0 -96
  268. package/dist/Input-IFsIzId2.js +0 -30
  269. package/dist/Progress-Bs44qWEM.js +0 -126
  270. package/dist/UnderlineTabs-B4FV2zi_.js +0 -37
  271. package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +0 -1
  272. package/dist/composables/dom/useBreakpoint.d.ts +0 -38
  273. package/dist/composables/dom/useIdleReady.d.ts +0 -63
  274. package/dist/composables/dom/useViewportReady.d.ts +0 -87
  275. package/dist/composables/glass/webgl/frostShader.d.ts +0 -27
  276. package/dist/composables/motion/useAnimatedNumberMap.d.ts +0 -29
  277. package/dist/composables/motion/useStagger.d.ts +0 -50
  278. package/dist/dockContext-DM58L1Jt.js +0 -16
  279. package/dist/keys-SIKQYNx1.js +0 -11
  280. package/dist/supportsCssTimeline-IQY3gfKD.js +0 -12
  281. package/dist/useGlobalDark-BUUTZvkU.js +0 -24
  282. package/dist/useIdleReady-sLhGo6CL.js +0 -162
  283. package/dist/useIntersectionPause-CUmANkoc.js +0 -39
  284. package/dist/useSortable-DLK9kwZp.js +0 -189
  285. /package/dist/{HoverCardContent-DGUhpRVt.js → HoverCardContent-ICfIMZX1.js} +0 -0
  286. /package/dist/{InstrumentChassis-CqKPBNqp.js → InstrumentChassis-DaHIZCqy.js} +0 -0
  287. /package/dist/{InstrumentRail-CCjvKkpB.js → InstrumentRail-B0qqLFN0.js} +0 -0
  288. /package/dist/{Label-D53EOwLE.js → Label-CZk-3nTc.js} +0 -0
  289. /package/dist/{PaperBackdrop-Ds-wDsKf.js → PaperBackdrop-D_YZW47j.js} +0 -0
  290. /package/dist/{SelectGroup-DAgcsfFw.js → SelectGroup-CMdoCjRE.js} +0 -0
  291. /package/dist/{SelectSeparator-DN1jzLaI.js → SelectSeparator-CaJnPF3_.js} +0 -0
  292. /package/dist/{Separator-DXxac0j8.js → Separator-C2XtAXRp.js} +0 -0
  293. /package/dist/{Switch-imA0Hdjs.js → Switch-x8n6husW.js} +0 -0
  294. /package/dist/{Toaster-Brs6QjBU.js → Toaster-DdhMKfus.js} +0 -0
  295. /package/dist/{TooltipProvider-MZFRxOvT.js → TooltipProvider-D-JrSqDu.js} +0 -0
  296. /package/dist/components/custom/aurora/{renderMode.d.ts → constants/renderMode.d.ts} +0 -0
  297. /package/dist/components/custom/aurora/{shaders → constants/shaders}/aurora.vert.d.ts +0 -0
  298. /package/dist/{constants-DfWPi8kh.js → constants-DsCdlK9I.js} +0 -0
  299. /package/dist/{sheet-BnvZRXPq.js → sheet-CQYYrkr9.js} +0 -0
  300. /package/dist/{useGlassRenderer-C98tZnJ7.js → useGlassRenderer-Dn3WpfG-.js} +0 -0
  301. /package/dist/{useInterval-B58LmYth.js → useInterval-CHVYFpXV.js} +0 -0
  302. /package/dist/{useResizeObserver-C_7GjpRn.js → useResizeObserver-DX-STszm.js} +0 -0
  303. /package/dist/{useTextHighlight-CLST6an0.js → useTextHighlight-Dmtofpk2.js} +0 -0
  304. /package/dist/{useTimer-6FoosoDY.js → useTimer-DGgoxTXL.js} +0 -0
  305. /package/dist/{useUserInvalidAria-BW5iyqWR.js → useUserInvalidAria-DmvZ_6Dx.js} +0 -0
  306. /package/dist/{useViewTransition-CUJM7fXT.js → useViewTransition-D4ssvnXZ.js} +0 -0
@@ -0,0 +1,246 @@
1
+ import { computed as e, onScopeDispose as t, shallowRef as n } from "vue";
2
+ //#region src/composables/sortable/dropResolver.ts
3
+ var r = /* @__PURE__ */ new Set();
4
+ function i(e, t, n, r, i) {
5
+ let a = i ? n : r;
6
+ for (let n = 0; n < t.length; n++) {
7
+ let r = e.get(t[n].id);
8
+ if (!r) continue;
9
+ let o = r.getBoundingClientRect();
10
+ if (a < (i ? o.left + o.width / 2 : o.top + o.height / 2)) return n;
11
+ }
12
+ return t.length;
13
+ }
14
+ function a(e, t, n) {
15
+ if (!e.group) return null;
16
+ for (let i of r) {
17
+ if (i === e || i.group !== e.group) continue;
18
+ let r = i.getContainer();
19
+ if (!r) continue;
20
+ let a = r.getBoundingClientRect();
21
+ if (t >= a.left && t <= a.right && n >= a.top && n <= a.bottom) return i;
22
+ }
23
+ return null;
24
+ }
25
+ //#endregion
26
+ //#region src/composables/sortable/transitionTiming.ts
27
+ var o = "is-sortable-drop-above", s = "is-sortable-drop-below", c = "sortable-drag-ghost", l = "is-sortable-dragging";
28
+ function u(e, t, n) {
29
+ return e < 0 ? {
30
+ above: !1,
31
+ below: !1
32
+ } : t === n ? {
33
+ above: !1,
34
+ below: e === n - 1
35
+ } : {
36
+ above: e === t,
37
+ below: !1
38
+ };
39
+ }
40
+ function d(e) {
41
+ let t = {
42
+ [o]: !1,
43
+ [s]: !1
44
+ };
45
+ if (e.isLocalDragging && e.localDrop !== null) {
46
+ let n = u(e.rowIndex, e.localDrop, e.listLength);
47
+ n.above && (t[o] = !0), n.below && (t[s] = !0);
48
+ }
49
+ if (e.externalDrop !== null && !e.isLocalDragging) {
50
+ let n = u(e.rowIndex, e.externalDrop, e.listLength);
51
+ n.above && (t[o] = !0), n.below && (t[s] = !0);
52
+ }
53
+ return t;
54
+ }
55
+ //#endregion
56
+ //#region src/composables/sortable/ghostRenderer.ts
57
+ function f(e) {
58
+ return e ? e.replace(/\//g, " ").split(/\s+/).filter(Boolean).some((e) => parseFloat(e) !== 0) : !1;
59
+ }
60
+ function p(e) {
61
+ let t = getComputedStyle(e).borderRadius;
62
+ if (f(t)) return t;
63
+ for (let t of e.querySelectorAll("*")) {
64
+ let e = getComputedStyle(t).borderRadius;
65
+ if (f(e)) return e;
66
+ }
67
+ return null;
68
+ }
69
+ function m() {
70
+ let e = null, t = 0, n = 0;
71
+ function r(r, i, a) {
72
+ let o = r.getBoundingClientRect();
73
+ t = i - o.left, n = a - o.top;
74
+ let s = r.cloneNode(!0);
75
+ s.classList.add(c);
76
+ let l = p(r);
77
+ l && (s.style.borderRadius = l), s.style.position = "fixed", s.style.left = `${o.left}px`, s.style.top = `${o.top}px`, s.style.width = `${o.width}px`, s.style.height = `${o.height}px`, s.style.margin = "0", s.style.pointerEvents = "none", s.style.zIndex = "9999", s.id && s.removeAttribute("id");
78
+ for (let e of s.querySelectorAll("[id]")) e.removeAttribute("id");
79
+ document.body.appendChild(s), e = s;
80
+ }
81
+ function i(r, i) {
82
+ e && (e.style.left = `${r - t}px`, e.style.top = `${i - n}px`);
83
+ }
84
+ function a() {
85
+ e && e.parentNode && e.parentNode.removeChild(e), e = null;
86
+ }
87
+ return {
88
+ createGhost: r,
89
+ updateGhost: i,
90
+ destroyGhost: a
91
+ };
92
+ }
93
+ //#endregion
94
+ //#region src/composables/sortable/touchGate.ts
95
+ function h(e, t) {
96
+ return t === null ? !0 : e instanceof Element ? e.closest(t) !== null : !1;
97
+ }
98
+ function g(e, t) {
99
+ if (e && "setPointerCapture" in e) try {
100
+ return e.setPointerCapture(t), !0;
101
+ } catch {
102
+ return !1;
103
+ }
104
+ return !0;
105
+ }
106
+ //#endregion
107
+ //#region src/composables/sortable/dragController.ts
108
+ function _(e) {
109
+ let { getItems: t, getId: r, elements: o, handle: s, onReorder: c, horizontal: u, ghost: d } = e, f = n(null), p = n(null), m = n(null), h = n(!0), _ = null, v = null;
110
+ function y(e) {
111
+ let n = t();
112
+ for (let t = 0; t < n.length; t++) if (r(n[t]) === e) return t;
113
+ return -1;
114
+ }
115
+ function b(e, n) {
116
+ return i(o, t().map((e) => ({ id: r(e) })), e, n, u);
117
+ }
118
+ function x(e, t) {
119
+ let n = o.get(e);
120
+ if (!(n instanceof HTMLElement)) return;
121
+ f.value = e, p.value = {
122
+ x: t.clientX,
123
+ y: t.clientY
124
+ }, m.value = y(e), h.value = !0, _ = null, v = n, n.classList.add(l), d.createGhost(n, t.clientX, t.clientY);
125
+ let r = t.currentTarget;
126
+ h.value = g(r, t.pointerId), document.addEventListener("pointermove", S), document.addEventListener("pointerup", C), document.addEventListener("pointercancel", C);
127
+ }
128
+ function S(e) {
129
+ if (f.value === null) return;
130
+ p.value = {
131
+ x: e.clientX,
132
+ y: e.clientY
133
+ }, d.updateGhost(e.clientX, e.clientY);
134
+ let t = a(s, e.clientX, e.clientY);
135
+ if (t) {
136
+ _ && _ !== t && _.setExternalDropIndex(null), _ = t;
137
+ let n = t.getItems().map((e) => ({ id: t.getId(e) })), r = i(t.getElements(), n, e.clientX, e.clientY, u);
138
+ t.setExternalDropIndex(r), m.value = null;
139
+ } else _ &&= (_.setExternalDropIndex(null), null), m.value = b(e.clientX, e.clientY);
140
+ }
141
+ function C(e) {
142
+ let n = f.value, i = _, a = m.value;
143
+ if (w(), n === null) return;
144
+ let o = t(), s = o.findIndex((e) => r(e) === n);
145
+ if (s < 0) return;
146
+ if (i) {
147
+ let e = o[s], t = o.slice();
148
+ t.splice(s, 1), c(t);
149
+ let n = i.getExternalDropIndex?.() ?? null;
150
+ i.setExternalDropIndex(null), i.acceptExternal(n ?? 0, e);
151
+ return;
152
+ }
153
+ if (a === null) return;
154
+ let l = a;
155
+ if (l > s && --l, l === s) return;
156
+ let u = o.slice(), [d] = u.splice(s, 1);
157
+ u.splice(l, 0, d), c(u);
158
+ }
159
+ function w() {
160
+ d.destroyGhost(), v &&= (v.classList.remove(l), null), _ &&= (_.setExternalDropIndex(null), null), f.value = null, p.value = null, m.value = null, document.removeEventListener("pointermove", S), document.removeEventListener("pointerup", C), document.removeEventListener("pointercancel", C);
161
+ }
162
+ return {
163
+ dragId: f,
164
+ pos: p,
165
+ dropIndex: m,
166
+ pointerCaptureActive: h,
167
+ beginDrag: x,
168
+ endDrag: w
169
+ };
170
+ }
171
+ //#endregion
172
+ //#region src/composables/sortable/useSortable.ts
173
+ var v = "[data-sortable-handle]";
174
+ function y(i) {
175
+ let { items: a, getId: o, onReorder: s, onInsert: c, group: l, handleSelector: u = v, axis: f = "y" } = i, p = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), y = null, b = n(null);
176
+ function x() {
177
+ return a.value;
178
+ }
179
+ function S(e) {
180
+ let t = x();
181
+ for (let n = 0; n < t.length; n++) if (o(t[n]) === e) return n;
182
+ return -1;
183
+ }
184
+ let C = {
185
+ group: l,
186
+ getContainer: () => y,
187
+ getItems: () => a.value,
188
+ getId: (e) => o(e),
189
+ getElements: () => p,
190
+ setExternalDropIndex: (e) => {
191
+ b.value = e;
192
+ },
193
+ acceptExternal: (e, t) => {
194
+ c && c(e, t);
195
+ },
196
+ getExternalDropIndex: () => b.value
197
+ }, w = m(), T = _({
198
+ getItems: () => a.value,
199
+ getId: (e) => o(e),
200
+ elements: p,
201
+ handle: C,
202
+ onReorder: (e) => s(e),
203
+ horizontal: f === "x",
204
+ ghost: w
205
+ });
206
+ function E(t) {
207
+ let n = g.get(t);
208
+ if (n) return n;
209
+ let r = (e) => {
210
+ e === null ? p.delete(t) : p.set(t, e);
211
+ }, i = e(() => d({
212
+ rowIndex: S(t),
213
+ listLength: x().length,
214
+ localDrop: T.dropIndex.value,
215
+ isLocalDragging: T.dragId.value !== null,
216
+ externalDrop: b.value
217
+ })), a = {
218
+ ref: r,
219
+ dataAttrs: { "data-sortable-id": String(t) },
220
+ class: i,
221
+ onPointerdown: (e) => {
222
+ e.button === 0 && h(e.target, u) && (e.preventDefault(), T.beginDrag(t, e));
223
+ }
224
+ };
225
+ return g.set(t, a), a;
226
+ }
227
+ let D = {
228
+ ref: (e) => {
229
+ y = e;
230
+ },
231
+ dataAttrs: { "data-sortable-container": l ?? "" }
232
+ };
233
+ return r.add(C), t(() => {
234
+ r.delete(C), T.endDrag();
235
+ }), {
236
+ registerItem: E,
237
+ container: D,
238
+ isDragging: e(() => T.dragId.value !== null),
239
+ dragId: e(() => T.dragId.value),
240
+ dragPosition: e(() => T.pos.value),
241
+ dropIndex: e(() => T.dropIndex.value),
242
+ pointerCaptureActive: e(() => T.pointerCaptureActive.value)
243
+ };
244
+ }
245
+ //#endregion
246
+ export { y as t };
@@ -1,4 +1,4 @@
1
- import { t as e } from "./useTimer-6FoosoDY.js";
1
+ import { t as e } from "./useTimer-DGgoxTXL.js";
2
2
  import { getCurrentScope as t, onScopeDispose as n, ref as r } from "vue";
3
3
  //#region src/composables/dom/useTouchGate.ts
4
4
  var i = /* @__PURE__ */ new Set(), a = !1;
@@ -0,0 +1,4 @@
1
+ /** Mulberry32 — fast 32-bit seeded PRNG. Returns a `() => number` in [0, 1). */
2
+ export declare function mulberry32(seed: number): () => number;
3
+ /** Simple string → u32 hash (djb2). */
4
+ export declare function hashString(str: string): number;
@@ -0,0 +1,35 @@
1
+ //#region src/utils/moveBefore.ts
2
+ function e(e, t, n) {
3
+ let r = e;
4
+ typeof r.moveBefore == "function" ? r.moveBefore(t, n) : e.insertBefore(t, n);
5
+ }
6
+ function t() {
7
+ return typeof Element < "u" && "moveBefore" in Element.prototype;
8
+ }
9
+ //#endregion
10
+ //#region src/composables/motion/supportsCssTimeline.ts
11
+ function n(e, t) {
12
+ return typeof CSS > "u" || typeof CSS.supports != "function" ? !1 : CSS.supports("animation-timeline", e) && !CSS.supports("animation-timeline", t);
13
+ }
14
+ function r() {
15
+ return n("scroll()", "gl-not-a-real-timeline");
16
+ }
17
+ function i() {
18
+ return n("view()", "gl-not-a-real-timeline");
19
+ }
20
+ //#endregion
21
+ //#region src/utils/platformSupport.ts
22
+ function a() {
23
+ return typeof globalThis.scheduler?.postTask == "function";
24
+ }
25
+ //#endregion
26
+ //#region src/composables/motion/vReveal.ts
27
+ function o(e, t) {
28
+ e.setAttribute("data-reveal", t.arg === "fade" ? "fade" : ""), e.style.setProperty("--d", String(t.value ?? 0));
29
+ }
30
+ var s = {
31
+ mounted: o,
32
+ updated: o
33
+ };
34
+ //#endregion
35
+ export { e as a, i, a as n, t as o, r, s as t };
@@ -0,0 +1 @@
1
+ export * from "./components/custom/watercolor-dot";
@@ -0,0 +1,129 @@
1
+ import { t as e } from "./_plugin-vue_export-helper-C1je1s0u.js";
2
+ import { n as t, t as n } from "./prng-Bz_1Tydc.js";
3
+ import { computed as r, createBlock as i, createElementVNode as a, defineComponent as o, normalizeClass as s, normalizeStyle as c, onUnmounted as l, openBlock as u, ref as d, renderSlot as f, resolveDynamicComponent as p, toRef as m, useId as h, watch as g, withCtx as _ } from "vue";
4
+ //#region src/components/custom/watercolor-dot/prng.ts
5
+ function v(e, t, n) {
6
+ let r = [];
7
+ for (let i = 0; i < 8; i++) r.push(t + e() * (n - t));
8
+ return r;
9
+ }
10
+ function y(e) {
11
+ return `${e[0]}% ${e[1]}% ${e[2]}% ${e[3]}% / ${e[4]}% ${e[5]}% ${e[6]}% ${e[7]}%`;
12
+ }
13
+ //#endregion
14
+ //#region src/components/custom/watercolor-dot/useWatercolorBlob.ts
15
+ function b(e, r = {}) {
16
+ let { animate: i = !1, cycleDuration: a = 4e3, range: o = [20, 80], seed: s = "" } = r, c = d(""), u = d(""), f = t(n((typeof e == "function" ? e : () => e.value)() + s)), p = v(f, o[0], o[1]);
17
+ c.value = y(p), u.value = y(v(f, o[0], o[1]));
18
+ let m = () => {};
19
+ if (!i) return typeof e != "function" && g(e, (e) => {
20
+ let r = t(n(e + s));
21
+ c.value = y(v(r, o[0], o[1])), u.value = y(v(r, o[0], o[1]));
22
+ }), {
23
+ borderRadius: c,
24
+ hoverBorderRadius: u,
25
+ nudge: m
26
+ };
27
+ let [h, _] = o, b = [...p], x = [];
28
+ for (let e = 0; e < 8; e++) {
29
+ let t = .5 + f() * 1.3, n = f();
30
+ x.push({
31
+ from: p[e] ?? h,
32
+ to: h + f() * (_ - h),
33
+ startTime: -n * a * t,
34
+ duration: a * t
35
+ });
36
+ }
37
+ let S = null, C = 0;
38
+ function w(e) {
39
+ C = e;
40
+ for (let t = 0; t < 8; t++) {
41
+ let n = x[t];
42
+ if (!n) continue;
43
+ let r = (e - n.startTime) / n.duration;
44
+ r >= 1 && (n.from = n.to, n.to = h + f() * (_ - h), n.duration = a * (.5 + f() * 1.3), n.startTime = e, r = 0);
45
+ let i = .5 - .5 * Math.cos(Math.PI * r);
46
+ b[t] = n.from + i * (n.to - n.from);
47
+ }
48
+ c.value = y(b), S = requestAnimationFrame(w);
49
+ }
50
+ return m = () => {
51
+ let e = C || performance.now();
52
+ for (let t = 0; t < 8; t++) {
53
+ let n = x[t];
54
+ n && (n.from = b[t] ?? n.from, n.to = h + f() * (_ - h), n.duration = a * (.25 + f() * .25), n.startTime = e);
55
+ }
56
+ }, S = requestAnimationFrame(w), l(() => {
57
+ S !== null && (cancelAnimationFrame(S), S = null);
58
+ }), {
59
+ borderRadius: c,
60
+ hoverBorderRadius: u,
61
+ nudge: m
62
+ };
63
+ }
64
+ //#endregion
65
+ //#region src/components/custom/watercolor-dot/WatercolorDot.vue
66
+ var x = /* @__PURE__ */ e(/* @__PURE__ */ o({
67
+ __name: "WatercolorDot",
68
+ props: {
69
+ color: {},
70
+ animate: {
71
+ type: Boolean,
72
+ default: !1
73
+ },
74
+ tag: { default: "div" },
75
+ cycleDuration: { default: 4e3 },
76
+ range: { default: () => [20, 80] },
77
+ seed: { default: "" }
78
+ },
79
+ setup(e) {
80
+ let t = e, n = `watercolor-filter-${h().replace(/[^a-zA-Z0-9_-]/g, "")}`, o = r(() => `url(#${n})`), l = m(t, "color"), g = d(!1), v = b(l, {
81
+ animate: t.animate,
82
+ cycleDuration: t.cycleDuration,
83
+ range: t.range,
84
+ seed: t.seed
85
+ });
86
+ function y() {
87
+ g.value = !0, t.animate && v.nudge();
88
+ }
89
+ let x = r(() => t.animate ? v.borderRadius.value : g.value ? v.hoverBorderRadius.value : v.borderRadius.value);
90
+ return (t, r) => (u(), i(p(e.tag), {
91
+ class: s(["watercolor-swatch", e.animate && "watercolor-animated"]),
92
+ style: c({
93
+ backgroundColor: e.color,
94
+ borderRadius: x.value,
95
+ "--watercolor-filter": o.value
96
+ }),
97
+ onMouseenter: y,
98
+ onMouseleave: r[0] ||= (e) => g.value = !1
99
+ }, {
100
+ default: _(() => [a("svg", {
101
+ class: "watercolor-filter-host",
102
+ "aria-hidden": "true",
103
+ focusable: "false"
104
+ }, [a("defs", null, [a("filter", {
105
+ id: n,
106
+ x: "-10%",
107
+ y: "-10%",
108
+ width: "120%",
109
+ height: "120%",
110
+ "color-interpolation-filters": "sRGB"
111
+ }, [...r[1] ||= [a("feTurbulence", {
112
+ type: "fractalNoise",
113
+ baseFrequency: "0.04",
114
+ numOctaves: "4",
115
+ seed: "2",
116
+ result: "noise"
117
+ }, null, -1), a("feDisplacementMap", {
118
+ in: "SourceGraphic",
119
+ in2: "noise",
120
+ scale: "1.5",
121
+ xChannelSelector: "R",
122
+ yChannelSelector: "G"
123
+ }, null, -1)]])])]), f(t.$slots, "default", {}, void 0, !0)]),
124
+ _: 3
125
+ }, 40, ["class", "style"]));
126
+ }
127
+ }), [["__scopeId", "data-v-5e8693fa"]]);
128
+ //#endregion
129
+ export { x as WatercolorDot, n as hashString, t as mulberry32, y as radiiToCSS, v as randomRadii, b as useWatercolorBlob };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -49,9 +49,24 @@
49
49
  "aurora": [
50
50
  "dist/aurora.d.ts"
51
51
  ],
52
+ "color": [
53
+ "dist/color.d.ts"
54
+ ],
55
+ "goo-blob": [
56
+ "dist/goo-blob.d.ts"
57
+ ],
58
+ "watercolor-dot": [
59
+ "dist/watercolor-dot.d.ts"
60
+ ],
52
61
  "metric-badge": [
53
62
  "dist/metric-badge.d.ts"
54
63
  ],
64
+ "metric-cell": [
65
+ "dist/metric-cell.d.ts"
66
+ ],
67
+ "metric-stack": [
68
+ "dist/metric-stack.d.ts"
69
+ ],
55
70
  "status-dot": [
56
71
  "dist/status-dot.d.ts"
57
72
  ],
@@ -121,15 +136,9 @@
121
136
  "carousel": [
122
137
  "dist/carousel.d.ts"
123
138
  ],
124
- "metric-stack": [
125
- "dist/metric-stack.d.ts"
126
- ],
127
139
  "animated-digit": [
128
140
  "dist/animated-digit.d.ts"
129
141
  ],
130
- "metric-cell": [
131
- "dist/metric-cell.d.ts"
132
- ],
133
142
  "responsive-tabs": [
134
143
  "dist/responsive-tabs.d.ts"
135
144
  ],
@@ -277,6 +286,18 @@
277
286
  "types": "./dist/aurora.d.ts",
278
287
  "import": "./dist/aurora.js"
279
288
  },
289
+ "./color": {
290
+ "types": "./dist/color.d.ts",
291
+ "import": "./dist/color.js"
292
+ },
293
+ "./goo-blob": {
294
+ "types": "./dist/goo-blob.d.ts",
295
+ "import": "./dist/goo-blob.js"
296
+ },
297
+ "./watercolor-dot": {
298
+ "types": "./dist/watercolor-dot.d.ts",
299
+ "import": "./dist/watercolor-dot.js"
300
+ },
280
301
  "./configurator": {
281
302
  "types": "./dist/configurator.d.ts",
282
303
  "import": "./dist/configurator.js"
@@ -289,6 +310,10 @@
289
310
  "types": "./dist/metric-badge.d.ts",
290
311
  "import": "./dist/metric-badge.js"
291
312
  },
313
+ "./metric-cell": {
314
+ "types": "./dist/metric-cell.d.ts",
315
+ "import": "./dist/metric-cell.js"
316
+ },
292
317
  "./metric-stack": {
293
318
  "types": "./dist/metric-stack.d.ts",
294
319
  "import": "./dist/metric-stack.js"
@@ -297,10 +322,6 @@
297
322
  "types": "./dist/animated-digit.d.ts",
298
323
  "import": "./dist/animated-digit.js"
299
324
  },
300
- "./metric-cell": {
301
- "types": "./dist/metric-cell.d.ts",
302
- "import": "./dist/metric-cell.js"
303
- },
304
325
  "./responsive-tabs": {
305
326
  "types": "./dist/responsive-tabs.d.ts",
306
327
  "import": "./dist/responsive-tabs.js"
@@ -516,7 +537,7 @@
516
537
  "iter-build": "vite build --config vite.iter.config.ts",
517
538
  "iter-test": "vitest run --reporter=verbose",
518
539
  "iter-test-watch": "vitest --watch",
519
- "emit-types": "vue-tsc --project tsconfig.build.json",
540
+ "emit-types": "vue-tsc --project tsconfig.build.json && node scripts/flatten-subpath-types.mjs",
520
541
  "iter": "npm run iter-check && npm run iter-build && npm run iter-test",
521
542
  "proof:package": "node scripts/proof-package.mjs",
522
543
  "proof:consumers:static": "node scripts/proof-consumers-static.mjs",
@@ -525,9 +546,59 @@
525
546
  "proof:theme": "node scripts/proof-theme-style.mjs",
526
547
  "proof:components-css": "node scripts/proof-components-css.mjs",
527
548
  "proof:resolution": "node scripts/proof-resolution-contract.mjs",
549
+ "proof:peer-conformance": "node scripts/proof-peer-conformance.mjs",
528
550
  "proof:phantom-classes": "node scripts/proof-phantom-classes.mjs",
529
551
  "proof:vt-names": "node scripts/proof-vt-names.mjs",
552
+ "proof:dock-animation-live": "node scripts/proof-dock-animation-live.mjs",
553
+ "proof:dock-motion-parity": "node scripts/proof-dock-motion-parity.mjs",
554
+ "proof:dock-motion-single-source": "node scripts/proof-dock-motion-single-source.mjs",
555
+ "proof:dock-opacity-lockstep": "node scripts/proof-dock-opacity-lockstep.mjs",
556
+ "proof:dock-a11y-contract": "vitest run tests/components/custom/dock/DockLayerRail.a11y.test.ts",
557
+ "proof:dock-vocabulary": "node scripts/proof-dock-vocabulary.mjs",
558
+ "proof:dock-css-split": "node scripts/proof-dock-controls-split.mjs",
559
+ "proof:design-idiom-localization": "node scripts/proof-design-idiom-localization.mjs",
560
+ "proof:tailwind-v4-idiom": "node scripts/proof-tailwind-v4-idiom.mjs",
561
+ "proof:au-w9-consumers": "node scripts/proof-au-w9-consumers.mjs",
562
+ "proof:shadow-contract": "node scripts/proof-shadow-contract.mjs",
563
+ "proof:card-cartoon-consumers": "node scripts/proof-card-cartoon-consumers.mjs",
564
+ "proof:doc-consistency": "node scripts/proof-doc-consistency.mjs",
565
+ "proof:au-w0-reground": "node scripts/proof-au-w0-reground.mjs",
566
+ "proof:au-w1-design": "node scripts/proof-au-w1-design.mjs",
567
+ "proof:au-final": "node scripts/proof-au-final.mjs",
568
+ "proof:strict-templates": "node scripts/proof-strict-templates.mjs",
569
+ "proof:peer-optional": "node scripts/proof-peer-optional.mjs",
570
+ "proof:vueuse-free-root": "node scripts/proof-vueuse-free-root.mjs",
571
+ "proof:supportsPostTask-wired": "node scripts/proof-supports-post-task-wired.mjs",
572
+ "proof:font-axes": "node scripts/proof-font-axes.mjs",
573
+ "proof:color-acyclic": "node scripts/proof-color-acyclic.mjs",
574
+ "proof:single-color-core": "node scripts/proof-single-color-core.mjs",
575
+ "proof:frostShader-deleted": "node scripts/proof-frostshader-deleted.mjs",
576
+ "proof:slider-two-only": "node scripts/proof-slider-two-only.mjs",
577
+ "proof:storybook-ia": "node scripts/proof-storybook-ia.mjs",
578
+ "proof:no-orphan-demo-route": "node scripts/proof-no-orphan-demo-route.mjs",
579
+ "proof:font-canon": "node scripts/proof-font-canon.mjs",
580
+ "proof:webgl-substrate-single": "node scripts/proof-webgl-substrate-single.mjs",
581
+ "proof:blob-value-free": "node scripts/proof-blob-value-free.mjs",
582
+ "proof:motion-composables-consumer": "node scripts/proof-motion-composables-consumer.mjs",
583
+ "proof:motion-value-free": "node scripts/proof-motion-value-free.mjs",
584
+ "proof:no-value-default": "node scripts/proof-no-value-default.mjs",
585
+ "proof:blob-space-gamma": "node scripts/proof-blob-space-gamma.mjs",
586
+ "proof:aurora-space-gamma": "node scripts/proof-aurora-space-gamma.mjs",
587
+ "proof:shader-shared-source": "node scripts/proof-shader-shared-source.mjs",
588
+ "proof:blob-color-equivalence": "vitest run tests/components/custom/goo-blob/blob-color-equivalence.test.ts",
589
+ "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
590
+ "proof:no-god-module": "node scripts/proof-no-god-module.mjs",
591
+ "proof:no-legacy-commentary": "node scripts/proof-no-legacy-commentary.mjs",
592
+ "proof:liquid-glass-tokens": "node scripts/proof-liquid-glass-tokens.mjs",
530
593
  "proof:lockfile": "node scripts/proof-lockfile.mjs",
594
+ "proof:di-consistency": "node scripts/proof-di-consistency.mjs",
595
+ "proof:no-nested-import": "node scripts/proof-no-nested-import.mjs",
596
+ "proof:no-test-in-src": "node scripts/proof-no-test-in-src.mjs",
597
+ "proof:spring-tokens-synced": "node scripts/proof-spring-tokens-synced.mjs",
598
+ "proof:offscreen-pause": "node scripts/proof-offscreen-pause.mjs",
599
+ "proof:subpath-enumeration": "node scripts/proof-subpath-enumeration.mjs",
600
+ "proof:no-orphan-composable": "node scripts/proof-no-orphan-composable.mjs",
601
+ "proof:speedtest-boundary": "node scripts/proof-speedtest-boundary.mjs",
531
602
  "proof:all": "node scripts/gates.mjs --run local",
532
603
  "gates:verify-ci": "node scripts/gates.mjs --verify-ci",
533
604
  "profile:bundle": "node scripts/profile-bundle.mjs",
@@ -542,8 +613,8 @@
542
613
  },
543
614
  "peerDependencies": {
544
615
  "@lucide/vue": "^1.16.0",
545
- "@mkbabb/keyframes.js": "^2.2.0 || ^3.0.0",
546
- "@mkbabb/value.js": "^0.10.0",
616
+ "@mkbabb/keyframes.js": "^2.2.0 || ^3.0.0 || ^4.0.0",
617
+ "@mkbabb/value.js": "^0.10.0 || ^0.11.0",
547
618
  "@vueuse/core": "^14.0",
548
619
  "class-variance-authority": "^0.7",
549
620
  "clsx": "^2.0",
@@ -554,8 +625,22 @@
554
625
  "vaul-vue": "^0.4",
555
626
  "vue": "^3.5"
556
627
  },
557
- "optionalPeerDependencies": {
558
- "tw-animate-css": "^1.2.5"
628
+ "peerDependenciesMeta": {
629
+ "@vueuse/core": {
630
+ "optional": true
631
+ },
632
+ "embla-carousel-vue": {
633
+ "optional": true
634
+ },
635
+ "@mkbabb/keyframes.js": {
636
+ "optional": true
637
+ },
638
+ "@mkbabb/value.js": {
639
+ "optional": true
640
+ },
641
+ "tw-animate-css": {
642
+ "optional": true
643
+ }
559
644
  },
560
645
  "devDependencies": {
561
646
  "@lucide/vue": "^1.16.0",
@@ -21,6 +21,27 @@ woff2 builds live in `distr/woff2/` of that repository's releases — pull
21
21
  the `Regular`/`Medium`/`SemiBold` weights only (the three glass-ui ships
22
22
  as the `--font-mono` stack rungs).
23
23
 
24
+ ## Fraunces (display, AU.W4)
25
+
26
+ The actual on-disk layout is per-family nested
27
+ (`src/fonts/<family>/<face>.woff2`), e.g.
28
+ `src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2`. AU.W4 ships the
29
+ display register's face — the `--font-stack-display: "Fraunces"` token
30
+ (`tokens.css`) had no face, so the `WONK`/`SOFT` axes `typography.css` drives were
31
+ silently inert. The shipped face is the FULL variable Fraunces (latin subset):
32
+
33
+ ```
34
+ src/fonts/fraunces/fraunces-latin.woff2
35
+ ```
36
+
37
+ It carries the `wght` · `opsz` · `SOFT` · `WONK` axes (verified by
38
+ `proof:font-axes`, which parses the woff2 `fvar` against the axes
39
+ `typography.css` references). Source canonical:
40
+ <https://github.com/googlefonts/fraunces> (OFL-1.1); the variable woff2 latin
41
+ subset is the Google Fonts / fontsource distribution. `proof:font-axes` fails
42
+ closed if a wght-only instance (one that drops `SOFT`/`WONK`) is ever
43
+ substituted.
44
+
24
45
  ## Why this directory ships, not the fetch step
25
46
 
26
47
  This worktree has no network access. Sub-task 1 documents the canonical
@@ -331,7 +331,7 @@
331
331
  scale: var(--top-layer-enter-scale, 0.96);
332
332
  transition-property: opacity, scale, display, overlay;
333
333
  transition-duration: var(--duration-normal);
334
- transition-timing-function: var(--ease-apple-spring);
334
+ transition-timing-function: var(--spring-bouncy);
335
335
  transition-behavior: allow-discrete;
336
336
  }
337
337
 
@@ -38,7 +38,7 @@
38
38
  mints the stacking context once. Longhand maps `translate(x, y)` 1:1. */
39
39
  translate: 0;
40
40
  transition:
41
- translate var(--duration-normal) var(--ease-apple-spring),
41
+ translate var(--duration-normal) var(--spring-bouncy),
42
42
  box-shadow var(--duration-normal) var(--ease-apple);
43
43
 
44
44
  &:hover:not(:disabled) {