@mkbabb/glass-ui 3.13.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
  8. package/dist/DialogContent-DcKK8k9i.js +103 -0
  9. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/FadingScroll-DI6hQhT9.js +76 -0
  11. package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/IconChip-BTD-nay5.js +55 -0
  14. package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/PopoverContent-DL7E6vJP.js +127 -0
  20. package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
  21. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
  23. package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
  24. package/dist/Toaster-Bw4xR8xV.js +274 -0
  25. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  26. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  27. package/dist/animated-digit.js +2 -2
  28. package/dist/api/index.d.ts +16 -8
  29. package/dist/api/types-extra.d.ts +6 -0
  30. package/dist/api.js +2 -2
  31. package/dist/aurora.js +888 -230
  32. package/dist/badge.js +1 -1
  33. package/dist/border-progress.d.ts +1 -0
  34. package/dist/border-progress.js +106 -0
  35. package/dist/button-DYCUa-tH.js +126 -0
  36. package/dist/button.js +1 -1
  37. package/dist/canvas.js +2 -2
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.d.ts +1 -1
  40. package/dist/carousel.js +90 -151
  41. package/dist/collapsible.js +1 -1
  42. package/dist/color-swatch.d.ts +1 -0
  43. package/dist/color-swatch.js +47 -0
  44. package/dist/color.js +1 -1
  45. package/dist/command.js +1 -1
  46. package/dist/compile-CQEFRTmx.js +19 -0
  47. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  48. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  49. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  50. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  51. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  52. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  53. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  54. package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
  55. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
  56. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  57. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  58. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  59. package/dist/components/custom/aurora/index.d.ts +3 -2
  60. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  61. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  62. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  63. package/dist/components/custom/border-progress/index.d.ts +4 -0
  64. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  65. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  66. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  67. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  68. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  69. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  70. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  71. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  72. package/dist/components/custom/concentric/constants.d.ts +43 -0
  73. package/dist/components/custom/concentric/index.d.ts +5 -0
  74. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  75. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  76. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  77. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  78. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  79. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  80. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  81. package/dist/components/custom/constellation/index.d.ts +1 -1
  82. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  83. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  84. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  85. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  86. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  87. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  88. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  89. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  90. package/dist/components/custom/dock/constants.d.ts +35 -0
  91. package/dist/components/custom/dock/index.d.ts +2 -0
  92. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  93. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  94. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  95. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  96. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  97. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  98. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  99. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  100. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  101. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  102. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  103. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  104. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  105. package/dist/components/custom/easing/constants.d.ts +28 -0
  106. package/dist/components/custom/easing/index.d.ts +3 -0
  107. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  108. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  109. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  110. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  111. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  112. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
  113. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  114. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  115. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  116. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  117. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
  118. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  119. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  120. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
  121. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  122. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  123. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  124. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  125. package/dist/components/custom/handmark/brush.d.ts +269 -0
  126. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  127. package/dist/components/custom/handmark/constants.d.ts +39 -0
  128. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  129. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  130. package/dist/components/custom/handmark/index.d.ts +27 -0
  131. package/dist/components/custom/handmark/ink.d.ts +11 -0
  132. package/dist/components/custom/handmark/texture.d.ts +39 -0
  133. package/dist/components/custom/handmark/types.d.ts +62 -0
  134. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  135. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  136. package/dist/components/custom/icon-chip/types.d.ts +82 -0
  137. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
  138. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  139. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  140. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  141. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  142. package/dist/components/custom/spa-view/index.d.ts +2 -0
  143. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
  144. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  145. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  146. package/dist/components/custom/tabs/constants.d.ts +9 -3
  147. package/dist/components/custom/tabs/index.d.ts +1 -1
  148. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
  149. package/dist/components/ui/_shared/index.d.ts +2 -0
  150. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  151. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  152. package/dist/components/ui/badge/index.d.ts +1 -1
  153. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  154. package/dist/components/ui/button/index.d.ts +2 -2
  155. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  156. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  157. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  158. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  159. package/dist/components/ui/card/index.d.ts +2 -0
  160. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  161. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  162. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  163. package/dist/components/ui/carousel/index.d.ts +0 -1
  164. package/dist/components/ui/command/Command.vue.d.ts +4 -1
  165. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  166. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  167. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
  168. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  169. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  170. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  171. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  172. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  173. package/dist/components/ui/drawer/constants.d.ts +45 -0
  174. package/dist/components/ui/drawer/index.d.ts +23 -15
  175. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  176. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  177. package/dist/components/ui/index.d.ts +1 -1
  178. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  179. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  180. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  181. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  182. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  183. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  184. package/dist/components/ui/sheet/index.d.ts +1 -1
  185. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  186. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  187. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  188. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  189. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  190. package/dist/composables/dark/index.d.ts +1 -1
  191. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  192. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  193. package/dist/composables/glass/index.d.ts +5 -2
  194. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  195. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  196. package/dist/composables/glass/vSpecular.d.ts +2 -0
  197. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  198. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  199. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  200. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  201. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  202. package/dist/composables/motion/core/index.d.ts +1 -0
  203. package/dist/composables/motion/index.d.ts +4 -0
  204. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  205. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  206. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  207. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  208. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  209. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  210. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  211. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  212. package/dist/concentric.d.ts +1 -0
  213. package/dist/concentric.js +562 -0
  214. package/dist/configurator.js +3 -2
  215. package/dist/confirm-dialog.js +22 -24
  216. package/dist/constellation.js +93 -95
  217. package/dist/context-menu.js +3 -3
  218. package/dist/controls.js +10 -4
  219. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  220. package/dist/dark.d.ts +1 -1
  221. package/dist/dark.js +1 -1
  222. package/dist/data-table.js +1 -1
  223. package/dist/dialog.js +2 -2
  224. package/dist/dock.js +738 -442
  225. package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
  226. package/dist/dom.js +5 -5
  227. package/dist/dot-flow-field.d.ts +1 -0
  228. package/dist/dot-flow-field.js +604 -0
  229. package/dist/drawer.d.ts +1 -0
  230. package/dist/drawer.js +380 -0
  231. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
  232. package/dist/dropdown-menu.js +1 -1
  233. package/dist/easing.d.ts +1 -0
  234. package/dist/easing.js +463 -0
  235. package/dist/expandable-container.js +45 -38
  236. package/dist/fading-scroll.d.ts +1 -0
  237. package/dist/fading-scroll.js +2 -0
  238. package/dist/focus-scope.d.ts +1 -0
  239. package/dist/focus-scope.js +23 -0
  240. package/dist/forms.js +7 -7
  241. package/dist/fourier-field.js +135 -122
  242. package/dist/fourier-math.js +2 -2
  243. package/dist/glass-panel.js +39 -36
  244. package/dist/glass-ui.css +1 -1
  245. package/dist/glass-ui.js +154 -362
  246. package/dist/goo-blob.js +838 -227
  247. package/dist/handmark.d.ts +1 -0
  248. package/dist/handmark.js +707 -0
  249. package/dist/header-ribbon.js +1 -1
  250. package/dist/hover-card.js +1 -1
  251. package/dist/hover-popover.js +1 -1
  252. package/dist/icon-chip.d.ts +1 -0
  253. package/dist/icon-chip.js +2 -0
  254. package/dist/icon-tooltip.js +1 -1
  255. package/dist/index.d.ts +3 -3
  256. package/dist/instrument-chassis.js +1 -1
  257. package/dist/keyboard.js +1 -1
  258. package/dist/label.js +1 -1
  259. package/dist/labeled-field.js +6 -6
  260. package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
  261. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
  262. package/dist/metric-badge.js +1 -1
  263. package/dist/metric-cell.js +25 -22
  264. package/dist/metric-stack.js +4 -8
  265. package/dist/motion-core.js +36 -35
  266. package/dist/motion-curves.js +1 -1
  267. package/dist/motion.js +157 -55
  268. package/dist/notification.js +1 -1
  269. package/dist/number-field.js +1 -1
  270. package/dist/pager-dots.d.ts +1 -0
  271. package/dist/pager-dots.js +91 -0
  272. package/dist/paper-backdrop.js +1 -1
  273. package/dist/popover.js +1 -1
  274. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  275. package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  276. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  277. package/dist/progress.js +1 -1
  278. package/dist/pulse.js +1 -1
  279. package/dist/reactive.js +2 -2
  280. package/dist/scrolling-text.js +1 -1
  281. package/dist/search.js +10 -12
  282. package/dist/select.js +3 -3
  283. package/dist/separator.js +1 -1
  284. package/dist/sheet-tZMg0E0w.js +218 -0
  285. package/dist/sheet.js +1 -1
  286. package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +3 -3
  289. package/dist/spa-view.d.ts +1 -0
  290. package/dist/spa-view.js +46 -0
  291. package/dist/styles/animations.css +40 -31
  292. package/dist/styles/border-progress.css +109 -0
  293. package/dist/styles/cards.css +76 -0
  294. package/dist/styles/components.css +1 -1
  295. package/dist/styles/configurator.css +35 -0
  296. package/dist/styles/critical-partition.mjs +140 -0
  297. package/dist/styles/critical.css +12 -0
  298. package/dist/styles/deferred.css +31 -0
  299. package/dist/styles/dock/density.css +64 -0
  300. package/dist/styles/dock/layers.css +54 -30
  301. package/dist/styles/dock/morph.css +124 -7
  302. package/dist/styles/dock/overflow.css +31 -2
  303. package/dist/styles/dock/rail-extend.css +168 -71
  304. package/dist/styles/dock/section.css +59 -0
  305. package/dist/styles/dock/shell.css +83 -16
  306. package/dist/styles/dock-controls/icon-button.css +11 -1
  307. package/dist/styles/dock-controls/tab-button.css +24 -83
  308. package/dist/styles/dock-controls/triggers.css +7 -0
  309. package/dist/styles/dock.css +38 -3
  310. package/dist/styles/drawer.css +127 -35
  311. package/dist/styles/feedback-tone.css +104 -0
  312. package/dist/styles/glass/deep.css +44 -0
  313. package/dist/styles/glass/ladder.css +154 -52
  314. package/dist/styles/glass/material.css +78 -15
  315. package/dist/styles/glass/reveal.css +136 -0
  316. package/dist/styles/glass/rim.css +100 -0
  317. package/dist/styles/glass/surface-axis.css +113 -0
  318. package/dist/styles/glass/surfaces.css +189 -15
  319. package/dist/styles/glass-refract.css +96 -44
  320. package/dist/styles/glass-specular-track.css +7 -0
  321. package/dist/styles/glass.css +8 -2
  322. package/dist/styles/hover-popover.css +7 -6
  323. package/dist/styles/icon-chip.css +211 -0
  324. package/dist/styles/index.css +78 -4
  325. package/dist/styles/instrument-chassis.css +107 -2
  326. package/dist/styles/menu.css +127 -0
  327. package/dist/styles/scroll-choreography.css +300 -0
  328. package/dist/styles/segmented-tabs.css +188 -86
  329. package/dist/styles/select.css +50 -0
  330. package/dist/styles/theme/bridges.css +22 -1
  331. package/dist/styles/theme/literals.css +11 -2
  332. package/dist/styles/theme/radius.css +6 -1
  333. package/dist/styles/tokens/color-radius.css +40 -13
  334. package/dist/styles/tokens/dark-arm.css +200 -20
  335. package/dist/styles/tokens/glass-deep.css +75 -0
  336. package/dist/styles/tokens/glass-fx.css +333 -0
  337. package/dist/styles/tokens/glass.css +95 -315
  338. package/dist/styles/tokens/light-dark.css +64 -22
  339. package/dist/styles/tokens/offsets.css +116 -0
  340. package/dist/styles/tokens/on-glass-fg.css +39 -0
  341. package/dist/styles/tokens/property-regs.css +130 -10
  342. package/dist/styles/tokens/scale-paper.css +155 -84
  343. package/dist/styles/tokens/scheme-motion.css +102 -46
  344. package/dist/styles/tokens/scroll-tokens.css +123 -0
  345. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  346. package/dist/styles/tokens.css +9 -3
  347. package/dist/styles/transitions.css +7 -7
  348. package/dist/styles/typography/scale.css +153 -0
  349. package/dist/styles/typography/semantic.css +220 -0
  350. package/dist/styles/typography/utilities.css +174 -0
  351. package/dist/styles/typography.css +23 -507
  352. package/dist/styles/utilities/a11y-overrides.css +33 -4
  353. package/dist/styles/utilities/animate.css +27 -24
  354. package/dist/styles/utilities/base-misc.css +255 -0
  355. package/dist/styles/utilities/base.css +100 -138
  356. package/dist/styles/utilities/btn.css +21 -202
  357. package/dist/styles/utilities/metal.css +189 -0
  358. package/dist/styles/utilities.css +14 -7
  359. package/dist/styles/view-transition.css +4 -1
  360. package/dist/switch.js +1 -1
  361. package/dist/tabs.js +275 -191
  362. package/dist/timeline.js +2 -2
  363. package/dist/toast.js +1 -1
  364. package/dist/toggle-chip.js +3 -1
  365. package/dist/toggle-group.js +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/typewriter.js +1 -1
  368. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
  369. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  370. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  371. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  372. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  373. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  374. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  375. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
  376. package/dist/useSpring-C0jyvEJB.js +40 -0
  377. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  378. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  379. package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
  380. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
  381. package/dist/vReveal-Czsb7zQC.js +10 -0
  382. package/dist/vSpecular-CQFmLNzA.js +68 -0
  383. package/dist/vendor-CKmzio-i.js +226 -0
  384. package/dist/watercolor-dot.js +12 -5
  385. package/package.json +193 -25
  386. package/src/styles/animations.css +40 -31
  387. package/src/styles/border-progress.css +109 -0
  388. package/src/styles/cards.css +76 -0
  389. package/src/styles/configurator.css +35 -0
  390. package/src/styles/critical-partition.mjs +140 -0
  391. package/src/styles/dock/density.css +64 -0
  392. package/src/styles/dock/layers.css +54 -30
  393. package/src/styles/dock/morph.css +124 -7
  394. package/src/styles/dock/overflow.css +31 -2
  395. package/src/styles/dock/rail-extend.css +168 -71
  396. package/src/styles/dock/section.css +59 -0
  397. package/src/styles/dock/shell.css +83 -16
  398. package/src/styles/dock-controls/icon-button.css +11 -1
  399. package/src/styles/dock-controls/tab-button.css +24 -83
  400. package/src/styles/dock-controls/triggers.css +7 -0
  401. package/src/styles/dock.css +38 -3
  402. package/src/styles/drawer.css +123 -35
  403. package/src/styles/feedback-tone.css +104 -0
  404. package/src/styles/glass/deep.css +44 -0
  405. package/src/styles/glass/ladder.css +154 -52
  406. package/src/styles/glass/material.css +78 -15
  407. package/src/styles/glass/reveal.css +136 -0
  408. package/src/styles/glass/rim.css +100 -0
  409. package/src/styles/glass/surface-axis.css +113 -0
  410. package/src/styles/glass/surfaces.css +189 -15
  411. package/src/styles/glass-refract.css +96 -44
  412. package/src/styles/glass-specular-track.css +7 -0
  413. package/src/styles/glass.css +8 -2
  414. package/src/styles/hover-popover.css +7 -6
  415. package/src/styles/icon-chip.css +211 -0
  416. package/src/styles/index.css +78 -4
  417. package/src/styles/instrument-chassis.css +107 -2
  418. package/src/styles/menu.css +127 -0
  419. package/src/styles/scroll-choreography.css +300 -0
  420. package/src/styles/segmented-tabs.css +184 -84
  421. package/src/styles/select.css +50 -0
  422. package/src/styles/theme/bridges.css +22 -1
  423. package/src/styles/theme/literals.css +11 -2
  424. package/src/styles/theme/radius.css +6 -1
  425. package/src/styles/tokens/color-radius.css +40 -13
  426. package/src/styles/tokens/dark-arm.css +200 -20
  427. package/src/styles/tokens/glass-deep.css +75 -0
  428. package/src/styles/tokens/glass-fx.css +333 -0
  429. package/src/styles/tokens/glass.css +95 -315
  430. package/src/styles/tokens/light-dark.css +64 -22
  431. package/src/styles/tokens/offsets.css +116 -0
  432. package/src/styles/tokens/on-glass-fg.css +39 -0
  433. package/src/styles/tokens/property-regs.css +130 -10
  434. package/src/styles/tokens/scale-paper.css +155 -84
  435. package/src/styles/tokens/scheme-motion.css +102 -46
  436. package/src/styles/tokens/scroll-tokens.css +123 -0
  437. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  438. package/src/styles/tokens.css +9 -3
  439. package/src/styles/transitions.css +7 -7
  440. package/src/styles/typography/scale.css +153 -0
  441. package/src/styles/typography/semantic.css +220 -0
  442. package/src/styles/typography/utilities.css +174 -0
  443. package/src/styles/typography.css +23 -507
  444. package/src/styles/utilities/a11y-overrides.css +33 -4
  445. package/src/styles/utilities/animate.css +27 -24
  446. package/src/styles/utilities/base-misc.css +255 -0
  447. package/src/styles/utilities/base.css +100 -138
  448. package/src/styles/utilities/btn.css +21 -202
  449. package/src/styles/utilities/metal.css +189 -0
  450. package/src/styles/utilities.css +14 -7
  451. package/src/styles/view-transition.css +4 -1
  452. package/dist/CardAction-Cj2eycQ2.js +0 -157
  453. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  454. package/dist/Notification-DdwNxIrI.js +0 -100
  455. package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
  456. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  457. package/dist/TabsList-Dttss653.js +0 -105
  458. package/dist/Toaster-D6q4HtXu.js +0 -263
  459. package/dist/button-ChXMfsud.js +0 -81
  460. package/dist/check-njhk-vfu.js +0 -7
  461. package/dist/chevron-down-DKkxb4VV.js +0 -7
  462. package/dist/chevron-right-CPXbqQQz.js +0 -7
  463. package/dist/chevron-up-n_24SqI-.js +0 -7
  464. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  465. package/dist/components/custom/underline/index.d.ts +0 -2
  466. package/dist/components/custom/underline/types.d.ts +0 -56
  467. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  468. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  469. package/dist/minimize-2-BV31Ob_h.js +0 -38
  470. package/dist/search-BSGrf2Sk.js +0 -12
  471. package/dist/sheet-1fChZjtw.js +0 -214
  472. package/dist/underline.d.ts +0 -1
  473. package/dist/underline.js +0 -85
  474. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  475. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  476. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  477. package/dist/useSpringMount-CI2jOstM.js +0 -108
  478. package/dist/vReveal-CqaCz_mC.js +0 -44
  479. package/dist/x-BUwTKe50.js +0 -10
  480. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
  481. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  482. /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
  483. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
  484. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  485. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
  486. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
  487. /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
  488. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  489. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  490. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  491. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  492. /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
  493. /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
  494. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  495. /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
  496. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  497. /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
  498. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  499. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  500. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  501. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  502. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  503. /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
  504. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
  505. /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
  506. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
  507. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,13 @@
1
+ import type { WebGPUCanvasFrame } from "../../../../composables/glass/webgpu/useWebGPUCanvas";
2
+ import type { OklchStop } from "../../../../composables/color";
3
+ import type { ConcentricConfig } from "../constants";
4
+ export interface ConcentricWGPUSetupDeps {
5
+ canvas: HTMLCanvasElement;
6
+ config: ConcentricConfig;
7
+ /** The resolved (ColorResolver) palette stops as OKLCh — re-read each frame so a live edit reaches the buffer. */
8
+ getPalette: () => OklchStop[];
9
+ /** Demand-gate (the renderer's quiescence layer — substrate-agnostic). */
10
+ shouldContinue: () => boolean;
11
+ }
12
+ /** Build the concentric `setupWGPU(device, context, format)` callback. */
13
+ export declare function createConcentricWGPUSetup(deps: ConcentricWGPUSetupDeps): (device: GPUDevice, context: GPUCanvasContext, format: GPUTextureFormat) => WebGPUCanvasFrame;
@@ -0,0 +1,44 @@
1
+ /** A 2-vector. */
2
+ export interface Vec2 {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ /**
7
+ * One radial ring component. `amplitude` A_i, `wavelength` λ_i (so k_i = 2π/λ_i), `phase`
8
+ * φ_i. `ω_i = √(g·k_i)` is derived from the dispersion relation, not stored (the SAME
9
+ * dispersion the flow field's Gerstner sum uses — the ONE suite dispersion law).
10
+ */
11
+ export interface RingComponent {
12
+ amplitude: number;
13
+ wavelength: number;
14
+ phase: number;
15
+ }
16
+ /** A ring origin in domain space [-1,1]² (multi-center → interference). */
17
+ export interface RingCenter {
18
+ x: number;
19
+ y: number;
20
+ /** Per-center weight (a far center contributes a fainter ring family). */
21
+ weight: number;
22
+ }
23
+ /** Deep-water gravity constant (normalized; scales the dispersion ω — shared with the flow field). */
24
+ export declare const RING_GRAVITY = 9.81;
25
+ /**
26
+ * The ellipsoidal radial distance ‖p − c‖_e = sqrt((dx/a)² + (dy/b)²). The axis ratio
27
+ * (a,b) tilts the rings into ellipses (the 3D-tilt depth implication). The single radial
28
+ * metric the WGSL shader transcribes.
29
+ */
30
+ export declare function ellipsoidalRadius(p: Vec2, center: RingCenter, axisA: number, axisB: number): number;
31
+ /**
32
+ * The radial-Fourier ring-interference value f(p,t) ∈ ℝ — the multi-center sum of radial
33
+ * sinusoids. The SINGLE math source the WGSL `fs_main` + the GLSL fallback transcribe.
34
+ * `speed` scales the dispersion ω (the ring-travel speed). Returns the un-normalized
35
+ * field value (the shader maps it through the palette).
36
+ */
37
+ export declare function sampleRingField(p: Vec2, timeSec: number, centers: readonly RingCenter[], rings: readonly RingComponent[], axisA: number, axisB: number, speed: number): number;
38
+ /**
39
+ * Build the default 5-octave Phillips-spectrum radial ring ladder. Amplitudes follow
40
+ * `A_i ∝ exp(−1/(k_i·L)²) / k_i²` (Tessendorf §4, the SAME falloff the flow field uses),
41
+ * so the rings are energy-realistic. The decreasing wavelength gives the multi-scale
42
+ * concentric structure (broad outer rings + fine inner interference).
43
+ */
44
+ export declare function buildRingLadder(octaves?: number): RingComponent[];
@@ -0,0 +1,13 @@
1
+ import type { OklchStop } from "../../../../composables/color";
2
+ import { type ConcentricConfig } from "../constants";
3
+ export declare const CONCENTRIC_UNIFORM_BYTES: number;
4
+ /** The field-amplitude normalization scale (field → [0,1] for the palette ramp). */
5
+ export declare const CONCENTRIC_FIELD_NORM = 0.55;
6
+ export interface ConcentricUniformScratch {
7
+ buffer: ArrayBuffer;
8
+ f32: Float32Array;
9
+ i32: Int32Array;
10
+ }
11
+ export declare function createConcentricScratch(): ConcentricUniformScratch;
12
+ /** Pack the concentric uniforms in place. */
13
+ export declare function packConcentricUniforms(scratch: ConcentricUniformScratch, config: ConcentricConfig, timeSec: number, aspect: number, palette: OklchStop[]): ConcentricUniformScratch;
@@ -0,0 +1,35 @@
1
+ import { type Ref } from "vue";
2
+ import { type GpuBackend } from "../../../../composables/glass/webgpu/useGpuSubstrate";
3
+ import type { OklchStop } from "../../../../composables/color";
4
+ import type { ConcentricConfig } from "../constants";
5
+ export interface UseConcentricOptions {
6
+ config: ConcentricConfig;
7
+ /** Resolve the field-value palette as OKLCh (the demo themes it; default warm-identity). */
8
+ getPalette: () => OklchStop[];
9
+ /** `"capture"` → renderAt-only (the deterministic π capture path). Default `"live"`. */
10
+ mode?: "live" | "capture";
11
+ }
12
+ /** The uniform handle a consumer wires its lifecycle against (backend-agnostic). */
13
+ export interface ConcentricHandle {
14
+ /** The resolved backend (`"webgpu"` where supported, else the WebGL2 GLSL fallback). */
15
+ readonly backend: GpuBackend;
16
+ /** Park the loop (the WCAG-2.2.2 pause seam — `DockBackgroundToggle` wires this). */
17
+ pause: () => void;
18
+ /** Re-arm the loop. */
19
+ resume: () => void;
20
+ /** Re-arm a parked loop on demand. */
21
+ wake: () => void;
22
+ /** Draw one frame out-of-loop (capture / thumbnail). */
23
+ renderAt: (timeSec: number) => void;
24
+ /** The live `prefers-reduced-motion: reduce` state. */
25
+ readonly reducedMotion: boolean;
26
+ /** Tear down the renderer + release GPU/GL resources. */
27
+ dispose: () => void;
28
+ }
29
+ /**
30
+ * Mount the concentric renderer on `canvasRef`. The WebGPU primary + the WebGL2 fallback
31
+ * are BOTH pure fullscreen fragment passes evaluating the SAME radial-Fourier field (the
32
+ * ONE math source `ringField.ts`), so the picker is the only seam. Returns the uniform
33
+ * lifecycle handle.
34
+ */
35
+ export declare function useConcentric(canvasRef: Ref<HTMLCanvasElement | null>, options: UseConcentricOptions): ConcentricHandle;
@@ -0,0 +1,43 @@
1
+ import type { RingComponent, RingCenter } from "./composables/ringField";
2
+ import type { OklchStop } from "../../../composables/color";
3
+ /** Compile-time ring-component cap — mirrors the WGSL `MAX_RINGS` #define. */
4
+ export declare const MAX_RINGS = 8;
5
+ /** Compile-time center cap — mirrors the WGSL `MAX_CENTERS` #define. */
6
+ export declare const MAX_CENTERS = 4;
7
+ /** Compile-time palette cap — mirrors the WGSL `MAX_RING_STOPS` #define. */
8
+ export declare const MAX_RING_STOPS = 4;
9
+ /**
10
+ * The full author schema — the studio's `useConfiguratorState` model. Every field is a
11
+ * tunable the demo configurator drives; the SFC resolves it into the uniform table.
12
+ */
13
+ export interface ConcentricConfig {
14
+ /** The ring origins (1..MAX_CENTERS) — a multi-center sum produces ring interference. */
15
+ centers: RingCenter[];
16
+ /** The radial sum-of-sines table (1..MAX_RINGS). */
17
+ ringComponents: RingComponent[];
18
+ /** The ellipsoidal-norm axis ratio (a, b) — the 3D-tilt depth implication. */
19
+ axisRatio: [number, number];
20
+ /** The ring-travel speed (scales ω). */
21
+ speed: number;
22
+ /** The field-value color ramp (the demo themes it); resolved via the ColorResolver. */
23
+ palette: OklchStop[];
24
+ /** The ground color (default transparent so it reads over the page; demo sets it). */
25
+ background: OklchStop | "transparent";
26
+ /** Pointer adds a transient ring center (a local perturbation about the cursor). */
27
+ interactive: boolean;
28
+ /** ONE static frame then park under `prefers-reduced-motion: reduce`. */
29
+ respectReducedMotion: boolean;
30
+ }
31
+ /**
32
+ * The warm-cream identity palette (the library default — NOT a themed hue). A three-stop
33
+ * warm ramp over the warm-cream foreground family, resolved via the ColorResolver: a soft
34
+ * cream trough, a warm amber mid, a deeper ember crest — so the ring field reads as warm
35
+ * light interference. A consumer (the demo) themes it through a PRESET, never a token edit.
36
+ */
37
+ export declare const WARM_IDENTITY_PALETTE: OklchStop[];
38
+ /** The default 5-octave Phillips radial ring ladder. */
39
+ export declare const DEFAULT_RING_COMPONENTS: RingComponent[];
40
+ /** Two ring families offset on the diagonal — the default interference (a moiré beat). */
41
+ export declare const DEFAULT_CENTERS: RingCenter[];
42
+ /** The shipped warm-identity default config. */
43
+ export declare const DEFAULT_CONCENTRIC_CONFIG: ConcentricConfig;
@@ -0,0 +1,5 @@
1
+ export { default as Concentric } from "./Concentric.vue";
2
+ export { useConcentric, type ConcentricHandle, type UseConcentricOptions, } from "./composables/useConcentric";
3
+ export { type ConcentricConfig, DEFAULT_CONCENTRIC_CONFIG, DEFAULT_RING_COMPONENTS, DEFAULT_CENTERS, WARM_IDENTITY_PALETTE, MAX_RINGS, MAX_CENTERS, MAX_RING_STOPS, } from "./constants";
4
+ export { type RingComponent, type RingCenter, type Vec2, sampleRingField, ellipsoidalRadius, buildRingLadder, RING_GRAVITY, } from "./composables/ringField";
5
+ export type { OklchStop } from "../../../composables/color";
@@ -0,0 +1,4 @@
1
+ /** The full-screen-triangle vertex shader (the substrate's standard fullscreen pass). */
2
+ export declare const CONCENTRIC_VERT_GLSL = "#version 300 es\nprecision highp float;\nin vec2 aPosition;\nout vec2 vUv;\nvoid main() {\n vUv = aPosition; // [-1,1]\u00B2 domain\n gl_Position = vec4(aPosition, 0.0, 1.0);\n}";
3
+ /** The concentric fragment source — the aurora-class radial-Fourier field. */
4
+ export declare const CONCENTRIC_FRAG_GLSL = "#version 300 es\nprecision highp float;\n\n#define PI 3.141592653589793\n#define TAU 6.283185307179586\n#define RING_GRAVITY 9.81\n#define MAX_RINGS 8\n#define MAX_CENTERS 4\n#define MAX_RING_STOPS 4\n\nin vec2 vUv;\nout vec4 fragColor;\n\nuniform float uTime;\nuniform float uSpeed;\nuniform vec2 uAxis; // (a, b) ellipsoidal-norm axis ratio\nuniform float uFieldNorm; // field \u2192 [0,1] amplitude scale\nuniform float uAspect;\nuniform int uCenterCount;\nuniform int uRingCount;\nuniform int uStopCount;\nuniform float uHasBackground;\nuniform vec3 uRings[MAX_RINGS]; // (amplitude, wavelength, phase)\nuniform vec3 uCenters[MAX_CENTERS]; // (x, y, weight)\nuniform vec3 uPalette[MAX_RING_STOPS]; // linear-sRGB stops\n\n\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}\n\n// value.js LINEAR_SRGB_TO_LMS (constants.ts), row-major; written here as GLSL\n// columns (= the transpose) so mat3 * vec3 evaluates the row-major M\u00B7v.\nconst mat3 LINEAR_SRGB_TO_LMS = mat3(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS\u2192OKLab coefficients (gamut.ts lines 295-297 \u2014\n// these differ at the ~1e-9 digit from LMS_TO_OKLAB_MATRIX; use the inline ones to\n// mirror the exact value.js path), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_OKLAB = mat3(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF (constants.ts), row-major \u2192 GLSL columns. Rows:\n// l = [1, 0.3963377774, 0.2158037573], m = [1, -0.1055613458, -0.0638541728],\n// s = [1, -0.0894841775, -1.2914855480].\nconst mat3 OKLAB_TO_LMS = mat3(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB (constants.ts), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_LINEAR_SRGB = mat3(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\n// Gamma sRGB \u2192 raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nvec3 srgbToOklab(vec3 c) {\n vec3 lin = srgbToLinear(c);\n vec3 lms = LINEAR_SRGB_TO_LMS * lin;\n vec3 lmsCbrt = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\n\n// Raw OKLab (L, a, b) \u2192 linear sRGB. Mirrors value.js oklabToLinearSRGB.\nvec3 oklabToLinearSrgb(vec3 lab) {\n vec3 lms_ = OKLAB_TO_LMS * lab;\n vec3 lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab \u2192 OKLCh: H in RADIANS. Mirrors value.js rawOklabToOklch (which returns\n// degrees; we stay in radians and only fold to [0, 2pi)).\nvec3 oklabToOklch(vec3 lab) {\n float C = length(lab.yz);\n float H = atan(lab.z, lab.y);\n if (H < 0.0) H += 2.0 * PI;\n return vec3(lab.x, C, H);\n}\n\n// OKLCh (H radians) \u2192 OKLab. Mirrors value.js rawOklchToOklab.\nvec3 oklchToOklab(vec3 lch) {\n return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}\n\n// \u2016p \u2212 c\u2016_e = sqrt((dx/a)\u00B2 + (dy/b)\u00B2) \u2014 transcribes ringField.ts ellipsoidalRadius.\nfloat ellipsoidalRadius(vec2 p, vec2 center, float axisA, float axisB) {\n float dx = (p.x - center.x) / max(axisA, 1e-4);\n float dy = (p.y - center.y) / max(axisB, 1e-4);\n return sqrt(dx * dx + dy * dy);\n}\n\n// f(p,t) \u2014 the multi-center weighted radial sum (transcribes ringField.ts sampleRingField).\nfloat sampleRingField(vec2 p, float t) {\n float acc = 0.0;\n for (int j = 0; j < MAX_CENTERS; j++) {\n if (j >= uCenterCount) break;\n vec3 cj = uCenters[j];\n float radius = ellipsoidalRadius(p, cj.xy, uAxis.x, uAxis.y);\n float centerSum = 0.0;\n for (int i = 0; i < MAX_RINGS; i++) {\n if (i >= uRingCount) break;\n vec3 r = uRings[i];\n float k = TAU / max(r.y, 1e-4);\n float omega = sqrt(RING_GRAVITY * k) * uSpeed;\n float theta = k * radius - omega * t + r.z;\n centerSum += r.x * sin(theta);\n }\n acc += centerSum * cj.z;\n }\n return acc;\n}\n\n// Sample the multi-stop palette (linear-sRGB stops, OKLab mix). t in [0,1].\nvec3 samplePaletteLin(float t) {\n if (uStopCount <= 1) return uPalette[0];\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 // cube-root LMS (the GLSL chunk inlines cbrt as sign(x)\u00B7pow(|x|,1/3) \u2014 no cbrt3 fn).\n vec3 lmsA = LINEAR_SRGB_TO_LMS * uPalette[i0];\n vec3 lmsB = LINEAR_SRGB_TO_LMS * uPalette[i1];\n vec3 labA = LMS_TO_OKLAB * (sign(lmsA) * pow(abs(lmsA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(lmsB) * pow(abs(lmsB), vec3(1.0 / 3.0)));\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\nvoid main() {\n float aspect = max(uAspect, 1e-4);\n vec2 p = vec2(vUv.x * aspect, vUv.y);\n float raw = sampleRingField(p, uTime);\n float v = clamp(0.5 + raw * uFieldNorm, 0.0, 1.0);\n vec3 lin = samplePaletteLin(v);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n if (uHasBackground > 0.5) {\n fragColor = vec4(rgb, 1.0);\n return;\n }\n float alpha = clamp(v * 0.92 + 0.08, 0.0, 1.0);\n fragColor = vec4(rgb * alpha, alpha);\n}";
@@ -0,0 +1 @@
1
+ export declare const CONCENTRIC_WGSL = "\nconst PI: f32 = 3.141592653589793;\nconst TAU: f32 = 6.283185307179586;\nconst RING_GRAVITY: f32 = 9.81;\nconst MAX_RINGS: i32 = 8;\nconst MAX_CENTERS: i32 = 4;\nconst MAX_RING_STOPS: i32 = 4;\n\n// \u2500\u2500 Concentric uniforms (the typed-struct source-of-truth \u2014 see uniformBridgeWGPU.ts) \u2500\u2500\nstruct ConcentricUniforms {\n // u0: (uTime, uSpeed, uAxisA, uAxisB)\n u0: vec4<f32>,\n // ints: (uCenterCount, uRingCount, uStopCount, _pad)\n ints: vec4<i32>,\n // bg: (background.rgb (linear), hasBackground)\n bg: vec4<f32>,\n // norm: (uFieldNorm, uAspect, _pad, _pad) \u2014 field \u2192 [0,1] scale\n norm: vec4<f32>,\n // each ring row: (amplitude, wavelength, phase, _pad)\n rings: array<vec4<f32>, 8>,\n // each center row: (x, y, weight, _pad)\n centers: array<vec4<f32>, 4>,\n // each palette stop: linear-sRGB rgb + _pad\n palette: array<vec4<f32>, 4>,\n};\n\n@group(0) @binding(0) var<uniform> u: ConcentricUniforms;\n\n\nfn srgbToLinearCh(c: f32) -> f32 {\n if (c <= 0.04045) { return c / 12.92; }\n return pow((c + 0.055) / 1.055, 2.4);\n}\nfn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfn linearToSrgbCh(c: f32) -> f32 {\n if (c <= 0.0031308) { return c * 12.92; }\n return 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nfn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}\n\n// value.js LINEAR_SRGB_TO_LMS, row-major \u2192 WGSL columns (= the transpose).\nconst LINEAR_SRGB_TO_LMS: mat3x3<f32> = mat3x3<f32>(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS\u2192OKLab coefficients, row-major \u2192 WGSL columns.\nconst LMS_TO_OKLAB: mat3x3<f32> = mat3x3<f32>(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF, row-major \u2192 WGSL columns.\nconst OKLAB_TO_LMS: mat3x3<f32> = mat3x3<f32>(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB, row-major \u2192 WGSL columns.\nconst LMS_TO_LINEAR_SRGB: mat3x3<f32> = mat3x3<f32>(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\nfn cbrt3(v: vec3<f32>) -> vec3<f32> {\n return sign(v) * pow(abs(v), vec3<f32>(1.0 / 3.0));\n}\n\n// Gamma sRGB \u2192 raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nfn srgbToOklab(c: vec3<f32>) -> vec3<f32> {\n let lin = srgbToLinear(c);\n let lms = LINEAR_SRGB_TO_LMS * lin;\n return LMS_TO_OKLAB * cbrt3(lms);\n}\n\n// Raw OKLab (L, a, b) \u2192 linear sRGB. Mirrors value.js oklabToLinearSRGB.\nfn oklabToLinearSrgb(lab: vec3<f32>) -> vec3<f32> {\n let lms_ = OKLAB_TO_LMS * lab;\n let lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab \u2192 OKLCh: H in RADIANS, folded to [0, 2pi). Mirrors value.js rawOklabToOklch.\nfn oklabToOklch(lab: vec3<f32>) -> vec3<f32> {\n let C = length(lab.yz);\n var H = atan2(lab.z, lab.y);\n if (H < 0.0) { H = H + 2.0 * PI; }\n return vec3<f32>(lab.x, C, H);\n}\n\n// OKLCh (H radians) \u2192 OKLab. Mirrors value.js rawOklchToOklab.\nfn oklchToOklab(lch: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}\n\n// Full-screen-triangle (the pilot idiom): NDC corners (-1,-1),(3,-1),(-1,3) cover the\n// viewport from a single 3-vertex draw \u2014 no vertex buffer.\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) uv: vec2<f32>, // domain [-1,1]\u00B2, aspect-corrected x\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {\n var corners = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0), vec2<f32>(3.0, -1.0), vec2<f32>(-1.0, 3.0),\n );\n let c = corners[vi];\n var out: VSOut;\n out.pos = vec4<f32>(c, 0.0, 1.0);\n // aspect-correct so the rings stay circular under the ellipsoidal norm (NOT squashed\n // by the canvas aspect): widen the domain x by the aspect ratio.\n out.uv = vec2<f32>(c.x, c.y);\n return out;\n}\n\n// The ellipsoidal radial distance \u2016p \u2212 c\u2016_e = sqrt((dx/a)\u00B2 + (dy/b)\u00B2). The single radial\n// metric (transcribes ringField.ts ellipsoidalRadius).\nfn ellipsoidalRadius(p: vec2<f32>, center: vec2<f32>, axisA: f32, axisB: f32) -> f32 {\n let dx = (p.x - center.x) / max(axisA, 1e-4);\n let dy = (p.y - center.y) / max(axisB, 1e-4);\n return sqrt(dx * dx + dy * dy);\n}\n\n// The radial-Fourier ring-interference value f(p,t) \u2014 the multi-center weighted sum of\n// radial sinusoids (transcribes ringField.ts sampleRingField line-for-line).\nfn sampleRingField(p: vec2<f32>, t: f32) -> f32 {\n var acc = 0.0;\n let speed = u.u0.y;\n let axisA = u.u0.z;\n let axisB = u.u0.w;\n let centerCount = u.ints.x;\n let ringCount = u.ints.y;\n for (var j = 0; j < MAX_CENTERS; j = j + 1) {\n if (j >= centerCount) { break; }\n let cj = u.centers[j];\n let radius = ellipsoidalRadius(p, cj.xy, axisA, axisB);\n var centerSum = 0.0;\n for (var i = 0; i < MAX_RINGS; i = i + 1) {\n if (i >= ringCount) { break; }\n let r = u.rings[i];\n let k = TAU / max(r.y, 1e-4);\n // \u03C9 = \u221A(g\u00B7k); speed scales the travel (the shared dispersion law).\n let omega = sqrt(RING_GRAVITY * k) * speed;\n let theta = k * radius - omega * t + r.z;\n centerSum = centerSum + r.x * sin(theta);\n }\n acc = acc + centerSum * cj.z;\n }\n return acc;\n}\n\n// Sample the multi-stop palette (linear-sRGB stops, OKLab mix). t in [0,1].\nfn samplePaletteLin(t: f32) -> vec3<f32> {\n let stopCount = u.ints.z;\n if (stopCount <= 1) { return u.palette[0].rgb; }\n let n = f32(stopCount);\n let ft = clamp(t, 0.0, 1.0) * (n - 1.0);\n let i0 = i32(floor(ft));\n let i1 = min(i0 + 1, stopCount - 1);\n let f = ft - f32(i0);\n let labA = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * u.palette[i0].rgb);\n let labB = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * u.palette[i1].rgb);\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n // aspect-correct the domain x so the rings read circular under the ellipsoidal norm.\n let aspect = max(u.norm.y, 1e-4);\n let p = vec2<f32>(in.uv.x * aspect, in.uv.y);\n let t = u.u0.x;\n\n let raw = sampleRingField(p, t);\n // Normalize the field \u2192 [0,1] for the palette ramp (uFieldNorm is the amplitude scale).\n let v = clamp(0.5 + raw * u.norm.x, 0.0, 1.0);\n\n let lin = samplePaletteLin(v);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n\n // Premultiplied-alpha output over the (transparent / themed) ground.\n let hasBg = u.bg.w;\n if (hasBg > 0.5) {\n // opaque themed ground: the field paints fully opaque.\n return vec4<f32>(rgb, 1.0);\n }\n // transparent ground: the field's alpha rides its own brightness so the page reads\n // through the troughs (the ring crests carry the ink; the calm field is faint).\n let alpha = clamp(v * 0.92 + 0.08, 0.0, 1.0);\n return vec4<f32>(rgb * alpha, alpha);\n}\n";
@@ -3,14 +3,14 @@ import { type ConfiguratorDensity } from "./density";
3
3
  /**
4
4
  * Scroll behavior for the controls column.
5
5
  *
6
- * - `auto` — overflow-y-auto with `.scroll-fade-y` mask; controls scroll
7
- * when their intrinsic height exceeds the host. Default.
8
- * - `always` — controls always render scroll affordance (mask + thin
9
- * scrollbar). Use when authors want a fixed-height studio
10
- * regardless of content.
11
- * - `never` — controls do not scroll; host grows to content height. Use
12
- * for popover/sheet hosts that already manage their own
13
- * overflow.
6
+ * - `auto` — the controls column renders a <FadingScroll axis="y"> scroll-port
7
+ * (sharp at rest, feathered while overflowing); controls scroll when
8
+ * their intrinsic height exceeds the host. Default.
9
+ * - `always` — same <FadingScroll> scroll-port + thin scrollbar. Use when
10
+ * authors want a fixed-height studio regardless of content.
11
+ * - `never` — controls do not scroll; host grows to content height. Renders a
12
+ * plain div (no FadingScroll). Use for popover/sheet hosts that
13
+ * already manage their own overflow.
14
14
  */
15
15
  export type ConfiguratorScrollMode = "auto" | "always" | "never";
16
16
  /**
@@ -106,6 +106,17 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
106
106
  }) => any;
107
107
  } & {
108
108
  default?: (props: {}) => any;
109
+ } & {
110
+ controls?: (props: {
111
+ layers: readonly {
112
+ id: string;
113
+ label: string;
114
+ }[] | undefined;
115
+ activeLayer: string | undefined;
116
+ selectLayer: (id: string) => void;
117
+ }) => any;
118
+ } & {
119
+ default?: (props: {}) => any;
109
120
  } & {
110
121
  footer?: (props: {
111
122
  reset: () => void;
@@ -1,90 +1,12 @@
1
- import { type HTMLAttributes } from "vue";
2
- import { type ConstellationField } from "./constellationField";
3
- /**
4
- * Constellation — a slow, geometric proximity-graph lattice on a Canvas2D
5
- * surface. Nodes drift + bounce; near nodes link with distance-falloff
6
- * hairlines; the web leans toward the cursor and taps ripple. It composes the
7
- * `useCanvas2D` substrate, so it inherits the offscreen / tab-hidden /
8
- * reduced-motion freeze for free (no hand-rolled RAF-park).
9
- *
10
- * The lattice ships NEUTRAL. A branded skin (a focal ring, a callout label) is
11
- * the consumer's `drawOverlay(ctx, field, now)` pass — it runs AFTER the four
12
- * neutral passes and receives the live field so it can pin itself to a real
13
- * node. Zero deck-domain content lives in the component.
14
- *
15
- * Palette reads the FULL `--constellation-*` legibility set off the canvas (the
16
- * node/node-dim/line colors + the edge-alpha multipliers + the field-yields-to-
17
- * type `--constellation-alpha` knob; neutral fallbacks), so a consumer override
18
- * or a dark-mode flip re-tints AND re-weights the lattice (AX.W17).
19
- *
20
- * The focal node + click-to-warp (AX.W17) is a first-class engine concept: with
21
- * `warpOnClick`, a click warps the focal node to the nearest drifting node via a
22
- * critically-damped spring stepped INSIDE the substrate's single rAF (no
23
- * `useSpring`, no second rAF). The consumer paints the focal mark at
24
- * `field.warp.{x,y}` in its `drawOverlay`.
25
- */
26
- type __VLS_Props = {
27
- /** Node count. Default 64. */
28
- count?: number;
29
- /** Link distance in px (the falloff reach). Default 132. */
30
- link?: number;
31
- /** Drift speed. Default 0.16. */
32
- speed?: number;
33
- /**
34
- * AY.W-COHERE E3 — the per-instance outer-envelope RECESSION knob (the
35
- * aurora `opacityCeiling` / fourier `intensity` sibling — the SAME prop NAME
36
- * the other live substrates carry, so the four-substrate recession contract is
37
- * ONE vocabulary). The painted edge/node/web/ripple alpha scales by this value
38
- * OVER the mode-tuned `--constellation-alpha` base, so a constellation hero can
39
- * RECEDE behind content (StoryHero sets 0.4–0.6) exactly as its aurora + fourier
40
- * siblings do. Default `1` is byte-identical to HEAD (the draw-alpha trace is
41
- * unchanged — the default-OFF canary). NOT a second token: `--constellation-alpha`
42
- * stays the mode recession base, this is the per-instance loudness envelope.
43
- */
44
- opacityCeiling?: number;
45
- /**
46
- * Seed for a REPRODUCIBLE field. A `number` or `string` (hashed) seeds the
47
- * shared `mulberry32`; omit for a fresh `Math.random` field each mount.
48
- */
49
- seed?: number | string;
50
- /** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
51
- pointerReactive?: boolean;
52
- /**
53
- * Click-to-warp (AX.W17). A click warps the focal node to the nearest
54
- * drifting node and SPRINGS it there (critically damped, chasing the LIVE
55
- * target). INDEPENDENT of `pointerReactive`. Default false; auto-off under
56
- * reduced-motion (the focal mark stays put). Sugars the exposed `warpTo(...)`.
57
- */
58
- warpOnClick?: boolean;
59
- /**
60
- * Auto-DRIFT (AY.W-CON1). A periodic auto-pick re-points the focal node to a
61
- * RANDOM node on a jittered cadence — the wander source on the SAME warp
62
- * spring (the 2nd half of the AX.W17 "drift + warp are ONE mechanic" thesis;
63
- * no second rAF, no second mechanic). `true` uses the default cadence
64
- * (8–16s, the slides rhythm); `{ minIdle?, jitter? }` tunes it (ms). Default
65
- * OFF — `wander` absent leaves `field.wander` undefined, byte-identical to
66
- * HEAD. PRM-gated by the WARP precedent: the cadence lives inside the
67
- * `!reducedMotion` step block, so under reduced-motion it never advances and
68
- * the focal mark stays at its seed (NOT fire-but-freeze).
69
- */
70
- wander?: boolean | {
71
- minIdle?: number;
72
- jitter?: number;
73
- };
74
- /**
75
- * Pointer-held GRAVITY-WELL (AY.W-CON2). Hold the pointer over the lattice and
76
- * the nodes within reach are PULLED toward it (an inverse-square force on the
77
- * SAME engine, no second rAF); release and the field cools back to `speed`.
78
- * INDEPENDENT of `warpOnClick` and `pointerReactive` (a consumer can
79
- * hold-to-pull on a non-ripple, non-warp lattice). `true` uses the tokenised
80
- * `--constellation-well-*` defaults; an object overrides the gains. Default
81
- * OFF — `gravityWell` absent leaves `field.well` undefined (byte-identical to
82
- * HEAD; `stepField` skips the force pass). PRM-gated by the WARP precedent: the
83
- * held-timer block lives inside `!reducedMotion`, so under reduced-motion the
84
- * well never arms; AND the well STATE resets to neutral on the PRM-true edge
85
- * (no half-ramped force frozen on).
86
- */
87
- gravityWell?: boolean | {
1
+ import { type ConstellationProps } from "./constellationField";
2
+ declare const __VLS_export: import("vue").DefineComponent<ConstellationProps, import("./composables/useConstellation").ConstellationExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ConstellationProps> & Readonly<{}>, {
3
+ link: number;
4
+ speed: number;
5
+ count: number;
6
+ opacityCeiling: number;
7
+ pointerReactive: boolean;
8
+ warpOnClick: boolean;
9
+ gravityWell: boolean | {
88
10
  holdMs?: number;
89
11
  gain?: number;
90
12
  reach?: number;
@@ -92,129 +14,19 @@ type __VLS_Props = {
92
14
  maxSpeed?: number;
93
15
  soften?: number;
94
16
  };
95
- /**
96
- * PINNED node designation (AZ.W-CON-GEN G1). A pinned node is HELD by every step
97
- * pass — it does NOT drift, bounce, steer toward the cursor, or feel the
98
- * gravity-well, so it stays at its seeded position (the flagged node a
99
- * consumer pins). `false`/absent → no pin (every node drifts, byte-identical to
100
- * HEAD); `true` → node 0 (the canonical flagged node); a number → that index. The
101
- * `accentEdges` prop tints its incident edges; the `pinnedDrift` prop gently
102
- * wanders it around its anchor. The `pinNode(idx)` expose re-points it imperatively.
103
- */
104
- pinned?: boolean | number;
105
- /**
106
- * ACCENT-edge skin (AZ.W-CON-GEN G2). When `true`, edges incident on the PINNED
107
- * (else the FOCAL) node stroke the `--constellation-accent` tint at the
108
- * `--constellation-edge-accent-alpha` weight — the flagged-node tether — while
109
- * every other edge keeps the neutral register. Default OFF (the single-color
110
- * neutral pass, byte-identical to HEAD). Reads the accent off the resolved palette.
111
- */
112
- accentEdges?: boolean;
113
- /**
114
- * Autonomous PINNED-ANCHOR drift (AZ.W-CON-GEN G5). When set AND a node is pinned,
115
- * the pinned node gently eases around its seeded anchor within `wanderFrac`
116
- * (default ±0.14 of the canvas) on a jittered cadence (a closed-form easeInOutQuad
117
- * stepped inside the substrate's single rAF — no second rAF). DISTINCT from
118
- * `wander` (which re-targets the warp among random nodes): this breathes the ONE
119
- * pinned node around its rest. `true` uses the default cadence; an object tunes it.
120
- * Default OFF — the pinned node holds dead-still (byte-identical). PRM-gated by the
121
- * WARP precedent (the drift lives inside `!isStatic`; under reduce the pin holds).
122
- */
123
- pinnedDrift?: boolean | {
17
+ wander: boolean | {
18
+ minIdle?: number;
19
+ jitter?: number;
20
+ };
21
+ pinned: boolean | number;
22
+ accentEdges: boolean;
23
+ pinnedDrift: boolean | {
124
24
  wanderFrac?: number;
125
25
  durMs?: number;
126
26
  minIdle?: number;
127
27
  jitter?: number;
128
28
  };
129
- /**
130
- * Warp AUTO-RELEASE (AZ.W-CON-GEN G6). When `true`, a warp that has SETTLED on its
131
- * target clears its `targetIdx` — the focal node releases the spring and rides its
132
- * node's RAW drift (the identity-ride), freeing the spring for the next warp.
133
- * Default `false` keeps the held-target behaviour (the warp chases its node
134
- * forever — byte-identical to HEAD). Read the settled signal via the
135
- * `warpSettled()` expose.
136
- */
137
- warpAutoRelease?: boolean;
138
- /**
139
- * Deterministic-capture freeze (AY.W-CON3). When `true`, the lattice lays
140
- * out ONE reproducible STATIC frame and does NOT advance — seeded layout
141
- * (set `seed` for a stable field ACROSS runs; an unseeded freeze still
142
- * freezes but lays out a one-shot `Math.random` frame), no `stepField`, no
143
- * ripple / warp / wander / well advance, and a FROZEN `now` handed to
144
- * `drawOverlay` so a phase-driven skin (`(now % T) / T`) resolves to a fixed
145
- * value (the pulse-ring radius is identical frame-over-frame). Omit to
146
- * AUTO-DERIVE from `location.search` matching `export | print | freeze` (the
147
- * deploy-pipeline contract — a consumer's pptx / print / screenshot capture
148
- * gets a stable frame with zero per-consumer wiring). An explicit
149
- * `:freeze="false"` forces live even under a capture URL. Unifies with the
150
- * reduced-motion one-static-frame path — `freeze || reducedMotion` is the
151
- * single static-frame predicate; the capture takes no input (the pointer /
152
- * warp / well listeners are NOT registered under freeze).
153
- */
154
- freeze?: boolean;
155
- class?: HTMLAttributes["class"];
156
- /**
157
- * The skin seam. Runs after the neutral passes with the live field, so a
158
- * consumer paints its own focal mark pinned to a real node — read
159
- * `field.warp.{x,y}` for the spring-eased focal position when `warpOnClick`
160
- * is on. The branded content (a domain accent, a callout label) lives HERE,
161
- * in the consumer. Under `freeze` it receives a FROZEN `now`, so a phase-
162
- * driven mark resolves to a fixed value.
163
- */
164
- drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
165
- };
166
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
167
- /** The live field (the low-level imperative seam — for a custom overlay). */
168
- field: ConstellationField;
169
- /**
170
- * The resolved deterministic-capture predicate (AY.W-CON3) — `true` when the
171
- * lattice is laying out a frozen static frame (`freeze` prop OR a
172
- * `?export|print|freeze` URL OR reduced-motion via the substrate). A read-only
173
- * test/debug seam (the π freeze-live spec reads it to confirm the auto-derive
174
- * fired without inferring from drift).
175
- */
176
- isFrozen: import("vue").ComputedRef<boolean>;
177
- /**
178
- * Imperative warp (AX.W17). Two call shapes:
179
- * `warpTo(localPoint)` — `{x, y}` already in canvas-local px
180
- * (the lower primitive).
181
- * `warpTo(clientX, clientY)` — client coords, mapped via the
182
- * deck-scale `toLocal` (the sugar
183
- * `warpOnClick` calls internally).
184
- * The focal node re-points to the nearest drifting node + springs there.
185
- * Returns the chosen node index, or -1 on a degenerate no-op. No-op under
186
- * reduced-motion (the spring does not advance while the substrate is frozen).
187
- */
188
- warpTo(a: {
189
- x: number;
190
- y: number;
191
- } | number, b?: number): number;
192
- /**
193
- * Imperatively ARM the gravity-well at a canvas-LOCAL point (AY.W-CON2) — the
194
- * π-lane test seam that drives the well WITHOUT racing a real held-pointer
195
- * gesture + the held-timer. Sets the well position + `target = 1` directly (the
196
- * timer is bypassed; the ramp still eases `strength` over the next frames). No-op
197
- * when `gravityWell` is off (no `field.well`). Returns true when the well armed.
198
- */
199
- holdWellAt(x: number, y: number): boolean;
200
- /** Imperatively RELEASE the well (AY.W-CON2) — `target → 0`, the field cools. */
201
- releaseWell(): void;
202
- /**
203
- * The warp settled signal (AZ.W-CON-GEN G6) — `true` when the warp spring has
204
- * ARRIVED on its target (no active warp, OR the focal's gap to its live target is
205
- * within the settle band). A consumer polls this to know if a click-warp / wander
206
- * re-target is still in flight (the `isSettled` read). A read-only seam over the
207
- * engine `warpSettled`.
208
- */
209
- warpSettled(): boolean;
210
- /**
211
- * Imperatively PIN a node (AZ.W-CON-GEN G1) — re-points `field.pinnedIndex` to
212
- * `idx` so that node is HELD by every step pass (it stops drifting and holds its
213
- * current position). `idx < 0` clears the pin (every node drifts again). The
214
- * pinned node's incident edges tint accent under `accentEdges`; it wanders its
215
- * anchor under `pinnedDrift` (the cadence re-anchors on its next armed leg).
216
- */
217
- pinNode(idx: number): void;
218
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ warpAutoRelease: boolean;
30
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
219
31
  declare const _default: typeof __VLS_export;
220
32
  export default _default;
@@ -0,0 +1,26 @@
1
+ import { type Ref } from "vue";
2
+ import { type ConstellationField, type ConstellationProps } from "../constellationField";
3
+ /** The imperative seam the SFC re-exposes via `defineExpose`. */
4
+ export interface ConstellationExpose {
5
+ field: ConstellationField;
6
+ isFrozen: Ref<boolean>;
7
+ warpTo(a: {
8
+ x: number;
9
+ y: number;
10
+ } | number, b?: number): number;
11
+ holdWellAt(x: number, y: number): boolean;
12
+ releaseWell(): void;
13
+ warpSettled(): boolean;
14
+ pinNode(idx: number): void;
15
+ }
16
+ /**
17
+ * Drive a `<Constellation>` instance. `props` is the REACTIVE (defaulted) prop
18
+ * surface — the per-frame live-read props (`pointerReactive`/`opacityCeiling`/
19
+ * `accentEdges`/`drawOverlay`) are read off `props.x` INSIDE the render loop so a
20
+ * bound `:opacity-ceiling` updates without a remount (the Vue 3.5 reactive-prop
21
+ * read; the SFC `defineProps` destructure transform does not reach a composable
22
+ * argument, so the live reads stay on `props`). `hostRef`/`canvasRef` are the SFC
23
+ * template refs. Returns the imperative expose object the SFC spreads into
24
+ * `defineExpose`.
25
+ */
26
+ export declare function useConstellation(props: ConstellationProps, hostRef: Ref<HTMLElement | null>, canvasRef: Ref<HTMLCanvasElement | null>): ConstellationExpose;