@mkbabb/glass-ui 4.2.0 → 5.0.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 (1377) hide show
  1. package/README.md +73 -159
  2. package/dist/CardAction-2uUvjMQK.js +285 -0
  3. package/dist/CollapsibleContent-DiHcB_HH.js +63 -0
  4. package/dist/CommandShortcut-fmdbsEJL.js +302 -0
  5. package/dist/ConfiguratorRow-BV6zPjTM.js +151 -0
  6. package/dist/DataTable-Bxya8nBn.js +518 -0
  7. package/dist/DialogContent-Bl4v10AC.js +192 -0
  8. package/dist/DialogFooter-C0v4Hz2F.js +168 -0
  9. package/dist/FadingScroll-BSRLqQCx.js +76 -0
  10. package/dist/FocusScope-BzKwhsBn.js +23 -0
  11. package/dist/IconChip-CwLmBJ_K.js +57 -0
  12. package/dist/IconTooltip-D9sbK-Mk.js +25 -0
  13. package/dist/Input-DKf-XwUM.js +57 -0
  14. package/dist/InstrumentChassis-Dss5Tjcm.js +65 -0
  15. package/dist/Label-C84TaQiw.js +36 -0
  16. package/dist/Notification-DQv2cOh9.js +43 -0
  17. package/dist/NumberFieldContent-BkE7xPS9.js +140 -0
  18. package/dist/PagerDots-BP6jh7z4.js +279 -0
  19. package/dist/PaperBackdrop-BYwE8_kg.js +31 -0
  20. package/dist/PopoverContent-DOtszFWK.js +251 -0
  21. package/dist/Progress-uWLyXE7J.js +308 -0
  22. package/dist/SelectGroup-BuEptUsa.js +31 -0
  23. package/dist/SelectScrollDownButton-CDtwaWkZ.js +261 -0
  24. package/dist/SelectSeparator-4QGephvr.js +49 -0
  25. package/dist/Separator-DqJ6PfOd.js +44 -0
  26. package/dist/Surface-BWRfwyn8.js +59 -0
  27. package/dist/Switch-BPBfhMU3.js +49 -0
  28. package/dist/Toaster-C_-WeU9W.js +281 -0
  29. package/dist/ToggleGroupItem-DNWx2aSW.js +175 -0
  30. package/dist/TooltipProvider-GtfYdSVf.js +110 -0
  31. package/dist/accent-tone-solve-CBw3L0cy.js +20 -0
  32. package/dist/animated-digit.d.ts +1 -1
  33. package/dist/animated-digit.js +5 -5
  34. package/dist/aurora.d.ts +1 -1
  35. package/dist/aurora.js +1395 -398
  36. package/dist/axes.d.ts +1 -0
  37. package/dist/axes.js +50 -0
  38. package/dist/badge-C0C-rTBu.js +80 -0
  39. package/dist/badge.d.ts +1 -1
  40. package/dist/badge.js +1 -1
  41. package/dist/blob-config.d.ts +5 -0
  42. package/dist/blob-config.js +2 -0
  43. package/dist/blob.d.ts +1 -0
  44. package/dist/blob.js +1582 -0
  45. package/dist/button-BXzhydVB.js +187 -0
  46. package/dist/button.d.ts +1 -1
  47. package/dist/button.js +1 -1
  48. package/dist/canvas.js +1 -1
  49. package/dist/card.d.ts +1 -1
  50. package/dist/card.js +1 -1
  51. package/dist/carousel.d.ts +2 -2
  52. package/dist/carousel.js +165 -248
  53. package/dist/chip.d.ts +10 -0
  54. package/dist/chip.js +81 -0
  55. package/dist/class-names-5jotTFzp.js +97 -0
  56. package/dist/coalesce-metric-B8o7zT9u.js +13 -0
  57. package/dist/collapsible.d.ts +1 -1
  58. package/dist/collapsible.js +1 -1
  59. package/dist/color-Bp5jmv4Z.js +86 -0
  60. package/dist/color-swatch.d.ts +1 -1
  61. package/dist/color-swatch.js +2 -2
  62. package/dist/color.js +3 -2
  63. package/dist/command.d.ts +1 -1
  64. package/dist/command.js +1 -1
  65. package/dist/completion-seal.d.ts +1 -1
  66. package/dist/completion-seal.js +76 -42
  67. package/dist/components/_shared/axes.d.ts +21 -0
  68. package/dist/components/_shared/class-names.d.ts +27 -0
  69. package/dist/components/_shared/index.d.ts +6 -0
  70. package/dist/components/_shared/menuItemVariants.d.ts +51 -0
  71. package/dist/components/_shared/useControlSize.d.ts +46 -0
  72. package/dist/components/_shared/useMotionAxis.d.ts +41 -0
  73. package/dist/components/_shared/useSurfaceAxis.d.ts +64 -0
  74. package/dist/components/alert/Alert.vue.d.ts +19 -0
  75. package/dist/components/alert/index.d.ts +8 -0
  76. package/dist/components/aurora/Aurora.vue.d.ts +104 -0
  77. package/dist/components/aurora/composables/atoms-fields.d.ts +43 -0
  78. package/dist/components/aurora/composables/atoms.d.ts +198 -0
  79. package/dist/components/aurora/composables/auroraImageSource.d.ts +44 -0
  80. package/dist/components/aurora/composables/color.d.ts +111 -0
  81. package/dist/components/aurora/composables/frameLoop.d.ts +66 -0
  82. package/dist/components/aurora/composables/glSetup.d.ts +29 -0
  83. package/dist/components/aurora/composables/runtime.d.ts +140 -0
  84. package/dist/components/aurora/composables/uniformBridge.d.ts +120 -0
  85. package/dist/components/aurora/composables/uniformBridgeWGPU.d.ts +60 -0
  86. package/dist/components/aurora/composables/uniformBridgeWGPUImage.d.ts +39 -0
  87. package/dist/components/aurora/composables/useAurora.d.ts +80 -0
  88. package/dist/components/aurora/composables/useCursorInteraction.d.ts +25 -0
  89. package/dist/components/aurora/composables/wgpuSetup.d.ts +50 -0
  90. package/dist/components/aurora/constants/presets.d.ts +326 -0
  91. package/dist/components/aurora/constants/shaders/aurora-image.frag.d.ts +3 -0
  92. package/dist/components/aurora/constants/shaders/aurora-image.wgsl.d.ts +3 -0
  93. package/dist/components/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  94. package/dist/components/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  95. package/dist/components/aurora/constants/shaders/brush.glsl.d.ts +1 -0
  96. package/dist/components/aurora/constants/shaders/flow.glsl.d.ts +1 -0
  97. package/dist/components/aurora/constants/shaders/mediums.glsl.d.ts +2 -0
  98. package/dist/components/aurora/constants/shaders/metal-medium.glsl.d.ts +2 -0
  99. package/dist/components/aurora/index.d.ts +13 -0
  100. package/dist/components/avatar/Avatar.vue.d.ts +23 -0
  101. package/dist/components/avatar/index.d.ts +9 -0
  102. package/dist/components/badge/Badge.vue.d.ts +41 -0
  103. package/dist/components/badge/index.d.ts +9 -0
  104. package/dist/components/blob/Blob.vue.d.ts +72 -0
  105. package/dist/components/blob/composables/satelliteKinematics.d.ts +20 -0
  106. package/dist/components/blob/composables/uploadBlobUniforms.d.ts +51 -0
  107. package/dist/components/blob/composables/useBlobPointer.d.ts +88 -0
  108. package/dist/components/blob/composables/useMetaballRenderer.d.ts +100 -0
  109. package/dist/components/blob/composables/wgpuSetup.d.ts +23 -0
  110. package/dist/components/blob/config.d.ts +3 -0
  111. package/dist/components/blob/constants.d.ts +82 -0
  112. package/dist/components/blob/index.d.ts +8 -0
  113. package/dist/components/blob/presets.d.ts +14 -0
  114. package/dist/components/blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  115. package/dist/components/blob/types.d.ts +256 -0
  116. package/dist/components/button/Button.vue.d.ts +31 -0
  117. package/dist/components/button/index.d.ts +9 -0
  118. package/dist/components/card/Card.vue.d.ts +180 -0
  119. package/dist/components/card/CardHeader.vue.d.ts +58 -0
  120. package/dist/components/card/ScrollCard.vue.d.ts +33 -0
  121. package/dist/components/carousel/Carousel.vue.d.ts +44 -0
  122. package/dist/components/carousel/CarouselContent.vue.d.ts +24 -0
  123. package/dist/components/carousel/CarouselNext.vue.d.ts +21 -0
  124. package/dist/components/carousel/CarouselPrevious.vue.d.ts +21 -0
  125. package/dist/components/carousel/GlassCarouselPager.vue.d.ts +50 -0
  126. package/dist/components/carousel/useCarousel.d.ts +21 -0
  127. package/dist/components/chip/Chip.vue.d.ts +20 -0
  128. package/dist/components/chip/chipVariants.d.ts +43 -0
  129. package/dist/components/chip/index.d.ts +3 -0
  130. package/dist/components/chip/types.d.ts +38 -0
  131. package/dist/components/combobox/Combobox.vue.d.ts +32 -0
  132. package/dist/components/combobox/ComboboxList.vue.d.ts +32 -0
  133. package/dist/components/command/index.d.ts +10 -0
  134. package/dist/components/completion-seal/CompletionSeal.vue.d.ts +28 -0
  135. package/dist/components/completion-seal/constants.d.ts +66 -0
  136. package/dist/components/configurator/Configurator.vue.d.ts +160 -0
  137. package/dist/components/configurator/ConfiguratorRow.vue.d.ts +96 -0
  138. package/dist/components/configurator/index.d.ts +6 -0
  139. package/dist/components/configurator/size.d.ts +26 -0
  140. package/dist/components/constellation/Constellation.vue.d.ts +34 -0
  141. package/dist/components/constellation/composables/constellationGLSetup.d.ts +10 -0
  142. package/dist/components/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  143. package/dist/components/constellation/composables/useConstellation.d.ts +39 -0
  144. package/dist/components/constellation/constants.d.ts +97 -0
  145. package/dist/components/constellation/constellationTypes.d.ts +420 -0
  146. package/dist/components/dialog/DialogContent.vue.d.ts +115 -0
  147. package/dist/components/dock/DockBackgroundToggle.vue.d.ts +46 -0
  148. package/dist/components/dock/DockControl.vue.d.ts +73 -0
  149. package/dist/components/dock/DockCrossfade.vue.d.ts +50 -0
  150. package/dist/components/dock/DockLayer.vue.d.ts +33 -0
  151. package/dist/components/dock/DockLayerGroup.vue.d.ts +65 -0
  152. package/dist/components/dock/DockStack.vue.d.ts +73 -0
  153. package/dist/components/dock/DockTrigger.vue.d.ts +27 -0
  154. package/dist/components/dock/GlassDock.vue.d.ts +33 -0
  155. package/dist/components/dock/composables/dockContext.d.ts +48 -0
  156. package/dist/components/dock/composables/dockCrossfadeContext.d.ts +57 -0
  157. package/dist/components/dock/composables/dockMorphContext.d.ts +89 -0
  158. package/dist/components/dock/composables/index.d.ts +10 -0
  159. package/dist/components/dock/composables/useDockFisheye.d.ts +24 -0
  160. package/dist/components/dock/composables/useDockOverflowFit.d.ts +22 -0
  161. package/dist/components/dock/composables/useDockPopover.d.ts +68 -0
  162. package/dist/components/dock/composables/useDockSearch.d.ts +85 -0
  163. package/dist/components/dock/composables/useDockShellProps.d.ts +178 -0
  164. package/dist/components/dock/composables/useDockSpring.d.ts +71 -0
  165. package/dist/components/dock/composables/useDockTouchGate.d.ts +51 -0
  166. package/dist/components/dock/constants.d.ts +107 -0
  167. package/dist/components/dock/index.d.ts +19 -0
  168. package/dist/components/drawer/Drawer.vue.d.ts +85 -0
  169. package/dist/components/drawer/DrawerContent.vue.d.ts +40 -0
  170. package/dist/components/drawer/composables/useDrawerSnap.d.ts +24 -0
  171. package/dist/components/drawer/constants.d.ts +50 -0
  172. package/dist/components/drawer/index.d.ts +35 -0
  173. package/dist/components/dropdown-menu/DropdownMenu.vue.d.ts +24 -0
  174. package/dist/components/dropdown-menu/DropdownMenuContent.vue.d.ts +36 -0
  175. package/dist/components/dropdown-menu/index.d.ts +16 -0
  176. package/dist/components/dropdown-menu/useMenuTrigger.d.ts +14 -0
  177. package/dist/components/expandable-container/ExpandableContainer.vue.d.ts +71 -0
  178. package/dist/components/fourier-field/FourierField.vue.d.ts +54 -0
  179. package/dist/components/fourier-field/composables/fourierFieldGLSetup.d.ts +24 -0
  180. package/dist/components/fourier-field/composables/fourierFieldWGPUSetup.d.ts +31 -0
  181. package/dist/components/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  182. package/dist/components/fourier-field/composables/useFourierField.d.ts +55 -0
  183. package/dist/components/fourier-field/constants.d.ts +134 -0
  184. package/dist/components/fourier-field/index.d.ts +31 -0
  185. package/dist/components/fourier-field/math.d.ts +111 -0
  186. package/dist/components/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  187. package/dist/components/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  188. package/dist/components/fourier-field/shaders/fourier-field.ribbon.d.ts +51 -0
  189. package/dist/components/handmark/composables/useHandMark.d.ts +99 -0
  190. package/dist/components/handmark/constants.d.ts +69 -0
  191. package/dist/components/handmark/geometry.d.ts +65 -0
  192. package/dist/components/handmark/noise.d.ts +30 -0
  193. package/dist/components/handmark/types.d.ts +70 -0
  194. package/dist/components/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
  195. package/dist/components/header-ribbon/index.d.ts +2 -0
  196. package/dist/components/header-ribbon/types.d.ts +7 -0
  197. package/dist/components/index.d.ts +36 -0
  198. package/dist/components/liquid-grid/LiquidGrid.vue.d.ts +42 -0
  199. package/dist/components/liquid-grid/composables/liquidGrid.d.ts +113 -0
  200. package/dist/components/liquid-grid/composables/liquidGridGLSetup.d.ts +18 -0
  201. package/dist/components/liquid-grid/composables/liquidGridWGPUSetup.d.ts +21 -0
  202. package/dist/components/liquid-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  203. package/dist/components/liquid-grid/composables/useLiquidGrid.d.ts +31 -0
  204. package/dist/components/liquid-grid/constants.d.ts +93 -0
  205. package/dist/components/liquid-grid/index.d.ts +5 -0
  206. package/dist/components/liquid-grid/shaders/liquid-grid.glsl.d.ts +4 -0
  207. package/dist/components/liquid-grid/shaders/liquid-grid.wgsl.d.ts +1 -0
  208. package/dist/components/metric-badge/MetricBadge.vue.d.ts +40 -0
  209. package/dist/components/metric-cell/MetricCell.vue.d.ts +108 -0
  210. package/dist/components/metric-stack/MetricRow.vue.d.ts +120 -0
  211. package/dist/components/notification/Notification.vue.d.ts +16 -0
  212. package/dist/components/pager-dots/composables/usePagerWorm.d.ts +26 -0
  213. package/dist/components/pager-dots/constants.d.ts +15 -0
  214. package/dist/components/paper-backdrop/PaperBackdrop.vue.d.ts +21 -0
  215. package/dist/components/popover/Popover.vue.d.ts +54 -0
  216. package/dist/components/popover/PopoverContent.vue.d.ts +53 -0
  217. package/dist/components/popover/PopoverTrigger.vue.d.ts +16 -0
  218. package/dist/components/popover/popoverContext.d.ts +17 -0
  219. package/dist/components/progress/Progress.vue.d.ts +54 -0
  220. package/dist/components/progress/ProgressLiquid.vue.d.ts +21 -0
  221. package/dist/components/progress/index.d.ts +6 -0
  222. package/dist/components/scroll-progress-rim/ScrollProgressRim.vue.d.ts +19 -0
  223. package/dist/components/scroll-progress-rim/index.d.ts +3 -0
  224. package/dist/components/scroll-progress-rim/types.d.ts +2 -0
  225. package/dist/components/search/FuzzySearch.vue.d.ts +22 -0
  226. package/dist/components/search/SearchBar.vue.d.ts +38 -0
  227. package/dist/components/search/searchVariants.d.ts +19 -0
  228. package/dist/components/select/SelectContent.vue.d.ts +42 -0
  229. package/dist/components/slider/Slider.vue.d.ts +40 -0
  230. package/dist/components/slider/index.d.ts +46 -0
  231. package/dist/components/sortable-list/SortableHandle.vue.d.ts +19 -0
  232. package/dist/components/sortable-list/SortableItem.vue.d.ts +22 -0
  233. package/dist/components/sortable-list/SortableList.vue.d.ts +39 -0
  234. package/dist/components/sortable-list/composables/dragController.d.ts +29 -0
  235. package/dist/components/sortable-list/composables/types.d.ts +50 -0
  236. package/dist/components/sortable-list/composables/useSortable.d.ts +5 -0
  237. package/dist/components/sortable-list/context.d.ts +11 -0
  238. package/dist/components/sortable-list/index.d.ts +4 -0
  239. package/dist/components/split-chars/SplitChars.vue.d.ts +53 -0
  240. package/dist/components/stacked-icons/types.d.ts +19 -0
  241. package/dist/components/surface/Surface.vue.d.ts +45 -0
  242. package/dist/components/surface/index.d.ts +2 -0
  243. package/dist/components/tabs/SegmentedTabs.vue.d.ts +101 -0
  244. package/dist/components/tabs/composables/useEyeglassLive.d.ts +17 -0
  245. package/dist/components/tabs/composables/useTabDragMorph.d.ts +42 -0
  246. package/dist/components/tabs/composables/useTabResponsive.d.ts +43 -0
  247. package/dist/components/tabs/composables/useTabRovingFocus.d.ts +51 -0
  248. package/dist/components/tabs/constants.d.ts +1 -0
  249. package/dist/components/timeline/ContinuousMarkers.vue.d.ts +49 -0
  250. package/dist/components/timeline/GlassTimeline.vue.d.ts +114 -0
  251. package/dist/components/toast/Toast.vue.d.ts +107 -0
  252. package/dist/components/toast/index.d.ts +9 -0
  253. package/dist/components/toast/use-toast.d.ts +182 -0
  254. package/dist/components/toggle/Toggle.vue.d.ts +29 -0
  255. package/dist/components/toggle/index.d.ts +26 -0
  256. package/dist/components/watercolor-dot/prng.d.ts +5 -0
  257. package/dist/components/watercolor-dot/useWatercolorBlob.d.ts +31 -0
  258. package/dist/composables/color/accent-tone-solve.d.ts +11 -0
  259. package/dist/composables/color/index.d.ts +18 -1
  260. package/dist/composables/color/useAccentTone.d.ts +6 -8
  261. package/dist/composables/dom/useUserInvalidAria.d.ts +7 -11
  262. package/dist/composables/glass/ambientHueHistogram.d.ts +27 -0
  263. package/dist/composables/glass/backdropLuminanceSample.d.ts +56 -0
  264. package/dist/composables/glass/backdropSampleMath.d.ts +5 -0
  265. package/dist/composables/glass/textureUpload.d.ts +91 -0
  266. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +27 -1
  267. package/dist/composables/glass/useSpecularPointer.d.ts +23 -4
  268. package/dist/composables/glass/useSpecularTracking.d.ts +1 -1
  269. package/dist/composables/glass/wave/waveField.d.ts +22 -1
  270. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -1
  271. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -1
  272. package/dist/composables/glass/webgl/backingSize.d.ts +44 -0
  273. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +36 -55
  274. package/dist/composables/glass/webgl/shaders/glass-refract.glsl.d.ts +36 -0
  275. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +1 -1
  276. package/dist/composables/glass/webgl/visibility.d.ts +42 -0
  277. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +5 -4
  278. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +3 -111
  279. package/dist/composables/glass/webgpu/webgpuCanvasTypes.d.ts +96 -0
  280. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +30 -0
  281. package/dist/composables/index.d.ts +1 -2
  282. package/dist/composables/motion/bloomUpField.d.ts +29 -0
  283. package/dist/composables/motion/core/index.d.ts +6 -2
  284. package/dist/composables/motion/gooBarbellGeometry.d.ts +79 -0
  285. package/dist/composables/motion/index.d.ts +1 -1
  286. package/dist/composables/motion/morphSignatures.d.ts +88 -0
  287. package/dist/composables/motion/motionTempo.d.ts +9 -0
  288. package/dist/composables/motion/pointerFieldMappings.d.ts +161 -0
  289. package/dist/composables/motion/springPresets.d.ts +17 -23
  290. package/dist/composables/motion/useDockCtaReceive.d.ts +32 -39
  291. package/dist/composables/motion/useElementMorph.d.ts +99 -0
  292. package/dist/composables/motion/useLeadTrail.d.ts +69 -0
  293. package/dist/composables/motion/useLiquidPress.d.ts +9 -0
  294. package/dist/composables/motion/useLiquidReveal.d.ts +15 -29
  295. package/dist/composables/motion/usePointerVelocityField.d.ts +59 -0
  296. package/dist/composables/motion/useRoutePointer.d.ts +41 -0
  297. package/dist/composables/motion/useSelectionGroup.d.ts +83 -0
  298. package/dist/composables/motion/useSelectionIndicator.d.ts +90 -0
  299. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  300. package/dist/configurator.d.ts +1 -1
  301. package/dist/configurator.js +3 -3
  302. package/dist/constellation.d.ts +1 -1
  303. package/dist/constellation.js +292 -255
  304. package/dist/controls.d.ts +1 -1
  305. package/dist/controls.js +5 -5
  306. package/dist/createCanvasLifecycle-DlrcvWbb.js +209 -0
  307. package/dist/dark.js +1 -1
  308. package/dist/data-table.d.ts +1 -1
  309. package/dist/data-table.js +1 -1
  310. package/dist/deck.d.ts +1 -1
  311. package/dist/deck.js +6 -6
  312. package/dist/dialog.d.ts +1 -1
  313. package/dist/dialog.js +3 -4
  314. package/dist/dock.d.ts +1 -1
  315. package/dist/dock.js +1038 -1591
  316. package/dist/dockContext-d-WpJN2Z.js +13 -0
  317. package/dist/dom.js +6 -6
  318. package/dist/drawer.d.ts +1 -1
  319. package/dist/drawer.js +169 -161
  320. package/dist/dropdown-menu-DaGlVdp9.js +421 -0
  321. package/dist/dropdown-menu.d.ts +1 -1
  322. package/dist/dropdown-menu.js +1 -1
  323. package/dist/easing.d.ts +10 -1
  324. package/dist/easing.js +148 -148
  325. package/dist/expandable-container.d.ts +1 -1
  326. package/dist/expandable-container.js +85 -66
  327. package/dist/fading-scroll.d.ts +1 -1
  328. package/dist/fading-scroll.js +1 -1
  329. package/dist/focus-scope.d.ts +1 -1
  330. package/dist/focus-scope.js +2 -23
  331. package/dist/forms.d.ts +4 -3
  332. package/dist/forms.js +75 -66
  333. package/dist/fourier-field.d.ts +1 -1
  334. package/dist/fourier-field.js +608 -554
  335. package/dist/fourier-math.d.ts +7 -1
  336. package/dist/fourier-math.js +2 -2
  337. package/dist/glass-ui.css +1 -1
  338. package/dist/glass-ui.js +192 -340
  339. package/dist/handmark.d.ts +3 -1
  340. package/dist/handmark.js +179 -161
  341. package/dist/header-ribbon.d.ts +1 -1
  342. package/dist/header-ribbon.js +7 -7
  343. package/dist/icon-chip.d.ts +1 -1
  344. package/dist/icon-chip.js +1 -1
  345. package/dist/icon-tooltip.d.ts +1 -1
  346. package/dist/icon-tooltip.js +1 -1
  347. package/dist/index.d.ts +42 -45
  348. package/dist/infinite-scroll.d.ts +2 -2
  349. package/dist/infinite-scroll.js +2 -2
  350. package/dist/instrument-chassis.d.ts +1 -1
  351. package/dist/instrument-chassis.js +1 -1
  352. package/dist/keyboard.js +1 -1
  353. package/dist/label.d.ts +1 -1
  354. package/dist/label.js +1 -1
  355. package/dist/labeled-field.d.ts +1 -1
  356. package/dist/labeled-field.js +13 -13
  357. package/dist/liquid-grid.d.ts +1 -0
  358. package/dist/liquid-grid.js +1064 -0
  359. package/dist/math-CIEcwsYi.js +112 -0
  360. package/dist/menuItemVariants-DbO-Fr74.js +36 -0
  361. package/dist/metric-badge.d.ts +1 -1
  362. package/dist/metric-badge.js +79 -2
  363. package/dist/metric-cell.d.ts +1 -1
  364. package/dist/metric-cell.js +9 -9
  365. package/dist/metric-stack.d.ts +1 -1
  366. package/dist/metric-stack.js +23 -23
  367. package/dist/motion-core.js +48 -42
  368. package/dist/motion-curves.d.ts +20 -0
  369. package/dist/motion-curves.js +2 -2
  370. package/dist/motion.js +94 -210
  371. package/dist/motionTempo-CMS5b0Vu.js +7 -0
  372. package/dist/notification.d.ts +1 -1
  373. package/dist/notification.js +1 -1
  374. package/dist/number-field.d.ts +1 -1
  375. package/dist/number-field.js +1 -1
  376. package/dist/pager-dots.d.ts +1 -1
  377. package/dist/pager-dots.js +1 -1
  378. package/dist/paper-backdrop.d.ts +1 -1
  379. package/dist/paper-backdrop.js +1 -1
  380. package/dist/pointerFieldMappings-4VtmkOWv.js +65 -0
  381. package/dist/popover.d.ts +1 -1
  382. package/dist/popover.js +1 -1
  383. package/dist/presets-B07HzyKd.js +95 -0
  384. package/dist/prng-B0PLRmR6.js +15 -0
  385. package/dist/progress.d.ts +1 -1
  386. package/dist/progress.js +2 -2
  387. package/dist/pulse.d.ts +1 -1
  388. package/dist/pulse.js +4 -4
  389. package/dist/reactive.js +2 -2
  390. package/dist/resolveCanvasColor-B3L-akX0.js +93 -0
  391. package/dist/scroll-progress-rim.d.ts +1 -0
  392. package/dist/scroll-progress-rim.js +61 -0
  393. package/dist/search.d.ts +1 -1
  394. package/dist/search.js +123 -123
  395. package/dist/select.d.ts +1 -1
  396. package/dist/select.js +3 -3
  397. package/dist/separator.d.ts +1 -1
  398. package/dist/separator.js +1 -1
  399. package/dist/sidebar.js +1 -1
  400. package/dist/slider-Cxuj_W_H.js +151 -0
  401. package/dist/slider.d.ts +1 -1
  402. package/dist/slider.js +1 -1
  403. package/dist/sortable-list.d.ts +1 -1
  404. package/dist/sortable-list.js +384 -59
  405. package/dist/spa-view.d.ts +1 -1
  406. package/dist/spa-view.js +1 -1
  407. package/dist/springPresets-h5VKJQqG.js +58 -0
  408. package/dist/stacked-icons.d.ts +1 -1
  409. package/dist/stacked-icons.js +6 -6
  410. package/dist/status-dot.d.ts +1 -1
  411. package/dist/status-dot.js +2 -2
  412. package/dist/styles/animations.css +1 -409
  413. package/dist/styles/card-scroll.css +1 -0
  414. package/dist/styles/cards.css +1 -448
  415. package/dist/styles/completion-seal.css +1 -131
  416. package/dist/styles/components.css +1 -45
  417. package/dist/styles/configurator.css +1 -297
  418. package/dist/styles/dialog-placement.css +1 -0
  419. package/dist/styles/dock/adaptive-legibility.css +1 -119
  420. package/dist/styles/dock/crossfade.css +1 -0
  421. package/dist/styles/dock/cta-seat.css +1 -87
  422. package/dist/styles/dock/density.css +1 -455
  423. package/dist/styles/dock/dock.css +1 -0
  424. package/dist/styles/dock/fisheye.css +1 -0
  425. package/dist/styles/dock/layer-group.css +1 -333
  426. package/dist/styles/dock/layers.css +1 -413
  427. package/dist/styles/dock/morph.css +1 -430
  428. package/dist/styles/dock/overflow.css +1 -292
  429. package/dist/styles/dock/popover.css +1 -0
  430. package/dist/styles/dock/search.css +1 -68
  431. package/dist/styles/dock/section.css +1 -59
  432. package/dist/styles/dock/shape.css +1 -250
  433. package/dist/styles/dock/shell-regions.css +1 -0
  434. package/dist/styles/dock/shell.css +1 -498
  435. package/dist/styles/dock-controls/dark-mode-toggle.css +1 -122
  436. package/dist/styles/dock-controls/icon-button.css +1 -189
  437. package/dist/styles/dock-controls/tab-button.css +1 -143
  438. package/dist/styles/dock-controls/touch-floor.css +1 -94
  439. package/dist/styles/dock-controls/triggers.css +1 -157
  440. package/dist/styles/dock-controls.css +1 -92
  441. package/dist/styles/dock.css +1 -173
  442. package/dist/styles/draw-in.css +1 -0
  443. package/dist/styles/drawer.css +1 -406
  444. package/dist/styles/feedback-tone.css +1 -104
  445. package/dist/styles/fonts.css +1 -143
  446. package/dist/styles/glass/a11y-fallback.css +1 -245
  447. package/dist/styles/glass/accent-tone.css +1 -66
  448. package/dist/styles/glass/control-surfaces.css +1 -167
  449. package/dist/styles/glass/deep.css +1 -44
  450. package/dist/styles/glass/defined.css +1 -0
  451. package/dist/styles/glass/glass-atom.css +1 -244
  452. package/dist/styles/glass/glass-capsule.css +1 -143
  453. package/dist/styles/glass/glass-chip.css +1 -215
  454. package/dist/styles/glass/grain-overlay.css +1 -0
  455. package/dist/styles/glass/ladder-undershadow.css +1 -0
  456. package/dist/styles/glass/ladder.css +1 -489
  457. package/dist/styles/glass/liquid-enter.css +1 -252
  458. package/dist/styles/glass/liquid-fill.css +1 -0
  459. package/dist/styles/glass/material.css +1 -370
  460. package/dist/styles/glass/progress-rail.css +1 -78
  461. package/dist/styles/glass/reveal.css +1 -156
  462. package/dist/styles/glass/rim.css +1 -122
  463. package/dist/styles/glass/squircle.css +1 -66
  464. package/dist/styles/glass/surface-axis.css +1 -113
  465. package/dist/styles/glass/surfaces-pager.css +1 -0
  466. package/dist/styles/glass/surfaces.css +1 -411
  467. package/dist/styles/glass-refract.css +1 -114
  468. package/dist/styles/glass-specular-track.css +1 -74
  469. package/dist/styles/glass.css +1 -77
  470. package/dist/styles/icon-chip.css +1 -256
  471. package/dist/styles/index.css +1 -260
  472. package/dist/styles/instrument-chassis.css +1 -453
  473. package/dist/styles/menu.css +1 -127
  474. package/dist/styles/paper.css +1 -284
  475. package/dist/styles/scroll-choreography.css +1 -357
  476. package/dist/styles/scroll-chrome.css +1 -123
  477. package/dist/styles/scroll-driven.css +1 -110
  478. package/dist/styles/scroll-progress-rim.css +1 -0
  479. package/dist/styles/segmented-tabs.css +1 -447
  480. package/dist/styles/select.css +1 -201
  481. package/dist/styles/tabs/segmented-tabs-drag.css +1 -0
  482. package/dist/styles/theme/bridges.css +1 -380
  483. package/dist/styles/theme/dark.css +1 -7
  484. package/dist/styles/theme/literals.css +1 -103
  485. package/dist/styles/theme/radius.css +1 -117
  486. package/dist/styles/theme.css +1 -33
  487. package/dist/styles/tokens/color-radius.css +1 -297
  488. package/dist/styles/tokens/dark-arm-glass.css +1 -0
  489. package/dist/styles/tokens/dark-arm.css +1 -462
  490. package/dist/styles/tokens/glass-deep.css +1 -104
  491. package/dist/styles/tokens/glass-fx.css +1 -454
  492. package/dist/styles/tokens/glass.css +1 -412
  493. package/dist/styles/tokens/light-dark.css +1 -200
  494. package/dist/styles/tokens/motion-registers.css +1 -0
  495. package/dist/styles/tokens/offsets.css +1 -143
  496. package/dist/styles/tokens/on-glass-fg.css +1 -39
  497. package/dist/styles/tokens/property-regs-specular.css +1 -0
  498. package/dist/styles/tokens/property-regs.css +1 -566
  499. package/dist/styles/tokens/scale-paper.css +1 -493
  500. package/dist/styles/tokens/scheme-motion.css +1 -363
  501. package/dist/styles/tokens/scheme-spring.css +1 -239
  502. package/dist/styles/tokens/scroll-tokens.css +1 -123
  503. package/dist/styles/tokens/shadow.css +1 -226
  504. package/dist/styles/tokens/sizing-config.css +1 -110
  505. package/dist/styles/tokens/sizing.css +1 -450
  506. package/dist/styles/tokens.css +1 -52
  507. package/dist/styles/transitions.css +1 -263
  508. package/dist/styles/typography/scale.css +1 -153
  509. package/dist/styles/typography/semantic.css +1 -233
  510. package/dist/styles/typography/utilities.css +1 -174
  511. package/dist/styles/typography.css +1 -46
  512. package/dist/styles/utilities/a11y-overrides.css +1 -184
  513. package/dist/styles/utilities/animate.css +0 -29
  514. package/dist/styles/utilities/base-misc.css +1 -307
  515. package/dist/styles/utilities/base.css +1 -327
  516. package/dist/styles/utilities/btn.css +1 -301
  517. package/dist/styles/utilities/components.css +1 -342
  518. package/dist/styles/utilities/metal.css +1 -215
  519. package/dist/styles/utilities.css +1 -26
  520. package/dist/styles/view-transition.css +1 -67
  521. package/dist/styles/viz-reveal.css +1 -0
  522. package/dist/surface.d.ts +1 -0
  523. package/dist/surface.js +3 -0
  524. package/dist/switch.d.ts +1 -1
  525. package/dist/switch.js +1 -1
  526. package/dist/tabs.d.ts +1 -1
  527. package/dist/tabs.js +189 -249
  528. package/dist/timeline.d.ts +1 -1
  529. package/dist/timeline.js +199 -183
  530. package/dist/toast.d.ts +1 -1
  531. package/dist/toast.js +1 -1
  532. package/dist/toggle-group.d.ts +1 -1
  533. package/dist/toggle-group.js +1 -1
  534. package/dist/tooltip.d.ts +1 -1
  535. package/dist/tooltip.js +1 -1
  536. package/dist/typewriter.d.ts +1 -1
  537. package/dist/typewriter.js +8 -8
  538. package/dist/useAccentTone-D25DxviG.js +23 -0
  539. package/dist/useAnimatedNumber-2XC4aRB6.js +40 -0
  540. package/dist/useConfiguratorState-Dq35N_7t.js +167 -0
  541. package/dist/useControlSize-DJwe-7ZQ.js +9 -0
  542. package/dist/useDockCtaReceive-BgMmeINo.js +161 -0
  543. package/dist/useDocumentVisibility-CpJGUgcJ.js +17 -0
  544. package/dist/useDragMorph-65ihHePq.js +93 -0
  545. package/dist/useFuzzySearch-KslRxiJY.js +177 -0
  546. package/dist/useGooMorph-CU1pwuC6.js +268 -0
  547. package/dist/useGpuSubstrate-DcY584kE.js +347 -0
  548. package/dist/useIntersectionPause-Cmt5Tnv9.js +39 -0
  549. package/dist/useKeyboardShortcuts-ynVmNFo3.js +104 -0
  550. package/dist/useLeadTrail-DOH4XkL1.js +74 -0
  551. package/dist/useLiquidPress-BXNHydZh.js +40 -0
  552. package/dist/useMotionAxis-DCCXMC-i.js +20 -0
  553. package/dist/usePointerVelocityField-CwXyeW0Z.js +122 -0
  554. package/dist/useRAFLoop-CvOo_kgb.js +109 -0
  555. package/dist/useRoutePointer-DL7I0gY4.js +52 -0
  556. package/dist/useScrollProgress-C-yImzhU.js +35 -0
  557. package/dist/useSelectionGroup-Btpf24aY.js +215 -0
  558. package/dist/useSpring-BBSKFx_0.js +41 -0
  559. package/dist/useSpringMount-CNvvgGiC.js +71 -0
  560. package/dist/useSpringPress-BypV_KO-.js +36 -0
  561. package/dist/useSurfaceAxis-DudiZVOR.js +10 -0
  562. package/dist/useTabRovingFocus-CG1H1k1J.js +143 -0
  563. package/dist/useTouchGate-BlegwvwL.js +84 -0
  564. package/dist/useUserInvalidAria-Bkruei7M.js +25 -0
  565. package/dist/watercolor-dot.d.ts +1 -1
  566. package/dist/watercolor-dot.js +52 -50
  567. package/package.json +386 -827
  568. package/src/styles/animations.css +82 -23
  569. package/src/styles/card-scroll.css +189 -0
  570. package/src/styles/cards.css +45 -6
  571. package/src/styles/completion-seal.css +75 -1
  572. package/src/styles/configurator.css +63 -1
  573. package/src/styles/dialog-placement.css +68 -0
  574. package/src/styles/dock/adaptive-legibility.css +1 -1
  575. package/src/styles/dock/crossfade.css +139 -0
  576. package/src/styles/dock/density.css +16 -13
  577. package/src/styles/dock/dock.css +199 -0
  578. package/src/styles/dock/fisheye.css +81 -0
  579. package/src/styles/dock/layer-group.css +37 -41
  580. package/src/styles/dock/layers.css +46 -21
  581. package/src/styles/dock/morph.css +41 -16
  582. package/src/styles/dock/overflow.css +107 -67
  583. package/src/styles/dock/popover.css +249 -0
  584. package/src/styles/dock/shape.css +77 -139
  585. package/src/styles/dock/shell-regions.css +73 -0
  586. package/src/styles/dock/shell.css +159 -157
  587. package/src/styles/dock-controls/dark-mode-toggle.css +3 -2
  588. package/src/styles/dock-controls/icon-button.css +43 -11
  589. package/src/styles/dock-controls/tab-button.css +2 -2
  590. package/src/styles/dock-controls/touch-floor.css +25 -0
  591. package/src/styles/dock.css +60 -14
  592. package/src/styles/draw-in.css +89 -0
  593. package/src/styles/drawer.css +77 -41
  594. package/src/styles/glass/a11y-fallback.css +19 -76
  595. package/src/styles/glass/control-surfaces.css +20 -16
  596. package/src/styles/glass/deep.css +74 -4
  597. package/src/styles/glass/defined.css +88 -0
  598. package/src/styles/glass/glass-atom.css +23 -20
  599. package/src/styles/glass/glass-capsule.css +32 -0
  600. package/src/styles/glass/glass-chip.css +13 -17
  601. package/src/styles/glass/grain-overlay.css +79 -0
  602. package/src/styles/glass/ladder-undershadow.css +61 -0
  603. package/src/styles/glass/ladder.css +96 -133
  604. package/src/styles/glass/liquid-enter.css +12 -24
  605. package/src/styles/glass/liquid-fill.css +65 -0
  606. package/src/styles/glass/material.css +134 -10
  607. package/src/styles/glass/reveal.css +197 -20
  608. package/src/styles/glass/squircle.css +18 -26
  609. package/src/styles/glass/surface-axis.css +24 -1
  610. package/src/styles/glass/surfaces-pager.css +79 -0
  611. package/src/styles/glass/surfaces.css +121 -98
  612. package/src/styles/glass.css +34 -1
  613. package/src/styles/index.css +54 -26
  614. package/src/styles/menu.css +66 -6
  615. package/src/styles/paper.css +105 -202
  616. package/src/styles/scroll-choreography.css +29 -92
  617. package/src/styles/scroll-driven.css +18 -5
  618. package/src/styles/scroll-progress-rim.css +87 -0
  619. package/src/styles/segmented-tabs.css +67 -88
  620. package/src/styles/tabs/segmented-tabs-drag.css +200 -0
  621. package/src/styles/theme/bridges.css +8 -2
  622. package/src/styles/theme/literals.css +2 -1
  623. package/src/styles/theme/radius.css +43 -12
  624. package/src/styles/tokens/color-radius.css +15 -4
  625. package/src/styles/tokens/dark-arm-glass.css +55 -0
  626. package/src/styles/tokens/dark-arm.css +62 -69
  627. package/src/styles/tokens/glass-deep.css +102 -80
  628. package/src/styles/tokens/glass-fx.css +35 -5
  629. package/src/styles/tokens/glass.css +144 -78
  630. package/src/styles/tokens/light-dark.css +20 -4
  631. package/src/styles/tokens/motion-registers.css +93 -0
  632. package/src/styles/tokens/property-regs-specular.css +160 -0
  633. package/src/styles/tokens/property-regs.css +67 -186
  634. package/src/styles/tokens/scale-paper.css +6 -3
  635. package/src/styles/tokens/scheme-motion.css +59 -0
  636. package/src/styles/tokens/scheme-spring.css +146 -93
  637. package/src/styles/tokens/scroll-tokens.css +25 -11
  638. package/src/styles/tokens/shadow.css +28 -22
  639. package/src/styles/tokens/sizing.css +62 -7
  640. package/src/styles/tokens.css +16 -0
  641. package/src/styles/transitions.css +108 -143
  642. package/src/styles/typography/scale.css +10 -0
  643. package/src/styles/typography/semantic.css +5 -5
  644. package/src/styles/typography/utilities.css +25 -2
  645. package/src/styles/utilities/a11y-overrides.css +2 -2
  646. package/src/styles/utilities/base.css +13 -3
  647. package/src/styles/utilities/btn.css +29 -3
  648. package/src/styles/utilities/components.css +16 -21
  649. package/src/styles/utilities/metal.css +86 -29
  650. package/src/styles/viz-reveal.css +63 -0
  651. package/dist/CardAction-DlVP2evz.js +0 -272
  652. package/dist/CollapsibleContent-D7UNsXQr.js +0 -63
  653. package/dist/CommandShortcut-By-VQcLO.js +0 -302
  654. package/dist/ConfiguratorRow-YMXdINHx.js +0 -143
  655. package/dist/ContextMenuContent-CMWn6huB.js +0 -90
  656. package/dist/ContextMenuSubContent-DvwWCUc0.js +0 -245
  657. package/dist/DataTable-C4tG3eIJ.js +0 -512
  658. package/dist/DialogContent-D8U9ZfWS.js +0 -121
  659. package/dist/DialogFooter-DoLy0ewI.js +0 -80
  660. package/dist/DialogScrollContent-BMekN7gq.js +0 -93
  661. package/dist/FadingScroll-P8B30rAD.js +0 -76
  662. package/dist/HoverCardContent-DAmGYglo.js +0 -88
  663. package/dist/HoverPopover-DYpBOzzF.js +0 -96
  664. package/dist/IconChip-CQa7XZYc.js +0 -57
  665. package/dist/IconTooltip-_df8M3xm.js +0 -25
  666. package/dist/Input-CyU4_hIC.js +0 -57
  667. package/dist/InstrumentChassis-UUJX0-mW.js +0 -65
  668. package/dist/Label-B_HPqi_q.js +0 -36
  669. package/dist/MetricBadge-DQt_dGah.js +0 -79
  670. package/dist/ModalOverlay-DfAf7o15.js +0 -53
  671. package/dist/Notification-BlSPJhtZ.js +0 -43
  672. package/dist/NumberFieldContent-Z3VxGu_6.js +0 -140
  673. package/dist/PagerDots-CYlqVFd4.js +0 -196
  674. package/dist/PaperBackdrop-DYWgrnh8.js +0 -42
  675. package/dist/PopoverContent-BuKyHZSz.js +0 -127
  676. package/dist/Progress-C9SsdwIZ.js +0 -274
  677. package/dist/ScrollingText-DY3W1Jfh.js +0 -40
  678. package/dist/SelectGroup-Dcczq44n.js +0 -31
  679. package/dist/SelectScrollDownButton-3mFHX_R-.js +0 -260
  680. package/dist/SelectSeparator-CNRGG7Ew.js +0 -49
  681. package/dist/Separator-Cf9-JFgi.js +0 -44
  682. package/dist/Switch-uf-UKPA2.js +0 -49
  683. package/dist/Toaster-ozrsR4mP.js +0 -274
  684. package/dist/ToggleGroupItem-BpzaVzNm.js +0 -170
  685. package/dist/TooltipProvider-QQVM_80r.js +0 -109
  686. package/dist/api/index.d.ts +0 -34
  687. package/dist/api/types-extra.d.ts +0 -39
  688. package/dist/api.js +0 -2
  689. package/dist/badge-Bt14yURi.js +0 -72
  690. package/dist/border-progress.d.ts +0 -1
  691. package/dist/border-progress.js +0 -98
  692. package/dist/button-D1W9PrzI.js +0 -130
  693. package/dist/chipVariants-BJQ0I2kB.js +0 -18
  694. package/dist/cn-DJXf4yaB.js +0 -97
  695. package/dist/coalesceMetric-5qIeZnTx.js +0 -13
  696. package/dist/color-B9jZdhJX.js +0 -116
  697. package/dist/components/custom/aurora/Aurora.vue.d.ts +0 -101
  698. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +0 -39
  699. package/dist/components/custom/aurora/composables/atoms.d.ts +0 -142
  700. package/dist/components/custom/aurora/composables/color.d.ts +0 -93
  701. package/dist/components/custom/aurora/composables/cursorModel.d.ts +0 -78
  702. package/dist/components/custom/aurora/composables/frameLoop.d.ts +0 -39
  703. package/dist/components/custom/aurora/composables/glSetup.d.ts +0 -29
  704. package/dist/components/custom/aurora/composables/runtime.d.ts +0 -127
  705. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -100
  706. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +0 -60
  707. package/dist/components/custom/aurora/composables/useAurora.d.ts +0 -86
  708. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +0 -33
  709. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +0 -37
  710. package/dist/components/custom/aurora/constants/presets.d.ts +0 -258
  711. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +0 -1
  712. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -1
  713. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +0 -1
  714. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +0 -1
  715. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +0 -2
  716. package/dist/components/custom/aurora/index.d.ts +0 -13
  717. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +0 -46
  718. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +0 -25
  719. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +0 -18
  720. package/dist/components/custom/border-progress/constants.d.ts +0 -59
  721. package/dist/components/custom/border-progress/index.d.ts +0 -4
  722. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +0 -21
  723. package/dist/components/custom/completion-seal/constants.d.ts +0 -46
  724. package/dist/components/custom/concentric/Concentric.vue.d.ts +0 -42
  725. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +0 -23
  726. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +0 -26
  727. package/dist/components/custom/concentric/composables/levelField.d.ts +0 -50
  728. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +0 -17
  729. package/dist/components/custom/concentric/composables/useConcentric.d.ts +0 -35
  730. package/dist/components/custom/concentric/constants.d.ts +0 -88
  731. package/dist/components/custom/concentric/index.d.ts +0 -5
  732. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +0 -4
  733. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +0 -1
  734. package/dist/components/custom/configurator/Configurator.vue.d.ts +0 -160
  735. package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +0 -79
  736. package/dist/components/custom/configurator/density.d.ts +0 -25
  737. package/dist/components/custom/configurator/index.d.ts +0 -6
  738. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +0 -32
  739. package/dist/components/custom/confirm-dialog/index.d.ts +0 -1
  740. package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -33
  741. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +0 -10
  742. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +0 -19
  743. package/dist/components/custom/constellation/composables/useConstellation.d.ts +0 -19
  744. package/dist/components/custom/constellation/constants.d.ts +0 -94
  745. package/dist/components/custom/constellation/constellationTypes.d.ts +0 -407
  746. package/dist/components/custom/dock/DockBackgroundToggle.vue.d.ts +0 -46
  747. package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +0 -30
  748. package/dist/components/custom/dock/DockIconButton.vue.d.ts +0 -72
  749. package/dist/components/custom/dock/DockLayer.vue.d.ts +0 -34
  750. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +0 -51
  751. package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +0 -19
  752. package/dist/components/custom/dock/DockSelectTrigger.vue.d.ts +0 -29
  753. package/dist/components/custom/dock/DockStack.vue.d.ts +0 -78
  754. package/dist/components/custom/dock/DockTabButton.vue.d.ts +0 -39
  755. package/dist/components/custom/dock/GlassDock.vue.d.ts +0 -47
  756. package/dist/components/custom/dock/composables/dockContext.d.ts +0 -47
  757. package/dist/components/custom/dock/composables/dockLayerContext.d.ts +0 -36
  758. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -79
  759. package/dist/components/custom/dock/composables/index.d.ts +0 -14
  760. package/dist/components/custom/dock/composables/railProjection.d.ts +0 -45
  761. package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +0 -192
  762. package/dist/components/custom/dock/composables/useDockFission.d.ts +0 -158
  763. package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +0 -18
  764. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
  765. package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +0 -44
  766. package/dist/components/custom/dock/composables/useDockSearch.d.ts +0 -85
  767. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -214
  768. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -90
  769. package/dist/components/custom/dock/constants.d.ts +0 -98
  770. package/dist/components/custom/dock/index.d.ts +0 -24
  771. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +0 -42
  772. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +0 -104
  773. package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +0 -8
  774. package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +0 -9
  775. package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +0 -12
  776. package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +0 -7
  777. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +0 -65
  778. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +0 -35
  779. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +0 -32
  780. package/dist/components/custom/dot-flow-field/constants.d.ts +0 -120
  781. package/dist/components/custom/dot-flow-field/index.d.ts +0 -5
  782. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +0 -1
  783. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +0 -33
  784. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +0 -2
  785. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +0 -43
  786. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +0 -89
  787. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +0 -61
  788. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +0 -34
  789. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +0 -34
  790. package/dist/components/custom/dot-matrix/constants.d.ts +0 -72
  791. package/dist/components/custom/dot-matrix/index.d.ts +0 -5
  792. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +0 -4
  793. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +0 -1
  794. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +0 -71
  795. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +0 -58
  796. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +0 -24
  797. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +0 -31
  798. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +0 -56
  799. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +0 -63
  800. package/dist/components/custom/fourier-field/constants.d.ts +0 -117
  801. package/dist/components/custom/fourier-field/index.d.ts +0 -31
  802. package/dist/components/custom/fourier-field/math.d.ts +0 -86
  803. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +0 -4
  804. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +0 -1
  805. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -49
  806. package/dist/components/custom/glass-panel/index.d.ts +0 -2
  807. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +0 -71
  808. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
  809. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +0 -62
  810. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +0 -69
  811. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +0 -23
  812. package/dist/components/custom/goo-blob/constants.d.ts +0 -82
  813. package/dist/components/custom/goo-blob/index.d.ts +0 -7
  814. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
  815. package/dist/components/custom/goo-blob/types.d.ts +0 -244
  816. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +0 -49
  817. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +0 -24
  818. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +0 -79
  819. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +0 -45
  820. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +0 -31
  821. package/dist/components/custom/goo-dot-matrix/constants.d.ts +0 -115
  822. package/dist/components/custom/goo-dot-matrix/index.d.ts +0 -5
  823. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +0 -13
  824. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +0 -4
  825. package/dist/components/custom/handmark/composables/useHandMark.d.ts +0 -89
  826. package/dist/components/custom/handmark/constants.d.ts +0 -59
  827. package/dist/components/custom/handmark/geometry.d.ts +0 -85
  828. package/dist/components/custom/handmark/types.d.ts +0 -62
  829. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
  830. package/dist/components/custom/header-ribbon/index.d.ts +0 -2
  831. package/dist/components/custom/header-ribbon/types.d.ts +0 -7
  832. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +0 -132
  833. package/dist/components/custom/hover-popover/index.d.ts +0 -1
  834. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +0 -40
  835. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +0 -108
  836. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +0 -120
  837. package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +0 -39
  838. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +0 -42
  839. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +0 -105
  840. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +0 -18
  841. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +0 -21
  842. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +0 -16
  843. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +0 -31
  844. package/dist/components/custom/paper-grid/constants.d.ts +0 -95
  845. package/dist/components/custom/paper-grid/index.d.ts +0 -5
  846. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +0 -4
  847. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +0 -1
  848. package/dist/components/custom/scrolling-text/ScrollingText.vue.d.ts +0 -20
  849. package/dist/components/custom/scrolling-text/index.d.ts +0 -1
  850. package/dist/components/custom/search/FuzzySearch.vue.d.ts +0 -22
  851. package/dist/components/custom/search/SearchBar.vue.d.ts +0 -38
  852. package/dist/components/custom/search/searchVariants.d.ts +0 -19
  853. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +0 -50
  854. package/dist/components/custom/selectable-chip/chipVariants.d.ts +0 -39
  855. package/dist/components/custom/selectable-chip/index.d.ts +0 -2
  856. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +0 -15
  857. package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +0 -38
  858. package/dist/components/custom/sortable-list/SortableItem.vue.d.ts +0 -38
  859. package/dist/components/custom/sortable-list/SortableList.vue.d.ts +0 -76
  860. package/dist/components/custom/sortable-list/context.d.ts +0 -25
  861. package/dist/components/custom/sortable-list/index.d.ts +0 -4
  862. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +0 -39
  863. package/dist/components/custom/stacked-icons/types.d.ts +0 -18
  864. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +0 -99
  865. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +0 -42
  866. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +0 -58
  867. package/dist/components/custom/tabs/constants.d.ts +0 -44
  868. package/dist/components/custom/timeline/ContinuousMarkers.vue.d.ts +0 -49
  869. package/dist/components/custom/timeline/GlassTimeline.vue.d.ts +0 -114
  870. package/dist/components/custom/toggle-chip/ToggleChip.vue.d.ts +0 -41
  871. package/dist/components/custom/toggle-chip/index.d.ts +0 -28
  872. package/dist/components/custom/watercolor-dot/prng.d.ts +0 -5
  873. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +0 -29
  874. package/dist/components/ui/_shared/index.d.ts +0 -6
  875. package/dist/components/ui/_shared/menuItemVariants.d.ts +0 -51
  876. package/dist/components/ui/_shared/useControlSize.d.ts +0 -46
  877. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +0 -55
  878. package/dist/components/ui/alert/Alert.vue.d.ts +0 -19
  879. package/dist/components/ui/alert/index.d.ts +0 -8
  880. package/dist/components/ui/avatar/Avatar.vue.d.ts +0 -23
  881. package/dist/components/ui/avatar/index.d.ts +0 -9
  882. package/dist/components/ui/badge/Badge.vue.d.ts +0 -34
  883. package/dist/components/ui/badge/index.d.ts +0 -8
  884. package/dist/components/ui/button/Button.vue.d.ts +0 -29
  885. package/dist/components/ui/button/index.d.ts +0 -7
  886. package/dist/components/ui/card/Card.vue.d.ts +0 -168
  887. package/dist/components/ui/card/CardHeader.vue.d.ts +0 -81
  888. package/dist/components/ui/card/ScrollCard.vue.d.ts +0 -33
  889. package/dist/components/ui/carousel/Carousel.vue.d.ts +0 -37
  890. package/dist/components/ui/carousel/CarouselContent.vue.d.ts +0 -14
  891. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +0 -22
  892. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +0 -22
  893. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +0 -50
  894. package/dist/components/ui/carousel/useCarousel.d.ts +0 -20
  895. package/dist/components/ui/combobox/Combobox.vue.d.ts +0 -29
  896. package/dist/components/ui/combobox/ComboboxList.vue.d.ts +0 -32
  897. package/dist/components/ui/command/index.d.ts +0 -9
  898. package/dist/components/ui/context-menu/ContextMenu.vue.d.ts +0 -18
  899. package/dist/components/ui/context-menu/ContextMenuCheckboxItem.vue.d.ts +0 -24
  900. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +0 -34
  901. package/dist/components/ui/context-menu/ContextMenuItem.vue.d.ts +0 -23
  902. package/dist/components/ui/context-menu/ContextMenuLabel.vue.d.ts +0 -19
  903. package/dist/components/ui/context-menu/ContextMenuRadioGroup.vue.d.ts +0 -18
  904. package/dist/components/ui/context-menu/ContextMenuRadioItem.vue.d.ts +0 -22
  905. package/dist/components/ui/context-menu/ContextMenuSeparator.vue.d.ts +0 -8
  906. package/dist/components/ui/context-menu/ContextMenuShortcut.vue.d.ts +0 -17
  907. package/dist/components/ui/context-menu/ContextMenuSubContent.vue.d.ts +0 -34
  908. package/dist/components/ui/context-menu/ContextMenuSubTrigger.vue.d.ts +0 -19
  909. package/dist/components/ui/context-menu/ContextMenuTrigger.vue.d.ts +0 -14
  910. package/dist/components/ui/context-menu/index.d.ts +0 -12
  911. package/dist/components/ui/dialog/DialogContent.vue.d.ts +0 -93
  912. package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -86
  913. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +0 -47
  914. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +0 -17
  915. package/dist/components/ui/drawer/constants.d.ts +0 -47
  916. package/dist/components/ui/drawer/index.d.ts +0 -35
  917. package/dist/components/ui/dropdown-menu/DropdownMenu.vue.d.ts +0 -18
  918. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +0 -36
  919. package/dist/components/ui/dropdown-menu/index.d.ts +0 -15
  920. package/dist/components/ui/hover-card/HoverCard.vue.d.ts +0 -18
  921. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +0 -23
  922. package/dist/components/ui/hover-card/HoverCardTrigger.vue.d.ts +0 -14
  923. package/dist/components/ui/hover-card/index.d.ts +0 -3
  924. package/dist/components/ui/index.d.ts +0 -41
  925. package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +0 -46
  926. package/dist/components/ui/metric-pill/index.d.ts +0 -1
  927. package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +0 -28
  928. package/dist/components/ui/multi-select/index.d.ts +0 -7
  929. package/dist/components/ui/notification/Notification.vue.d.ts +0 -16
  930. package/dist/components/ui/popover/Popover.vue.d.ts +0 -18
  931. package/dist/components/ui/popover/PopoverContent.vue.d.ts +0 -42
  932. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts +0 -14
  933. package/dist/components/ui/progress/Progress.vue.d.ts +0 -49
  934. package/dist/components/ui/progress/index.d.ts +0 -5
  935. package/dist/components/ui/select/SelectContent.vue.d.ts +0 -42
  936. package/dist/components/ui/sheet/Sheet.vue.d.ts +0 -18
  937. package/dist/components/ui/sheet/SheetClose.vue.d.ts +0 -14
  938. package/dist/components/ui/sheet/SheetContent.vue.d.ts +0 -59
  939. package/dist/components/ui/sheet/SheetDescription.vue.d.ts +0 -18
  940. package/dist/components/ui/sheet/SheetFooter.vue.d.ts +0 -17
  941. package/dist/components/ui/sheet/SheetHeader.vue.d.ts +0 -17
  942. package/dist/components/ui/sheet/SheetTitle.vue.d.ts +0 -18
  943. package/dist/components/ui/sheet/SheetTrigger.vue.d.ts +0 -14
  944. package/dist/components/ui/sheet/index.d.ts +0 -13
  945. package/dist/components/ui/slider/Slider.vue.d.ts +0 -37
  946. package/dist/components/ui/slider/index.d.ts +0 -46
  947. package/dist/components/ui/tabs/Tabs.vue.d.ts +0 -19
  948. package/dist/components/ui/tabs/TabsContent.vue.d.ts +0 -18
  949. package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +0 -11
  950. package/dist/components/ui/tabs/TabsList.vue.d.ts +0 -28
  951. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts +0 -18
  952. package/dist/components/ui/tabs/index.d.ts +0 -5
  953. package/dist/components/ui/toast/Toast.vue.d.ts +0 -107
  954. package/dist/components/ui/toast/index.d.ts +0 -9
  955. package/dist/components/ui/toast/use-toast.d.ts +0 -182
  956. package/dist/components/ui/toggle/Toggle.vue.d.ts +0 -29
  957. package/dist/components/ui/toggle/index.d.ts +0 -26
  958. package/dist/composables/glass/useGlassRenderer.d.ts +0 -44
  959. package/dist/composables/glass/useVizChoreography.d.ts +0 -123
  960. package/dist/composables/motion/core/useHaptic.d.ts +0 -48
  961. package/dist/composables/motion/useCelebrationBurst.d.ts +0 -50
  962. package/dist/composables/motion/useLiquidMorph.d.ts +0 -108
  963. package/dist/composables/motion/useMorphField.d.ts +0 -157
  964. package/dist/composables/sortable/dragController.d.ts +0 -44
  965. package/dist/composables/sortable/types.d.ts +0 -133
  966. package/dist/composables/sortable/useSortable.d.ts +0 -34
  967. package/dist/concentric.d.ts +0 -1
  968. package/dist/concentric.js +0 -805
  969. package/dist/confirm-dialog.d.ts +0 -1
  970. package/dist/confirm-dialog.js +0 -82
  971. package/dist/context-menu.d.ts +0 -1
  972. package/dist/context-menu.js +0 -3
  973. package/dist/createCanvasLifecycle-CuCrGRfq.js +0 -173
  974. package/dist/dockContext-gFVS2gMg.js +0 -18
  975. package/dist/dot-flow-field.d.ts +0 -1
  976. package/dist/dot-flow-field.js +0 -1485
  977. package/dist/dot-matrix.d.ts +0 -1
  978. package/dist/dot-matrix.js +0 -774
  979. package/dist/dotMatrixField-CRO0ZFk4.js +0 -48
  980. package/dist/dropdown-menu-CCfcCQ68.js +0 -369
  981. package/dist/glass-panel.d.ts +0 -1
  982. package/dist/glass-panel.js +0 -113
  983. package/dist/goo-blob.d.ts +0 -1
  984. package/dist/goo-blob.js +0 -348
  985. package/dist/goo-dot-matrix.d.ts +0 -1
  986. package/dist/goo-dot-matrix.js +0 -811
  987. package/dist/hover-card.d.ts +0 -1
  988. package/dist/hover-card.js +0 -2
  989. package/dist/hover-popover.d.ts +0 -1
  990. package/dist/hover-popover.js +0 -2
  991. package/dist/math-5RcIgCB4.js +0 -51
  992. package/dist/menuItemVariants-DAXquKja.js +0 -36
  993. package/dist/paper-grid.d.ts +0 -1
  994. package/dist/paper-grid.js +0 -761
  995. package/dist/paperGrid-CXCSMbZ1.js +0 -191
  996. package/dist/presets-QvYgnFIZ.js +0 -85
  997. package/dist/prng-B5tIXTtj.js +0 -15
  998. package/dist/resolveCanvasColor-DsSJk06I.js +0 -93
  999. package/dist/scrolling-text.d.ts +0 -1
  1000. package/dist/scrolling-text.js +0 -2
  1001. package/dist/selectable-chip.d.ts +0 -1
  1002. package/dist/selectable-chip.js +0 -48
  1003. package/dist/sheet-DUCIoOe0.js +0 -218
  1004. package/dist/sheet.d.ts +0 -1
  1005. package/dist/sheet.js +0 -2
  1006. package/dist/slider-CcICPe3u.js +0 -149
  1007. package/dist/spectrum-walk-cBNSx_zm.js +0 -33
  1008. package/dist/springPresets-DfoQ6XRY.js +0 -64
  1009. package/dist/styles/border-progress.css +0 -109
  1010. package/dist/styles/critical-partition.mjs +0 -195
  1011. package/dist/styles/critical.css +0 -12
  1012. package/dist/styles/deferred.css +0 -35
  1013. package/dist/styles/dock/fission-bridge.css +0 -552
  1014. package/dist/styles/dock/morph-bridge.css +0 -172
  1015. package/dist/styles/dock/stack-rail.css +0 -352
  1016. package/dist/styles/floating-panel.css +0 -51
  1017. package/dist/styles/glass/liquid-morph.css +0 -850
  1018. package/dist/styles/hover-popover.css +0 -47
  1019. package/dist/styles/jubilance.css +0 -65
  1020. package/dist/styles/motion/morph-field.css +0 -229
  1021. package/dist/toggle-chip.d.ts +0 -1
  1022. package/dist/toggle-chip.js +0 -46
  1023. package/dist/uniformBridgeWGPU-BCse1SHU.js +0 -1268
  1024. package/dist/useAnimatedNumber-BntskVdQ.js +0 -40
  1025. package/dist/useConfiguratorState-22BcULzF.js +0 -164
  1026. package/dist/useControlSize-DAZ062x7.js +0 -9
  1027. package/dist/useDockCtaReceive-DX7RDb6_.js +0 -88
  1028. package/dist/useDragMorph-DGLSewwB.js +0 -102
  1029. package/dist/useFuzzySearch-0fTYOhS4.js +0 -177
  1030. package/dist/useGooMorph-Cs13NgYL.js +0 -104
  1031. package/dist/useGpuSubstrate-Ceet70xq.js +0 -347
  1032. package/dist/useHaptic-CPz5BT9I.js +0 -134
  1033. package/dist/useIntersectionPause-DO8Vl4gs.js +0 -53
  1034. package/dist/useKeyboardShortcuts-BEut54Tk.js +0 -99
  1035. package/dist/useLiquidPress-CtOQ8Z0_.js +0 -43
  1036. package/dist/useMorphField-ogBM7ubT.js +0 -141
  1037. package/dist/usePointerVelocityField-BrkqZFhj.js +0 -91
  1038. package/dist/useScrollChrome-JuImi1DM.js +0 -258
  1039. package/dist/useScrollProgress-A0M6qRl7.js +0 -35
  1040. package/dist/useSortable-DQV_UNDw.js +0 -246
  1041. package/dist/useSpring-C0jyvEJB.js +0 -40
  1042. package/dist/useSpringMount-DFxtzmkR.js +0 -71
  1043. package/dist/useSpringPress-VM9RgVq3.js +0 -36
  1044. package/dist/useSurfaceAxis-Ci7Dnaw2.js +0 -7
  1045. package/dist/useTouchGate-B1Lf9XqN.js +0 -84
  1046. package/dist/useUserInvalidAria-EmmwWPOl.js +0 -29
  1047. package/dist/utils/cn.d.ts +0 -27
  1048. package/dist/utils/index.d.ts +0 -4
  1049. package/dist/utils/moveBefore.d.ts +0 -15
  1050. package/dist/utils/platformSupport.d.ts +0 -8
  1051. package/dist/vendor-B2qOlYY3.js +0 -239
  1052. package/dist/virtual.d.ts +0 -1
  1053. package/dist/virtual.js +0 -225
  1054. package/src/styles/border-progress.css +0 -109
  1055. package/src/styles/critical-partition.mjs +0 -195
  1056. package/src/styles/dock/fission-bridge.css +0 -552
  1057. package/src/styles/dock/morph-bridge.css +0 -172
  1058. package/src/styles/dock/stack-rail.css +0 -352
  1059. package/src/styles/floating-panel.css +0 -49
  1060. package/src/styles/glass/liquid-morph.css +0 -850
  1061. package/src/styles/hover-popover.css +0 -45
  1062. package/src/styles/jubilance.css +0 -65
  1063. package/src/styles/motion/morph-field.css +0 -229
  1064. /package/dist/{_plugin-vue_export-helper-gLzyemvl.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  1065. /package/dist/{compile-INR_tPk_.js → compile-C55K3P9g.js} +0 -0
  1066. /package/dist/components/{ui/_shared → _shared}/ModalOverlay.vue.d.ts +0 -0
  1067. /package/dist/components/{ui/_shared → _shared}/useStalePropWarning.d.ts +0 -0
  1068. /package/dist/components/{ui/accordion → accordion}/Accordion.vue.d.ts +0 -0
  1069. /package/dist/components/{ui/accordion → accordion}/AccordionContent.vue.d.ts +0 -0
  1070. /package/dist/components/{ui/accordion → accordion}/AccordionItem.vue.d.ts +0 -0
  1071. /package/dist/components/{ui/accordion → accordion}/AccordionTrigger.vue.d.ts +0 -0
  1072. /package/dist/components/{ui/accordion → accordion}/index.d.ts +0 -0
  1073. /package/dist/components/{ui/alert → alert}/AlertDescription.vue.d.ts +0 -0
  1074. /package/dist/components/{ui/alert → alert}/AlertTitle.vue.d.ts +0 -0
  1075. /package/dist/components/{custom/animated-digit → animated-digit}/AnimatedDigit.vue.d.ts +0 -0
  1076. /package/dist/components/{custom/animated-digit → animated-digit}/index.d.ts +0 -0
  1077. /package/dist/components/{custom/aurora → aurora}/composables/auroraFallbackGround.d.ts +0 -0
  1078. /package/dist/components/{custom/aurora → aurora}/composables/configSource.d.ts +0 -0
  1079. /package/dist/components/{custom/aurora → aurora}/constants/budget.d.ts +0 -0
  1080. /package/dist/components/{custom/aurora → aurora}/constants/renderMode.d.ts +0 -0
  1081. /package/dist/components/{custom/aurora → aurora}/constants/shaders/aurora.frag.d.ts +0 -0
  1082. /package/dist/components/{custom/aurora → aurora}/constants/shaders/aurora.vert.d.ts +0 -0
  1083. /package/dist/components/{custom/aurora → aurora}/constants/shaders/composition.glsl.d.ts +0 -0
  1084. /package/dist/components/{custom/aurora → aurora}/constants/shaders/oil-modes.glsl.d.ts +0 -0
  1085. /package/dist/components/{custom/aurora → aurora}/constants/shaders/procedural-color.wgsl.d.ts +0 -0
  1086. /package/dist/components/{custom/aurora → aurora}/constants/shaders/tonemap.glsl.d.ts +0 -0
  1087. /package/dist/components/{custom/aurora → aurora}/constants/shaders/vangogh-medium.glsl.d.ts +0 -0
  1088. /package/dist/components/{ui/avatar → avatar}/AvatarFallback.vue.d.ts +0 -0
  1089. /package/dist/components/{ui/avatar → avatar}/AvatarImage.vue.d.ts +0 -0
  1090. /package/dist/components/{custom/goo-blob → blob}/composables/buildMetaballProgram.d.ts +0 -0
  1091. /package/dist/components/{custom/goo-blob → blob}/composables/easing.d.ts +0 -0
  1092. /package/dist/components/{custom/goo-blob → blob}/composables/uniformBridgeWGPU.d.ts +0 -0
  1093. /package/dist/components/{custom/goo-blob → blob}/composables/useBlobMood.d.ts +0 -0
  1094. /package/dist/components/{custom/goo-blob → blob}/composables/useBlobSatellites.d.ts +0 -0
  1095. /package/dist/components/{custom/goo-blob → blob}/shaders/metaball-noise.wgsl.d.ts +0 -0
  1096. /package/dist/components/{custom/goo-blob → blob}/shaders/metaball-palette.wgsl.d.ts +0 -0
  1097. /package/dist/components/{custom/goo-blob → blob}/shaders/metaball.frag.d.ts +0 -0
  1098. /package/dist/components/{custom/goo-blob → blob}/shaders/metaball.vert.d.ts +0 -0
  1099. /package/dist/components/{custom/goo-blob → blob}/shaders/metaball.wgsl.d.ts +0 -0
  1100. /package/dist/components/{custom/goo-blob → blob}/shaders/oklch-perturb.glsl.d.ts +0 -0
  1101. /package/dist/components/{custom/goo-blob → blob}/shaders/sdf-body.glsl.d.ts +0 -0
  1102. /package/dist/components/{custom/goo-blob → blob}/shaders/watercolor-edges.glsl.d.ts +0 -0
  1103. /package/dist/components/{ui/card → card}/CardAction.vue.d.ts +0 -0
  1104. /package/dist/components/{ui/card → card}/CardContent.vue.d.ts +0 -0
  1105. /package/dist/components/{ui/card → card}/CardDescription.vue.d.ts +0 -0
  1106. /package/dist/components/{ui/card → card}/CardFooter.vue.d.ts +0 -0
  1107. /package/dist/components/{ui/card → card}/CardTitle.vue.d.ts +0 -0
  1108. /package/dist/components/{ui/card → card}/ScrollCardHeader.vue.d.ts +0 -0
  1109. /package/dist/components/{ui/card → card}/index.d.ts +0 -0
  1110. /package/dist/components/{ui/carousel → carousel}/CarouselItem.vue.d.ts +0 -0
  1111. /package/dist/components/{ui/carousel → carousel}/CarouselPager.vue.d.ts +0 -0
  1112. /package/dist/components/{ui/carousel → carousel}/index.d.ts +0 -0
  1113. /package/dist/components/{ui/carousel → carousel}/interface.d.ts +0 -0
  1114. /package/dist/components/{ui/checkbox → checkbox}/Checkbox.vue.d.ts +0 -0
  1115. /package/dist/components/{ui/checkbox → checkbox}/index.d.ts +0 -0
  1116. /package/dist/components/{ui/collapsible → collapsible}/Collapsible.vue.d.ts +0 -0
  1117. /package/dist/components/{ui/collapsible → collapsible}/CollapsibleContent.vue.d.ts +0 -0
  1118. /package/dist/components/{ui/collapsible → collapsible}/CollapsibleTrigger.vue.d.ts +0 -0
  1119. /package/dist/components/{ui/collapsible → collapsible}/index.d.ts +0 -0
  1120. /package/dist/components/{custom/color-swatch → color-swatch}/ColorSwatch.vue.d.ts +0 -0
  1121. /package/dist/components/{custom/color-swatch → color-swatch}/index.d.ts +0 -0
  1122. /package/dist/components/{ui/combobox → combobox}/ComboboxAnchor.vue.d.ts +0 -0
  1123. /package/dist/components/{ui/combobox → combobox}/ComboboxEmpty.vue.d.ts +0 -0
  1124. /package/dist/components/{ui/combobox → combobox}/ComboboxGroup.vue.d.ts +0 -0
  1125. /package/dist/components/{ui/combobox → combobox}/ComboboxInput.vue.d.ts +0 -0
  1126. /package/dist/components/{ui/combobox → combobox}/ComboboxItem.vue.d.ts +0 -0
  1127. /package/dist/components/{ui/combobox → combobox}/ComboboxItemIndicator.vue.d.ts +0 -0
  1128. /package/dist/components/{ui/combobox → combobox}/ComboboxSeparator.vue.d.ts +0 -0
  1129. /package/dist/components/{ui/combobox → combobox}/ComboboxViewport.vue.d.ts +0 -0
  1130. /package/dist/components/{ui/combobox → combobox}/index.d.ts +0 -0
  1131. /package/dist/components/{ui/command → command}/Command.vue.d.ts +0 -0
  1132. /package/dist/components/{ui/command → command}/CommandDialog.vue.d.ts +0 -0
  1133. /package/dist/components/{ui/command → command}/CommandEmpty.vue.d.ts +0 -0
  1134. /package/dist/components/{ui/command → command}/CommandGroup.vue.d.ts +0 -0
  1135. /package/dist/components/{ui/command → command}/CommandInput.vue.d.ts +0 -0
  1136. /package/dist/components/{ui/command → command}/CommandItem.vue.d.ts +0 -0
  1137. /package/dist/components/{ui/command → command}/CommandList.vue.d.ts +0 -0
  1138. /package/dist/components/{ui/command → command}/CommandSeparator.vue.d.ts +0 -0
  1139. /package/dist/components/{ui/command → command}/CommandShortcut.vue.d.ts +0 -0
  1140. /package/dist/components/{custom/completion-seal → completion-seal}/composables/useCompletionSeal.d.ts +0 -0
  1141. /package/dist/components/{custom/completion-seal → completion-seal}/index.d.ts +0 -0
  1142. /package/dist/components/{custom/configurator → configurator}/ConfiguratorLayer.vue.d.ts +0 -0
  1143. /package/dist/components/{custom/configurator → configurator}/useConfiguratorState.d.ts +0 -0
  1144. /package/dist/components/{custom/constellation → constellation}/composables/createConstellationField.d.ts +0 -0
  1145. /package/dist/components/{custom/constellation → constellation}/composables/uniformBridgeWGPU.d.ts +0 -0
  1146. /package/dist/components/{custom/constellation → constellation}/constellationField.d.ts +0 -0
  1147. /package/dist/components/{custom/constellation → constellation}/constellationInteraction.d.ts +0 -0
  1148. /package/dist/components/{custom/constellation → constellation}/constellationRender.d.ts +0 -0
  1149. /package/dist/components/{custom/constellation → constellation}/constellationWell.d.ts +0 -0
  1150. /package/dist/components/{custom/constellation → constellation}/index.d.ts +0 -0
  1151. /package/dist/components/{custom/constellation → constellation}/shaders/constellation-lines.glsl.d.ts +0 -0
  1152. /package/dist/components/{custom/constellation → constellation}/shaders/constellation-lines.wgsl.d.ts +0 -0
  1153. /package/dist/components/{custom/constellation → constellation}/shaders/constellation-points.glsl.d.ts +0 -0
  1154. /package/dist/components/{custom/constellation → constellation}/shaders/constellation-points.wgsl.d.ts +0 -0
  1155. /package/dist/components/{custom/controls → controls}/DarkModeToggle.vue.d.ts +0 -0
  1156. /package/dist/components/{custom/controls → controls}/index.d.ts +0 -0
  1157. /package/dist/components/{ui/data-table → data-table}/DataTable.vue.d.ts +0 -0
  1158. /package/dist/components/{ui/data-table → data-table}/DataTablePagination.vue.d.ts +0 -0
  1159. /package/dist/components/{ui/data-table → data-table}/composables/useDataTableResponsive.d.ts +0 -0
  1160. /package/dist/components/{ui/data-table → data-table}/composables/useDataTableRowIdentity.d.ts +0 -0
  1161. /package/dist/components/{ui/data-table → data-table}/index.d.ts +0 -0
  1162. /package/dist/components/{ui/data-table → data-table}/types.d.ts +0 -0
  1163. /package/dist/components/{custom/deck → deck}/DeckPager.vue.d.ts +0 -0
  1164. /package/dist/components/{custom/deck → deck}/composables/useDeck.d.ts +0 -0
  1165. /package/dist/components/{custom/deck → deck}/composables/useDeckKeyboard.d.ts +0 -0
  1166. /package/dist/components/{custom/deck → deck}/composables/useDeckSpring.d.ts +0 -0
  1167. /package/dist/components/{custom/deck → deck}/constants.d.ts +0 -0
  1168. /package/dist/components/{custom/deck → deck}/index.d.ts +0 -0
  1169. /package/dist/components/{ui/dialog → dialog}/Dialog.vue.d.ts +0 -0
  1170. /package/dist/components/{ui/dialog → dialog}/DialogClose.vue.d.ts +0 -0
  1171. /package/dist/components/{ui/dialog → dialog}/DialogDescription.vue.d.ts +0 -0
  1172. /package/dist/components/{ui/dialog → dialog}/DialogFooter.vue.d.ts +0 -0
  1173. /package/dist/components/{ui/dialog → dialog}/DialogHeader.vue.d.ts +0 -0
  1174. /package/dist/components/{ui/dialog → dialog}/DialogScrollContent.vue.d.ts +0 -0
  1175. /package/dist/components/{ui/dialog → dialog}/DialogTitle.vue.d.ts +0 -0
  1176. /package/dist/components/{ui/dialog → dialog}/DialogTrigger.vue.d.ts +0 -0
  1177. /package/dist/components/{ui/dialog → dialog}/index.d.ts +0 -0
  1178. /package/dist/components/{custom/dock → dock}/DockSection.vue.d.ts +0 -0
  1179. /package/dist/components/{custom/dock → dock}/DockSeparator.vue.d.ts +0 -0
  1180. /package/dist/components/{custom/dock → dock}/composables/dockMorphMeasure.d.ts +0 -0
  1181. /package/dist/components/{custom/dock → dock}/composables/isTeleportedTarget.d.ts +0 -0
  1182. /package/dist/components/{custom/dock → dock}/composables/useDockClickIntegrity.d.ts +0 -0
  1183. /package/dist/components/{custom/dock → dock}/composables/useDockHold.d.ts +0 -0
  1184. /package/dist/components/{custom/dock → dock}/composables/useDockState.d.ts +0 -0
  1185. /package/dist/components/{ui/drawer → drawer}/DrawerDescription.vue.d.ts +0 -0
  1186. /package/dist/components/{ui/drawer → drawer}/DrawerFooter.vue.d.ts +0 -0
  1187. /package/dist/components/{ui/drawer → drawer}/DrawerHeader.vue.d.ts +0 -0
  1188. /package/dist/components/{ui/drawer → drawer}/DrawerOverlay.vue.d.ts +0 -0
  1189. /package/dist/components/{ui/drawer → drawer}/DrawerTitle.vue.d.ts +0 -0
  1190. /package/dist/components/{ui/drawer → drawer}/composables/drawerSnapContext.d.ts +0 -0
  1191. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuCheckboxItem.vue.d.ts +0 -0
  1192. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuGroup.vue.d.ts +0 -0
  1193. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuItem.vue.d.ts +0 -0
  1194. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuLabel.vue.d.ts +0 -0
  1195. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuRadioGroup.vue.d.ts +0 -0
  1196. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuRadioItem.vue.d.ts +0 -0
  1197. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuSeparator.vue.d.ts +0 -0
  1198. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuShortcut.vue.d.ts +0 -0
  1199. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuSub.vue.d.ts +0 -0
  1200. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuSubContent.vue.d.ts +0 -0
  1201. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuSubTrigger.vue.d.ts +0 -0
  1202. /package/dist/components/{ui/dropdown-menu → dropdown-menu}/DropdownMenuTrigger.vue.d.ts +0 -0
  1203. /package/dist/components/{custom/easing → easing}/EasingConfigurator.vue.d.ts +0 -0
  1204. /package/dist/components/{custom/easing → easing}/EasingPicker.vue.d.ts +0 -0
  1205. /package/dist/components/{custom/easing → easing}/composables/useEasingPicker.d.ts +0 -0
  1206. /package/dist/components/{custom/easing → easing}/constants.d.ts +0 -0
  1207. /package/dist/components/{custom/easing → easing}/index.d.ts +0 -0
  1208. /package/dist/components/{custom/expandable-container → expandable-container}/index.d.ts +0 -0
  1209. /package/dist/components/{custom/fading-scroll → fading-scroll}/FadingScroll.vue.d.ts +0 -0
  1210. /package/dist/components/{custom/fading-scroll → fading-scroll}/composables/useFadingScroll.d.ts +0 -0
  1211. /package/dist/components/{custom/fading-scroll → fading-scroll}/constants.d.ts +0 -0
  1212. /package/dist/components/{custom/fading-scroll → fading-scroll}/index.d.ts +0 -0
  1213. /package/dist/components/{ui/focus-scope → focus-scope}/FocusScope.vue.d.ts +0 -0
  1214. /package/dist/components/{ui/focus-scope → focus-scope}/index.d.ts +0 -0
  1215. /package/dist/components/{custom/fourier-field → fourier-field}/presets.d.ts +0 -0
  1216. /package/dist/components/{custom/fourier-field → fourier-field}/shaders/fourier-field.compute.wgsl.d.ts +0 -0
  1217. /package/dist/components/{custom/goo-filter → goo-filter}/GooFilter.vue.d.ts +0 -0
  1218. /package/dist/components/{custom/goo-filter → goo-filter}/index.d.ts +0 -0
  1219. /package/dist/components/{custom/handmark → handmark}/HandMark.vue.d.ts +0 -0
  1220. /package/dist/components/{custom/handmark → handmark}/brush.d.ts +0 -0
  1221. /package/dist/components/{custom/handmark → handmark}/freehand.d.ts +0 -0
  1222. /package/dist/components/{custom/handmark → handmark}/index.d.ts +0 -0
  1223. /package/dist/components/{custom/handmark → handmark}/ink.d.ts +0 -0
  1224. /package/dist/components/{custom/handmark → handmark}/texture.d.ts +0 -0
  1225. /package/dist/components/{custom/icon-chip → icon-chip}/IconChip.vue.d.ts +0 -0
  1226. /package/dist/components/{custom/icon-chip → icon-chip}/index.d.ts +0 -0
  1227. /package/dist/components/{custom/icon-chip → icon-chip}/types.d.ts +0 -0
  1228. /package/dist/components/{custom/icon-tooltip → icon-tooltip}/IconTooltip.vue.d.ts +0 -0
  1229. /package/dist/components/{custom/icon-tooltip → icon-tooltip}/index.d.ts +0 -0
  1230. /package/dist/components/{custom/infinite-scroll → infinite-scroll}/InfiniteScroll.vue.d.ts +0 -0
  1231. /package/dist/components/{custom/infinite-scroll → infinite-scroll}/composables/index.d.ts +0 -0
  1232. /package/dist/components/{custom/infinite-scroll → infinite-scroll}/composables/types.d.ts +0 -0
  1233. /package/dist/components/{custom/infinite-scroll → infinite-scroll}/composables/useInfiniteScroll.d.ts +0 -0
  1234. /package/dist/components/{custom/infinite-scroll → infinite-scroll}/index.d.ts +0 -0
  1235. /package/dist/components/{ui/input → input}/Input.vue.d.ts +0 -0
  1236. /package/dist/components/{ui/input → input}/index.d.ts +0 -0
  1237. /package/dist/components/{custom/instrument-chassis → instrument-chassis}/ChassisDivider.vue.d.ts +0 -0
  1238. /package/dist/components/{custom/instrument-chassis → instrument-chassis}/InstrumentChassis.vue.d.ts +0 -0
  1239. /package/dist/components/{custom/instrument-chassis → instrument-chassis}/index.d.ts +0 -0
  1240. /package/dist/components/{ui/label → label}/Label.vue.d.ts +0 -0
  1241. /package/dist/components/{ui/label → label}/index.d.ts +0 -0
  1242. /package/dist/components/{custom/labeled-field → labeled-field}/LabeledField.vue.d.ts +0 -0
  1243. /package/dist/components/{custom/labeled-field → labeled-field}/LabeledInput.vue.d.ts +0 -0
  1244. /package/dist/components/{custom/labeled-field → labeled-field}/LabeledSelect.vue.d.ts +0 -0
  1245. /package/dist/components/{custom/labeled-field → labeled-field}/LabeledSlider.vue.d.ts +0 -0
  1246. /package/dist/components/{custom/labeled-field → labeled-field}/LabeledSwitch.vue.d.ts +0 -0
  1247. /package/dist/components/{custom/labeled-field → labeled-field}/index.d.ts +0 -0
  1248. /package/dist/{utils/coalesceMetric.d.ts → components/metric/coalesce-metric.d.ts} +0 -0
  1249. /package/dist/components/{custom/metric-badge → metric-badge}/index.d.ts +0 -0
  1250. /package/dist/components/{custom/metric-cell → metric-cell}/index.d.ts +0 -0
  1251. /package/dist/components/{custom/metric-stack → metric-stack}/MetricStack.vue.d.ts +0 -0
  1252. /package/dist/components/{custom/metric-stack → metric-stack}/index.d.ts +0 -0
  1253. /package/dist/components/{ui/notification → notification}/index.d.ts +0 -0
  1254. /package/dist/components/{ui/number-field → number-field}/NumberField.vue.d.ts +0 -0
  1255. /package/dist/components/{ui/number-field → number-field}/NumberFieldContent.vue.d.ts +0 -0
  1256. /package/dist/components/{ui/number-field → number-field}/NumberFieldDecrement.vue.d.ts +0 -0
  1257. /package/dist/components/{ui/number-field → number-field}/NumberFieldIncrement.vue.d.ts +0 -0
  1258. /package/dist/components/{ui/number-field → number-field}/NumberFieldInput.vue.d.ts +0 -0
  1259. /package/dist/components/{ui/number-field → number-field}/index.d.ts +0 -0
  1260. /package/dist/components/{custom/pager-dots → pager-dots}/PagerDots.vue.d.ts +0 -0
  1261. /package/dist/components/{custom/pager-dots → pager-dots}/index.d.ts +0 -0
  1262. /package/dist/components/{custom/pager-dots → pager-dots}/pagerWindow.d.ts +0 -0
  1263. /package/dist/components/{custom/paper-backdrop → paper-backdrop}/index.d.ts +0 -0
  1264. /package/dist/components/{ui/popover → popover}/index.d.ts +0 -0
  1265. /package/dist/components/{ui/progress → progress}/ProgressDefault.vue.d.ts +0 -0
  1266. /package/dist/components/{ui/progress → progress}/ProgressGradient.vue.d.ts +0 -0
  1267. /package/dist/components/{ui/progress → progress}/ProgressSectioned.vue.d.ts +0 -0
  1268. /package/dist/components/{ui/progress → progress}/useProgressGeometry.d.ts +0 -0
  1269. /package/dist/components/{custom/pulse → pulse}/Pulse.vue.d.ts +0 -0
  1270. /package/dist/components/{custom/pulse → pulse}/index.d.ts +0 -0
  1271. /package/dist/components/{ui/radio-group → radio-group}/RadioGroup.vue.d.ts +0 -0
  1272. /package/dist/components/{ui/radio-group → radio-group}/RadioGroupItem.vue.d.ts +0 -0
  1273. /package/dist/components/{ui/radio-group → radio-group}/index.d.ts +0 -0
  1274. /package/dist/components/{custom/search → search}/composables/fuzzySearchIndex.d.ts +0 -0
  1275. /package/dist/components/{custom/search → search}/composables/index.d.ts +0 -0
  1276. /package/dist/components/{custom/search → search}/composables/types.d.ts +0 -0
  1277. /package/dist/components/{custom/search → search}/composables/useFuzzySearch.d.ts +0 -0
  1278. /package/dist/components/{custom/search → search}/index.d.ts +0 -0
  1279. /package/dist/components/{ui/section → section}/Section.vue.d.ts +0 -0
  1280. /package/dist/components/{ui/section → section}/index.d.ts +0 -0
  1281. /package/dist/components/{ui/select → select}/Select.vue.d.ts +0 -0
  1282. /package/dist/components/{ui/select → select}/SelectGroup.vue.d.ts +0 -0
  1283. /package/dist/components/{ui/select → select}/SelectItem.vue.d.ts +0 -0
  1284. /package/dist/components/{ui/select → select}/SelectLabel.vue.d.ts +0 -0
  1285. /package/dist/components/{ui/select → select}/SelectScrollDownButton.vue.d.ts +0 -0
  1286. /package/dist/components/{ui/select → select}/SelectScrollUpButton.vue.d.ts +0 -0
  1287. /package/dist/components/{ui/select → select}/SelectSeparator.vue.d.ts +0 -0
  1288. /package/dist/components/{ui/select → select}/SelectTrigger.vue.d.ts +0 -0
  1289. /package/dist/components/{ui/select → select}/SelectValue.vue.d.ts +0 -0
  1290. /package/dist/components/{ui/select → select}/index.d.ts +0 -0
  1291. /package/dist/components/{ui/separator → separator}/Separator.vue.d.ts +0 -0
  1292. /package/dist/components/{ui/separator → separator}/index.d.ts +0 -0
  1293. /package/dist/components/{ui/skeleton → skeleton}/Skeleton.vue.d.ts +0 -0
  1294. /package/dist/components/{ui/skeleton → skeleton}/index.d.ts +0 -0
  1295. /package/dist/{composables/sortable → components/sortable-list/composables}/dropResolver.d.ts +0 -0
  1296. /package/dist/{composables/sortable → components/sortable-list/composables}/ghostRenderer.d.ts +0 -0
  1297. /package/dist/{composables/sortable → components/sortable-list/composables}/index.d.ts +0 -0
  1298. /package/dist/{composables/sortable → components/sortable-list/composables}/touchGate.d.ts +0 -0
  1299. /package/dist/{composables/sortable → components/sortable-list/composables}/transitionTiming.d.ts +0 -0
  1300. /package/dist/components/{custom/spa-view → spa-view}/SpaView.vue.d.ts +0 -0
  1301. /package/dist/components/{custom/spa-view → spa-view}/index.d.ts +0 -0
  1302. /package/dist/components/{custom/split-chars → split-chars}/index.d.ts +0 -0
  1303. /package/dist/components/{custom/stacked-icons → stacked-icons}/StackedIconGroup.vue.d.ts +0 -0
  1304. /package/dist/components/{custom/stacked-icons → stacked-icons}/index.d.ts +0 -0
  1305. /package/dist/components/{custom/status-dot → status-dot}/StatusDot.vue.d.ts +0 -0
  1306. /package/dist/components/{custom/status-dot → status-dot}/index.d.ts +0 -0
  1307. /package/dist/components/{ui/switch → switch}/Switch.vue.d.ts +0 -0
  1308. /package/dist/components/{ui/switch → switch}/index.d.ts +0 -0
  1309. /package/dist/components/{ui/table → table}/Table.vue.d.ts +0 -0
  1310. /package/dist/components/{ui/table → table}/TableBody.vue.d.ts +0 -0
  1311. /package/dist/components/{ui/table → table}/TableCaption.vue.d.ts +0 -0
  1312. /package/dist/components/{ui/table → table}/TableCell.vue.d.ts +0 -0
  1313. /package/dist/components/{ui/table → table}/TableEmpty.vue.d.ts +0 -0
  1314. /package/dist/components/{ui/table → table}/TableHead.vue.d.ts +0 -0
  1315. /package/dist/components/{ui/table → table}/TableHeader.vue.d.ts +0 -0
  1316. /package/dist/components/{ui/table → table}/TableRow.vue.d.ts +0 -0
  1317. /package/dist/components/{ui/table → table}/index.d.ts +0 -0
  1318. /package/dist/components/{custom/tabs → tabs}/index.d.ts +0 -0
  1319. /package/dist/components/{ui/tags-input → tags-input}/TagsInput.vue.d.ts +0 -0
  1320. /package/dist/components/{ui/tags-input → tags-input}/TagsInputInput.vue.d.ts +0 -0
  1321. /package/dist/components/{ui/tags-input → tags-input}/TagsInputItem.vue.d.ts +0 -0
  1322. /package/dist/components/{ui/tags-input → tags-input}/TagsInputItemDelete.vue.d.ts +0 -0
  1323. /package/dist/components/{ui/tags-input → tags-input}/TagsInputItemText.vue.d.ts +0 -0
  1324. /package/dist/components/{ui/tags-input → tags-input}/index.d.ts +0 -0
  1325. /package/dist/components/{ui/textarea → textarea}/Textarea.vue.d.ts +0 -0
  1326. /package/dist/components/{ui/textarea → textarea}/index.d.ts +0 -0
  1327. /package/dist/components/{custom/timeline → timeline}/ContinuousRail.vue.d.ts +0 -0
  1328. /package/dist/components/{custom/timeline → timeline}/ContinuousTimeline.vue.d.ts +0 -0
  1329. /package/dist/components/{custom/timeline → timeline}/ScrubberTimeline.vue.d.ts +0 -0
  1330. /package/dist/components/{custom/timeline → timeline}/SegmentedTimeline.vue.d.ts +0 -0
  1331. /package/dist/components/{custom/timeline → timeline}/geometry.d.ts +0 -0
  1332. /package/dist/components/{custom/timeline → timeline}/index.d.ts +0 -0
  1333. /package/dist/components/{custom/timeline → timeline}/types.d.ts +0 -0
  1334. /package/dist/components/{ui/toast → toast}/ToastAction.vue.d.ts +0 -0
  1335. /package/dist/components/{ui/toast → toast}/ToastClose.vue.d.ts +0 -0
  1336. /package/dist/components/{ui/toast → toast}/ToastDescription.vue.d.ts +0 -0
  1337. /package/dist/components/{ui/toast → toast}/ToastTitle.vue.d.ts +0 -0
  1338. /package/dist/components/{ui/toast → toast}/Toaster.vue.d.ts +0 -0
  1339. /package/dist/components/{ui/toggle-group → toggle-group}/ToggleGroup.vue.d.ts +0 -0
  1340. /package/dist/components/{ui/toggle-group → toggle-group}/ToggleGroupItem.vue.d.ts +0 -0
  1341. /package/dist/components/{ui/toggle-group → toggle-group}/index.d.ts +0 -0
  1342. /package/dist/components/{ui/toggle-group → toggle-group}/toggleGroupContext.d.ts +0 -0
  1343. /package/dist/components/{ui/tooltip → tooltip}/Tooltip.vue.d.ts +0 -0
  1344. /package/dist/components/{ui/tooltip → tooltip}/TooltipContent.vue.d.ts +0 -0
  1345. /package/dist/components/{ui/tooltip → tooltip}/TooltipProvider.vue.d.ts +0 -0
  1346. /package/dist/components/{ui/tooltip → tooltip}/TooltipTrigger.vue.d.ts +0 -0
  1347. /package/dist/components/{ui/tooltip → tooltip}/index.d.ts +0 -0
  1348. /package/dist/components/{custom/typewriter → typewriter}/TypewriterText.vue.d.ts +0 -0
  1349. /package/dist/components/{custom/typewriter → typewriter}/composables/index.d.ts +0 -0
  1350. /package/dist/components/{custom/typewriter → typewriter}/composables/useTypewriter.d.ts +0 -0
  1351. /package/dist/components/{custom/typewriter → typewriter}/index.d.ts +0 -0
  1352. /package/dist/components/{custom/typewriter → typewriter}/types.d.ts +0 -0
  1353. /package/dist/components/{custom/typewriter → typewriter}/utils/keyboard.d.ts +0 -0
  1354. /package/dist/components/{custom/typewriter → typewriter}/utils/pausePatterns.d.ts +0 -0
  1355. /package/dist/components/{custom/typewriter → typewriter}/utils/timing.d.ts +0 -0
  1356. /package/dist/components/{custom/typewriter → typewriter}/utils/typoStateMachine.d.ts +0 -0
  1357. /package/dist/components/{custom/watercolor-dot → watercolor-dot}/WatercolorDot.vue.d.ts +0 -0
  1358. /package/dist/components/{custom/watercolor-dot → watercolor-dot}/index.d.ts +0 -0
  1359. /package/dist/{utils → composables/glass/procedural}/prng.d.ts +0 -0
  1360. /package/dist/{constants-BWj7DkMn.js → constants-D8lSMkOz.js} +0 -0
  1361. /package/dist/{createContext-Cd23P9j0.js → createContext-BQ1Gy_LB.js} +0 -0
  1362. /package/dist/{flow.glsl-DqEGRpl4.js → flow.glsl-CVqPSj8_.js} +0 -0
  1363. /package/dist/{procedural-color.wgsl-C1Y5PkM6.js → procedural-color.wgsl-ByduxnzV.js} +0 -0
  1364. /package/dist/{scrollReader-rc3Ns_NM.js → scrollReader-DzYqPQ6V.js} +0 -0
  1365. /package/dist/{supportsCssTimeline-BWenxvHU.js → supportsCssTimeline-Ie4xJFbD.js} +0 -0
  1366. /package/dist/{useDragVelocity-CjcfX3dA.js → useDragVelocity-BWcNMCux.js} +0 -0
  1367. /package/dist/{useGlobalDark-B4HO9LXG.js → useGlobalDark-DjKMEQE2.js} +0 -0
  1368. /package/dist/{useInterval-BVUI-sez.js → useInterval-ZATRi-1T.js} +0 -0
  1369. /package/dist/{useLiquidFlex-Cc6PjVJD.js → useLiquidFlex-Ch4exNvN.js} +0 -0
  1370. /package/dist/{useResizeObserver-DdEn3v2f.js → useResizeObserver-DDuoBeBo.js} +0 -0
  1371. /package/dist/{useResolveTokenColor-ChOnCckA.js → useResolveTokenColor-DVT5kwv6.js} +0 -0
  1372. /package/dist/{useTextHighlight-Bma3UlKA.js → useTextHighlight-C46Le9u_.js} +0 -0
  1373. /package/dist/{useTimer-BBLGPXR8.js → useTimer-CkDV8SC2.js} +0 -0
  1374. /package/dist/{useViewportReady-C9pYnn7K.js → useViewportReady-c0isoKL8.js} +0 -0
  1375. /package/dist/{vReveal-CT1KtwZA.js → vReveal-DUmiEkX_.js} +0 -0
  1376. /package/dist/{vSpecular-EX7loENl.js → vSpecular-DlYN0UZy.js} +0 -0
  1377. /package/dist/{writeVelocityWeight-Bh83xZfs.js → writeVelocityWeight-D1rvdxJu.js} +0 -0
package/dist/blob.js ADDED
@@ -0,0 +1,1582 @@
1
+ import { t as e } from "./_plugin-vue_export-helper-C1je1s0u.js";
2
+ import { t } from "./useResolveTokenColor-DVT5kwv6.js";
3
+ import { t as n } from "./usePointerVelocityField-CwXyeW0Z.js";
4
+ import { t as r } from "./useIntersectionPause-Cmt5Tnv9.js";
5
+ import { a as i, n as a, o, r as s, s as c, t as l } from "./procedural-color.wgsl-ByduxnzV.js";
6
+ import { a as u, t as d } from "./useGpuSubstrate-DcY584kE.js";
7
+ import { n as f, t as p } from "./compile-C55K3P9g.js";
8
+ import { s as m, t as h } from "./color-Bp5jmv4Z.js";
9
+ import { a as g, i as _, n as v, o as y, r as b, t as x } from "./presets-B07HzyKd.js";
10
+ import { n as S, t as C } from "./prng-B0PLRmR6.js";
11
+ import { computed as w, createElementBlock as T, createElementVNode as E, defineComponent as D, inject as O, normalizeStyle as k, onScopeDispose as A, onUnmounted as j, openBlock as M, readonly as N, ref as P, useTemplateRef as F, watch as I } from "vue";
12
+ import { SpringProgress as L } from "@mkbabb/keyframes.js";
13
+ //#region src/components/blob/constants.ts
14
+ var R = 1 / 1.6, z = {
15
+ idle: {
16
+ valence: 0,
17
+ arousal: .35
18
+ },
19
+ happy: {
20
+ valence: .8,
21
+ arousal: .6
22
+ },
23
+ curious: {
24
+ valence: .3,
25
+ arousal: .5
26
+ },
27
+ sleepy: {
28
+ valence: -.1,
29
+ arousal: .1
30
+ },
31
+ excited: {
32
+ valence: .7,
33
+ arousal: 1
34
+ }
35
+ }, B = (e, t, n) => e + (t - e) * n;
36
+ function V({ valence: e, arousal: t }) {
37
+ return {
38
+ orbitSpeedScale: B(.4, 2.2, t),
39
+ wobbleScale: B(.5, 2, t),
40
+ pulseFreq: B(.15, 1.5, t),
41
+ pulseAmp: B(.008, .05, t),
42
+ noiseAmp: B(.015, .045, t),
43
+ hueRange: B(3, 25, t * .6 + (e * .5 + .5) * .4),
44
+ satShift: B(-.05, .1, e * .5 + .5),
45
+ brightnessShift: B(-.03, .08, e * .5 + .5),
46
+ smoothK: B(.85, 1.35, t),
47
+ pointerAttraction: B(-.2, .6, e * .5 + .5) * (.7 + .15 * t),
48
+ mergeRate: B(2, .3, t),
49
+ iridScale: B(.55, 1.35, t)
50
+ };
51
+ }
52
+ var H = {
53
+ idle: V(z.idle),
54
+ happy: V(z.happy),
55
+ curious: V(z.curious),
56
+ sleepy: V(z.sleepy),
57
+ excited: V(z.excited)
58
+ }, U = {
59
+ idle: 1500,
60
+ happy: 1200,
61
+ curious: 800,
62
+ sleepy: 2500,
63
+ excited: 600
64
+ }, ee = 6e3, W = .35, te = .85, ne = .2, re = .015, G = .02, K = .01, q = .015, J = .75, ie = 2e3, ae = .4, oe = .18, se = 5200, ce = /* @__PURE__ */ "uResolution.uTime.uBaseColor.uPointer.uPointerActive.uPointerAttraction.uPointerStrength.uBodyRadius.uPulsePhase.uPulseAmp.uNoiseAmp.uNoiseFreq.uNoiseSpeed.uWarpAmp.uSmoothK.uMerge.uStage.uMorphT.uMaxReach.uLit.uRimColor.uLightDir.uSpecStrength.uSpecShininess.uRimPower.uRimStrength.uShadow.uShadowSoftness.uIridescence.uIridHue.uIridSpeed.uSssScale.uSssPower.uCoreGlow.uHueRange.uSatShift.uBrightnessShift.uColorNoiseFreq.uColorNoiseSpeed.uStopCount.uSatCount.uSatColorActive.uTrailCount.uVelocity.uStretch".split(".");
65
+ //#endregion
66
+ //#region src/components/blob/composables/easing.ts
67
+ function le(e) {
68
+ return e < .5 ? 2 * e * e : 1 - 2 * (1 - e) * (1 - e);
69
+ }
70
+ function ue(e) {
71
+ return e * e;
72
+ }
73
+ function de(e) {
74
+ return 1 - (1 - e) * (1 - e);
75
+ }
76
+ function fe(e) {
77
+ let t = e < 0 ? 0 : e > 1 ? 1 : e;
78
+ if (t < .3) {
79
+ let e = t / .3;
80
+ return -.06 * Math.sin(e * Math.PI);
81
+ }
82
+ if (t < .55) {
83
+ let e = (t - .3) / .25;
84
+ return (1 - (1 - e) * (1 - e) * (1 - e)) * 1.12;
85
+ }
86
+ let n = (t - .55) / .45;
87
+ return 1 + Math.cos(n * Math.PI) * .12 * (1 - n);
88
+ }
89
+ //#endregion
90
+ //#region src/components/blob/composables/useBlobMood.ts
91
+ function pe(e, t, n) {
92
+ let r = (e, t) => e + (t - e) * n;
93
+ return {
94
+ orbitSpeedScale: r(e.orbitSpeedScale, t.orbitSpeedScale),
95
+ wobbleScale: r(e.wobbleScale, t.wobbleScale),
96
+ pulseFreq: r(e.pulseFreq, t.pulseFreq),
97
+ pulseAmp: r(e.pulseAmp, t.pulseAmp),
98
+ noiseAmp: r(e.noiseAmp, t.noiseAmp),
99
+ hueRange: r(e.hueRange, t.hueRange),
100
+ satShift: r(e.satShift, t.satShift),
101
+ brightnessShift: r(e.brightnessShift, t.brightnessShift),
102
+ smoothK: r(e.smoothK, t.smoothK),
103
+ pointerAttraction: r(e.pointerAttraction, t.pointerAttraction),
104
+ mergeRate: r(e.mergeRate, t.mergeRate),
105
+ iridScale: r(e.iridScale, t.iridScale)
106
+ };
107
+ }
108
+ function me() {
109
+ let e = P("idle"), t = P({ ...H.idle }), n = { ...H.idle }, r = { ...H.idle }, i = 0, a = 0, o = !1, s = 0, c = !1, l = !1, u = 0;
110
+ function d(s, l = {}) {
111
+ (l.source ?? "manual") === "manual" && (c = !0), !(s === e.value && !o) && (e.value = s, n = { ...t.value }, r = H[s], a = U[s], i = 0, o = !0);
112
+ }
113
+ function f(e) {
114
+ u = e.idleMs;
115
+ let t = e.pointerActive && !l;
116
+ if (l = e.pointerActive, c && (e.clicked || t) && (c = !1), !c) {
117
+ if (e.clicked) {
118
+ s = 900, d("excited", { source: "auto" });
119
+ return;
120
+ }
121
+ s > 0 || (e.pointerActive ? d("curious", { source: "auto" }) : e.idleMs > 6e3 ? d("sleepy", { source: "auto" }) : d("idle", { source: "auto" }));
122
+ }
123
+ }
124
+ function p() {
125
+ return o || s > 0 || c && e.value !== "idle" ? !1 : !(!c && e.value !== "sleepy" && u < 6e3);
126
+ }
127
+ function m() {
128
+ return o || s > 0 || c || e.value === "sleepy" ? Infinity : Math.max(0, ee - u);
129
+ }
130
+ function h(e) {
131
+ if (s > 0 && (s = Math.max(0, s - e)), !o) return;
132
+ i += e;
133
+ let c = Math.min(i / a, 1), l = le(c);
134
+ t.value = pe(n, r, l), c >= 1 && (o = !1);
135
+ }
136
+ return {
137
+ currentMood: N(e),
138
+ params: N(t),
139
+ setMood: d,
140
+ update: f,
141
+ tick: h,
142
+ isSettled: p,
143
+ nextAutoMoodMs: m
144
+ };
145
+ }
146
+ //#endregion
147
+ //#region src/components/blob/composables/useBlobPointer.ts
148
+ function he(e, t = {}) {
149
+ let { hitRadius: n } = t, r = P({
150
+ x: 0,
151
+ y: 0
152
+ }), i = P({
153
+ x: 0,
154
+ y: 0
155
+ }), a = P(!1), o = P(0), s = 0, c = 0, l = {
156
+ response: .18,
157
+ dampingFraction: 1
158
+ }, u = new L(l), d = new L(l), f = Array.from({ length: 15 }, () => ({
159
+ x: 0,
160
+ y: 0,
161
+ radius: 0
162
+ })), p = 0, m = 0, h = 0, g = 0;
163
+ function _() {
164
+ return (n ? n() : Infinity) * (1 + Math.max(0, h));
165
+ }
166
+ function v(t, n) {
167
+ let r = e.value;
168
+ if (!r) return !1;
169
+ let i = r.getBoundingClientRect();
170
+ if (i.width === 0 || i.height === 0) return !1;
171
+ let a = (t - i.left) / i.width * 2 - 1, o = (n - i.top) / i.height * 2 - 1;
172
+ return Math.hypot(a, o) <= _();
173
+ }
174
+ function y(t) {
175
+ let n = e.value;
176
+ if (!n) return;
177
+ let r = n.getBoundingClientRect();
178
+ s = (t.clientX - r.left) / r.width * 2 - 1, c = (t.clientY - r.top) / r.height * 2 - 1, a.value = Math.hypot(s, c) <= _();
179
+ }
180
+ function b() {
181
+ a.value = !1;
182
+ }
183
+ let x = null;
184
+ I(e, (e) => {
185
+ x &&= (x(), null), e && (e.addEventListener("pointermove", y), e.addEventListener("pointerleave", b), x = () => {
186
+ e.removeEventListener("pointermove", y), e.removeEventListener("pointerleave", b);
187
+ });
188
+ }, { immediate: !0 }), j(() => x?.());
189
+ function S(e = 16) {
190
+ let t = Math.min(e, 50), n = t / 1e3;
191
+ a.value ? D = 0 : D += Math.min(e, 50);
192
+ let l = a.value ? s : 0, _ = a.value ? c : 0;
193
+ if (u.target = l, d.target = _, u.tickDt(t), d.tickDt(t), r.value = {
194
+ x: u.value,
195
+ y: d.value
196
+ }, i.value = {
197
+ x: u.velocity,
198
+ y: d.velocity
199
+ }, h !== 0 || g !== 0) {
200
+ let e = -324 * h - 2 * W * 18 * g;
201
+ g += e * n, h += g * n, h < -.9 && (h = -.9), Math.abs(h) < 1e-4 && Math.abs(g) < 1e-4 && (h = 0, g = 0);
202
+ }
203
+ o.value = h;
204
+ let v = Math.hypot(u.velocity, d.velocity);
205
+ a.value || v > .05 ? (p = (p + 1) % 15, f[p].x = u.value, f[p].y = d.value, m = Math.min(m + 1, 15)) : m > 0 && (m = Math.max(0, m - 1));
206
+ }
207
+ function C(e) {
208
+ let t = [];
209
+ for (let n = 0; n < m; n++) {
210
+ let r = f[(p - n + 30) % 15];
211
+ t.push({
212
+ x: r.x,
213
+ y: r.y,
214
+ radius: e * (1 - n / 15)
215
+ });
216
+ }
217
+ return {
218
+ sources: t,
219
+ count: m
220
+ };
221
+ }
222
+ let w = !1;
223
+ function T(e) {
224
+ g += e * 18, w = !0;
225
+ }
226
+ function E() {
227
+ let e = w;
228
+ return w = !1, e;
229
+ }
230
+ let D = 0;
231
+ function O() {
232
+ u.reset(0, 0), d.reset(0, 0), u.target = 0, d.target = 0, r.value = {
233
+ x: 0,
234
+ y: 0
235
+ }, i.value = {
236
+ x: 0,
237
+ y: 0
238
+ }, h = 0, g = 0, o.value = 0, m = 0;
239
+ }
240
+ function k() {
241
+ return !(a.value || Math.hypot(u.velocity, d.velocity) > .001 || Math.abs(u.value) > .001 || Math.abs(d.value) > .001 || m > 0 || h !== 0 || g !== 0);
242
+ }
243
+ return {
244
+ pointer: N(r),
245
+ velocity: N(i),
246
+ active: N(a),
247
+ rawPointer: () => ({
248
+ x: s,
249
+ y: c
250
+ }),
251
+ pulse: N(o),
252
+ idleMs: () => D,
253
+ tick: S,
254
+ trailSources: C,
255
+ click: T,
256
+ consumeClick: E,
257
+ rest: O,
258
+ isAtRest: k,
259
+ hitTest: v
260
+ };
261
+ }
262
+ //#endregion
263
+ //#region src/components/blob/composables/satelliteKinematics.ts
264
+ function ge(e, t, n, r, i) {
265
+ let a = t / 4 * Math.PI * 2 + (e() - .5) * Math.PI, o = n * (te + e() * ne), s = r * (.3 + e() * .7);
266
+ return {
267
+ phase: "orbiting",
268
+ phaseStart: i,
269
+ phaseDuration: 6e3 + e() * 1e4,
270
+ timeOrigin: i,
271
+ angularSpeed: .08 + e() * .16,
272
+ phaseOffset: a,
273
+ baseRadiusX: o * (1 - s),
274
+ baseRadiusY: o * (1 + s),
275
+ wobbleAmp1: re + e() * G,
276
+ wobbleFreq1: .08 + e() * .22,
277
+ wobbleAmp2: K + e() * q,
278
+ wobbleFreq2: .18 + e() * .32,
279
+ pertXAmp: .03 + e() * .05,
280
+ pertXFreq: .06 + e() * .18,
281
+ pertXPhase: e() * Math.PI * 2,
282
+ pertYAmp: .03 + e() * .05,
283
+ pertYFreq: .07 + e() * .17,
284
+ pertYPhase: e() * Math.PI * 2,
285
+ startX: 0,
286
+ startY: 0,
287
+ endX: 0,
288
+ endY: 0,
289
+ fissioning: !1,
290
+ snapFired: !1
291
+ };
292
+ }
293
+ function _e(e, t, n, r) {
294
+ let i = (t - e.timeOrigin) / 1e3, a = e.angularSpeed * n * i + e.phaseOffset, o = r * (e.wobbleAmp1 * Math.sin(e.wobbleFreq1 * i) + e.wobbleAmp2 * Math.sin(e.wobbleFreq2 * i + 1.3));
295
+ return {
296
+ x: (e.baseRadiusX + o) * Math.cos(a) + e.pertXAmp * Math.sin(e.pertXFreq * i + e.pertXPhase),
297
+ y: (e.baseRadiusY + o) * Math.sin(a) + e.pertYAmp * Math.cos(e.pertYFreq * i + e.pertYPhase)
298
+ };
299
+ }
300
+ function ve(e, t, n, r, i) {
301
+ e.timeOrigin = i, e.angularSpeed = .08 + t() * .16, e.phaseOffset = t() * Math.PI * 2;
302
+ let a = n * (te + t() * ne), o = r * (.3 + t() * .7);
303
+ e.baseRadiusX = a * (1 - o), e.baseRadiusY = a * (1 + o), e.wobbleAmp1 = re + t() * G, e.wobbleFreq1 = .08 + t() * .22, e.wobbleAmp2 = K + t() * q, e.wobbleFreq2 = .18 + t() * .32, e.pertXAmp = .03 + t() * .05, e.pertXFreq = .06 + t() * .18, e.pertXPhase = t() * Math.PI * 2, e.pertYAmp = .03 + t() * .05, e.pertYFreq = .07 + t() * .17, e.pertYPhase = t() * Math.PI * 2;
304
+ }
305
+ //#endregion
306
+ //#region src/components/blob/composables/useBlobSatellites.ts
307
+ function ye(e, t, n) {
308
+ return t + e() * (n - t);
309
+ }
310
+ function Y(e) {
311
+ return e < 0 ? 0 : e > 1 ? 1 : e;
312
+ }
313
+ function X(e, t, n) {
314
+ return e + (t - e) * n;
315
+ }
316
+ function Z(e, t, n, r) {
317
+ e.phase = t, e.phaseStart = n, e.phaseDuration = r;
318
+ }
319
+ function be(e, t) {
320
+ let n = S(C(t + "goo")), r = [], i = [], a = [], o = -Infinity, s = e.geometry.orbitRadius, c = -1, l = null;
321
+ function u() {
322
+ let t = e.geometry.orbitRadius;
323
+ if (t !== s && s > 0) {
324
+ let e = t / s;
325
+ for (let t of r) t.baseRadiusX *= e, t.baseRadiusY *= e;
326
+ s = t;
327
+ }
328
+ }
329
+ function d(t) {
330
+ let o = e.geometry.satelliteCount;
331
+ for (; r.length < o;) r.push(ge(n, r.length, e.geometry.orbitRadius, e.geometry.eccentricity, t)), i.push({
332
+ x: 0,
333
+ y: 0,
334
+ radius: e.geometry.satelliteRadius,
335
+ opacity: 0,
336
+ fissioning: !1
337
+ }), a.push({
338
+ x: 0,
339
+ y: 0,
340
+ start: 0
341
+ });
342
+ r.length > o && (r.length = o, i.length = o, a.length = o);
343
+ }
344
+ function f(t, s) {
345
+ d(t), u();
346
+ let f = r.length, p = s.mergeRate, m = e.geometry.satelliteRadius, h = e.satellites.mergeDuration, g = e.satellites.emergeDuration, _ = e.satellites.orbitDuration, v = e.satellites.absorbedDuration, y = e.surface.fissionAmp ?? 0, b = Math.max(0, Math.min(1, (2 - p) / 1.7)), x = Math.max(0, Math.min(1, y * (.4 + .6 * b))), S = ae - oe;
347
+ for (let u = 0; u < f; u++) {
348
+ let d = r[u], f = t - d.phaseStart, y = Y(d.phaseDuration > 0 ? f / d.phaseDuration : 1);
349
+ switch (d.phase) {
350
+ case "orbiting":
351
+ if (y >= 1) if (t - o < 3e3 * p) d.phaseStart = t, d.phaseDuration = ye(n, _[0], _[1]);
352
+ else if (x > 0 && c < 0 && n() < x * .75) d.phaseOffset = d.angularSpeed * s.orbitSpeedScale * ((t - d.timeOrigin) / 1e3) + d.phaseOffset, d.timeOrigin = t, d.fissioning = !0, d.snapFired = !1, c = u, Z(d, "fissioning", t, se), o = t;
353
+ else {
354
+ let e = _e(d, t, s.orbitSpeedScale, s.wobbleScale);
355
+ d.startX = e.x, d.startY = e.y;
356
+ let n = Math.hypot(e.x, e.y), r = n > .01 ? .08 / n : 0;
357
+ d.endX = e.x * r, d.endY = e.y * r, Z(d, "merging", t, h), o = t;
358
+ }
359
+ break;
360
+ case "fissioning":
361
+ y >= 1 && (d.fissioning = !1, c === u && (c = -1), d.timeOrigin = t, Z(d, "orbiting", t, ye(n, _[0], _[1])));
362
+ break;
363
+ case "merging":
364
+ y >= 1 && Z(d, "absorbed", t, ye(n, v[0], v[1]));
365
+ break;
366
+ case "absorbed":
367
+ if (y >= 1) {
368
+ ve(d, n, e.geometry.orbitRadius, e.geometry.eccentricity, t);
369
+ let r = _e(d, t + 3e3, s.orbitSpeedScale, s.wobbleScale);
370
+ d.endX = r.x, d.endY = r.y;
371
+ let i = Math.hypot(r.x, r.y), a = i > .01 ? .08 / i : 0;
372
+ d.startX = r.x * a, d.startY = r.y * a, Z(d, "emerging", t, g);
373
+ }
374
+ break;
375
+ case "emerging":
376
+ if (y >= 1) {
377
+ let e = a[u];
378
+ e.x = d.endX, e.y = d.endY, e.start = t, d.timeOrigin = t, d.phaseOffset = Math.atan2(d.endY, d.endX), Z(d, "orbiting", t, ye(n, _[0], _[1]));
379
+ }
380
+ break;
381
+ }
382
+ let b, C, w, T;
383
+ switch (d.phase) {
384
+ case "orbiting": {
385
+ let e = _e(d, t, s.orbitSpeedScale, s.wobbleScale), n = a[u], r = t - n.start;
386
+ if (n.start > 0 && r < 2e3) {
387
+ let t = Y(r / ie), i = t * t * (3 - 2 * t);
388
+ b = X(n.x, e.x, i), C = X(n.y, e.y, i);
389
+ } else b = e.x, C = e.y;
390
+ w = J, T = 1;
391
+ break;
392
+ }
393
+ case "merging": {
394
+ let e = ue(Y((t - d.phaseStart) / d.phaseDuration));
395
+ b = X(d.startX, d.endX, e), C = X(d.startY, d.endY, e);
396
+ let n = Y((t - d.phaseStart) / d.phaseDuration);
397
+ w = n > .85 ? X(J, 0, (n - .85) / .15) : J, T = X(1, .65, e);
398
+ break;
399
+ }
400
+ case "absorbed":
401
+ b = 0, C = 0, w = 0, T = .5;
402
+ break;
403
+ case "emerging": {
404
+ let e = de(Y((t - d.phaseStart) / d.phaseDuration));
405
+ b = X(d.startX, d.endX, e), C = X(d.startY, d.endY, e);
406
+ let n = Y((t - d.phaseStart) / d.phaseDuration);
407
+ w = n < .1 ? X(0, J, n / .1) : J, T = X(.65, 1, e);
408
+ break;
409
+ }
410
+ case "fissioning": {
411
+ let e = Y((t - d.phaseStart) / d.phaseDuration), n = fe(e), r = oe + S * n, i = _e(d, t, s.orbitSpeedScale, s.wobbleScale), a = Math.hypot(i.x, i.y), o = a > 1e-4 ? i.x / a : Math.cos(d.phaseOffset), c = a > 1e-4 ? i.y / a : Math.sin(d.phaseOffset);
412
+ b = o * r, C = c * r, w = J, T = X(.78, 1, Y(n)), !d.snapFired && e >= .42 && (d.snapFired = !0, l?.(Math.min(.4, .18 + .22 * x)));
413
+ break;
414
+ }
415
+ }
416
+ let E = i[u];
417
+ E.x = b, E.y = C, E.radius = m * T, E.opacity = w, E.fissioning = d.fissioning;
418
+ }
419
+ }
420
+ function p() {
421
+ for (let e of r) e.phaseOffset += (n() - .5) * .6, e.pertXPhase += n() * Math.PI, e.pertYPhase += n() * Math.PI;
422
+ }
423
+ function m(e) {
424
+ n = S(C(e + "goo"));
425
+ }
426
+ function h(e) {
427
+ l = e;
428
+ }
429
+ function g() {
430
+ for (let e of r) if (e.phase !== "orbiting") return !1;
431
+ return !0;
432
+ }
433
+ function _(e) {
434
+ let t = Infinity;
435
+ for (let e of r) {
436
+ let n = e.phaseStart + e.phaseDuration;
437
+ n < t && (t = n);
438
+ }
439
+ return t === Infinity ? e + 3e4 : t;
440
+ }
441
+ return {
442
+ sources: i,
443
+ tick: f,
444
+ nudge: p,
445
+ reseed: m,
446
+ onPinch: h,
447
+ isQuiescent: g,
448
+ nextEventMs: _
449
+ };
450
+ }
451
+ //#endregion
452
+ //#region src/components/blob/shaders/metaball.vert.ts
453
+ var xe = "#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}", Se = "// --- SDF ---\n\nfloat sdCircle(vec2 p, vec2 center, float radius) {\n return length(p - center) - radius;\n}\n\n// AX.W15 — the VALUE+GRADIENT circle: returns vec3(d, dd/dx, dd/dy). The circle\n// gradient is the UNIT radial direction (p - center)/length(p - center) (the\n// eikonal property holds EXACTLY for a circle), guarded at the degenerate centre.\n// This is the keystone of the analytic-gradient smin: carrying the gradient\n// through the scene field DELETES the per-pixel 4-tap normal (4 full sceneDist\n// evals, each running 3-octave FBM + the sat/trail loops).\nvec3 sdgCircle(vec2 p, vec2 center, float radius) {\n vec2 d = p - center;\n float len = length(d);\n vec2 grad = len > 1e-6 ? d / len : vec2(0.0, 1.0);\n return vec3(len - radius, grad);\n}\n\n// IQ 2024 quadratic-polynomial smin, NORMALIZED so k is a blend band in distance\n// units. The k *= 4.0 pre-scale makes the h*h*k*0.25 poly's effective blend width\n// equal to k (the un-normalized form's width was 0.25*k).\nfloat sminQuadratic(float a, float b, float k) {\n k *= 4.0;\n float h = max(k - abs(a - b), 0.0) / k;\n return min(a, b) - h * h * k * 0.25;\n}\n\n// IQ circular smin — a quarter-circle fillet at the seam (rounder than the\n// quadratic). The k *= 1.0/(1.0-sqrt(0.5)) factor normalizes k to the same\n// blend-band units so the merge axis swaps shape without re-tuning uSmoothK.\nfloat sminCircular(float a, float b, float k) {\n k *= 1.0 / (1.0 - sqrt(0.5));\n float h = max(k - abs(a - b), 0.0) / k;\n return min(a, b) - k * 0.5 * (1.0 + h - sqrt(1.0 - h * (h - 2.0)));\n}\n\n// Config-gated merge dispatch — uMerge 0 = quadratic, 1 = circular.\nfloat smin(float a, float b, float k) {\n if (uMerge > 0.5) return sminCircular(a, b, k);\n return sminQuadratic(a, b, k);\n}\n\n// AX.W15 — the VALUE+GRADIENT smin. a/b are vec3(dist, grad.xy); the blended\n// gradient is mix(a.yz, b.yz, w) with the interpolation weight w the distance\n// blend uses (IQ's vec2-smin insight). This propagates the analytic gradient\n// through the merge so the surface normal reads the field gradient DIRECTLY — no\n// finite-difference tap. The blend weight matches each variant.\nvec3 sminQuadraticG(vec3 a, vec3 b, float k) {\n k *= 4.0;\n float h = max(k - abs(a.x - b.x), 0.0) / k;\n float m = h * h * k * 0.25;\n // h-weight that selects which surface dominates (0 → a, 1 → b).\n float w = (a.x < b.x) ? 0.5 * h * h : 1.0 - 0.5 * h * h;\n float dist = min(a.x, b.x) - m;\n vec2 grad = mix(a.yz, b.yz, w);\n return vec3(dist, grad);\n}\n\nvec3 sminCircularG(vec3 a, vec3 b, float k) {\n k *= 1.0 / (1.0 - sqrt(0.5));\n float h = max(k - abs(a.x - b.x), 0.0) / k;\n float m = k * 0.5 * (1.0 + h - sqrt(1.0 - h * (h - 2.0)));\n float w = (a.x < b.x) ? 0.5 * h : 1.0 - 0.5 * h;\n float dist = min(a.x, b.x) - m;\n vec2 grad = mix(a.yz, b.yz, w);\n return vec3(dist, grad);\n}\n\nvec3 sminG(vec3 a, vec3 b, float k) {\n if (uMerge > 0.5) return sminCircularG(a, b, k);\n return sminQuadraticG(a, b, k);\n}", Ce = "// --- 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\n// IQ analytic-derivative gradient noise — value in .x, ANALYTIC gradient\n// (d/dx, d/dy) in .yz, from one eval. The quintic fade has a continuous 2nd\n// derivative so the gradient is smooth (a cubic smoothstep fade would crease it).\n// (Inigo Quilez, https://iquilezles.org/articles/gradientnoise/.)\nvec3 noised(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n\n // Quintic fade + its derivative.\n vec2 u = f * f * f * (f * (f * 6.0 - 15.0) + 10.0);\n vec2 du = 30.0 * f * f * (f * (f - 2.0) + 1.0);\n\n // Per-corner gradient vectors from the hash (centred to [-1, 1]).\n vec2 ga = -1.0 + 2.0 * vec2(hash21(i + vec2(0.0, 0.0)), hash21(i + vec2(7.3, 0.0)));\n vec2 gb = -1.0 + 2.0 * vec2(hash21(i + vec2(1.0, 0.0)), hash21(i + vec2(8.3, 0.0)));\n vec2 gc = -1.0 + 2.0 * vec2(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(7.3, 1.0)));\n vec2 gd = -1.0 + 2.0 * vec2(hash21(i + vec2(1.0, 1.0)), hash21(i + vec2(8.3, 1.0)));\n\n float va = dot(ga, f - vec2(0.0, 0.0));\n float vb = dot(gb, f - vec2(1.0, 0.0));\n float vc = dot(gc, f - vec2(0.0, 1.0));\n float vd = dot(gd, f - vec2(1.0, 1.0));\n\n // Value, remapped to [0,1] so it drops in for the prior valueNoise.\n float n = va + u.x * (vb - va) + u.y * (vc - va) + u.x * u.y * (va - vb - vc + vd);\n float value = 0.5 + 0.5 * n;\n\n // Analytic gradient (chain rule through the bilinear blend + the fade).\n vec2 grad =\n ga + u.x * (gb - ga) + u.y * (gc - ga) + u.x * u.y * (ga - gb - gc + gd) +\n du * (vec2(u.y, u.x) * (va - vb - vc + vd) + vec2(vb, vc) - va);\n return vec3(value, 0.5 * grad);\n}\n\n// Rotated-octave FBM over the analytic gradient noise: a fixed ~0.5 rad 2x2\n// rotation between octaves breaks the axis-aligned banding. The rotation CONSTANT\n// is spliced from the shared chunk (AV.W2 — the one FBM_ROT); the loops below\n// stay blob-local (param octaves + the LIQUID lacunarity/persistence, per §3a).", we = 1.8, Te = .42, Ee = `float fbm(vec2 p, int octaves) {
454
+ float value = 0.0;
455
+ float amp = 0.5;
456
+ float freq = 1.0;
457
+ for (int i = 0; i < 4; i++) {
458
+ if (i >= octaves) break;
459
+ value += amp * noised(p * freq).x;
460
+ p = FBM_ROT * p;
461
+ freq *= ${we.toFixed(1)};
462
+ amp *= ${Te.toFixed(2)};
463
+ }
464
+ return value;
465
+ }
466
+
467
+ // AX.W15 — FBM with ANALYTIC GRADIENT. Returns vec3(value, ∂/∂x, ∂/∂y). The
468
+ // gradient accumulates noised()'s analytic gradient per octave, chain-ruled
469
+ // through the per-octave frequency scale AND the FBM_ROT rotation: octave i samples
470
+ // at R^i · (freq·p), so the gradient w.r.t. the ORIGINAL p picks up freq and
471
+ // the accumulated rotation transpose (R^T)^i. The keystone feed for the
472
+ // analytic surface normal — it DELETES the per-pixel 4-tap finite difference.
473
+ vec3 fbmG(vec2 p, int octaves) {
474
+ float value = 0.0;
475
+ vec2 grad = vec2(0.0);
476
+ float amp = 0.5;
477
+ float freq = 1.0;
478
+ // The accumulated octave rotation R^i — its transpose maps the i-th octave's
479
+ // local gradient back into the ORIGINAL p frame. Seeded at identity (octave 0).
480
+ mat2 rotAccum = mat2(1.0, 0.0, 0.0, 1.0);
481
+ vec2 pp = p;
482
+ for (int i = 0; i < 4; i++) {
483
+ if (i >= octaves) break;
484
+ vec3 n = noised(pp * freq);
485
+ value += amp * n.x;
486
+ // d(value)/dp = amp · freq · (R^i)^T · noised.yz (the rotated chain rule).
487
+ grad += amp * freq * (transpose(rotAccum) * n.yz);
488
+ pp = FBM_ROT * pp;
489
+ freq *= ${we.toFixed(1)};
490
+ amp *= ${Te.toFixed(2)};
491
+ rotAccum = FBM_ROT * rotAccum;
492
+ }
493
+ return vec3(value, grad);
494
+ }
495
+
496
+ // One domain-warp pass with the ANALYTIC GRADIENT carried (warp-Jacobian
497
+ // APPROXIMATION per the SOTA deepening [2]: the warp is low-frequency, so the
498
+ // gradient of the OUTER fbm dominates and the warp-offset Jacobian is dropped —
499
+ // the error is sub-perceptible and full autodiff is overfit for one blob).
500
+ vec3 fbmWarpedG(vec2 p, int octaves, float warpAmp) {
501
+ if (warpAmp <= 0.0) return fbmG(p, octaves);
502
+ vec2 q = vec2(fbm(p + vec2(0.0, 0.0), octaves), fbm(p + vec2(5.2, 1.3), octaves));
503
+ return fbmG(p + warpAmp * (q - 0.5), octaves);
504
+ }
505
+ `, De = "// Edit #4's gamut step — 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}", Oe = "#version 300 es\nprecision highp float;\n\nin vec2 vUv;\nout vec4 fragColor;\n\nuniform vec2 uResolution;\nuniform float uTime;\nuniform vec3 uBaseColor;\n\n// Multi-stop palette (W11.b) — 2-4 in-family OKLCh stops (uploaded GAMMA sRGB, like\n// uBaseColor). uStopCount <= 1 falls back to uBaseColor (the single-color default,\n// zero regression). MAX_BLOB_STOPS is a compile-time #define.\n#define MAX_BLOB_STOPS 4\nuniform int uStopCount;\nuniform vec3 uPalette[MAX_BLOB_STOPS];\n\n// Pointer\nuniform vec2 uPointer;\nuniform float uPointerActive;\nuniform float uPointerAttraction;\nuniform float uPointerStrength;\n\n// Main body\nuniform float uBodyRadius;\n\n// Pulsation\nuniform float uPulsePhase;\nuniform float uPulseAmp;\n\n// Surface noise\nuniform float uNoiseAmp;\nuniform float uNoiseFreq;\nuniform float uNoiseSpeed;\n\n// Gooey\nuniform float uSmoothK;\nuniform float uMerge; // 0 = quadratic smin, 1 = circular smin (rounder menisci)\n\n// BC.W-GOOBLOB-PLAIN — the STAGE-1 gate. 1.0 = the plain shadowless lightless\n// fill-only floor (variant=\"blob\"); 0.0 = the full lit pipeline (variant=\"meatball\" /\n// STAGE 2). The WebGL2 fallback transcribes the SAME stripped branch the WGSL primary\n// gates (research/viz/goo-blob.md §5 — the GLSL twin).\n// BD.W-GOO-CAROUSEL-DECK — uStage is now DERIVED from uMorphT (uStage = uMorphT<=0 ?\n// 1 : 0) at upload; the SHADING morph (below) reads uMorphT directly.\nuniform float uStage;\n\n// BD.W-GOO-CAROUSEL-DECK — the blob to meatball SHADING-MORPH scalar. 0.0 = the flat blob\n// fill (byte-identical to the STAGE-1 floor), 1.0 = the fully-dressed lit meatball; the\n// in-between LERPS the surface shading (NOT the geometry — the smin field is shared). The\n// renderer resolves it from config.morphT (variant to endpoint back-compat: blob to 0,\n// meatball to 1). A consumer ANIMATING morphT 0 to 1 gets the live morph.\nuniform float uMorphT;\n\n// AX.W16 (arm 5) — the PRE-FBM bounding-discard radius (UV space). main() early-outs\n// to a transparent write for any fragment OUTSIDE this radius BEFORE the two 3-octave\n// FBM calls + the OKLCh round-trip. The renderer uploads it PADDED by every\n// outward-expanding term (body + eccentric orbit + sat radius + smin band + FBM edge\n// amplitude + click-pulse + a lean/squash safety pad) so it NEVER clips the wet\n// meniscus (IQ: inflate the bound to match any outward op).\nuniform float uMaxReach;\n\n// Membrane — domain-warp strength on the FBM edge displacement (0 = plain fbm).\nuniform float uWarpAmp;\n\n// Lit glass surface (W9.b) — gated behind uLit so the flat fill stays default.\nuniform float uLit; // 0 = flat fill (default), 1 = lit droplet\nuniform vec3 uRimColor; // Fresnel rim tint (GAMMA sRGB, via the /color leaf)\nuniform vec3 uLightDir; // normalized light direction (x, y, z)\nuniform float uSpecStrength; // Blinn-Phong specular weight\nuniform float uSpecShininess; // specular exponent (16-64, tight glint)\nuniform float uRimPower; // Fresnel/Schlick exponent (~2-3)\nuniform float uRimStrength; // Fresnel rim weight\n\n// BC.W-GOOBLOB-MEATBALL — the procedural 2D SDF soft-shadow march (T2, the GLSL twin of\n// the WGSL res.z/res.w lanes). uShadow gates the IQ rmshadows soft contact shadow that\n// FOLLOWS the irregular silhouette; uShadowSoftness is the penumbra hardness (4-48).\nuniform float uShadow; // 0 = no shadow, 1 = the soft contact shadow ON\nuniform float uShadowSoftness; // penumbra hardness (inverse light-source size, 4-48)\n\n// Iridescence + fake subsurface (W11.a) — translucent-gel read.\nuniform float uIridescence; // warm-pearl rim sheen weight (0 = off)\nuniform float uIridHue; // base hue (radians) the cosine palette biases toward (warm)\nuniform float uIridSpeed; // animated-thickness scroll for the iridescent t\nuniform float uSssScale; // fast-SSS back-light weight\nuniform float uSssPower; // fast-SSS exponent\nuniform float uCoreGlow; // thickness-driven inner-luminosity lift\n\n// Color perturbation (perceptually uniform — OKLCh L/C/h)\nuniform float uHueRange; // degrees of hue swing (converted to radians)\nuniform float uSatShift; // OKLCh chroma swing\nuniform float uBrightnessShift; // OKLCh lightness bias\nuniform float uColorNoiseFreq;\nuniform float uColorNoiseSpeed;\n\n// Satellites (max 4)\n#define MAX_SATS 4\nuniform int uSatCount;\nuniform vec2 uSatPos[MAX_SATS];\nuniform float uSatRadius[MAX_SATS];\nuniform float uSatOpacity[MAX_SATS];\n\n// F9.R1 (BG.W-BLOB-SATELLITE-SHADE) — the per-satellite EXPLICIT-SHADE seam (the GL\n// color-seam widen the value.js hero blob asked for; the BA-VJS-5 / C-1 residual, the\n// W-GOO-REDRESS arm-B book discharged). uSatColorActive == 0 is the DEFAULT (the derived\n// palette shade — byte-identical to HEAD): blendSatColor() early-returns and touches\n// nothing. When a consumer supplies explicit per-satellite shades (uSatColor[i], GAMMA\n// sRGB, at uSatColorAmt[i] weight — typically 1) the fragment blends the base palette\n// OKLCh toward each satellite's shade, weighted by that satellite's smin-field proximity\n// at this pixel. The body keeps the derived base (the ask is per-SATELLITE).\nuniform int uSatColorActive;\nuniform vec3 uSatColor[MAX_SATS];\nuniform float uSatColorAmt[MAX_SATS];\n\n// Pointer trail (W10) — a decaying-radius pseudopod toward the cursor. uTrail is a\n// COMPILE-TIME-SIZED array (GLSL ES 3.00 forbids a uniform-sized array) with a\n// DYNAMIC break on uTrailCount, mirroring the satellite loop. Later samples paint\n// smaller metaballs (r *= 1 - i/N) so the trail tapers into a tail.\n#define TRAIL_N 15\nuniform int uTrailCount;\nuniform vec2 uTrailPos[TRAIL_N];\nuniform float uTrailRadius[TRAIL_N];\n\n// Velocity-driven volume-preserving squash-and-stretch (W10).\nuniform vec2 uVelocity; // smoothed pointer velocity (motion direction + speed)\nuniform float uStretch; // squash-stretch magnitude (0 = off)\n\nconst float PI = 3.141592653589793;\n", Q = "\n", ke = Oe + Q + Ce + Q + `${i}
506
+
507
+ ` + Ee + Q + Se + Q + `
508
+ // --- Color (Ottosson OKLab/OKLCh — value.js EXACT constants, transposed) ---
509
+ //
510
+ // The OETF (srgbToLinear/linearToSrgb) + the four Ottosson matrices + their space
511
+ // conversions are SPLICED from the shared chunk (AV.W2 —
512
+ // src/composables/glass/webgl/shaders/procedural-color.glsl.ts). They live there
513
+ // ONCE so the OETF can never diverge from aurora's; the line-for-line TS port
514
+ // (__tests__/metaball-color.glsl-port.ts) mirrors that chunk. The gamut-clamp
515
+ // below stays blob-local (aurora has no in-shader OKLCh path).
516
+ ${o}
517
+ ${c}
518
+
519
+ ` + De + Q + "\n// AX.W15 — de-synced breath. The body throb was a single sin(uPulsePhase) — a\n// mechanical pulse that re-syncs every cycle. Three DETUNED sines at IRRATIONAL\n// frequency ratios (1, 0.13/0.09 ≈ 1.444, 0.31) never re-phase, so the membrane\n// breathes like a living creature (an asymmetric slower-exhale calm band) rather\n// than a metronome. Normalized so the composite stays in ~[-1, 1].\nfloat breath(float phase) {\n return (sin(phase)\n + 0.5 * sin(phase * 1.4444 + 1.7)\n + 0.28 * sin(phase * 0.31 + 4.1)) / 1.78;\n}\n\n// AX.W15 — the composite SDF field WITH its ANALYTIC GRADIENT, returned as\n// vec3(dist, ∂d/∂x, ∂d/∂y). The domain-warped body membrane smin-merged with the\n// satellites + trail; the gradient propagates through sminG's mix(a.yz, b.yz, h)\n// so the surface normal reads the field gradient DIRECTLY (the 4-tap finite\n// difference is DELETED — its 4 full evals per lit pixel are gone).\n//\n// The ANISOTROPIC SQUASH (W10 volume-preserving stretch) is a linear map\n// bodyUv = D·R·uv (R rotates world→(motion-axis, perp); D = diag(1/sa, sa)). The\n// body field's gradient is computed in bodyUv space, so it MUST be transformed back\n// to uv space by M^T = R^T·D (the inverse-transpose handling the SOTA-deepening [2]\n// warns the 4-tap did implicitly by sampling in screen space).\nvec3 sceneDistG(vec2 uv) {\n // De-synced pulsing body radius.\n float bodyR = uBodyRadius + breath(uPulsePhase) * uPulseAmp;\n\n // Velocity-driven VOLUME-PRESERVING squash-and-stretch (W10), SATURATED (AX.W46\n // D5). sa is the stretch along motion, EXACTLY 1/sa perpendicular (area-preserving).\n // The basis (ax, perp) is captured so the gradient can be transformed back below.\n //\n // The W10 form sa = 1 + speed*uStretch rode an UNBOUNDED critically-damped spring\n // velocity (O(5-8)/s on a fast flick) -> sa ~ 1.78-2.25x elongation, a violent\n // taffy-pull. A tanh saturation sa = 1 + tanh(speed*k)*uStretch caps the elongation\n // at 1 + uStretch (~1.5x at the default stretch 0.5) no matter how fast the flick —\n // the fastest flick reads as a lively bounce, never a rubber-band snap (the standard\n // volume-preserving squash-and-stretch restraint). k = 1.6 keeps the tanh in its\n // near-linear regime for a slow drag (the gentle squash still reads) and saturates\n // only the fast flick.\n vec2 bodyUv = uv;\n vec2 ax = vec2(1.0, 0.0);\n vec2 perp = vec2(0.0, 1.0);\n float sa = 1.0;\n float speed = length(uVelocity);\n bool squashed = uStretch > 0.0 && speed > 1e-4;\n if (squashed) {\n ax = uVelocity / speed;\n perp = vec2(-ax.y, ax.x);\n sa = 1.0 + tanh(speed * 1.6) * uStretch;\n bodyUv = vec2(dot(uv, ax) / sa, dot(uv, perp) * sa);\n }\n\n // Domain-warped FBM displacement WITH its analytic gradient (the warp-Jacobian\n // approximation per [2]). disp = (noiseVal - 0.5) · uNoiseAmp; its gradient in\n // bodyUv space is uNoiseAmp · uNoiseFreq · fbmGrad (the uNoiseFreq chain factor\n // from the bodyUv·uNoiseFreq argument).\n vec3 fbmv = fbmWarpedG(bodyUv * uNoiseFreq + uTime * uNoiseSpeed, 3, uWarpAmp);\n float bodyDisplacement = (fbmv.x - 0.5) * uNoiseAmp;\n vec2 dispGradBody = uNoiseAmp * uNoiseFreq * fbmv.yz;\n\n // Body circle WITH gradient (in bodyUv space). The displaced radius subtracts\n // the displacement, so the body gradient is circleGrad - dispGrad (sign per\n // [2]: d = circleDist - displacement ⇒ grad = circleGrad - dispGrad).\n vec3 bodyG = sdgCircle(bodyUv, vec2(0.0), bodyR + bodyDisplacement);\n vec2 bodyGradBody = bodyG.yz - dispGradBody;\n\n // Transform the body gradient back to uv space: g_uv = R^T · D · g_body, i.e.\n // scale by D = diag(1/sa, sa) in the (ax, perp) frame then reconstruct in world.\n vec2 bodyGradUv;\n if (squashed) {\n vec2 scaled = vec2(bodyGradBody.x / sa, bodyGradBody.y * sa);\n bodyGradUv = scaled.x * ax + scaled.y * perp;\n } else {\n bodyGradUv = bodyGradBody;\n }\n vec3 d = vec3(bodyG.x, bodyGradUv);\n\n // Satellites — smin-merged into the body (uMerge selects quadratic/circular).\n for (int i = 0; i < MAX_SATS; i++) {\n if (i >= uSatCount) break;\n vec3 satG = sdgCircle(uv, uSatPos[i], uSatRadius[i]);\n satG.x += (1.0 - uSatOpacity[i]) * 0.3;\n d = sminG(d, satG, uSmoothK);\n }\n\n // Pointer trail — a decaying-radius pseudopod reaching toward the cursor,\n // smin-merged so it stretches an elastic limb and snaps back.\n for (int i = 0; i < TRAIL_N; i++) {\n if (i >= uTrailCount) break;\n vec3 trailG = sdgCircle(uv, uTrailPos[i], uTrailRadius[i]);\n d = sminG(d, trailG, uSmoothK);\n }\n return d;\n}\n\n// AX.W15 — the analytic surface normal. The field gradient grad2d arrives\n// DIRECTLY from sceneDistG (no 4-tap). The smin field is sub-unit (the CD family\n// |grad| ≤ 1) so the gradient is NOT unit-length — normalize() before the dome\n// lift (the unit contract is on the FINAL lifted normal N, not the raw field\n// gradient). The Z dome: 'interior' is the normalized depth inward from the rim\n// (-d/bodyR); z = sqrt(1 - (1 - interior)^2) is the unit half-sphere profile (flat\n// centre, steep rim). N tilts outward along the field gradient near the rim and\n// points at the viewer deep inside.\nvec3 surfaceNormalFromGrad(vec2 grad2d, float d, float bodyR) {\n vec2 g = normalize(grad2d + vec2(1e-6));\n float interior = clamp(-d / max(bodyR, 1e-4), 0.0, 1.0);\n float z = sqrt(max(0.0, 1.0 - (1.0 - interior) * (1.0 - interior)));\n return normalize(vec3(g * (1.0 - z), z) + vec3(0.0, 0.0, 1e-6));\n}\n\n// BC.W-GOOBLOB-MEATBALL — the 2D SDF soft-shadow march (IQ rmshadows improved-penumbra,\n// research/viz/goo-blob.md §2.3, §5). The GLSL twin of the WGSL softShadow2D — a procedural\n// soft contact shadow FOLLOWING the irregular metaball silhouette (NOT a hard disc/box\n// shadow). Marches from ro along rd (the in-plane projection of uLightDir),\n// accumulating the closest miss via the Aaltonen penumbra (y = h*h/(2*ph) + d =\n// sqrt(h*h - y*y)) that kills the banding the naive res = min(res, h/(w*t)) shows. CHEAP:\n// 24 steps, re-uses the SAME sceneDistG().x field (NO separate field re-eval, NO FBO/\n// multi-pass — the procedural field needs none). w is the penumbra hardness (inverse\n// light-source size -> uShadowSoftness). Derivative-FREE. Returns 1.0 (lit) -> 0.0 (occluded).\nfloat softShadow2D(vec2 ro, vec2 rd, float mint, float maxt, float w) {\n float res = 1.0;\n float ph = 1e20;\n float t = mint;\n for (int i = 0; i < 24; i++) {\n if (t >= maxt) break;\n float h = sceneDistG(ro + rd * t).x;\n if (h < 0.001) return 0.0;\n float y = h * h / (2.0 * ph);\n float dd = sqrt(max(h * h - y * y, 0.0));\n res = min(res, dd / (w * max(0.001, t - y)));\n ph = h;\n t += h;\n }\n return clamp(res, 0.0, 1.0);\n}\n\n// W11.b — sample the multi-stop palette at t in [0,1], interpolating adjacent\n// stops in OKLab with a MIDPOINT CHROMA-BUMP (a linear OKLab mix of a vivid pair\n// dips chroma through grey; the bump lifts it back). Falls back to uBaseColor when\n// uStopCount <= 1. Returns an OKLCh stop [L, C, h(rad)].\nvec3 samplePaletteOklch(float t) {\n if (uStopCount <= 1) return oklabToOklch(srgbToOklab(uBaseColor));\n float n = float(uStopCount);\n float ft = clamp(t, 0.0, 1.0) * (n - 1.0);\n int i0 = int(floor(ft));\n int i1 = min(i0 + 1, uStopCount - 1);\n float f = ft - float(i0);\n // Fetch adjacent stops (uPalette is gamma sRGB) → OKLab.\n vec3 labA = srgbToOklab(uPalette[i0]);\n vec3 labB = srgbToOklab(uPalette[i1]);\n vec3 lab = mix(labA, labB, f);\n vec3 lch = oklabToOklch(lab);\n // Midpoint chroma-bump: a bell (peaks at f=0.5) lifts C off the grey midpoint.\n lch.y += 0.03 * sin(PI * f);\n return lch;\n}\n\n// F9.R1 (BG.W-BLOB-SATELLITE-SHADE) — the per-satellite explicit-shade blend. The GL\n// color-seam widen value.js's hero blob asked for (the BA-VJS-5 / C-1 residual, the\n// W-GOO-REDRESS arm-B book discharged). DEFAULT OFF: uSatColorActive == 0 returns oklch\n// UNCHANGED (uniform control flow, zero cost, byte-identical to HEAD). When ON, each\n// satellite carrying a positive uSatColorAmt tints the fragments in its smin-field\n// neighbourhood toward its explicit shade — mixed in OKLab (the samplePaletteOklch\n// convention; no hue wrap). The proximity weight rides the SAME opacity-inflated distance\n// the sceneDistG satellite term uses, so a fading satellite's tint fades with it. The\n// body keeps the derived palette base (no uBodyColor fork — the ask is per-SATELLITE).\nvec3 blendSatColor(vec3 oklch, vec2 uv) {\n if (uSatColorActive == 0) return oklch;\n vec3 lab = oklchToOklab(oklch);\n for (int i = 0; i < MAX_SATS; i++) {\n if (i >= uSatCount) break;\n float amt = clamp(uSatColorAmt[i], 0.0, 1.0);\n if (amt <= 0.0) continue;\n // Proximity: 1 well inside satellite i, fading to 0 across the smin band. The\n // opacity-inflated distance matches sceneDistG's satellite term.\n float di = sdCircle(uv, uSatPos[i], uSatRadius[i]) + (1.0 - uSatOpacity[i]) * 0.3;\n float w = (1.0 - smoothstep(-uSatRadius[i], uSmoothK, di)) * amt;\n lab = mix(lab, srgbToOklab(uSatColor[i]), clamp(w, 0.0, 1.0));\n }\n return oklabToOklch(lab);\n}\n\nvoid main() {\n vec2 uv = vUv - 0.5;\n\n // AX.W16 (arm 5) — PRE-FBM bounding early-out. The oversized canvas (1.6x the\n // wrapper) runs the full fragment ALU — two 3-octave FBM evals + the OKLCh\n // round-trip + the lit/iridescence/SSS block — on a large transparent border\n // otherwise (~60% of the canvas is outside the droplet reach). Any fragment beyond\n // uMaxReach (the PADDED worst-case painted reach, uploaded so it never clips the\n // wet meniscus) writes transparent and returns BEFORE any of that work. This is a\n // transparent WRITE, NOT a GLSL discard: the pass is a pure premultiplied blend\n // with no depth, and discard disables the tiled-renderer fast path on mobile GPUs.\n // No fwidth is computed before the return, so there is no\n // derivative-in-non-uniform-control-flow hazard (the kept pixels compute their own\n // fwidth normally below). The pad covers the pointer-lean uv shift, so testing the\n // pre-deform uv is safe.\n if (dot(uv, uv) > uMaxReach * uMaxReach) {\n fragColor = vec4(0.0);\n return;\n }\n\n // Pointer deformation — honor the SIGN of uPointerAttraction (W10): a positive\n // attraction leans the body IN toward the cursor, a negative shies it AWAY. The\n // signed influence flows straight into the UV shift (no hardcoded repulsion).\n //\n // AY.W-BLOB-CONFIG D2 — the SIGN was INVERTED in the rendered result. The\n // sample-shift sign here was uv -= dir*influence; the live readback (an attraction\n // sweep over a HELD pointer) measured the body shifting MORE toward the cursor as\n // attraction went MORE NEGATIVE (a=-1 -> +0.081, a=0 -> +0.063, a=+1 -> +0.042) —\n // exactly inverted: a shy-away -1 LUNGED at the cursor, a lean-in +1 pulled back.\n // pointerDir = uPointer - uv is the toward-pointer direction in SAMPLE space; to\n // MOVE the rendered body TOWARD the pointer the sample must shift ALONG pointerDir\n // (sample the field from where the pointer is), so the sign is uv += dir*influence.\n // A positive attraction now shifts the body toward the cursor (leans in), a negative\n // shifts it away (shies) — the sign the comment + the demo slider always promised,\n // now true in the render.\n //\n // AX.W46 D5 — the falloff radius NARROWS 0.65 → 0.5 (the calm-lean reconciliation).\n // The W15 REDRESS widened it to 0.65 to clear a synthetic floor; the live π-lane\n // read the result as a LUNGE. The drama lives in the STRENGTH (pointerStrength,\n // dropped to 0.18 in types.ts), NOT the falloff — the falloff's job is purely to keep\n // the lean COHERENT across the creature so the body, satellites and trail all tilt\n // toward the cursor as ONE. At 0.5 the body (sitting ≈0.2 uv from the cursor on a\n // hover-flick) is still well inside the cutoff, so the whole creature tilts as one —\n // a gentle, coherent \"it notices you\" lean rather than the body lunging a body-width.\n if (uPointerActive > 0.5) {\n vec2 pointerDir = uPointer - uv;\n float pointerDist = length(pointerDir);\n float influence = smoothstep(0.5, 0.0, pointerDist) * uPointerAttraction * uPointerStrength;\n uv += normalize(pointerDir + 1e-6) * influence;\n }\n\n // The de-synced pulsing body radius — also reused below for the inner-glow scale.\n float bodyR = uBodyRadius + breath(uPulsePhase) * uPulseAmp;\n\n // Composite domain-warped membrane field WITH its analytic gradient (AX.W15).\n vec3 scene = sceneDistG(uv);\n float d = scene.x;\n vec2 fieldGrad = scene.yz;\n\n // Edit #1 — fwidth-based anti-aliased edge: derive the smoothstep half-width\n // from the SDF screen-space gradient so the edge stays ~1px regardless of zoom.\n float aa = max(fwidth(d), 1e-6);\n float alpha = 1.0 - smoothstep(-aa, aa, d);\n\n if (alpha < 0.001) {\n fragColor = vec4(0.0);\n return;\n }\n\n // Edit #4 — perceptually-uniform OKLCh variation. Gamma base → linear → OKLab\n // → OKLCh; perturb L/C/h; OKLCh → OKLab → linear; hue-preserving gamut clamp.\n // The base is the multi-stop palette sample (W11.b) — distributed across the\n // body/satellites by the color noise field — or uBaseColor when single-stop.\n float colorNoise = fbm(uv * uColorNoiseFreq + uTime * uColorNoiseSpeed, 3);\n vec3 oklch = samplePaletteOklch(colorNoise);\n // F9.R1 — per-satellite explicit shade (default no-op at uSatColorActive == 0).\n oklch = blendSatColor(oklch, uv);\n\n oklch.z += (colorNoise - 0.5) * uHueRange * (PI / 180.0); // hue swing, radians\n oklch.y = max(oklch.y + (colorNoise - 0.5) * uSatShift, 0.0); // chroma swing\n oklch.x = clamp(oklch.x + uBrightnessShift, 0.0, 1.0); // lightness bias\n\n // ── BD.W-GOO-CAROUSEL-DECK — the blob to meatball SHADING MORPH (uMorphT). ──\n // The user #1 ask: the goo should MORPH BLOB and MEATBALL from one to another\n // — a CONTINUOUS in-between, not a hard variant cut. The KEY FACT: the body\n // GEOMETRY is IDENTICAL across blob/meatball (the smin SDF field, the satellites,\n // the fwidth-AA — all computed ABOVE, before this gate). ONLY the SURFACE shading\n // (flat fill vs lit/shadow/iridescence/SSS) differs. So the morph is a uMorphT\n // scalar LERPING the SHADING — NOT a geometry rebuild, NOT a path interpolation.\n //\n // uMorphT = 0 -> the flat warm-cream blob (the STAGE-1 floor, byte-identical to\n // the old uStage > 0.5 early-return);\n // uMorphT = 1 -> the lit meatball (the full STAGE-2 dressing, byte-identical to\n // the old else path);\n // 0 < uMorphT < 1 -> the CONTINUOUS in-between (the morph the user asked for).\n //\n // uMorphT resolves from variant for back-compat (blob -> 0, meatball -> 1); a\n // consumer ANIMATING config.morphT 0..1 gets the live morph. The smin field is\n // byte-UNTOUCHED (the geometry is shared — that is the whole point).\n //\n // The flat color is computed ALWAYS (cheap); the EXPENSIVE dressing (the soft-shadow\n // secondary march) is gated uMorphT > 0.0 so a pure blob pays ZERO shadow-march\n // cost (the SLOW-fix discipline — a flat blob is as cheap as the old early-return).\n float morphT = clamp(uMorphT, 0.0, 1.0);\n\n // STAGE-1 flat fill — the warm-cream blob color, off the PRE-dressing oklch (the\n // dressing mutates oklch below, so the flat read must snapshot it here).\n vec3 flatOkl = gamutClampOklch(oklch);\n vec3 flatLin = oklabToLinearSrgb(oklchToOklab(flatOkl));\n vec3 flatRgb = clamp(linearToSrgb(flatLin), 0.0, 1.0);\n\n // If we are fully flat (a pure blob, morphT == 0), emit the flat fill + dither and\n // return — the byte-identical STAGE-1 floor, zero dressing cost.\n if (morphT <= 0.0) {\n float ign1 = fract(52.9829189 * fract(dot(gl_FragCoord.xy, vec2(0.06711056, 0.00583715))));\n flatRgb = clamp(flatRgb + (ign1 - 0.5) / 255.0, 0.0, 1.0);\n fragColor = vec4(flatRgb * alpha, alpha);\n return;\n }\n\n // Surface normal — from the ANALYTIC field gradient (AX.W15: the 4-tap is\n // deleted). Computed ONCE here and reused by the iridescence (W11.a), the\n // fake-SSS (W11.a), and the lit glass block (W9.b).\n vec3 N = surfaceNormalFromGrad(fieldGrad, d, bodyR);\n vec3 V = vec3(0.0, 0.0, 1.0);\n float thickness = clamp(-d / max(bodyR, 1e-4), 0.0, 1.0); // 0 at rim, ~1 deep in\n float fres = pow(1.0 - max(dot(N, V), 0.0), 2.5); // rim-weighted angle\n\n // ── W11.a iridescence — warm-biased IQ cosine palette driving OKLCh HUE ──\n //\n // A thin-film-like sheen on the RIM (fres-weighted), NOT the cold-blue default:\n // an IQ cosine palette (a + b*cos(2pi(c*t + d))) maps the Fresnel/edge angle +\n // the FBM color field + an animated thickness onto a HUE OFFSET biased to the\n // warm arc (uIridHue), with the chroma clamped to a warm-pearl band so the rim\n // reads cream/gold (congruent with the warm-cream-glass identity). Mixed into\n // OKLCh BEFORE the gamut clamp. Default LOW.\n if (uIridescence > 0.0) {\n float t = fres + 0.3 * colorNoise + uTime * uIridSpeed;\n // Cosine palette in HUE space, centred on the warm uIridHue (~0.18 turn of\n // warm sweep so the sheen shimmers gold→peach, never swinging to cold blue).\n float iridHue = uIridHue + 0.18 * PI * cos(2.0 * PI * t);\n float w = fres * uIridescence; // rim-weighted blend\n oklch.z = mix(oklch.z, iridHue, w);\n // Warm-pearl chroma cap: lift chroma toward a pale-pearl band, clamped.\n oklch.y = min(oklch.y + 0.04 * w, oklch.y + 0.08);\n oklch.x = min(oklch.x + 0.05 * w, 1.0); // a touch brighter at the sheen\n }\n\n // ── W11.a fake subsurface translucency — thickness inner-glow + back-light ──\n //\n // A bright translucent CORE fading to a light-leaking EDGE (the -d ramp) plus\n // the fast-SSS back-light (light wrapping through the thin rim). Both lift OKLCh\n // L and warm the hue, consuming the W9 normal. In OKLCh before the gamut clamp.\n if (uCoreGlow > 0.0 || uSssScale > 0.0) {\n // Beer-Lambert inner luminosity (AX.W15): a SATURATING 1 - exp(-k·thickness)\n // curve — a flat thick core with a fast warm rim falloff — NOT the linear\n // coreGlow·thickness ramp (which over-brightens deep interiors). k ≈ 3 reads\n // as glass depth.\n oklch.x = min(oklch.x + uCoreGlow * (1.0 - exp(-3.0 * thickness)), 1.0);\n // Fast-SSS back-light: light wrapping through the thin (low-thickness) rim.\n vec3 L = normalize(uLightDir + vec3(1e-6));\n float back = pow(clamp(dot(V, -(L + N * thickness)), 0.0, 1.0), uSssPower);\n float sss = back * uSssScale * (1.0 - thickness);\n oklch.x = min(oklch.x + sss, 1.0);\n // Warm the THIN leaking rim only (scale by 1 - thickness): the SSS hue-warm\n // shift rides the rim, not the core (AX.W15 — only the thin rim warms).\n oklch.z += sss * 0.1 * (1.0 - thickness);\n }\n\n // ── BC.W-GOOBLOB-MEATBALL — the soft contact shadow (T2, the GLSL twin). A procedural\n // soft shadow FOLLOWING the irregular silhouette: march from this fragment's uv\n // toward the in-plane projection of uLightDir; where the metaball field occludes the\n // light, DARKEN the OKLCh L — a soft grounded contact band under the dome\n // (PROCEDURAL, silhouette-following, unlike the static CSS gel-dome drop-shadow).\n // Rim-weighted (1 - thickness) so the lit interior stays bright. Gated uShadow > 0.5;\n // variant=blob (STAGE 1) ships shadowless via the uStage early-return above. ──\n if (uShadow > 0.5) {\n vec2 L2 = normalize(uLightDir.xy + vec2(1e-6));\n float sh = softShadow2D(uv, L2, max(aa, 0.004), bodyR * 1.5, max(uShadowSoftness, 4.0));\n // The contact band sits on the LOWER rim (the side AWAY from the light), gated by\n // the away-facing rim weight + a thin-rim Gaussian band (peak thickness ≈ 0.18) so\n // the deep-lit interior + the light-facing edge stay BRIGHT (the warm-cream body\n // mean + the proof:blob-warm-default floor hold). The 0.20 cap is a soft grounding.\n float away = clamp(-dot(normalize(fieldGrad + vec2(1e-6)), L2), 0.0, 1.0);\n float band = exp(-pow((thickness - 0.18) / 0.16, 2.0));\n float shadowDarken = (1.0 - sh) * away * band * 0.20;\n oklch.x = max(oklch.x - shadowDarken, 0.0);\n }\n\n oklch = gamutClampOklch(oklch);\n\n vec3 lin = oklabToLinearSrgb(oklchToOklab(oklch));\n\n // ── W9.b lit glass surface — Blinn-Phong glint + Fresnel rim, in LINEAR ──\n //\n // The lit terms enter lin in LINEAR space BEFORE the OETF (linearToSrgb)\n // and BEFORE the * alpha premultiply — a post-OETF apply double-gammas the\n // highlight and fringes the premultiplied edge (the named A5/A2 trap). The\n // prior flat inner-glow lift is SUBSUMED by the Fresnel rim (the curvature\n // read now comes from the surface normal, not a flat smoothstep). Gated behind\n // uLit so the flat fill stays the default (zero regression).\n if (uLit > 0.5) {\n // N, V, thickness are already computed in main() (reused by iridescence/SSS).\n vec3 L = normalize(uLightDir + vec3(1e-6)); // light direction\n vec3 H = normalize(L + V); // Blinn-Phong half-vector\n\n // Warm-cream specular glint — a near-white OKLCh TINT (L~0.97, C~0.03,\n // hue~85°) routed through the SAME spliced OKLCh matrices, NOT hardcoded\n // sRGB white (pure white reads cheap-CG). Linearized for the linear add.\n vec3 warmCream = oklabToLinearSrgb(oklchToOklab(vec3(0.97, 0.03, radians(85.0))));\n\n // ENERGY-CONSERVING Blinn-Phong (AX.W15 [9]): the (shininess+2)/8 factor\n // DECOUPLES shininess from strength (without it, raising shininess dims the\n // glint, so the two knobs fight). SPECULAR ANTIALIASING: the FBM membrane\n // makes the normal vary fast, so a tight glint (16-64) STROBES on small\n // dock-grid blobs. Widen the effective lobe where the normal varies\n // (Toksvig-style fwidth clamp) — drop shininess, NOT raise it. nVar reads\n // the screen-space normal derivative; a high-variance pixel softens the\n // exponent so the glint stays stable.\n float nVar = length(fwidth(N));\n float shininess = uSpecShininess / (1.0 + 24.0 * nVar);\n float energyNorm = (shininess + 2.0) / 8.0;\n float spec = pow(max(dot(N, H), 0.0), shininess) * uSpecStrength * energyNorm;\n\n // Fresnel/Schlick rim — fed uRimColor (the --foreground warm rim via the\n // /color leaf). FOREGROUND-AWARE MIN-CONTRAST GUARD (AX.W15 [10]):\n // a var(--primary) blob in dark mode resolves a rim near the BODY color, so\n // the rim washes out (no contrast). When the rim's luminance sits too close\n // to the body's, the guard CHROMA-REDUCES and L-LIFTS the rim stop (a\n // perceptual move, NOT a re-tint) so the curved rim always reads. Computed in\n // OKLCh so the lift is perceptual.\n vec3 rimOkl = oklabToOklch(srgbToOklab(uRimColor));\n float bodyL = oklch.x; // the post-perturb body lightness\n float dL = abs(rimOkl.x - bodyL);\n // If the rim is within 0.22 L of the body, push it AWAY (lift if the body is\n // dark, the dark-mode primary case; the chroma-reduce keeps it neutral-warm).\n float lack = clamp((0.22 - dL) / 0.22, 0.0, 1.0);\n rimOkl.x = clamp(mix(rimOkl.x, (bodyL < 0.5 ? 0.92 : 0.18), lack), 0.0, 1.0);\n rimOkl.y *= mix(1.0, 0.5, lack); // chroma-reduce toward a pale pearl\n vec3 rimLin = oklabToLinearSrgb(oklchToOklab(rimOkl));\n\n float rimFres = pow(1.0 - max(dot(N, V), 0.0), uRimPower);\n float rim = rimFres * uRimStrength * (1.0 - 0.6 * thickness);\n\n // Combine the two warm highlights and add in LINEAR. max(spec, rim*scale)\n // keeps the glint from stacking on the rim into a blown hotspot.\n //\n // AX.W46 D4 — CLAMP the linear highlight below unity before the add (the\n // belt-and-braces guard the re-derived specStrength makes rarely-binding but\n // never lets a worst-case normal blow to a hard white spot). The energy-\n // conserving Blinn-Phong CAN still spike on a grazing normal where the Toksvig\n // widen has not kicked in; capping the highlight magnitude at 0.85 (a contained\n // warm gleam, sub-unity) means the OETF clamp below can never crush a\n // pure-white pixel over the dome. The cap is on the highlight ALONE (not the\n // composited lin), so the body color underneath is untouched — it caps only\n // the additive catch-light's energy.\n vec3 highlight = max(warmCream * spec, rimLin * rim);\n highlight = min(highlight, vec3(0.85));\n lin += highlight;\n }\n\n vec3 rgb = clamp(linearToSrgb(lin), 0.0, 1.0); // MANDATORY OETF — closes the seam\n\n // ── BD.W-GOO-CAROUSEL-DECK — the blob to meatball SHADING MORPH compose. ──\n // rgb is the fully-dressed meatball surface; flatRgb (snapshotted before the\n // dressing) is the flat blob fill. The morph is a CONTINUOUS lerp between them on\n // morphT — at morphT==1 it is byte-identical to the dressed meatball, and the\n // morphT==0 case already returned the flat fill above. The geometry (alpha/silhouette)\n // is shared, so only the SURFACE shading interpolates (the morph from one to\n // another). The dither below applies to the composited result.\n rgb = mix(flatRgb, rgb, morphT);\n\n // IGN dither (AX.W15 [2][9]) — the low-chroma warm-cream dome BANDS on 8-bit\n // panels (visible Mach steps in the smooth L roll). Interleaved-gradient noise at\n // 1/255, applied AFTER linearToSrgb and BEFORE the *alpha premultiply (aurora\n // ships the same splice). A triangular ±0.5 LSB dither decorrelates the steps.\n float ign = fract(52.9829189 * fract(dot(gl_FragCoord.xy, vec2(0.06711056, 0.00583715))));\n rgb = clamp(rgb + (ign - 0.5) / 255.0, 0.0, 1.0);\n\n // Edit #8 — premultiply AFTER the OETF: straight-alpha gamma → premultiplied.\n fragColor = vec4(rgb * alpha, alpha);\n}";
520
+ //#endregion
521
+ //#region src/components/blob/composables/uploadBlobUniforms.ts
522
+ function Ae(e, t, n, r, i, a, o, s, c) {
523
+ let { U: l, satPosLocs: u, satRadLocs: d, satOpLocs: f, satColorLocs: p, satColorAmtLocs: m, trailPosLocs: h, trailRadLocs: g, paletteLocs: _ } = r, { params: v, rgb: y, simTimeMs: b, timeSec: x, resolveColor: S, rimColor: C, paletteStops: w } = c, { geometry: T, membrane: E, color: D, surface: O, interaction: k } = a;
524
+ e.useProgram(t), e.bindVertexArray(n), e.uniform2f(l.uResolution, i.width, i.height), e.uniform1f(l.uTime, b / 1e3), e.uniform3f(l.uBaseColor, y[0], y[1], y[2]);
525
+ let A = w, j = Math.min(A.length, 4);
526
+ e.uniform1i(l.uStopCount, j);
527
+ for (let t = 0; t < 4; t++) {
528
+ let n = _[t] ?? null, r = A[t];
529
+ if (r) {
530
+ let t = S(r);
531
+ e.uniform3f(n, t[0], t[1], t[2]);
532
+ } else e.uniform3f(n, y[0], y[1], y[2]);
533
+ }
534
+ let M = c.satColors ?? [], N = +!!M.some((e) => !!e);
535
+ e.uniform1i(l.uSatColorActive, N);
536
+ for (let t = 0; t < 4; t++) {
537
+ let n = p[t] ?? null, r = m[t] ?? null, i = M[t];
538
+ if (i) {
539
+ let t = S(i);
540
+ e.uniform3f(n, t[0], t[1], t[2]), e.uniform1f(r, 1);
541
+ } else e.uniform3f(n, y[0], y[1], y[2]), e.uniform1f(r, 0);
542
+ }
543
+ let P = o.pointer.value, F = k.pointerAttraction + v.pointerAttraction;
544
+ e.uniform2f(l.uPointer, P.x * .5 * R, P.y * .5 * R), e.uniform1f(l.uPointerActive, +!!o.active.value), e.uniform1f(l.uPointerAttraction, F), e.uniform1f(l.uPointerStrength, k.pointerStrength * R);
545
+ let I = Math.max(0, Math.min(1, F)), L = o.velocity.value;
546
+ e.uniform2f(l.uVelocity, L.x * .5 * R, L.y * .5 * R), e.uniform1f(l.uStretch, k.stretch);
547
+ let z = o.trailSources(T.satelliteRadius * .7 * I);
548
+ e.uniform1i(l.uTrailCount, z.count);
549
+ for (let t = 0; t < 15; t++) {
550
+ let n = h[t] ?? null, r = g[t] ?? null, i = z.sources[t];
551
+ i ? (e.uniform2f(n, i.x * .5 * R, i.y * .5 * R), e.uniform1f(r, i.radius * R)) : (e.uniform2f(n, 0, 0), e.uniform1f(r, 0));
552
+ }
553
+ e.uniform1f(l.uBodyRadius, T.bodyRadius * R), e.uniform1f(l.uPulsePhase, x * E.pulseFreq * v.pulseFreq * Math.PI * 2);
554
+ let B = o.pulse.value * k.clickImpulse;
555
+ e.uniform1f(l.uPulseAmp, (E.pulseAmp * v.pulseAmp / .015 + B) * R), e.uniform1f(l.uNoiseAmp, E.noiseAmp * v.noiseAmp / .025 * R), e.uniform1f(l.uNoiseFreq, E.noiseFreq), e.uniform1f(l.uNoiseSpeed, E.noiseSpeed), e.uniform1f(l.uWarpAmp, E.warpAmp);
556
+ let V = T.orbitRadius * 1.2 * (1 + T.eccentricity), H = E.smoothK * v.smoothK, U = Math.max(0, V - T.satelliteRadius - T.bodyRadius), ee = H > 0 ? Math.min(1.25, 1 + U / H) : 1;
557
+ e.uniform1f(l.uSmoothK, H * ee * R), e.uniform1f(l.uMerge, +(E.merge === "circular"));
558
+ let W = typeof a.morphT == "number" ? Math.max(0, Math.min(1, a.morphT)) : a.variant === "blob" ? 0 : 1;
559
+ e.uniform1f(l.uMorphT, W), e.uniform1f(l.uStage, +(W <= 0));
560
+ let te = (a.surface.fissionAmp ?? 0) > 0 ? ae * 1.12 : 0, ne = Math.max(V, te) + T.satelliteRadius, re = (Math.max(T.bodyRadius, ne) + H * ee + E.noiseAmp * v.noiseAmp / .025 + Math.abs(o.pulse.value) * k.clickImpulse) * R + .1;
561
+ e.uniform1f(l.uMaxReach, re), e.uniform1f(l.uHueRange, D.hueRange + v.hueRange), e.uniform1f(l.uSatShift, D.satShift + v.satShift), e.uniform1f(l.uBrightnessShift, D.brightnessShift + v.brightnessShift), e.uniform1f(l.uColorNoiseFreq, D.colorNoiseFreq), e.uniform1f(l.uColorNoiseSpeed, D.colorNoiseSpeed);
562
+ let G = W > 0;
563
+ e.uniform1f(l.uLit, G && O.lit ? 1 : 0);
564
+ let K = S(C);
565
+ e.uniform3f(l.uRimColor, K[0], K[1], K[2]), e.uniform3f(l.uLightDir, O.lightDir[0], O.lightDir[1], O.lightDir[2]), e.uniform1f(l.uSpecStrength, O.specStrength), e.uniform1f(l.uSpecShininess, O.specShininess), e.uniform1f(l.uRimPower, O.rimPower), e.uniform1f(l.uRimStrength, O.rimStrength), e.uniform1f(l.uShadow, G && O.shadow ? 1 : 0), e.uniform1f(l.uShadowSoftness, O.shadowSoftness), e.uniform1f(l.uIridescence, O.iridescence * v.iridScale), e.uniform1f(l.uIridHue, O.iridHue * (Math.PI / 180)), e.uniform1f(l.uIridSpeed, O.iridSpeed), e.uniform1f(l.uSssScale, O.sssScale * v.iridScale), e.uniform1f(l.uSssPower, O.sssPower), e.uniform1f(l.uCoreGlow, O.coreGlow);
566
+ let q = s.sources;
567
+ e.uniform1i(l.uSatCount, q.length);
568
+ for (let t = 0; t < 4; t++) {
569
+ let n = u[t] ?? null, r = d[t] ?? null, i = f[t] ?? null, a = q[t];
570
+ a ? (e.uniform2f(n, a.x * R, a.y * R), e.uniform1f(r, a.radius * R), e.uniform1f(i, a.opacity)) : (e.uniform2f(n, 0, 0), e.uniform1f(r, 0), e.uniform1f(i, 0));
571
+ }
572
+ e.clearColor(0, 0, 0, 0), e.clear(e.COLOR_BUFFER_BIT), e.drawArrays(e.TRIANGLES, 0, 6), e.bindVertexArray(null);
573
+ }
574
+ //#endregion
575
+ //#region src/components/blob/composables/buildMetaballProgram.ts
576
+ var je = "[GooBlob]";
577
+ function Me(e) {
578
+ let t = p(e, e.VERTEX_SHADER, xe, je), n = p(e, e.FRAGMENT_SHADER, ke, je), r = f(e, t, n, je);
579
+ e.useProgram(r);
580
+ let i = e.createVertexArray();
581
+ e.bindVertexArray(i);
582
+ let a = e.createBuffer();
583
+ e.bindBuffer(e.ARRAY_BUFFER, a), e.bufferData(e.ARRAY_BUFFER, new Float32Array([
584
+ -1,
585
+ -1,
586
+ 1,
587
+ -1,
588
+ -1,
589
+ 1,
590
+ -1,
591
+ 1,
592
+ 1,
593
+ -1,
594
+ 1,
595
+ 1
596
+ ]), e.STATIC_DRAW);
597
+ let o = e.getAttribLocation(r, "aPosition");
598
+ e.enableVertexAttribArray(o), e.vertexAttribPointer(o, 2, e.FLOAT, !1, 0, 0);
599
+ let s = {};
600
+ for (let t of ce) s[t] = e.getUniformLocation(r, t);
601
+ let c = [], l = [], u = [], d = [], m = [];
602
+ for (let t = 0; t < 4; t++) c.push(e.getUniformLocation(r, `uSatPos[${t}]`)), l.push(e.getUniformLocation(r, `uSatRadius[${t}]`)), u.push(e.getUniformLocation(r, `uSatOpacity[${t}]`)), d.push(e.getUniformLocation(r, `uSatColor[${t}]`)), m.push(e.getUniformLocation(r, `uSatColorAmt[${t}]`));
603
+ let h = [], g = [];
604
+ for (let t = 0; t < 15; t++) h.push(e.getUniformLocation(r, `uTrailPos[${t}]`)), g.push(e.getUniformLocation(r, `uTrailRadius[${t}]`));
605
+ let _ = [];
606
+ for (let t = 0; t < 4; t++) _.push(e.getUniformLocation(r, `uPalette[${t}]`));
607
+ return e.enable(e.BLEND), e.blendFunc(e.ONE, e.ONE_MINUS_SRC_ALPHA), {
608
+ prog: r,
609
+ vs: t,
610
+ fs: n,
611
+ vao: i,
612
+ buf: a,
613
+ locs: {
614
+ U: s,
615
+ satPosLocs: c,
616
+ satRadLocs: l,
617
+ satOpLocs: u,
618
+ satColorLocs: d,
619
+ satColorAmtLocs: m,
620
+ trailPosLocs: h,
621
+ trailRadLocs: g,
622
+ paletteLocs: _
623
+ }
624
+ };
625
+ }
626
+ //#endregion
627
+ //#region src/components/blob/shaders/metaball.wgsl.ts
628
+ var Ne = `
629
+ const MAX_SATS: i32 = 4;
630
+ const TRAIL_N: i32 = 15;
631
+ const MAX_BLOB_STOPS: i32 = 4;
632
+ const PI: f32 = 3.141592653589793;
633
+
634
+ // ── Uniforms (the typed-struct source-of-truth — see uniformBridgeWGPU.ts) ──
635
+ // Scalars packed into vec4 lanes; per-satellite / per-trail / per-palette rows packed
636
+ // into a vec4 so the array stride is the natural 16 bytes (no std140 stride trap — the
637
+ // parity-blowout suspect the wave's §Triumvirate names).
638
+ struct Uniforms {
639
+ // s0: (uTime, uBodyRadius, uPulsePhase, uPulseAmp)
640
+ s0: vec4<f32>,
641
+ // s1: (uNoiseAmp, uNoiseFreq, uNoiseSpeed, uWarpAmp)
642
+ s1: vec4<f32>,
643
+ // s2: (uSmoothK, uMerge, uMaxReach, uLit)
644
+ s2: vec4<f32>,
645
+ // s3: (uSpecStrength, uSpecShininess, uRimPower, uRimStrength)
646
+ s3: vec4<f32>,
647
+ // s4: (uIridescence, uIridHue, uIridSpeed, uSssScale)
648
+ s4: vec4<f32>,
649
+ // s5: (uSssPower, uCoreGlow, uHueRange, uSatShift)
650
+ s5: vec4<f32>,
651
+ // s6: (uBrightnessShift, uColorNoiseFreq, uColorNoiseSpeed, uStretch)
652
+ s6: vec4<f32>,
653
+ // s7: (uPointerActive, uPointerAttraction, uPointerStrength, uStage)
654
+ // BC.W-GOOBLOB-PLAIN — uStage gates the STAGE-1 stripped floor: 1.0 = the plain
655
+ // shadowless lightless fill-only floor (variant="blob"); 0.0 = the full lit
656
+ // pipeline (variant="meatball" / STAGE 2). It rides the spare s7.w lane the typed-
657
+ // struct SoT (uniformBridgeWGPU.ts) reserved.
658
+ s7: vec4<f32>,
659
+ // ptr: (uPointer.x, uPointer.y, uVelocity.x, uVelocity.y)
660
+ ptr: vec4<f32>,
661
+ // base: (uBaseColor.rgb, _pad)
662
+ base: vec4<f32>,
663
+ // rim: (uRimColor.rgb, _pad)
664
+ rim: vec4<f32>,
665
+ // light: (uLightDir.xyz, _pad)
666
+ light: vec4<f32>,
667
+ // res: (uResolution.x, uResolution.y, uShadow, uShadowSoftness)
668
+ // BC.W-GOOBLOB-MEATBALL — the soft-shadow march rides the spare res.z/res.w lanes the
669
+ // typed-struct SoT (uniformBridgeWGPU.ts) reserved (the EXTEND, never a re-fork): res.z
670
+ // = uShadow (1.0 = the variant=meatball shadow ON), res.w = uShadowSoftness (the
671
+ // penumbra hardness, inverse light-source size → 4-48).
672
+ res: vec4<f32>,
673
+ // ints: (uStopCount, uSatCount, uTrailCount, _pad)
674
+ ints: vec4<i32>,
675
+ palette: array<vec4<f32>, 4>,
676
+ satPos: array<vec4<f32>, 4>, // (pos.x, pos.y, radius, opacity)
677
+ trailPos: array<vec4<f32>, 15>, // (pos.x, pos.y, radius, _pad)
678
+ };
679
+
680
+ @group(0) @binding(0) var<uniform> u: Uniforms;
681
+
682
+ // Noise + FBM (BC.W-CARVE6 -> metaball-noise.wgsl) — spliced AFTER the FBM_ROT_WGSL chunk
683
+ // below. NB: do NOT name the chunk with a template-interpolation form in a WGSL comment —
684
+ // it injects the whole multi-line chunk into this // comment line and breaks the parse
685
+ // (BD.W-VIZ-BROKEN-FIX D3c).
686
+ ${l}
687
+
688
+ const FBM_LACUNARITY: f32 = 1.8;
689
+ const FBM_GAIN: f32 = 0.42;
690
+
691
+ // ── Noise (blob-LOCAL 3D-p3 hash + IQ analytic-derivative gradient noise) ──
692
+ fn hash21(p: vec2<f32>) -> f32 {
693
+ var p3 = fract(vec3<f32>(p.x, p.y, p.x) * 0.1031);
694
+ p3 = p3 + dot(p3, p3.yzx + 33.33);
695
+ return fract((p3.x + p3.y) * p3.z);
696
+ }
697
+
698
+ // IQ analytic-derivative gradient noise — value in .x, ANALYTIC gradient (d/dx, d/dy) in
699
+ // .yz, from one eval. The quintic fade has a continuous 2nd derivative.
700
+ fn noised(p: vec2<f32>) -> vec3<f32> {
701
+ let i = floor(p);
702
+ let f = fract(p);
703
+ let uu = f * f * f * (f * (f * 6.0 - 15.0) + 10.0);
704
+ let du = 30.0 * f * f * (f * (f - 2.0) + 1.0);
705
+
706
+ let ga = -1.0 + 2.0 * vec2<f32>(hash21(i + vec2<f32>(0.0, 0.0)), hash21(i + vec2<f32>(7.3, 0.0)));
707
+ let gb = -1.0 + 2.0 * vec2<f32>(hash21(i + vec2<f32>(1.0, 0.0)), hash21(i + vec2<f32>(8.3, 0.0)));
708
+ let gc = -1.0 + 2.0 * vec2<f32>(hash21(i + vec2<f32>(0.0, 1.0)), hash21(i + vec2<f32>(7.3, 1.0)));
709
+ let gd = -1.0 + 2.0 * vec2<f32>(hash21(i + vec2<f32>(1.0, 1.0)), hash21(i + vec2<f32>(8.3, 1.0)));
710
+
711
+ let va = dot(ga, f - vec2<f32>(0.0, 0.0));
712
+ let vb = dot(gb, f - vec2<f32>(1.0, 0.0));
713
+ let vc = dot(gc, f - vec2<f32>(0.0, 1.0));
714
+ let vd = dot(gd, f - vec2<f32>(1.0, 1.0));
715
+
716
+ let n = va + uu.x * (vb - va) + uu.y * (vc - va) + uu.x * uu.y * (va - vb - vc + vd);
717
+ let value = 0.5 + 0.5 * n;
718
+
719
+ let grad =
720
+ ga + uu.x * (gb - ga) + uu.y * (gc - ga) + uu.x * uu.y * (ga - gb - gc + gd) +
721
+ du * (vec2<f32>(uu.y, uu.x) * (va - vb - vc + vd) + vec2<f32>(vb, vc) - va);
722
+ return vec3<f32>(value, 0.5 * grad);
723
+ }
724
+
725
+ fn fbm(p0: vec2<f32>, octaves: i32) -> f32 {
726
+ var value = 0.0;
727
+ var amp = 0.5;
728
+ var freq = 1.0;
729
+ var p = p0;
730
+ for (var i = 0; i < 4; i = i + 1) {
731
+ if (i >= octaves) { break; }
732
+ value = value + amp * noised(p * freq).x;
733
+ p = FBM_ROT * p;
734
+ freq = freq * FBM_LACUNARITY;
735
+ amp = amp * FBM_GAIN;
736
+ }
737
+ return value;
738
+ }
739
+
740
+ // FBM with ANALYTIC GRADIENT — value in .x, ∂/∂x, ∂/∂y in .yz. The gradient accumulates
741
+ // noised()'s analytic gradient per octave, chain-ruled through the per-octave frequency
742
+ // scale AND the FBM_ROT rotation (the keystone feed for the analytic surface normal).
743
+ fn fbmG(p: vec2<f32>, octaves: i32) -> vec3<f32> {
744
+ var value = 0.0;
745
+ var grad = vec2<f32>(0.0, 0.0);
746
+ var amp = 0.5;
747
+ var freq = 1.0;
748
+ var rotAccum = mat2x2<f32>(1.0, 0.0, 0.0, 1.0);
749
+ var pp = p;
750
+ for (var i = 0; i < 4; i = i + 1) {
751
+ if (i >= octaves) { break; }
752
+ let n = noised(pp * freq);
753
+ value = value + amp * n.x;
754
+ grad = grad + amp * freq * (transpose(rotAccum) * n.yz);
755
+ pp = FBM_ROT * pp;
756
+ freq = freq * FBM_LACUNARITY;
757
+ amp = amp * FBM_GAIN;
758
+ rotAccum = FBM_ROT * rotAccum;
759
+ }
760
+ return vec3<f32>(value, grad);
761
+ }
762
+
763
+ // One domain-warp pass with the ANALYTIC GRADIENT carried (warp-Jacobian approximation).
764
+ fn fbmWarpedG(p: vec2<f32>, octaves: i32, warpAmp: f32) -> vec3<f32> {
765
+ if (warpAmp <= 0.0) { return fbmG(p, octaves); }
766
+ let q = vec2<f32>(fbm(p + vec2<f32>(0.0, 0.0), octaves),
767
+ fbm(p + vec2<f32>(5.2, 1.3), octaves));
768
+ return fbmG(p + warpAmp * (q - 0.5), octaves);
769
+ }
770
+
771
+
772
+ // ── SDF body (value+gradient circle + the IQ normalized smin, value+gradient form) ──
773
+ fn sdgCircle(p: vec2<f32>, center: vec2<f32>, radius: f32) -> vec3<f32> {
774
+ let d = p - center;
775
+ let len = length(d);
776
+ var grad = vec2<f32>(0.0, 1.0);
777
+ if (len > 1e-6) { grad = d / len; }
778
+ return vec3<f32>(len - radius, grad);
779
+ }
780
+
781
+ fn sminQuadraticG(a: vec3<f32>, b: vec3<f32>, k0: f32) -> vec3<f32> {
782
+ let k = k0 * 4.0;
783
+ let h = max(k - abs(a.x - b.x), 0.0) / k;
784
+ let m = h * h * k * 0.25;
785
+ var w = 1.0 - 0.5 * h * h;
786
+ if (a.x < b.x) { w = 0.5 * h * h; }
787
+ let dist = min(a.x, b.x) - m;
788
+ let grad = mix(a.yz, b.yz, w);
789
+ return vec3<f32>(dist, grad);
790
+ }
791
+
792
+ fn sminCircularG(a: vec3<f32>, b: vec3<f32>, k0: f32) -> vec3<f32> {
793
+ let k = k0 * (1.0 / (1.0 - sqrt(0.5)));
794
+ let h = max(k - abs(a.x - b.x), 0.0) / k;
795
+ let m = k * 0.5 * (1.0 + h - sqrt(1.0 - h * (h - 2.0)));
796
+ var w = 1.0 - 0.5 * h;
797
+ if (a.x < b.x) { w = 0.5 * h; }
798
+ let dist = min(a.x, b.x) - m;
799
+ let grad = mix(a.yz, b.yz, w);
800
+ return vec3<f32>(dist, grad);
801
+ }
802
+
803
+ fn sminG(a: vec3<f32>, b: vec3<f32>, k: f32) -> vec3<f32> {
804
+ if (u.s2.y > 0.5) { return sminCircularG(a, b, k); }
805
+ return sminQuadraticG(a, b, k);
806
+ }
807
+
808
+ ${a}
809
+ ${s}
810
+
811
+ // OKLCh gamut clamp + palette sample + breath (BC.W-CARVE6 -> metaball-palette.wgsl)
812
+ // — spliced AFTER the OKLCH_MATRICES_WGSL chunk above (its matrix source). NB: do NOT
813
+ // write the chunk's identifier with a template-interpolation form in a WGSL comment — it
814
+ // would inject the whole multi-line matrices chunk INTO this // comment line and break the
815
+ // parse at the first injected newline (BD.W-VIZ-BROKEN-FIX D3c — the live WGSL syntax error
816
+ // that silently fell every metaball/goo-dot to the WebGL2 net, masking the WGSL primary).
817
+
818
+ // ── OKLCh gamut clamp (hue-preserving inward chroma clamp — blob-local) ──
819
+ fn inGamut(lin: vec3<f32>) -> bool {
820
+ return all(lin >= vec3<f32>(0.0)) && all(lin <= vec3<f32>(1.0));
821
+ }
822
+ fn gamutClampOklch(lch: vec3<f32>) -> vec3<f32> {
823
+ let lin = oklabToLinearSrgb(oklchToOklab(lch));
824
+ if (inGamut(lin)) { return lch; }
825
+ var lo = 0.0;
826
+ var hi = lch.y;
827
+ for (var i = 0; i < 16; i = i + 1) {
828
+ let mid = 0.5 * (lo + hi);
829
+ let test = vec3<f32>(lch.x, mid, lch.z);
830
+ if (inGamut(oklabToLinearSrgb(oklchToOklab(test)))) { lo = mid; } else { hi = mid; }
831
+ }
832
+ return vec3<f32>(lch.x, lo, lch.z);
833
+ }
834
+
835
+ // W11.b — sample the multi-stop palette at t, OKLab mix + midpoint chroma-bump. Returns
836
+ // an OKLCh stop [L, C, h(rad)]. Falls back to uBaseColor when uStopCount <= 1.
837
+ fn samplePaletteOklch(t: f32) -> vec3<f32> {
838
+ let uStopCount = u.ints.x;
839
+ if (uStopCount <= 1) { return oklabToOklch(srgbToOklab(u.base.rgb)); }
840
+ let n = f32(uStopCount);
841
+ let ft = clamp(t, 0.0, 1.0) * (n - 1.0);
842
+ let i0 = i32(floor(ft));
843
+ let i1 = min(i0 + 1, uStopCount - 1);
844
+ let f = ft - f32(i0);
845
+ let labA = srgbToOklab(u.palette[i0].rgb);
846
+ let labB = srgbToOklab(u.palette[i1].rgb);
847
+ let lab = mix(labA, labB, f);
848
+ var lch = oklabToOklch(lab);
849
+ lch.y = lch.y + 0.03 * sin(PI * f);
850
+ return lch;
851
+ }
852
+
853
+ // AX.W15 — de-synced breath (three DETUNED sines at irrational ratios).
854
+ fn breath(phase: f32) -> f32 {
855
+ return (sin(phase) + 0.5 * sin(phase * 1.4444 + 1.7) + 0.28 * sin(phase * 0.31 + 4.1)) / 1.78;
856
+ }
857
+
858
+
859
+ // AX.W15 — the composite SDF field WITH its ANALYTIC GRADIENT vec3(dist, ∂/∂x, ∂/∂y).
860
+ fn sceneDistG(uv: vec2<f32>) -> vec3<f32> {
861
+ let uBodyRadius = u.s0.y;
862
+ let uPulsePhase = u.s0.z;
863
+ let uPulseAmp = u.s0.w;
864
+ let uNoiseAmp = u.s1.x;
865
+ let uNoiseFreq = u.s1.y;
866
+ let uNoiseSpeed = u.s1.z;
867
+ let uWarpAmp = u.s1.w;
868
+ let uSmoothK = u.s2.x;
869
+ let uTime = u.s0.x;
870
+ let uVelocity = u.ptr.zw;
871
+ let uStretch = u.s6.w;
872
+ let uSatCount = u.ints.y;
873
+ let uTrailCount = u.ints.z;
874
+
875
+ let bodyR = uBodyRadius + breath(uPulsePhase) * uPulseAmp;
876
+
877
+ // Velocity-driven VOLUME-PRESERVING squash-and-stretch (tanh-saturated).
878
+ var bodyUv = uv;
879
+ var ax = vec2<f32>(1.0, 0.0);
880
+ var perp = vec2<f32>(0.0, 1.0);
881
+ var sa = 1.0;
882
+ let speed = length(uVelocity);
883
+ let squashed = uStretch > 0.0 && speed > 1e-4;
884
+ if (squashed) {
885
+ ax = uVelocity / speed;
886
+ perp = vec2<f32>(-ax.y, ax.x);
887
+ sa = 1.0 + tanh(speed * 1.6) * uStretch;
888
+ bodyUv = vec2<f32>(dot(uv, ax) / sa, dot(uv, perp) * sa);
889
+ }
890
+
891
+ // Domain-warped FBM displacement WITH its analytic gradient.
892
+ let fbmv = fbmWarpedG(bodyUv * uNoiseFreq + uTime * uNoiseSpeed, 3, uWarpAmp);
893
+ let bodyDisplacement = (fbmv.x - 0.5) * uNoiseAmp;
894
+ let dispGradBody = uNoiseAmp * uNoiseFreq * fbmv.yz;
895
+
896
+ let bodyG = sdgCircle(bodyUv, vec2<f32>(0.0), bodyR + bodyDisplacement);
897
+ let bodyGradBody = bodyG.yz - dispGradBody;
898
+
899
+ var bodyGradUv: vec2<f32>;
900
+ if (squashed) {
901
+ let scaled = vec2<f32>(bodyGradBody.x / sa, bodyGradBody.y * sa);
902
+ bodyGradUv = scaled.x * ax + scaled.y * perp;
903
+ } else {
904
+ bodyGradUv = bodyGradBody;
905
+ }
906
+ var d = vec3<f32>(bodyG.x, bodyGradUv);
907
+
908
+ // Satellites — smin-merged into the body.
909
+ for (var i = 0; i < MAX_SATS; i = i + 1) {
910
+ if (i >= uSatCount) { break; }
911
+ let s = u.satPos[i];
912
+ var satG = sdgCircle(uv, s.xy, s.z);
913
+ satG.x = satG.x + (1.0 - s.w) * 0.3;
914
+ d = sminG(d, satG, uSmoothK);
915
+ }
916
+
917
+ // Pointer trail — a decaying-radius pseudopod.
918
+ for (var i = 0; i < TRAIL_N; i = i + 1) {
919
+ if (i >= uTrailCount) { break; }
920
+ let tp = u.trailPos[i];
921
+ let trailG = sdgCircle(uv, tp.xy, tp.z);
922
+ d = sminG(d, trailG, uSmoothK);
923
+ }
924
+ return d;
925
+ }
926
+
927
+ // AX.W15 — the analytic surface normal from the field gradient.
928
+ fn surfaceNormalFromGrad(grad2d: vec2<f32>, d: f32, bodyR: f32) -> vec3<f32> {
929
+ let g = normalize(grad2d + vec2<f32>(1e-6));
930
+ let interior = clamp(-d / max(bodyR, 1e-4), 0.0, 1.0);
931
+ let z = sqrt(max(0.0, 1.0 - (1.0 - interior) * (1.0 - interior)));
932
+ return normalize(vec3<f32>(g * (1.0 - z), z) + vec3<f32>(0.0, 0.0, 1e-6));
933
+ }
934
+
935
+ // ── BC.W-GOOBLOB-MEATBALL — the 2D SDF soft-shadow march (IQ rmshadows improved-penumbra,
936
+ // research/viz/goo-blob.md §2.3). A procedural soft contact shadow that FOLLOWS the
937
+ // irregular metaball silhouette (NOT a hard disc / box shadow). Marches a ray from ro
938
+ // along rd (the in-plane projection of uLightDir), accumulating the closest miss via
939
+ // the Aaltonen penumbra (y = h*h/(2*ph) + d = sqrt(h*h - y*y)) that kills the
940
+ // banding the naive res = min(res, h/(w*t)) shows. CHEAP: 24 steps, re-uses the SAME
941
+ // sceneDistG().x field (NO separate field re-eval, NO FBO/multi-pass — the procedural
942
+ // field needs none, §2.3). w is the penumbra hardness (inverse light-source size →
943
+ // uShadowSoftness). It is derivative-FREE (no fwidth/dpdx/dpdy), so it is fragment-safe
944
+ // here. Returns 1.0 (fully lit) → 0.0 (fully occluded). ──
945
+ fn softShadow2D(ro: vec2<f32>, rd: vec2<f32>, mint: f32, maxt: f32, w: f32) -> f32 {
946
+ var res = 1.0;
947
+ var ph = 1e20;
948
+ var t = mint;
949
+ for (var i = 0; i < 24; i = i + 1) {
950
+ if (t >= maxt) { break; }
951
+ let h = sceneDistG(ro + rd * t).x;
952
+ if (h < 0.001) { return 0.0; }
953
+ let y = h * h / (2.0 * ph);
954
+ let dd = sqrt(max(h * h - y * y, 0.0));
955
+ res = min(res, dd / (w * max(0.001, t - y)));
956
+ ph = h;
957
+ t = t + h;
958
+ }
959
+ return clamp(res, 0.0, 1.0);
960
+ }
961
+
962
+ // ── Full-screen triangle vertex stage (the pilot idiom — no vertex buffer) ──
963
+ struct VSOut {
964
+ @builtin(position) pos: vec4<f32>,
965
+ @location(0) uv: vec2<f32>,
966
+ };
967
+
968
+ @vertex
969
+ fn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {
970
+ var p = vec2<f32>(-1.0, -1.0);
971
+ if (vi == 1u) { p = vec2<f32>(3.0, -1.0); }
972
+ else if (vi == 2u) { p = vec2<f32>(-1.0, 3.0); }
973
+ var out: VSOut;
974
+ out.pos = vec4<f32>(p, 0.0, 1.0);
975
+ // vUv = aPos * 0.5 + 0.5 (the metaball.vert convention).
976
+ out.uv = p * 0.5 + 0.5;
977
+ return out;
978
+ }
979
+
980
+ // ── Fragment stage (the main() transcription) ──
981
+ @fragment
982
+ fn fs_main(in: VSOut) -> @location(0) vec4<f32> {
983
+ let uTime = u.s0.x;
984
+ let uBodyRadius = u.s0.y;
985
+ let uPulsePhase = u.s0.z;
986
+ let uPulseAmp = u.s0.w;
987
+ let uMaxReach = u.s2.z;
988
+ let uLit = u.s2.w;
989
+ let uPointerActive = u.s7.x;
990
+ let uPointerAttraction = u.s7.y;
991
+ let uPointerStrength = u.s7.z;
992
+ // BC.W-GOOBLOB-PLAIN — the STAGE-1 gate (1.0 = the plain shadowless fill-only floor).
993
+ let uStage = u.s7.w;
994
+ // BD.W-GOO-CAROUSEL-DECK — the blob to meatball SHADING-MORPH scalar (the base.w pad
995
+ // lane; the typed-struct SoT writes it). 0 = flat blob, 1 = lit meatball, in-between
996
+ // lerps the surface shading (the smin geometry is shared).
997
+ let uMorphT = clamp(u.base.w, 0.0, 1.0);
998
+ let uPointer = u.ptr.xy;
999
+ let uHueRange = u.s5.z;
1000
+ let uSatShift = u.s5.w;
1001
+ let uBrightnessShift = u.s6.x;
1002
+ let uColorNoiseFreq = u.s6.y;
1003
+ let uColorNoiseSpeed = u.s6.z;
1004
+ let uIridescence = u.s4.x;
1005
+ let uIridHue = u.s4.y;
1006
+ let uIridSpeed = u.s4.z;
1007
+ let uSssScale = u.s4.w;
1008
+ let uSssPower = u.s5.x;
1009
+ let uCoreGlow = u.s5.y;
1010
+ let uSpecStrength = u.s3.x;
1011
+ let uSpecShininess = u.s3.y;
1012
+ let uRimPower = u.s3.z;
1013
+ let uRimStrength = u.s3.w;
1014
+ let uLightDir = u.light.xyz;
1015
+ let uRimColor = u.rim.rgb;
1016
+ // BC.W-GOOBLOB-MEATBALL — the soft-shadow gate + penumbra hardness (res.z/res.w lanes).
1017
+ let uShadow = u.res.z;
1018
+ let uShadowSoftness = u.res.w;
1019
+
1020
+ var uv = in.uv - 0.5;
1021
+
1022
+ // PRE-FBM bounding test (BD.W-VIZ-BROKEN-FIX D3c — the uniformity fix). The GLSL fallback
1023
+ // EARLY-RETURNS transparent here (a perf skip of the FBM border); WGSL CANNOT — an early
1024
+ // return predicated on the per-fragment uv makes the fwidth(d)/fwidth(Nh) calls below
1025
+ // reachable only through non-uniform control flow, which the WGSL uniformity analyzer
1026
+ // REJECTS (fwidth must only be called from uniform control flow) so the metaball WGSL
1027
+ // module never compiled and every GooBlob + goo-dot fell silently to the WebGL2 net (the
1028
+ // "broken TOTALLY" the user reports, the un-exercised Safari-primary surface). So the
1029
+ // bound is folded into the FINAL alpha (a flag, NOT a control-flow return): the derivative
1030
+ // builtins stay in UNIFORM control flow, and an outside fragment writes transparent at the
1031
+ // end — gestalt-identical to the GLSL early-out, just without the WGSL-illegal pre-
1032
+ // derivative return. sceneDistG is derivative-FREE so running it on the border costs only
1033
+ // ALU (no correctness hazard); the real GPU swallows it.
1034
+ let inBounds = dot(uv, uv) <= uMaxReach * uMaxReach;
1035
+
1036
+ // Pointer deformation — sign per AY.W-BLOB-CONFIG D2.
1037
+ if (uPointerActive > 0.5) {
1038
+ let pointerDir = uPointer - uv;
1039
+ let pointerDist = length(pointerDir);
1040
+ let influence = smoothstep(0.5, 0.0, pointerDist) * uPointerAttraction * uPointerStrength;
1041
+ uv = uv + normalize(pointerDir + vec2<f32>(1e-6)) * influence;
1042
+ }
1043
+
1044
+ let bodyR = uBodyRadius + breath(uPulsePhase) * uPulseAmp;
1045
+
1046
+ // Composite domain-warped membrane field WITH its analytic gradient.
1047
+ let scene = sceneDistG(uv);
1048
+ let d = scene.x;
1049
+ let fieldGrad = scene.yz;
1050
+
1051
+ // ── fwidth SITE #1 (metaball.frag.ts line 266) — AA-edge half-width from the SDF
1052
+ // screen-space gradient. The WGSL fragment-stage fwidth() transcription. In UNIFORM
1053
+ // control flow (no early return precedes it — the bounding test above is a flag). ──
1054
+ let aa = max(fwidth(d), 1e-6);
1055
+ // The bounding test (D3c) folds in here: an out-of-bounds fragment is forced transparent
1056
+ // (the GLSL early-out's transparent WRITE, expressed as an alpha gate, not a return).
1057
+ let alpha = (1.0 - smoothstep(-aa, aa, d)) * select(0.0, 1.0, inBounds);
1058
+
1059
+ // ── BC.W-GOOBLOB-MEATBALL — the WGSL uniformity STRUCTURAL fix (the meatball-armer).
1060
+ // The Toksvig screen-space derivative (fwidth SITE #2) is hoisted HERE, into the SAME
1061
+ // uniform control flow fwidth(d) above already arms in (top-level fs_main, before the
1062
+ // per-fragment alpha < 0.001 early-return and the uLit/uShadow non-uniform branches).
1063
+ // WGSL uniformity analysis rejects a fwidth() reached only through a return predicated
1064
+ // on a per-fragment value (the alpha < 0.001 early-out) nested under further branches
1065
+ // — exactly the BB residual that kept the normal-derivative inside the lit branch from
1066
+ // compiling, so the WGSL primary never armed and GooBlob fell to the WebGL2 net. Nh is
1067
+ // the uniform-flow surface normal computed for this derivative ONLY (byte-identical to
1068
+ // the lit block's own N = surfaceNormalFromGrad(...) below — the SAME inputs, so
1069
+ // nVar = length(fwidth(Nh)) IS the Toksvig clamp the lit block reads); the named lit-
1070
+ // block N stays AFTER the uStage early-return (the STAGE-1 floor reaches no lit work).
1071
+ // nVar is a pure uniform-flow value the lit block READS — no derivative in non-uniform
1072
+ // flow; the math is byte-identical to the GLSL fallback's Toksvig clamp, only its
1073
+ // EVALUATION POINT moved. The shadow march (T2) reuses d (the same sceneDistG().x).
1074
+ let Nh = surfaceNormalFromGrad(fieldGrad, d, bodyR);
1075
+ // ── fwidth SITE #2 (metaball.frag.ts line 364) — Toksvig normal-variance specular
1076
+ // clamp, the WGSL fragment-stage fwidth() of the surface normal. NOW in uniform
1077
+ // control flow (the structural fix), so the WGSL primary ARMS + paints the full lit
1078
+ // creature instead of falling to the stripped WebGL2 fallback. ──
1079
+ let nVar = length(fwidth(Nh));
1080
+
1081
+ if (alpha < 0.001) {
1082
+ return vec4<f32>(0.0);
1083
+ }
1084
+
1085
+ // Edit #4 — perceptually-uniform OKLCh variation.
1086
+ let colorNoise = fbm(uv * uColorNoiseFreq + uTime * uColorNoiseSpeed, 3);
1087
+ var oklch = samplePaletteOklch(colorNoise);
1088
+
1089
+ oklch.z = oklch.z + (colorNoise - 0.5) * uHueRange * (PI / 180.0);
1090
+ oklch.y = max(oklch.y + (colorNoise - 0.5) * uSatShift, 0.0);
1091
+ oklch.x = clamp(oklch.x + uBrightnessShift, 0.0, 1.0);
1092
+
1093
+ // ── BC.W-GOOBLOB-PLAIN — the STAGE-1 stripped floor (variant=blob). ──
1094
+ // The minimal verifiable floor: SDF + smin (the meatball field, already in d/
1095
+ // alpha above) + fwidth-AA (the crisp alpha above) + warm-cream fill. NO surface
1096
+ // normal, NO Fresnel, NO lit glint, NO iridescence, NO fake-SSS, NO shadow —
1097
+ // deliberately FLAT. It returns BEFORE any of the STAGE-2 dressing is reached. The
1098
+ // STAGE-1 path simply never READS the hoisted Nh/nVar or the lit/shadow blocks; the
1099
+ // normal-derivative is now in UNIFORM control flow above (BC.W-GOOBLOB-MEATBALL — the
1100
+ // structural armer), so BOTH the STAGE-1 floor AND the STAGE-2 lit path arm on Metal
1101
+ // (the BB residual that kept STAGE 2 falling to the WebGL2 net is CLOSED). The
1102
+ // teaching contrast: this is the "it renders, it meatballs, it works on Safari"
1103
+ // floor STAGE 2 layers the lit/shadow onto via the SAME uniforms.
1104
+ // BD.W-GOO-CAROUSEL-DECK — the flat blob fill is snapshotted from the PRE-dressing
1105
+ // oklch (the dressing mutates oklch below). At morphT <= 0 (a pure blob) emit the
1106
+ // flat fill + dither and return — the byte-identical STAGE-1 floor, zero dressing cost.
1107
+ let flatOkl = gamutClampOklch(oklch);
1108
+ let flatLin = oklabToLinearSrgb(oklchToOklab(flatOkl));
1109
+ let flatRgbBase = clamp(linearToSrgb(flatLin), vec3<f32>(0.0), vec3<f32>(1.0));
1110
+ if (uMorphT <= 0.0) {
1111
+ let fc1 = in.pos.xy;
1112
+ let ign1 = fract(52.9829189 * fract(dot(fc1, vec2<f32>(0.06711056, 0.00583715))));
1113
+ let rgb1 = clamp(flatRgbBase + (ign1 - 0.5) / 255.0, vec3<f32>(0.0), vec3<f32>(1.0));
1114
+ return vec4<f32>(rgb1 * alpha, alpha);
1115
+ }
1116
+
1117
+ // The named surface normal the lit/iridescence/SSS blocks read (byte-identical inputs to
1118
+ // the hoisted Nh above — the Toksvig nVar = length(fwidth(Nh)) IS this N's screen-space
1119
+ // variance). It sits AFTER the uStage early-return so the STAGE-1 floor reaches no lit work.
1120
+ let N = surfaceNormalFromGrad(fieldGrad, d, bodyR);
1121
+ let V = vec3<f32>(0.0, 0.0, 1.0);
1122
+ let thickness = clamp(-d / max(bodyR, 1e-4), 0.0, 1.0);
1123
+ let fres = pow(1.0 - max(dot(N, V), 0.0), 2.5);
1124
+
1125
+ // ── W11.a iridescence — warm-biased IQ cosine palette driving OKLCh HUE ──
1126
+ if (uIridescence > 0.0) {
1127
+ let t = fres + 0.3 * colorNoise + uTime * uIridSpeed;
1128
+ let iridHue = uIridHue + 0.18 * PI * cos(2.0 * PI * t);
1129
+ let w = fres * uIridescence;
1130
+ oklch.z = mix(oklch.z, iridHue, w);
1131
+ oklch.y = min(oklch.y + 0.04 * w, oklch.y + 0.08);
1132
+ oklch.x = min(oklch.x + 0.05 * w, 1.0);
1133
+ }
1134
+
1135
+ // ── W11.a fake subsurface translucency — thickness inner-glow + back-light ──
1136
+ if (uCoreGlow > 0.0 || uSssScale > 0.0) {
1137
+ oklch.x = min(oklch.x + uCoreGlow * (1.0 - exp(-3.0 * thickness)), 1.0);
1138
+ let L = normalize(uLightDir + vec3<f32>(1e-6));
1139
+ let back = pow(clamp(dot(V, -(L + N * thickness)), 0.0, 1.0), uSssPower);
1140
+ let sss = back * uSssScale * (1.0 - thickness);
1141
+ oklch.x = min(oklch.x + sss, 1.0);
1142
+ oklch.z = oklch.z + sss * 0.1 * (1.0 - thickness);
1143
+ }
1144
+
1145
+ // ── BC.W-GOOBLOB-MEATBALL — the soft contact shadow (T2). A procedural soft shadow that
1146
+ // FOLLOWS the irregular silhouette: march from this fragment's uv toward the in-plane
1147
+ // projection of uLightDir; where the metaball field occludes the light (the body
1148
+ // shadows itself opposite the light, a satellite shadows the body across the neck), the
1149
+ // march returns < 1 and DARKENS the OKLCh L — a soft grounded contact band UNDER the
1150
+ // dome, congruent with (but PROCEDURAL, silhouette-following, unlike) the CSS gel-dome
1151
+ // drop-shadow. Concentrated on the AWAY-facing lower rim (an away-facing weight × a
1152
+ // thin-rim Gaussian band) so the deep-lit interior + the light-facing edge stay bright
1153
+ // and the grounded shadow reads at the lower silhouette edge — the warm-cream body mean
1154
+ // holds. Gated uShadow > 0.5; variant=blob (STAGE 1) ships shadowless. ──
1155
+ if (uShadow > 0.5) {
1156
+ let L2 = normalize(uLightDir.xy + vec2<f32>(1e-6));
1157
+ // w increases with the inverse light-source size → uShadowSoftness (a harder penumbra at a
1158
+ // higher value). Start the march just off the surface so a fragment never self-shadows
1159
+ // at t=0; cap the reach at the body span.
1160
+ let sh = softShadow2D(uv, L2, max(aa, 0.004), bodyR * 1.5, max(uShadowSoftness, 4.0));
1161
+ // The contact band sits on the LOWER rim (the side AWAY from the light) — gated by
1162
+ // dot(fieldGrad, L2) < 0 (the rim facing away from L2) AND the thin-rim weight
1163
+ // (a Gaussian band peaking at thickness ≈ 0.18 so the deep-lit interior + the
1164
+ // light-facing edge stay BRIGHT — the warm-cream body mean holds). The 0.20 cap keeps
1165
+ // it a soft GROUNDING whisper, never a gouge (the warm-cream identity + the
1166
+ // proof:blob-warm-default floor hold).
1167
+ let away = clamp(-dot(normalize(fieldGrad + vec2<f32>(1e-6)), L2), 0.0, 1.0);
1168
+ let band = exp(-pow((thickness - 0.18) / 0.16, 2.0));
1169
+ let shadowDarken = (1.0 - sh) * away * band * 0.20;
1170
+ oklch.x = max(oklch.x - shadowDarken, 0.0);
1171
+ }
1172
+
1173
+ oklch = gamutClampOklch(oklch);
1174
+
1175
+ var lin = oklabToLinearSrgb(oklchToOklab(oklch));
1176
+
1177
+ // ── W9.b lit glass surface — Blinn-Phong glint + Fresnel rim, in LINEAR ──
1178
+ if (uLit > 0.5) {
1179
+ let L = normalize(uLightDir + vec3<f32>(1e-6));
1180
+ let H = normalize(L + V);
1181
+
1182
+ let warmCream = oklabToLinearSrgb(oklchToOklab(vec3<f32>(0.97, 0.03, radians(85.0))));
1183
+
1184
+ // ── fwidth SITE #2 — Toksvig normal-variance specular clamp. nVar is the HOISTED
1185
+ // length(fwidth(N)) (BC.W-GOOBLOB-MEATBALL — computed once at the top of fs_main
1186
+ // in uniform control flow, so the WGSL primary ARMS on Metal). The math is
1187
+ // byte-identical to the GLSL fallback (length(fwidth(N))); only its evaluation
1188
+ // point moved out of this non-uniform if (uLit > 0.5) branch. ──
1189
+ let shininess = uSpecShininess / (1.0 + 24.0 * nVar);
1190
+ let energyNorm = (shininess + 2.0) / 8.0;
1191
+ let spec = pow(max(dot(N, H), 0.0), shininess) * uSpecStrength * energyNorm;
1192
+
1193
+ var rimOkl = oklabToOklch(srgbToOklab(uRimColor));
1194
+ let bodyL = oklch.x;
1195
+ let dL = abs(rimOkl.x - bodyL);
1196
+ let lack = clamp((0.22 - dL) / 0.22, 0.0, 1.0);
1197
+ // target is a WGSL RESERVED word (W3C WGSL 16.2) so a "var target" declaration is an
1198
+ // invalid identifier: the shader module fails to compile and the WGSL primary never
1199
+ // arms (the GooBlob reserved-keyword bug BC.W-WEBGPU-EVERYWHERE W7 catches). Renamed to
1200
+ // a valid identifier; the math + the value are byte-identical.
1201
+ var targetL = 0.18;
1202
+ if (bodyL < 0.5) { targetL = 0.92; }
1203
+ rimOkl.x = clamp(mix(rimOkl.x, targetL, lack), 0.0, 1.0);
1204
+ rimOkl.y = rimOkl.y * mix(1.0, 0.5, lack);
1205
+ let rimLin = oklabToLinearSrgb(oklchToOklab(rimOkl));
1206
+
1207
+ let rimFres = pow(1.0 - max(dot(N, V), 0.0), uRimPower);
1208
+ let rim = rimFres * uRimStrength * (1.0 - 0.6 * thickness);
1209
+
1210
+ var highlight = max(warmCream * spec, rimLin * rim);
1211
+ highlight = min(highlight, vec3<f32>(0.85));
1212
+ lin = lin + highlight;
1213
+ }
1214
+
1215
+ var rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));
1216
+
1217
+ // BD.W-GOO-CAROUSEL-DECK — the blob↔meatball SHADING-MORPH compose: lerp the flat blob
1218
+ // fill -> the dressed meatball surface on uMorphT (the geometry/alpha is shared; only
1219
+ // the surface shading interpolates). morphT == 1 is byte-identical to the dressed
1220
+ // meatball; the morphT == 0 case already returned the flat fill above.
1221
+ rgb = mix(flatRgbBase, rgb, uMorphT);
1222
+
1223
+ // IGN dither — 1-LSB triangular dither in DISPLAY space, AFTER linearToSrgb.
1224
+ let fragCoord = in.pos.xy;
1225
+ let ign = fract(52.9829189 * fract(dot(fragCoord, vec2<f32>(0.06711056, 0.00583715))));
1226
+ rgb = clamp(rgb + (ign - 0.5) / 255.0, vec3<f32>(0.0), vec3<f32>(1.0));
1227
+
1228
+ // premultiply AFTER the OETF: straight-alpha gamma → premultiplied.
1229
+ return vec4<f32>(rgb * alpha, alpha);
1230
+ }
1231
+ `, Pe = 592, $ = {
1232
+ s0: 0,
1233
+ s1: 4,
1234
+ s2: 8,
1235
+ s3: 12,
1236
+ s4: 16,
1237
+ s5: 20,
1238
+ s6: 24,
1239
+ s7: 28,
1240
+ ptr: 32,
1241
+ base: 36,
1242
+ rim: 40,
1243
+ light: 44,
1244
+ res: 48,
1245
+ ints: 52,
1246
+ palette: 56,
1247
+ satPos: 72,
1248
+ trailPos: 88
1249
+ };
1250
+ function Fe() {
1251
+ let e = new ArrayBuffer(Pe);
1252
+ return {
1253
+ buffer: e,
1254
+ f32: new Float32Array(e),
1255
+ i32: new Int32Array(e)
1256
+ };
1257
+ }
1258
+ function Ie(e, t, n, r, i, a) {
1259
+ let { f32: o, i32: s } = e, { params: c, rgb: l, simTimeMs: u, timeSec: d, resolveColor: f, rimColor: p, paletteStops: m } = a, { geometry: h, membrane: g, color: _, surface: v, interaction: y } = n, b = r.pointer.value, x = y.pointerAttraction + c.pointerAttraction, S = Math.max(0, Math.min(1, x)), C = r.velocity.value, w = r.pulse.value * y.clickImpulse, T = (g.pulseAmp * c.pulseAmp / .015 + w) * R, E = d * g.pulseFreq * c.pulseFreq * Math.PI * 2, D = g.noiseAmp * c.noiseAmp / .025 * R, O = h.orbitRadius * 1.2 * (1 + h.eccentricity), k = g.smoothK * c.smoothK, A = Math.max(0, O - h.satelliteRadius - h.bodyRadius), j = k > 0 ? Math.min(1.25, 1 + A / k) : 1, M = k * j * R, N = (n.surface.fissionAmp ?? 0) > 0 ? ae * 1.12 : 0, P = Math.max(O, N) + h.satelliteRadius, F = (Math.max(h.bodyRadius, P) + k * j + g.noiseAmp * c.noiseAmp / .025 + Math.abs(r.pulse.value) * y.clickImpulse) * R + .1;
1260
+ o[$.s0 + 0] = u / 1e3, o[$.s0 + 1] = h.bodyRadius * R, o[$.s0 + 2] = E, o[$.s0 + 3] = T, o[$.s1 + 0] = D, o[$.s1 + 1] = g.noiseFreq, o[$.s1 + 2] = g.noiseSpeed, o[$.s1 + 3] = g.warpAmp;
1261
+ let I = typeof n.morphT == "number" ? Math.max(0, Math.min(1, n.morphT)) : n.variant === "blob" ? 0 : 1, L = I > 0;
1262
+ o[$.s2 + 0] = M, o[$.s2 + 1] = +(g.merge === "circular"), o[$.s2 + 2] = F, o[$.s2 + 3] = L && v.lit ? 1 : 0, o[$.s3 + 0] = v.specStrength, o[$.s3 + 1] = v.specShininess, o[$.s3 + 2] = v.rimPower, o[$.s3 + 3] = v.rimStrength, o[$.s4 + 0] = v.iridescence * c.iridScale, o[$.s4 + 1] = v.iridHue * (Math.PI / 180), o[$.s4 + 2] = v.iridSpeed, o[$.s4 + 3] = v.sssScale * c.iridScale, o[$.s5 + 0] = v.sssPower, o[$.s5 + 1] = v.coreGlow, o[$.s5 + 2] = _.hueRange + c.hueRange, o[$.s5 + 3] = _.satShift + c.satShift, o[$.s6 + 0] = _.brightnessShift + c.brightnessShift, o[$.s6 + 1] = _.colorNoiseFreq, o[$.s6 + 2] = _.colorNoiseSpeed, o[$.s6 + 3] = y.stretch, o[$.s7 + 0] = +!!r.active.value, o[$.s7 + 1] = x, o[$.s7 + 2] = y.pointerStrength * R, o[$.s7 + 3] = +(I <= 0), o[$.ptr + 0] = b.x * .5 * R, o[$.ptr + 1] = b.y * .5 * R, o[$.ptr + 2] = C.x * .5 * R, o[$.ptr + 3] = C.y * .5 * R, o[$.base + 0] = l[0], o[$.base + 1] = l[1], o[$.base + 2] = l[2], o[$.base + 3] = I;
1263
+ let z = f(p);
1264
+ o[$.rim + 0] = z[0], o[$.rim + 1] = z[1], o[$.rim + 2] = z[2], o[$.rim + 3] = 0, o[$.light + 0] = v.lightDir[0], o[$.light + 1] = v.lightDir[1], o[$.light + 2] = v.lightDir[2], o[$.light + 3] = 0, o[$.res + 0] = t.width, o[$.res + 1] = t.height, o[$.res + 2] = L && v.shadow ? 1 : 0, o[$.res + 3] = v.shadowSoftness;
1265
+ let B = m, V = Math.min(B.length, 4);
1266
+ for (let e = 0; e < 4; e++) {
1267
+ let t = $.palette + e * 4, n = B[e];
1268
+ if (n) {
1269
+ let e = f(n);
1270
+ o[t + 0] = e[0], o[t + 1] = e[1], o[t + 2] = e[2];
1271
+ } else o[t + 0] = l[0], o[t + 1] = l[1], o[t + 2] = l[2];
1272
+ o[t + 3] = 0;
1273
+ }
1274
+ let H = i.sources;
1275
+ for (let e = 0; e < 4; e++) {
1276
+ let t = $.satPos + e * 4, n = H[e];
1277
+ n ? (o[t + 0] = n.x * R, o[t + 1] = n.y * R, o[t + 2] = n.radius * R, o[t + 3] = n.opacity) : (o[t + 0] = 0, o[t + 1] = 0, o[t + 2] = 0, o[t + 3] = 0);
1278
+ }
1279
+ let U = r.trailSources(h.satelliteRadius * .7 * S);
1280
+ for (let e = 0; e < 15; e++) {
1281
+ let t = $.trailPos + e * 4, n = U.sources[e];
1282
+ n ? (o[t + 0] = n.x * .5 * R, o[t + 1] = n.y * .5 * R, o[t + 2] = n.radius * R) : (o[t + 0] = 0, o[t + 1] = 0, o[t + 2] = 0), o[t + 3] = 0;
1283
+ }
1284
+ return s[$.ints + 0] = V, s[$.ints + 1] = H.length, s[$.ints + 2] = U.count, s[$.ints + 3] = 0, e;
1285
+ }
1286
+ //#endregion
1287
+ //#region src/components/blob/composables/wgpuSetup.ts
1288
+ var Le = 64, Re = 8, ze = 2;
1289
+ function Be(e) {
1290
+ let { canvas: t, config: n, pointer: r, satellites: i, resolveFrame: a, shouldContinue: o } = e;
1291
+ return function(e, s, c) {
1292
+ let l = e.createShaderModule({
1293
+ label: "[GooBlob] metaball.wgsl",
1294
+ code: Ne
1295
+ }), u = e.createBuffer({
1296
+ label: "[GooBlob] uniforms",
1297
+ size: Pe,
1298
+ usage: Le | Re
1299
+ }), d = e.createBindGroupLayout({
1300
+ label: "[GooBlob] bind-group-0",
1301
+ entries: [{
1302
+ binding: 0,
1303
+ visibility: ze,
1304
+ buffer: { type: "uniform" }
1305
+ }]
1306
+ }), f = e.createRenderPipeline({
1307
+ label: "[GooBlob] pipeline",
1308
+ layout: e.createPipelineLayout({ bindGroupLayouts: [d] }),
1309
+ vertex: {
1310
+ module: l,
1311
+ entryPoint: "vs_main"
1312
+ },
1313
+ fragment: {
1314
+ module: l,
1315
+ entryPoint: "fs_main",
1316
+ targets: [{
1317
+ format: c,
1318
+ blend: {
1319
+ color: {
1320
+ srcFactor: "one",
1321
+ dstFactor: "one-minus-src-alpha",
1322
+ operation: "add"
1323
+ },
1324
+ alpha: {
1325
+ srcFactor: "one",
1326
+ dstFactor: "one-minus-src-alpha",
1327
+ operation: "add"
1328
+ }
1329
+ }
1330
+ }]
1331
+ },
1332
+ primitive: { topology: "triangle-list" }
1333
+ }), p = e.createBindGroup({
1334
+ label: "[GooBlob] bind-group",
1335
+ layout: d,
1336
+ entries: [{
1337
+ binding: 0,
1338
+ resource: { buffer: u }
1339
+ }]
1340
+ }), m = Fe();
1341
+ function h(e) {}
1342
+ function g(o) {
1343
+ let c = a(o);
1344
+ if (!c) return;
1345
+ Ie(m, t, n, r, i, c), e.queue.writeBuffer(u, 0, m.buffer);
1346
+ let l = s.getCurrentTexture().createView(), d = e.createCommandEncoder({ label: "[GooBlob] frame" }), h = d.beginRenderPass({ colorAttachments: [{
1347
+ view: l,
1348
+ clearValue: {
1349
+ r: 0,
1350
+ g: 0,
1351
+ b: 0,
1352
+ a: 0
1353
+ },
1354
+ loadOp: "clear",
1355
+ storeOp: "store"
1356
+ }] });
1357
+ h.setPipeline(f), h.setBindGroup(0, p), h.draw(3, 1, 0, 0), h.end(), e.queue.submit([d.finish()]);
1358
+ }
1359
+ return {
1360
+ frame: g,
1361
+ shouldContinue: o,
1362
+ resize: h,
1363
+ teardown: () => {
1364
+ u.destroy();
1365
+ }
1366
+ };
1367
+ };
1368
+ }
1369
+ //#endregion
1370
+ //#region src/components/blob/composables/useMetaballRenderer.ts
1371
+ function Ve(e) {
1372
+ let { canvasRef: t, color: i, rimColor: a, paletteStops: o, satelliteColors: s, mood: c, pointer: l, satellites: f, config: p } = e, g = 0, _ = 0, v = n();
1373
+ f.onPinch((e) => l.click(e));
1374
+ let y = /* @__PURE__ */ new Map();
1375
+ function b(e) {
1376
+ let t = y.get(e);
1377
+ if (t) return t;
1378
+ let n = m(h(e));
1379
+ return y.size > 256 && y.clear(), y.set(e, n), n;
1380
+ }
1381
+ let x = null, S = !1, C = P(!1), w = null;
1382
+ function T() {
1383
+ w !== null && (clearTimeout(w), w = null);
1384
+ }
1385
+ function E(e) {
1386
+ if (T(), typeof setTimeout > "u") return;
1387
+ let t = Math.min(Math.max(e - _, 16), 3e4);
1388
+ w = setTimeout(() => {
1389
+ w = null, x?.wake();
1390
+ }, t);
1391
+ }
1392
+ r(t, {
1393
+ pause: () => x?.suspend("off-screen-io"),
1394
+ resume: () => x?.resume("off-screen-io")
1395
+ }, {
1396
+ rootMargin: "200px",
1397
+ pauseWhenHidden: !1
1398
+ });
1399
+ function D(e) {
1400
+ let t = g ? (e - g) * 1e3 : 16;
1401
+ g = e;
1402
+ let n = Math.max(0, Math.min(t, 50)), r = x?.reducedMotion ?? !1, u = r || S ? 0 : p.tempo, d = u * n;
1403
+ if (_ += d, v.setActive(l.active.value), u > 0 && l.active.value) {
1404
+ let e = l.rawPointer();
1405
+ v.setPointer(e.x * .5 + .5, e.y * .5 + .5);
1406
+ }
1407
+ v.tick(u === 0 ? 0 : n);
1408
+ let m = v.acceleration.value, h = v.velocity.value, y = -(m.x * h.x + m.y * h.y);
1409
+ return y > 0 && u > 0 && l.click(Math.min(.5, y * 4 + v.burst.value * .2)), r || c.update({
1410
+ pointerActive: l.active.value,
1411
+ clicked: l.consumeClick(),
1412
+ idleMs: l.idleMs()
1413
+ }), c.tick(d), r ? l.rest() : l.tick(d), f.tick(_, c.params.value), {
1414
+ params: c.params.value,
1415
+ rgb: b(i.value),
1416
+ simTimeMs: _,
1417
+ timeSec: e,
1418
+ resolveColor: b,
1419
+ rimColor: a.value,
1420
+ paletteStops: o.value,
1421
+ satColors: s?.value
1422
+ };
1423
+ }
1424
+ function O() {
1425
+ let e = c.isSettled() && l.isAtRest() && f.isQuiescent();
1426
+ if (C.value = e, S) return !1;
1427
+ if (!e) return T(), !0;
1428
+ let t = f.nextEventMs(_), n = c.nextAutoMoodMs(), r = Number.isFinite(n) ? _ + n : Infinity;
1429
+ return E(Math.min(t, r)), !1;
1430
+ }
1431
+ let k = () => u() * (p.quality === "half" ? .5 : 1);
1432
+ function A(t) {
1433
+ x = d(t, {
1434
+ dprPolicy: k,
1435
+ revealBloom: e.revealBloom ?? !0,
1436
+ contextAttrs: {
1437
+ alpha: !0,
1438
+ premultipliedAlpha: !0,
1439
+ antialias: !1,
1440
+ preserveDrawingBuffer: !1
1441
+ },
1442
+ setupWGPU: Be({
1443
+ canvas: t,
1444
+ config: p,
1445
+ pointer: l,
1446
+ satellites: f,
1447
+ resolveFrame: D,
1448
+ shouldContinue: O,
1449
+ getReducedMotion: () => x?.reducedMotion ?? !1
1450
+ }),
1451
+ setupGL: (e) => {
1452
+ let { prog: n, vs: r, fs: i, vao: a, buf: o, locs: s } = Me(e);
1453
+ function c(n) {
1454
+ e.viewport(0, 0, n?.w ?? t.width, n?.h ?? t.height);
1455
+ }
1456
+ function u(r) {
1457
+ Ae(e, n, a, s, t, p, l, f, D(r));
1458
+ }
1459
+ return {
1460
+ frame: u,
1461
+ shouldContinue: O,
1462
+ resize: c,
1463
+ teardown: () => {
1464
+ e.deleteProgram(n), e.deleteShader(r), e.deleteShader(i), e.deleteBuffer(o), e.deleteVertexArray(a);
1465
+ }
1466
+ };
1467
+ }
1468
+ }), x.armAsync();
1469
+ }
1470
+ return I(t, (e) => {
1471
+ e && !x && A(e);
1472
+ }, { immediate: !0 }), I(i, () => x?.wake()), I(o, () => x?.wake(), { deep: !0 }), j(() => {
1473
+ T(), x?.dispose(), x = null;
1474
+ }), {
1475
+ pause: () => {
1476
+ S = !0, x?.suspend("manual");
1477
+ },
1478
+ resume: () => {
1479
+ S = !1, x?.resume("manual");
1480
+ },
1481
+ wake: () => x?.wake(),
1482
+ settled: C
1483
+ };
1484
+ }
1485
+ //#endregion
1486
+ //#region src/components/blob/Blob.vue?vue&type=script&setup=true&lang.ts
1487
+ var He = 1.3, Ue = /* @__PURE__ */ e(/* @__PURE__ */ D({
1488
+ __name: "Blob",
1489
+ props: {
1490
+ color: {},
1491
+ config: {},
1492
+ variant: {},
1493
+ seed: { default: "" },
1494
+ paused: {
1495
+ type: Boolean,
1496
+ default: !1
1497
+ }
1498
+ },
1499
+ emits: ["click", "update:paused"],
1500
+ setup(e, { expose: n, emit: r }) {
1501
+ let i = r, a = O(y, null), o = e.config ?? a;
1502
+ if (!o) throw Error("[glass-ui] Blob: no blob config. Pass an explicit `config` prop (e.g. BLOB_CONFIG_DEFAULTS) or provide(BLOB_CONFIG_KEY, cfg) from an ancestor. There is no silent defaults synthesis.");
1503
+ let s = () => e.config ?? a ?? o, c = new Proxy(o, { get(t, n, r) {
1504
+ return n === "variant" && e.variant != null ? e.variant : Reflect.get(t, n, r);
1505
+ } }), l = F("canvasRef"), u = F("wrapperRef"), d = F("hitLayerRef"), f = Math.min(1, Math.max(.25, o.geometry.bodyRadius / R * He)), p = `${(f * 50).toFixed(2)}%`, m = me(), h = he(d, { hitRadius: () => f }), g = be(o, e.color + e.seed), _ = t(), v = P(e.color), b = P(o.surface.rimColor), x = P([...o.color.paletteStops]), S = P([...o.color.satelliteColors ?? []]);
1506
+ function C() {
1507
+ let t = u.value, n = s();
1508
+ _.invalidate(), v.value = _.resolve(e.color, t), b.value = _.resolve(n.surface.rimColor, t), x.value = n.color.paletteStops.map((e) => _.resolve(e, t)), S.value = (n.color.satelliteColors ?? []).map((e) => _.resolve(e, t));
1509
+ }
1510
+ let D = Ve({
1511
+ canvasRef: l,
1512
+ color: v,
1513
+ rimColor: b,
1514
+ paletteStops: x,
1515
+ satelliteColors: S,
1516
+ mood: m,
1517
+ pointer: h,
1518
+ satellites: g,
1519
+ config: c
1520
+ });
1521
+ I(u, C, { immediate: !0 });
1522
+ let j = null;
1523
+ typeof document < "u" && (j = new MutationObserver(C), j.observe(document.documentElement, {
1524
+ attributes: !0,
1525
+ attributeFilter: ["class"]
1526
+ })), I(w(() => e.color), (t) => {
1527
+ C(), g.reseed(t + e.seed);
1528
+ }), I(() => {
1529
+ let e = s();
1530
+ return [
1531
+ e.color.paletteStops.join("|"),
1532
+ (e.color.satelliteColors ?? []).join("|"),
1533
+ e.surface.rimColor
1534
+ ];
1535
+ }, () => C(), { deep: !0 }), I(() => h.active.value, (e) => {
1536
+ e && D.wake();
1537
+ }), I(() => e.paused, (e) => e ? D.pause() : D.resume(), { immediate: !0 }), A(() => {
1538
+ j?.disconnect(), j = null;
1539
+ });
1540
+ function N() {
1541
+ g.nudge();
1542
+ }
1543
+ function L(e) {
1544
+ m.setMood(e, { source: "manual" });
1545
+ }
1546
+ function z() {
1547
+ h.click(o.interaction.clickImpulse);
1548
+ }
1549
+ function B(e) {
1550
+ h.hitTest(e.clientX, e.clientY) && (z(), i("click"));
1551
+ }
1552
+ return n({
1553
+ nudge: N,
1554
+ setMood: L,
1555
+ pulse: z,
1556
+ currentMood: m.currentMood,
1557
+ pause: D.pause,
1558
+ resume: D.resume,
1559
+ settled: D.settled
1560
+ }), (t, n) => (M(), T("div", {
1561
+ ref_key: "wrapperRef",
1562
+ ref: u,
1563
+ class: "goo-blob-wrapper",
1564
+ style: k({ "--blob-color": e.color })
1565
+ }, [E("canvas", {
1566
+ ref_key: "canvasRef",
1567
+ ref: l,
1568
+ class: "goo-blob-canvas",
1569
+ "aria-hidden": "true",
1570
+ "data-testid": "goo-blob-canvas"
1571
+ }, null, 512), E("div", {
1572
+ ref_key: "hitLayerRef",
1573
+ ref: d,
1574
+ class: "goo-blob-hit",
1575
+ style: k({ "--blob-hit-radius": p }),
1576
+ "data-testid": "goo-blob-hit",
1577
+ onClick: B
1578
+ }, null, 4)], 4));
1579
+ }
1580
+ }), [["__scopeId", "data-v-c78535cc"]]);
1581
+ //#endregion
1582
+ export { g as BLOB_CONFIG_DEFAULTS, y as BLOB_CONFIG_KEY, x as BLOB_HERO, Ue as Blob, v as LIGHTNESS_FLOOR_BRACKET, b as LIGHTNESS_FLOOR_DEFAULT, _ as clampLightnessFloor, me as useBlobMood, he as useBlobPointer, be as useBlobSatellites, Ve as useMetaballRenderer };