@mkbabb/glass-ui 3.2.0 → 3.3.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 (305) 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/vReveal.d.ts +2 -0
  151. package/dist/composables/sidebar/useSidebarState.d.ts +2 -2
  152. package/dist/composables/sortable/dragController.d.ts +44 -0
  153. package/dist/composables/sortable/dropResolver.d.ts +34 -0
  154. package/dist/composables/sortable/ghostRenderer.d.ts +44 -0
  155. package/dist/composables/sortable/index.d.ts +1 -1
  156. package/dist/composables/sortable/touchGate.d.ts +26 -0
  157. package/dist/composables/sortable/transitionTiming.d.ts +50 -0
  158. package/dist/composables/sortable/types.d.ts +133 -0
  159. package/dist/composables/sortable/useSortable.d.ts +25 -153
  160. package/dist/configurator.js +1 -1
  161. package/dist/confirm-dialog.js +1 -1
  162. package/dist/controls.js +4 -4
  163. package/dist/createContext-DBMGRlx4.js +25 -0
  164. package/dist/dark.d.ts +2 -1
  165. package/dist/dark.js +9 -2
  166. package/dist/data-table.js +1 -1
  167. package/dist/dialog.js +1 -1
  168. package/dist/disco-glyph.js +1 -1
  169. package/dist/dock.js +400 -261
  170. package/dist/dockContext-spUj_-E5.js +9 -0
  171. package/dist/dom.js +6 -6
  172. package/dist/{dropdown-menu-naE0skDg.js → dropdown-menu-EFjl5iKo.js} +1 -1
  173. package/dist/dropdown-menu.js +1 -1
  174. package/dist/expandable-container.js +26 -20
  175. package/dist/fonts/README.md +21 -0
  176. package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
  177. package/dist/forms.js +68 -59
  178. package/dist/glass-panel.js +1 -1
  179. package/dist/glass-ui.css +1 -1
  180. package/dist/glass-ui.js +226 -328
  181. package/dist/glyph-face.js +2 -2
  182. package/dist/goo-blob.d.ts +1 -0
  183. package/dist/goo-blob.js +538 -0
  184. package/dist/header-ribbon.js +2 -2
  185. package/dist/hover-card.js +1 -1
  186. package/dist/hover-popover.js +1 -1
  187. package/dist/icon-tooltip.js +1 -1
  188. package/dist/index.d.ts +1 -0
  189. package/dist/instrument-chassis.js +1 -1
  190. package/dist/instrument-rail.js +1 -1
  191. package/dist/keys-BFoma9vm.js +9 -0
  192. package/dist/label.js +1 -1
  193. package/dist/labeled-field.js +57 -39
  194. package/dist/metric-badge.js +1 -1
  195. package/dist/motion-core.js +82 -123
  196. package/dist/motion.js +62 -14
  197. package/dist/number-field.js +1 -1
  198. package/dist/paper-backdrop.js +1 -1
  199. package/dist/popover.js +1 -1
  200. package/dist/{presets-BpTf63Hp.js → presets-1OhFpaIC.js} +1 -1
  201. package/dist/prng-Bz_1Tydc.js +15 -0
  202. package/dist/progress.js +2 -2
  203. package/dist/reactive.js +2 -2
  204. package/dist/responsive-tabs.js +38 -32
  205. package/dist/scrolling-text.js +1 -1
  206. package/dist/search.js +8 -8
  207. package/dist/select.js +3 -3
  208. package/dist/separator.js +1 -1
  209. package/dist/sheet.js +1 -1
  210. package/dist/{slider-wx8ifVFB.js → slider-BOh8ycfZ.js} +7 -11
  211. package/dist/slider.js +1 -1
  212. package/dist/sortable-list.js +36 -38
  213. package/dist/stacked-icons.js +2 -2
  214. package/dist/styles/animations.css +1 -1
  215. package/dist/styles/cards.css +1 -1
  216. package/dist/styles/components.css +1 -1
  217. package/dist/styles/dock-controls.css +486 -0
  218. package/dist/styles/dock.css +275 -450
  219. package/dist/styles/fonts.css +25 -0
  220. package/dist/styles/glass-specular-track.css +154 -0
  221. package/dist/styles/glass.css +74 -2
  222. package/dist/styles/index.css +21 -2
  223. package/dist/styles/instrument-chassis.css +11 -4
  224. package/dist/styles/theme.css +73 -21
  225. package/dist/styles/tokens.css +271 -140
  226. package/dist/styles/typography.css +14 -8
  227. package/dist/styles/utilities.css +36 -8
  228. package/dist/styles/view-transition.css +10 -4
  229. package/dist/switch.js +1 -1
  230. package/dist/tabs.js +139 -112
  231. package/dist/timeline.js +219 -158
  232. package/dist/toast.js +1 -1
  233. package/dist/toggle-group.js +1 -1
  234. package/dist/tokens.d.ts +1 -1
  235. package/dist/tooltip.js +1 -1
  236. package/dist/{useAnimatedNumber-BOxrS3a6.js → useAnimatedNumber-BF6r64lA.js} +1 -1
  237. package/dist/useClipboard-D8vFyRCa.js +97 -0
  238. package/dist/{useConfiguratorState-Dq2gNv4A.js → useConfiguratorState-DUtC1jxr.js} +82 -86
  239. package/dist/useGlobalDark-CWiaCoEw.js +34 -0
  240. package/dist/useIntersectionPause-DAdVPVp4.js +53 -0
  241. package/dist/useSortable-DnyGXKKY.js +246 -0
  242. package/dist/{useTouchGate-XX8gHfay.js → useTouchGate-CS5Csc2h.js} +1 -1
  243. package/dist/utils/prng.d.ts +4 -0
  244. package/dist/vReveal-u2wSG2El.js +35 -0
  245. package/dist/watercolor-dot.d.ts +1 -0
  246. package/dist/watercolor-dot.js +129 -0
  247. package/package.json +98 -14
  248. package/src/fonts/README.md +21 -0
  249. package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
  250. package/src/styles/animations.css +1 -1
  251. package/src/styles/cards.css +1 -1
  252. package/src/styles/dock-controls.css +486 -0
  253. package/src/styles/dock.css +275 -450
  254. package/src/styles/fonts.css +25 -0
  255. package/src/styles/glass-specular-track.css +154 -0
  256. package/src/styles/glass.css +74 -2
  257. package/src/styles/index.css +21 -2
  258. package/src/styles/instrument-chassis.css +11 -4
  259. package/src/styles/theme.css +73 -21
  260. package/src/styles/tokens.css +271 -140
  261. package/src/styles/typography.css +14 -8
  262. package/src/styles/utilities.css +36 -8
  263. package/src/styles/view-transition.css +10 -4
  264. package/dist/DataTable-BsrDYdoE.js +0 -460
  265. package/dist/DialogContent-B61rP8lj.js +0 -93
  266. package/dist/HoverPopover-BlEwqG7S.js +0 -96
  267. package/dist/Input-IFsIzId2.js +0 -30
  268. package/dist/Progress-Bs44qWEM.js +0 -126
  269. package/dist/UnderlineTabs-B4FV2zi_.js +0 -37
  270. package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +0 -1
  271. package/dist/composables/dom/useBreakpoint.d.ts +0 -38
  272. package/dist/composables/dom/useIdleReady.d.ts +0 -63
  273. package/dist/composables/dom/useViewportReady.d.ts +0 -87
  274. package/dist/composables/glass/webgl/frostShader.d.ts +0 -27
  275. package/dist/composables/motion/useAnimatedNumberMap.d.ts +0 -29
  276. package/dist/composables/motion/useStagger.d.ts +0 -50
  277. package/dist/dockContext-DM58L1Jt.js +0 -16
  278. package/dist/keys-SIKQYNx1.js +0 -11
  279. package/dist/supportsCssTimeline-IQY3gfKD.js +0 -12
  280. package/dist/useGlobalDark-BUUTZvkU.js +0 -24
  281. package/dist/useIdleReady-sLhGo6CL.js +0 -162
  282. package/dist/useIntersectionPause-CUmANkoc.js +0 -39
  283. package/dist/useSortable-DLK9kwZp.js +0 -189
  284. /package/dist/{HoverCardContent-DGUhpRVt.js → HoverCardContent-ICfIMZX1.js} +0 -0
  285. /package/dist/{InstrumentChassis-CqKPBNqp.js → InstrumentChassis-DaHIZCqy.js} +0 -0
  286. /package/dist/{InstrumentRail-CCjvKkpB.js → InstrumentRail-B0qqLFN0.js} +0 -0
  287. /package/dist/{Label-D53EOwLE.js → Label-CZk-3nTc.js} +0 -0
  288. /package/dist/{PaperBackdrop-Ds-wDsKf.js → PaperBackdrop-D_YZW47j.js} +0 -0
  289. /package/dist/{SelectGroup-DAgcsfFw.js → SelectGroup-CMdoCjRE.js} +0 -0
  290. /package/dist/{SelectSeparator-DN1jzLaI.js → SelectSeparator-CaJnPF3_.js} +0 -0
  291. /package/dist/{Separator-DXxac0j8.js → Separator-C2XtAXRp.js} +0 -0
  292. /package/dist/{Switch-imA0Hdjs.js → Switch-x8n6husW.js} +0 -0
  293. /package/dist/{Toaster-Brs6QjBU.js → Toaster-DdhMKfus.js} +0 -0
  294. /package/dist/{TooltipProvider-MZFRxOvT.js → TooltipProvider-D-JrSqDu.js} +0 -0
  295. /package/dist/components/custom/aurora/{renderMode.d.ts → constants/renderMode.d.ts} +0 -0
  296. /package/dist/components/custom/aurora/{shaders → constants/shaders}/aurora.vert.d.ts +0 -0
  297. /package/dist/{constants-DfWPi8kh.js → constants-DsCdlK9I.js} +0 -0
  298. /package/dist/{sheet-BnvZRXPq.js → sheet-CQYYrkr9.js} +0 -0
  299. /package/dist/{useGlassRenderer-C98tZnJ7.js → useGlassRenderer-Dn3WpfG-.js} +0 -0
  300. /package/dist/{useInterval-B58LmYth.js → useInterval-CHVYFpXV.js} +0 -0
  301. /package/dist/{useResizeObserver-C_7GjpRn.js → useResizeObserver-DX-STszm.js} +0 -0
  302. /package/dist/{useTextHighlight-CLST6an0.js → useTextHighlight-Dmtofpk2.js} +0 -0
  303. /package/dist/{useTimer-6FoosoDY.js → useTimer-DGgoxTXL.js} +0 -0
  304. /package/dist/{useUserInvalidAria-BW5iyqWR.js → useUserInvalidAria-DmvZ_6Dx.js} +0 -0
  305. /package/dist/{useViewTransition-CUJM7fXT.js → useViewTransition-D4ssvnXZ.js} +0 -0
@@ -26,8 +26,8 @@ type __VLS_Slots = {} & {
26
26
  default?: (props: typeof __VLS_1) => any;
27
27
  };
28
28
  declare const __VLS_base: import("vue").DefineComponent<GlassPanelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<GlassPanelProps> & Readonly<{}>, {
29
- blur: number;
30
29
  variant: GlassPanelVariant;
30
+ blur: number;
31
31
  refraction: number;
32
32
  chromaticAberration: boolean;
33
33
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,35 +1,9 @@
1
- import { type InjectionKey, type Ref } from "vue";
2
- /**
3
- * Silhouette injection slot used by `<GlyphFace>` to receive a silhouette
4
- * path from a descendant such as `<DiscoGlyph>`. The descendant writes
5
- * the path on mount (and on subsequent silhouette changes); the wrapping
6
- * `<GlyphFace>` reads it as a fallback when no `silhouette` prop resolves
7
- * — closes the disco-glyph cap-clip path without consumer-side prop plumb.
8
- *
9
- * P.W2 Lane C — canonical typed-key + helper-pair DI shape per invariant 25.
10
- *
11
- * Naming: `GLYPH_FACE_SILHOUETTE_KEY` (UPPER_SNAKE_CASE) matches every other
12
- * typed key at HEAD (`DOCK_CONTEXT_KEY`, `DOCK_LAYER_GROUP_KEY`,
13
- * `TOGGLE_GROUP_KEY`, `CONFIGURATOR_DENSITY_KEY`, `SORTABLE_CONTEXT`). The
14
- * pre-P.W2 PascalCase variant was a convention outlier;
15
- * renamed clean per P invariant 5 (no legacy aliases). Only callers live
16
- * inside glass-ui (GlyphFace.vue + DiscoGlyph.vue + this barrel).
17
- *
18
- * Paired helpers (optional-only by intent per Pδ §2.2):
19
- * - `provideGlyphFaceSilhouette(slot)` — provider wrapper.
20
- * - `useOptionalGlyphFaceSilhouette()` — befitting silent default for
21
- * `<DiscoGlyph>`, which stands alone OR cooperates with a wrapping
22
- * `<GlyphFace>` when present.
23
- *
24
- * NO strict counterpart is shipped — silent absence is the design intent;
25
- * `<DiscoGlyph>` rendering outside `<GlyphFace>` is a first-class use case,
26
- * not an error condition.
27
- */
28
- export declare const GLYPH_FACE_SILHOUETTE_KEY: InjectionKey<Ref<string | undefined>>;
1
+ import type { Ref } from "vue";
2
+ export declare const GLYPH_FACE_SILHOUETTE_KEY: import("vue").InjectionKey<Ref<string | undefined, string | undefined>>;
29
3
  export declare function provideGlyphFaceSilhouette(slot: Ref<string | undefined>): void;
30
4
  /**
31
5
  * Befitting silent default — returns `null` when no parent `<GlyphFace>`
32
6
  * is present. `<DiscoGlyph>` cooperates with a wrapping `<GlyphFace>` when
33
7
  * the slot is available; otherwise stands alone.
34
8
  */
35
- export declare function useOptionalGlyphFaceSilhouette(): Ref<string | undefined> | null;
9
+ export declare const useOptionalGlyphFaceSilhouette: () => Ref<string | undefined, string | undefined> | null;
@@ -0,0 +1,48 @@
1
+ import type { ColorResolver } from "../../../composables/color";
2
+ import type { BlobMood, BlobConfig } from "./types";
3
+ /**
4
+ * GooBlob — a gooey metaball creature on a WebGL2 canvas.
5
+ *
6
+ * Renders a pulsing SDF body with orbiting satellites that periodically merge in,
7
+ * get absorbed, then re-emerge. Mood, pointer-attraction and a deterministic
8
+ * satellite system drive the motion. The renderer composes the `useWebGLCanvas`
9
+ * substrate — it never bootstraps its own context.
10
+ *
11
+ * Color is resolved through an INJECTED `colorResolver` seam (DEC-AT-2): the blob
12
+ * paints the GAMMA-sRGB triple it returns. The prop is REQUIRED — pass
13
+ * `defaultBlobColorResolver` from `@mkbabb/glass-ui/color` (or your own) so a
14
+ * `lab()`/`oklch()`/`hsl()`/hex string resolves correctly. A missing resolver
15
+ * throws (the loud failure, not a silent gray).
16
+ *
17
+ * Config is resolved with the SAME loud discipline as the resolver: either
18
+ * `provide(BLOB_CONFIG_KEY, cfg)` from an ancestor OR pass an explicit `config`
19
+ * prop. A mount with NEITHER throws — there is no silent reactive-defaults
20
+ * synthesis. A consumer that genuinely wants the stock tuning passes
21
+ * `BLOB_CONFIG_DEFAULTS` explicitly.
22
+ */
23
+ type __VLS_Props = {
24
+ /** Base CSS color string (any form the `colorResolver` understands). */
25
+ color: string;
26
+ /** REQUIRED color seam — resolves `color` to a gamma-sRGB [r,g,b] triple in [0,1]. */
27
+ colorResolver: ColorResolver;
28
+ /**
29
+ * REQUIRED unless an ancestor `provide(BLOB_CONFIG_KEY, …)` supplies it.
30
+ * The metaball tuning. Pass `BLOB_CONFIG_DEFAULTS` for the stock look.
31
+ */
32
+ config?: BlobConfig;
33
+ /** Extra seed string mixed into the satellite PRNG for a unique-but-reproducible system. */
34
+ seed?: string;
35
+ };
36
+ declare function nudge(): void;
37
+ declare function setMood(m: BlobMood): void;
38
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
39
+ nudge: typeof nudge;
40
+ setMood: typeof setMood;
41
+ currentMood: Readonly<import("vue").Ref<BlobMood, BlobMood>>;
42
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
43
+ click: () => any;
44
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
45
+ onClick?: (() => any) | undefined;
46
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
+ declare const _default: typeof __VLS_export;
48
+ export default _default;
@@ -0,0 +1,6 @@
1
+ /** Quadratic ease-in-out (the useBlobMood mood cross-fade curve). */
2
+ export declare function easeInOut(t: number): number;
3
+ /** Quadratic ease-in (the satellite spawn ramp). */
4
+ export declare function easeIn(t: number): number;
5
+ /** Quadratic ease-out (the satellite retract ramp). */
6
+ export declare function easeOut(t: number): number;
@@ -0,0 +1,14 @@
1
+ import { type Ref } from "vue";
2
+ import type { BlobMood, MoodParams } from "../types";
3
+ /**
4
+ * Animates the blob's mood parameters — a cross-fade between named mood targets
5
+ * driven per frame by `tick(dt)`. `setMood` retargets; `params` is the eased
6
+ * current value the renderer reads.
7
+ */
8
+ export declare function useBlobMood(): {
9
+ currentMood: Readonly<Ref<BlobMood>>;
10
+ params: Readonly<Ref<MoodParams>>;
11
+ setMood: (mood: BlobMood) => void;
12
+ tick: (dt: number) => void;
13
+ };
14
+ export type BlobMoodSystem = ReturnType<typeof useBlobMood>;
@@ -0,0 +1,18 @@
1
+ import { type Ref } from "vue";
2
+ /**
3
+ * Tracks the pointer over a host element, normalised to [-1, 1] relative to the
4
+ * element centre, and smooths it per frame via `tick()`. On pointer-leave the
5
+ * smoothed position decays back toward centre.
6
+ */
7
+ export declare function useBlobPointer(el: Ref<HTMLElement | null>): {
8
+ pointer: Readonly<Ref<{
9
+ readonly x: number;
10
+ readonly y: number;
11
+ }, {
12
+ readonly x: number;
13
+ readonly y: number;
14
+ }>>;
15
+ active: Readonly<Ref<boolean, boolean>>;
16
+ tick: () => void;
17
+ };
18
+ export type BlobPointer = ReturnType<typeof useBlobPointer>;
@@ -0,0 +1,13 @@
1
+ import type { BlobConfig, MetaballSource, MoodParams } from "../types";
2
+ /**
3
+ * The satellite system — a small pool of orbiting metaball sources that
4
+ * periodically merge into the body, get absorbed, then re-emerge on a fresh
5
+ * orbit. Deterministic given `initialColor` (seeds the PRNG); `reseed` rekeys it.
6
+ */
7
+ export declare function useBlobSatellites(config: BlobConfig, initialColor: string): {
8
+ sources: MetaballSource[];
9
+ tick: (now: number, mood: MoodParams) => void;
10
+ nudge: () => void;
11
+ reseed: (color: string) => void;
12
+ };
13
+ export type BlobSatelliteSystem = ReturnType<typeof useBlobSatellites>;
@@ -0,0 +1,42 @@
1
+ import { type Ref } from "vue";
2
+ import type { ColorResolver } from "../../../../composables/color";
3
+ import type { BlobConfig } from "../types";
4
+ import type { BlobMoodSystem } from "./useBlobMood";
5
+ import type { BlobPointer } from "./useBlobPointer";
6
+ import type { BlobSatelliteSystem } from "./useBlobSatellites";
7
+ export interface UseMetaballRendererOptions {
8
+ canvasRef: Ref<HTMLCanvasElement | null>;
9
+ color: Ref<string>;
10
+ mood: BlobMoodSystem;
11
+ pointer: BlobPointer;
12
+ satellites: BlobSatelliteSystem;
13
+ config: BlobConfig;
14
+ /**
15
+ * The injected color seam (DEC-AT-2). Resolves a CSS color string to a GAMMA-
16
+ * sRGB triple in [0,1] fed straight into the shader's base-color uniform — the
17
+ * faithful AU.W7 lift paints gamma. REQUIRED: a no-resolver mount throws (the
18
+ * loud failure, not a silent gray) instructing the consumer to pass
19
+ * `defaultBlobColorResolver` from `@mkbabb/glass-ui/color` (or their own).
20
+ */
21
+ colorResolver: ColorResolver;
22
+ }
23
+ /**
24
+ * The GooBlob WebGL renderer — composes the `useWebGLCanvas` substrate (AU.W6).
25
+ *
26
+ * This module owns ONLY the metaball-specific concerns: compiling the shader,
27
+ * building the quad + uniform cache, and uploading the per-frame uniforms derived
28
+ * from the mood / pointer / satellite systems and the injected color resolver. The
29
+ * generic WebGL2 lifecycle — context creation, the suspend/resume model, the
30
+ * demand-driven rAF loop, the tab-visibility owner, the ResizeObserver, and the
31
+ * webglcontextlost/restored robustness — lives in the substrate; this renderer
32
+ * threads its behaviour through the substrate's
33
+ * `setup`/`frame`/`shouldContinue`/`resize`/`teardown` callbacks. It does NOT call
34
+ * `getContext("webgl2")` itself (the single-bootstrap contract).
35
+ *
36
+ * Colors arrive ALREADY resolved to a gamma-sRGB triple via the injected
37
+ * `colorResolver`; the value.js 1×1-canvas DOM probe is gone (the seam replaces it).
38
+ */
39
+ export declare function useMetaballRenderer(options: UseMetaballRendererOptions): {
40
+ pause: () => void;
41
+ resume: () => void;
42
+ };
@@ -0,0 +1,7 @@
1
+ export { default as GooBlob } from "./GooBlob.vue";
2
+ export type { BlobMood, MoodParams, MetaballSource, BlobConfig, SatellitePhase, SatelliteInternal, } from "./types";
3
+ export { BLOB_CONFIG_DEFAULTS, BLOB_CONFIG_KEY } from "./types";
4
+ export { useBlobMood, type BlobMoodSystem } from "./composables/useBlobMood";
5
+ export { useBlobPointer, type BlobPointer } from "./composables/useBlobPointer";
6
+ export { useBlobSatellites, type BlobSatelliteSystem, } from "./composables/useBlobSatellites";
7
+ export { useMetaballRenderer, type UseMetaballRendererOptions, } from "./composables/useMetaballRenderer";
@@ -0,0 +1 @@
1
+ export declare const METABALL_FRAGMENT_SRC: string;
@@ -0,0 +1 @@
1
+ export declare const METABALL_VERTEX_SRC = "#version 300 es\n\nin vec2 aPosition;\nout vec2 vUv;\n\nvoid main() {\n vUv = 0.5 * (aPosition + 1.0);\n gl_Position = vec4(aPosition, 0.0, 1.0);\n}";
@@ -0,0 +1 @@
1
+ export declare const METABALL_OKLCH_PERTURB_GLSL = "// Edit #4's gamut step \u2014 hue-preserving inward chroma clamp. If the linear result\n// is out of [0,1], bisect chroma toward 0 (L + h fixed) until in gamut. Preserves\n// hue exactly (only C shrinks). 16 steps resolve C to < 2^-16 of its span.\nbool inGamut(vec3 lin) {\n return all(greaterThanEqual(lin, vec3(0.0))) && all(lessThanEqual(lin, vec3(1.0)));\n}\nvec3 gamutClampOklch(vec3 lch) {\n vec3 lin = oklabToLinearSrgb(oklchToOklab(lch));\n if (inGamut(lin)) return lch;\n float lo = 0.0;\n float hi = lch.y;\n for (int i = 0; i < 16; i++) {\n float mid = 0.5 * (lo + hi);\n vec3 test = vec3(lch.x, mid, lch.z);\n if (inGamut(oklabToLinearSrgb(oklchToOklab(test)))) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return vec3(lch.x, lo, lch.z);\n}";
@@ -0,0 +1 @@
1
+ export declare const METABALL_SDF_GLSL = "// --- SDF ---\n\nfloat sdCircle(vec2 p, vec2 center, float radius) {\n return length(p - center) - radius;\n}\n\n// Edit #2 \u2014 Inigo Quilez quadratic polynomial smin (same uSmoothK uniform). The\n// quadratic h*h*k*0.25 form has a cleaner C1 seam than the prior cubic smin.\nfloat smin(float a, float b, float k) {\n float h = max(k - abs(a - b), 0.0) / k;\n return min(a, b) - h * h * k * 0.25;\n}";
@@ -0,0 +1,2 @@
1
+ export declare const METABALL_EDGE_NOISE_PRE_GLSL = "// --- Noise ---\n\nfloat hash21(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nfloat valueNoise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(i + vec2(1.0, 1.0));\n\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\n// Edit #3 \u2014 rotated-octave FBM: a fixed ~0.5 rad 2x2 rotation between octaves\n// breaks the axis-aligned banding the un-rotated lattice noise produces. The\n// rotation CONSTANT is spliced from the shared chunk (AV.W2 \u2014 the one FBM_ROT);\n// the loop below stays blob-local (param octaves + 2.0 lacunarity, per \u00A73a).";
2
+ export declare const METABALL_EDGE_NOISE_POST_GLSL = "float fbm(vec2 p, int octaves) {\n float value = 0.0;\n float amp = 0.5;\n float freq = 1.0;\n for (int i = 0; i < 4; i++) {\n if (i >= octaves) break;\n value += amp * valueNoise(p * freq);\n p = FBM_ROT * p;\n freq *= 2.0;\n amp *= 0.5;\n }\n return value;\n}\n";
@@ -0,0 +1,77 @@
1
+ import type { InjectionKey } from "vue";
2
+ export type BlobMood = "idle" | "happy" | "curious" | "sleepy" | "excited";
3
+ export interface MoodParams {
4
+ orbitSpeedScale: number;
5
+ wobbleScale: number;
6
+ pulseFreq: number;
7
+ pulseAmp: number;
8
+ noiseAmp: number;
9
+ hueRange: number;
10
+ satShift: number;
11
+ brightnessShift: number;
12
+ smoothK: number;
13
+ pointerAttraction: number;
14
+ mergeRate: number;
15
+ }
16
+ export interface MetaballSource {
17
+ x: number;
18
+ y: number;
19
+ radius: number;
20
+ opacity: number;
21
+ }
22
+ export type SatellitePhase = "orbiting" | "merging" | "absorbed" | "emerging";
23
+ export interface SatelliteInternal {
24
+ phase: SatellitePhase;
25
+ phaseStart: number;
26
+ phaseDuration: number;
27
+ timeOrigin: number;
28
+ angularSpeed: number;
29
+ phaseOffset: number;
30
+ baseRadiusX: number;
31
+ baseRadiusY: number;
32
+ wobbleAmp1: number;
33
+ wobbleFreq1: number;
34
+ wobbleAmp2: number;
35
+ wobbleFreq2: number;
36
+ pertXAmp: number;
37
+ pertXFreq: number;
38
+ pertXPhase: number;
39
+ pertYAmp: number;
40
+ pertYFreq: number;
41
+ pertYPhase: number;
42
+ startX: number;
43
+ startY: number;
44
+ endX: number;
45
+ endY: number;
46
+ }
47
+ /** Externally tunable blob configuration — all fields concrete, defaults applied via `BLOB_CONFIG_DEFAULTS`. */
48
+ export interface BlobConfig {
49
+ canvasSize: number;
50
+ bodyRadius: number;
51
+ satelliteCount: number;
52
+ satelliteRadius: number;
53
+ orbitRadius: number;
54
+ smoothK: number;
55
+ noiseAmp: number;
56
+ noiseFreq: number;
57
+ noiseSpeed: number;
58
+ pulseFreq: number;
59
+ pulseAmp: number;
60
+ hueRange: number;
61
+ satShift: number;
62
+ brightnessShift: number;
63
+ colorNoiseFreq: number;
64
+ colorNoiseSpeed: number;
65
+ pointerAttraction: number;
66
+ pointerStrength: number;
67
+ eccentricity: number;
68
+ orbitSpeedScale: number;
69
+ wobbleScale: number;
70
+ mergeRate: number;
71
+ mergeDuration: number;
72
+ absorbedDuration: [number, number];
73
+ emergeDuration: number;
74
+ orbitDuration: [number, number];
75
+ }
76
+ export declare const BLOB_CONFIG_DEFAULTS: BlobConfig;
77
+ export declare const BLOB_CONFIG_KEY: InjectionKey<BlobConfig>;
@@ -1,11 +1,33 @@
1
1
  import type { HTMLAttributes } from "vue";
2
+ /**
3
+ * <HoverPopover> — hover-triggered floating label.
4
+ *
5
+ * Substrate carry-forward of A5 §10 row 4 — IconTooltip's tooltip register
6
+ * is too quiet for chassis-tier dock-icon-button consumers (SettingsCog,
7
+ * ActionCluster). HoverPopover ships a popover-tier substrate (glass +
8
+ * border + radius) at tooltip cadence: hover-trigger, defer-on-leave
9
+ * timer, adaptive `side`/`align` that auto-flips off viewport edges.
10
+ *
11
+ * Default register: a single line of label text, sized for icon-button
12
+ * accompaniment (max-width clamps; subtle vertical padding). Pass a
13
+ * default slot for richer content (kbd hints, secondary lines). The
14
+ * `content` prop is the convenience path — most consumers want a single
15
+ * label string.
16
+ *
17
+ * Composition rests on reka-ui's HoverCard primitives so the
18
+ * collision-avoidance + open/close timer machinery come for free; this
19
+ * component is mostly a tighter substrate + a label-shaped default.
20
+ *
21
+ * J.W3.B — `keepDockOpen` extends the primitive with the dock-keep
22
+ * sink contract. While the popover is open inside a `<GlassDock>`,
23
+ * the dock's collapse timer is suppressed via the parent-provided
24
+ * `dockKeepOpen` / `dockRelease` callbacks. No-op outside a dock
25
+ * context — the inject fallbacks are `null`, so non-dock consumers
26
+ * pay nothing.
27
+ */
2
28
  type __VLS_Props = {
3
29
  /** Convenience: label text. Slot wins if both supplied. */
4
30
  content?: string;
5
- /** AB.W2 — externally-controlled open state. Two-way bound via
6
- * `v-model:open`. Leave undefined for the default uncontrolled
7
- * cadence (reka-ui drives the open state internally). */
8
- open?: boolean;
9
31
  /** Side relative to trigger. Defaults `top` (tooltip register). */
10
32
  side?: "top" | "right" | "bottom" | "left";
11
33
  /** Alignment along the side. Defaults `center`. */
@@ -56,6 +78,23 @@ type __VLS_Props = {
56
78
  */
57
79
  native?: boolean;
58
80
  };
81
+ type __VLS_ModelProps = {
82
+ /**
83
+ * AB.W2 — open-state two-way binding via Vue 3.5 `defineModel`.
84
+ *
85
+ * `open` is the single source of truth for the dock-keep-open watcher, the
86
+ * `update:open` surface, and reka-ui's HoverCardRoot `v-model:open`. The
87
+ * `{ default: false }` preserves the prior `props.open ?? false` uncontrolled
88
+ * cadence — reka writes the local model ref to drive its internal open state
89
+ * when no parent `v-model:open` is bound; a parent that binds it controls the
90
+ * value and receives `update:open` (the debounced signal honoring
91
+ * `hoverOpenDelay`/`closeDelay`). The prior dual-watch reconciliation
92
+ * (external `props.open` → internal `isOpen` + internal `isOpen` →
93
+ * `update:open` emit) is RETIRED — `defineModel` collapses both legs.
94
+ */
95
+ "open"?: boolean;
96
+ };
97
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
59
98
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_20: {}, __VLS_22: {}, __VLS_36: {};
60
99
  type __VLS_Slots = {} & {
61
100
  trigger?: (props: typeof __VLS_1) => any;
@@ -70,17 +109,17 @@ type __VLS_Slots = {} & {
70
109
  } & {
71
110
  content?: (props: typeof __VLS_36) => any;
72
111
  };
73
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
74
- "update:open": (open: boolean) => any;
75
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
76
- "onUpdate:open"?: ((open: boolean) => any) | undefined;
112
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
113
+ "update:open": (value: boolean) => any;
114
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
115
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
77
116
  }>, {
78
117
  align: "start" | "center" | "end";
79
118
  side: "top" | "right" | "bottom" | "left";
80
119
  sideOffset: number;
81
120
  closeDelay: number;
82
- hoverOpenDelay: number;
83
121
  keepDockOpen: boolean;
122
+ hoverOpenDelay: number;
84
123
  native: boolean;
85
124
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
86
125
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -33,6 +33,8 @@ type __VLS_Props = {
33
33
  };
34
34
  declare var __VLS_7: {
35
35
  errorId: string;
36
+ controlId: string;
37
+ labelledBy: string;
36
38
  }, __VLS_9: {};
37
39
  type __VLS_Slots = {} & {
38
40
  default?: (props: typeof __VLS_7) => any;
@@ -10,11 +10,11 @@ type __VLS_Props = {
10
10
  required?: boolean;
11
11
  };
12
12
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
- "update:open": (value: boolean) => any;
14
13
  "update:modelValue": (value: string) => any;
14
+ "update:open": (value: boolean) => any;
15
15
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
17
16
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
17
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
18
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -86,11 +86,11 @@ type __VLS_Slots = {} & {
86
86
  description?: (props: typeof __VLS_16) => any;
87
87
  };
88
88
  declare const __VLS_base: import("vue").DefineComponent<MetricRowProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MetricRowProps> & Readonly<{}>, {
89
- placeholder: string;
90
- digitCount: number;
91
89
  active: boolean;
90
+ placeholder: string;
92
91
  iconStrokeWidth: number;
93
92
  iconSize: number;
93
+ digitCount: number;
94
94
  colorTinted: boolean;
95
95
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
96
96
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -37,11 +37,6 @@ export interface ResponsiveTabsProps {
37
37
  * Falls back to `options` when unset.
38
38
  */
39
39
  desktopOptions?: TabOption[] | null;
40
- /**
41
- * Currently-active value. Bound through `v-model`; the consumer
42
- * receives `update:modelValue` whenever either control changes.
43
- */
44
- modelValue: string;
45
40
  /**
46
41
  * CSS length string for the media query breakpoint. Mobile-control
47
42
  * (Select) below; desktop-control (UnderlineTabs) at/above.
@@ -54,10 +49,21 @@ export interface ResponsiveTabsProps {
54
49
  desktopClass?: HTMLAttributes["class"];
55
50
  /** Class merged onto the mobile SelectTrigger only. */
56
51
  mobileTriggerClass?: HTMLAttributes["class"];
52
+ /**
53
+ * Accessible name for the mobile `<SelectTrigger>` (axe `select-name` /
54
+ * WCAG 4.1.2 — the bare trigger carries only a `<SelectValue>`). Defaults to
55
+ * the active option's label.
56
+ */
57
+ ariaLabel?: string;
57
58
  }
58
- declare const __VLS_export: import("vue").DefineComponent<ResponsiveTabsProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
59
+ type __VLS_Props = ResponsiveTabsProps;
60
+ type __VLS_ModelProps = {
61
+ modelValue: string;
62
+ };
63
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
64
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
59
65
  "update:modelValue": (value: string) => any;
60
- }, string, import("vue").PublicProps, Readonly<ResponsiveTabsProps> & Readonly<{
66
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
61
67
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
62
68
  }>, {
63
69
  desktopOptions: TabOption[] | null;
@@ -9,8 +9,8 @@ declare function focus(): void;
9
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
10
10
  focus: typeof focus;
11
11
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
- placeholder: string;
13
12
  variant: "sidebar" | "floating";
13
+ placeholder: string;
14
14
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
15
  declare const _default: typeof __VLS_export;
16
16
  export default _default;
@@ -16,8 +16,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
16
16
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
17
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
18
18
  }>, {
19
- placeholder: string;
20
19
  modelValue: string;
20
+ placeholder: string;
21
21
  tag: string;
22
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -10,10 +10,16 @@
10
10
  * The default slot renders inside the handle — typically a
11
11
  * grip glyph like `⋮⋮`.
12
12
  */
13
- import { type Component } from "vue";
13
+ import { type ButtonHTMLAttributes, type Component } from "vue";
14
14
  type __VLS_Props = {
15
15
  /** Root element tag. Default `"span"`. */
16
16
  as?: string | Component;
17
+ /**
18
+ * `<button>` type attribute — emitted only when the host is a `button`
19
+ * (an anchor/span grip carries no `type`). Spread through `$attrs`
20
+ * since `<component :is>` does not type element-specific attributes.
21
+ */
22
+ type?: ButtonHTMLAttributes["type"];
17
23
  };
18
24
  declare var __VLS_8: {};
19
25
  type __VLS_Slots = {} & {
@@ -18,9 +18,8 @@
18
18
  * rendered outside a <SortableList> has no registration target and
19
19
  * cannot function. The optional helper would be dead code.
20
20
  */
21
- import { type InjectionKey } from "vue";
22
21
  import type { UseSortableReturn } from "../../../composables/sortable";
23
- export declare const SORTABLE_CONTEXT: InjectionKey<UseSortableReturn>;
22
+ export declare const SORTABLE_CONTEXT: import("vue").InjectionKey<UseSortableReturn>;
24
23
  export declare function provideSortableContext(sortable: UseSortableReturn): void;
25
24
  /** Strict — throws when used outside `<SortableList>`. */
26
- export declare function useSortableContext(): UseSortableReturn;
25
+ export declare const useSortableContext: () => UseSortableReturn;
@@ -5,16 +5,19 @@ export interface TabOption {
5
5
  }
6
6
  type __VLS_Props = {
7
7
  options: TabOption[];
8
- modelValue: string;
9
8
  /** "default" = subtle muted slider; "pill" = solid foreground pill */
10
9
  variant?: "default" | "pill";
11
10
  /** Tab-row overflow — see `<BouncyToggle>`. */
12
11
  overflow?: "none" | "scroll" | "auto";
13
12
  class?: HTMLAttributes["class"];
14
13
  };
15
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ type __VLS_ModelProps = {
15
+ modelValue: string;
16
+ };
17
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
18
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
19
  "update:modelValue": (value: string) => any;
17
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
20
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
18
21
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
19
22
  }>, {
20
23
  overflow: "none" | "scroll" | "auto";
@@ -8,7 +8,6 @@ export interface ToggleOption {
8
8
  }
9
9
  export interface BouncyToggleProps {
10
10
  options: ToggleOption[];
11
- modelValue: string | string[];
12
11
  multiSelect?: boolean;
13
12
  /** "default" = subtle muted slider; "pill" = solid foreground pill */
14
13
  variant?: "default" | "pill";
@@ -25,6 +24,11 @@ export interface BouncyToggleProps {
25
24
  overflow?: "none" | "scroll" | "auto";
26
25
  class?: HTMLAttributes["class"];
27
26
  }
27
+ type __VLS_Props = BouncyToggleProps;
28
+ type __VLS_ModelProps = {
29
+ modelValue: string | string[];
30
+ };
31
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
28
32
  declare var __VLS_19: {
29
33
  option: ToggleOption;
30
34
  active: boolean;
@@ -37,9 +41,9 @@ type __VLS_Slots = {} & {
37
41
  } & {
38
42
  option?: (props: typeof __VLS_27) => any;
39
43
  };
40
- declare const __VLS_base: import("vue").DefineComponent<BouncyToggleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
44
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
41
45
  "update:modelValue": (value: string | string[]) => any;
42
- }, string, import("vue").PublicProps, Readonly<BouncyToggleProps> & Readonly<{
46
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
43
47
  "onUpdate:modelValue"?: ((value: string | string[]) => any) | undefined;
44
48
  }>, {
45
49
  overflow: "none" | "scroll" | "auto";
@@ -5,12 +5,15 @@ export interface TabOption {
5
5
  }
6
6
  type __VLS_Props = {
7
7
  options: TabOption[];
8
- modelValue: string;
9
8
  class?: HTMLAttributes["class"];
10
9
  };
11
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ type __VLS_ModelProps = {
11
+ modelValue: string;
12
+ };
13
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
14
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
15
  "update:modelValue": (value: string) => any;
13
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
17
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
15
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
19
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,39 @@
1
+ import { type Ref, type ComputedRef } from "vue";
2
+ import type { ToggleOption } from "../BouncyToggle.vue";
3
+ /**
4
+ * Package-private composable for `BouncyToggle.vue` — owns the JS-measured
5
+ * slider path: the single- and multi-select slider styles, the offset measure,
6
+ * the model/options re-measure watchers, and the ResizeObserver lifecycle.
7
+ *
8
+ * The composable is the SOLE writer of the JS slider styles. It runs only on
9
+ * the multi-select OR `@supports not (anchor)` branch — on an anchor-supporting
10
+ * single-select engine the CSS `anchor-name` owns the slider position and this
11
+ * path stays dormant (no RO is constructed, no measure runs). The split is a
12
+ * KISS transposition of the logic formerly inlined in the SFC; rendered DOM and
13
+ * behavior are unchanged.
14
+ */
15
+ export interface UseBouncySliderParams {
16
+ /** The container scroller root (observed by the ResizeObserver). */
17
+ containerRef: Ref<HTMLElement | null>;
18
+ /** Per-option button refs, index-aligned to `options`. */
19
+ buttonRefs: Ref<HTMLElement[]>;
20
+ /** The toggle options (re-measure on change). */
21
+ options: ComputedRef<ToggleOption[]>;
22
+ /** The defineModel value (re-measure on change). */
23
+ model: Ref<string | string[] | undefined>;
24
+ /** True for the multi-select path. */
25
+ multiSelect: ComputedRef<boolean>;
26
+ /** Whether the browser supports CSS anchor positioning. */
27
+ anchorSupported: boolean;
28
+ /** True when ANY JS slider writer is live (gates RO/watcher attach). */
29
+ jsSliderActive: ComputedRef<boolean>;
30
+ /** The active option values (used by the multi-slider measure). */
31
+ activeValues: ComputedRef<string[]>;
32
+ }
33
+ export interface UseBouncySliderReturn {
34
+ /** Inline style for the single-select JS slider. */
35
+ singleSliderStyle: Ref<Record<string, string>>;
36
+ /** Inline styles for each active multi-select slider, keyed by value. */
37
+ multiSliderStyles: Ref<Record<string, Record<string, string>>>;
38
+ }
39
+ export declare function useBouncySlider(params: UseBouncySliderParams): UseBouncySliderReturn;