@mkbabb/glass-ui 4.0.1 → 4.1.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 (459) hide show
  1. package/dist/{CardAction-CW7a0m8M.js → CardAction-8whJrLWt.js} +23 -8
  2. package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-D3yxgHNn.js} +23 -12
  3. package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-CaP7U3ZA.js} +11 -11
  4. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  5. package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DDRID3qC.js} +15 -15
  6. package/dist/{DataTable-CuKwF7wr.js → DataTable-Bc9kUtu_.js} +2 -2
  7. package/dist/{DialogContent-DcKK8k9i.js → DialogContent-6JtTB5x2.js} +8 -5
  8. package/dist/DialogFooter-9phqcRIS.js +80 -0
  9. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  10. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  11. package/dist/{IconChip-BTD-nay5.js → IconChip-DhbdGdFQ.js} +1 -1
  12. package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-B0zimd2H.js} +1 -1
  13. package/dist/Input-Cg9DF62r.js +57 -0
  14. package/dist/{Notification-VUwexFUf.js → Notification-CphK7AAm.js} +3 -3
  15. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  16. package/dist/PagerDots-Cjx96la-.js +98 -0
  17. package/dist/{SelectScrollDownButton-CrA8F0iV.js → SelectScrollDownButton-DAKCBEdW.js} +62 -57
  18. package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-C2UGOkXF.js} +1 -1
  19. package/dist/Separator-DQcwC2TR.js +44 -0
  20. package/dist/Switch-B8RscmRu.js +49 -0
  21. package/dist/{Toaster-Bw4xR8xV.js → Toaster-D9qIHjBI.js} +1 -1
  22. package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BLtr3TJq.js} +2 -2
  23. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  24. package/dist/animated-digit.js +1 -1
  25. package/dist/api/index.d.ts +15 -32
  26. package/dist/api/types-extra.d.ts +31 -0
  27. package/dist/api.js +1 -1
  28. package/dist/aurora.js +579 -251
  29. package/dist/border-progress.js +49 -57
  30. package/dist/{button-DYCUa-tH.js → button-5dY1Dvhd.js} +13 -14
  31. package/dist/button.js +1 -1
  32. package/dist/canvas.js +2 -3
  33. package/dist/card.js +1 -1
  34. package/dist/carousel.js +20 -20
  35. package/dist/color-Cs0-oxYL.js +116 -0
  36. package/dist/color.js +2 -2
  37. package/dist/command.js +1 -1
  38. package/dist/completion-seal.d.ts +1 -0
  39. package/dist/completion-seal.js +89 -0
  40. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  41. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  42. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
  44. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +11 -2
  45. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
  46. package/dist/components/custom/aurora/constants/presets.d.ts +18 -0
  47. package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
  48. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  49. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  50. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  51. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
  52. package/dist/components/custom/border-progress/index.d.ts +1 -1
  53. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  54. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  55. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  56. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  57. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +7 -0
  58. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +9 -0
  59. package/dist/components/custom/concentric/composables/ringField.d.ts +57 -16
  60. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +2 -1
  61. package/dist/components/custom/concentric/composables/useConcentric.d.ts +4 -4
  62. package/dist/components/custom/concentric/constants.d.ts +30 -6
  63. package/dist/components/custom/concentric/index.d.ts +2 -2
  64. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  65. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  66. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  67. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  68. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  69. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  70. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  71. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  72. package/dist/components/custom/constellation/constants.d.ts +33 -0
  73. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  74. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  75. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  76. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  77. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  78. package/dist/components/custom/constellation/index.d.ts +5 -5
  79. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  80. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  81. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  82. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  83. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  84. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  85. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  86. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  87. package/dist/components/custom/deck/constants.d.ts +14 -0
  88. package/dist/components/custom/deck/index.d.ts +8 -0
  89. package/dist/components/custom/dock/DockIconButton.vue.d.ts +12 -0
  90. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  91. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  92. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +80 -0
  93. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  94. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  95. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  96. package/dist/components/custom/dock/constants.d.ts +18 -14
  97. package/dist/components/custom/dock/index.d.ts +5 -2
  98. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
  99. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +48 -6
  100. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +23 -8
  101. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
  102. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -5
  103. package/dist/components/custom/dot-flow-field/constants.d.ts +42 -21
  104. package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
  105. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  106. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -20
  107. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -1
  108. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  109. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  110. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  111. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  112. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  113. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  114. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  115. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  116. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  117. package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
  118. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
  119. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  120. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +40 -47
  121. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  122. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  123. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  124. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +40 -37
  125. package/dist/components/custom/fourier-field/constants.d.ts +61 -4
  126. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  127. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  128. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  129. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  130. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -1
  131. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  132. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  133. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  134. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  135. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  136. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  137. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  138. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  139. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  140. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  141. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  142. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  143. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  144. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  145. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  146. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  147. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  148. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  149. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  150. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  151. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  152. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  153. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  154. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  155. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  156. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  157. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  158. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  159. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  160. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  161. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  162. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  163. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  164. package/dist/components/custom/search/index.d.ts +2 -0
  165. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  166. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  167. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  168. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  169. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  170. package/dist/components/custom/split-chars/index.d.ts +1 -0
  171. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
  172. package/dist/components/custom/tabs/constants.d.ts +20 -2
  173. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +29 -16
  174. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  175. package/dist/components/ui/_shared/index.d.ts +2 -0
  176. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  177. package/dist/components/ui/button/index.d.ts +1 -1
  178. package/dist/components/ui/card/Card.vue.d.ts +45 -0
  179. package/dist/components/ui/card/index.d.ts +1 -1
  180. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  181. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  182. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  183. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  184. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  185. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  186. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  187. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  188. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  189. package/dist/components/ui/select/SelectContent.vue.d.ts +3 -0
  190. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  191. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  192. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  193. package/dist/composables/color/index.d.ts +2 -0
  194. package/dist/composables/color/useAccentTone.d.ts +34 -0
  195. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  196. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  197. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  198. package/dist/composables/glass/webgpu/index.d.ts +1 -1
  199. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +28 -7
  200. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -0
  201. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  202. package/dist/composables/motion/core/index.d.ts +3 -0
  203. package/dist/composables/motion/scrollReader.d.ts +25 -0
  204. package/dist/composables/motion/springPresets.d.ts +20 -1
  205. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  206. package/dist/composables/motion/useDockCtaReceive.d.ts +31 -6
  207. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  208. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  209. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  210. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  211. package/dist/composables/sidebar/index.d.ts +4 -1
  212. package/dist/composables/sidebar/types.d.ts +68 -3
  213. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  214. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  215. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  216. package/dist/composables/virtual/index.d.ts +4 -0
  217. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  218. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  219. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  220. package/dist/concentric.js +495 -221
  221. package/dist/configurator.js +2 -2
  222. package/dist/confirm-dialog.js +62 -47
  223. package/dist/constellation.js +635 -235
  224. package/dist/context-menu.js +2 -2
  225. package/dist/controls.js +1 -1
  226. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  227. package/dist/dark.js +1 -1
  228. package/dist/data-table.js +1 -1
  229. package/dist/deck.d.ts +1 -0
  230. package/dist/deck.js +105 -0
  231. package/dist/dialog.js +4 -3
  232. package/dist/dock.js +602 -458
  233. package/dist/dot-flow-field.js +580 -290
  234. package/dist/dot-matrix.d.ts +1 -0
  235. package/dist/dot-matrix.js +630 -0
  236. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  237. package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-aJmV5SqE.js} +83 -79
  238. package/dist/dropdown-menu.js +1 -1
  239. package/dist/easing.js +188 -176
  240. package/dist/expandable-container.js +42 -20
  241. package/dist/fading-scroll.js +1 -1
  242. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  243. package/dist/forms.js +62 -60
  244. package/dist/fourier-field.js +825 -178
  245. package/dist/fourier-math.js +1 -1
  246. package/dist/glass-ui.css +1 -1
  247. package/dist/glass-ui.js +145 -104
  248. package/dist/goo-blob.js +171 -1228
  249. package/dist/goo-dot-matrix.d.ts +1 -0
  250. package/dist/goo-dot-matrix.js +591 -0
  251. package/dist/handmark.js +1 -1
  252. package/dist/hover-card.js +1 -1
  253. package/dist/hover-popover.js +1 -1
  254. package/dist/icon-chip.js +1 -1
  255. package/dist/icon-tooltip.js +1 -1
  256. package/dist/index.d.ts +2 -0
  257. package/dist/instrument-chassis.js +1 -1
  258. package/dist/keyboard.js +1 -1
  259. package/dist/labeled-field.js +70 -60
  260. package/dist/metric-cell.js +1 -1
  261. package/dist/metric-stack.js +11 -2
  262. package/dist/motion-core.js +54 -32
  263. package/dist/motion-curves.js +11 -1
  264. package/dist/motion.js +46 -111
  265. package/dist/notification.js +1 -1
  266. package/dist/number-field.js +1 -1
  267. package/dist/pager-dots.js +2 -91
  268. package/dist/paper-backdrop.js +1 -1
  269. package/dist/paper-grid.d.ts +1 -0
  270. package/dist/paper-grid.js +788 -0
  271. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  272. package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-m7Zgv35j.js} +2 -2
  273. package/dist/progress.js +1 -1
  274. package/dist/pulse.js +1 -1
  275. package/dist/reactive.js +1 -1
  276. package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-yPyIpJt9.js} +12 -2
  277. package/dist/scrollReader-DI1NWxUw.js +42 -0
  278. package/dist/scrolling-text.js +1 -1
  279. package/dist/search.js +160 -304
  280. package/dist/select.js +3 -3
  281. package/dist/selectable-chip.d.ts +1 -0
  282. package/dist/selectable-chip.js +65 -0
  283. package/dist/separator.js +1 -1
  284. package/dist/{sheet-tZMg0E0w.js → sheet-B2flBfLH.js} +2 -2
  285. package/dist/sheet.js +1 -1
  286. package/dist/sidebar.js +216 -114
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +1 -1
  289. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  290. package/dist/{springPresets-CFQGQfdl.js → springPresets-Ce7OYCm9.js} +12 -6
  291. package/dist/styles/animations.css +13 -3
  292. package/dist/styles/cards.css +69 -0
  293. package/dist/styles/completion-seal.css +131 -0
  294. package/dist/styles/components.css +2 -3
  295. package/dist/styles/configurator.css +55 -0
  296. package/dist/styles/critical-partition.mjs +33 -11
  297. package/dist/styles/deferred.css +2 -0
  298. package/dist/styles/dock/cta-seat.css +87 -0
  299. package/dist/styles/dock/density.css +153 -0
  300. package/dist/styles/dock/layers.css +55 -7
  301. package/dist/styles/dock/morph-bridge.css +54 -18
  302. package/dist/styles/dock/morph.css +41 -33
  303. package/dist/styles/dock/overflow.css +12 -0
  304. package/dist/styles/dock/search.css +68 -0
  305. package/dist/styles/dock/shape.css +124 -0
  306. package/dist/styles/dock/shell.css +23 -5
  307. package/dist/styles/dock/stack-rail.css +264 -0
  308. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  309. package/dist/styles/dock-controls/icon-button.css +14 -0
  310. package/dist/styles/dock.css +11 -1
  311. package/dist/styles/glass/accent-tone.css +66 -0
  312. package/dist/styles/glass/control-surfaces.css +167 -0
  313. package/dist/styles/glass/ladder.css +67 -17
  314. package/dist/styles/glass/rim.css +19 -9
  315. package/dist/styles/glass/surfaces.css +69 -148
  316. package/dist/styles/glass.css +10 -0
  317. package/dist/styles/index.css +15 -0
  318. package/dist/styles/scroll-chrome.css +123 -0
  319. package/dist/styles/scroll-driven.css +38 -0
  320. package/dist/styles/segmented-tabs.css +50 -14
  321. package/dist/styles/theme/bridges.css +22 -0
  322. package/dist/styles/theme/radius.css +18 -1
  323. package/dist/styles/tokens/color-radius.css +13 -3
  324. package/dist/styles/tokens/dark-arm.css +39 -6
  325. package/dist/styles/tokens/glass-deep.css +28 -3
  326. package/dist/styles/tokens/glass-fx.css +44 -1
  327. package/dist/styles/tokens/glass.css +91 -31
  328. package/dist/styles/tokens/light-dark.css +1 -1
  329. package/dist/styles/tokens/offsets.css +27 -0
  330. package/dist/styles/tokens/property-regs.css +133 -0
  331. package/dist/styles/tokens/scale-paper.css +73 -29
  332. package/dist/styles/tokens/scheme-motion.css +44 -6
  333. package/dist/styles/tokens/sizing-config.css +110 -0
  334. package/dist/styles/tokens/sizing.css +55 -104
  335. package/dist/styles/tokens.css +5 -0
  336. package/dist/styles/typography/semantic.css +18 -5
  337. package/dist/styles/utilities/a11y-overrides.css +20 -5
  338. package/dist/styles/utilities/base-misc.css +52 -0
  339. package/dist/styles/utilities/btn.css +14 -3
  340. package/dist/styles/utilities/components.css +31 -6
  341. package/dist/styles/utilities/metal.css +26 -0
  342. package/dist/switch.js +1 -1
  343. package/dist/tabs.js +8 -8
  344. package/dist/timeline.js +1 -1
  345. package/dist/toast.js +1 -1
  346. package/dist/toggle-chip.js +10 -10
  347. package/dist/toggle-group.js +1 -1
  348. package/dist/tooltip.js +1 -1
  349. package/dist/typewriter.js +1 -1
  350. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  351. package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  352. package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-4xblKfwd.js} +25 -24
  353. package/dist/useControlSize-SH1UmJCi.js +9 -0
  354. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  355. package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-BUgAC-zK.js} +4 -4
  356. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  357. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  358. package/dist/{useLiquidPress-kfb4KX79.js → useLiquidPress-BooG97RY.js} +2 -2
  359. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  360. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  361. package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-BWDnKIwh.js} +1 -1
  362. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  363. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  364. package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
  365. package/dist/virtual.d.ts +1 -0
  366. package/dist/virtual.js +225 -0
  367. package/dist/watercolor-dot.js +116 -73
  368. package/package.json +127 -7
  369. package/src/styles/animations.css +13 -3
  370. package/src/styles/cards.css +69 -0
  371. package/src/styles/completion-seal.css +131 -0
  372. package/src/styles/configurator.css +55 -0
  373. package/src/styles/critical-partition.mjs +33 -11
  374. package/src/styles/dock/cta-seat.css +87 -0
  375. package/src/styles/dock/density.css +153 -0
  376. package/src/styles/dock/layers.css +55 -7
  377. package/src/styles/dock/morph-bridge.css +54 -18
  378. package/src/styles/dock/morph.css +41 -33
  379. package/src/styles/dock/overflow.css +12 -0
  380. package/src/styles/dock/search.css +68 -0
  381. package/src/styles/dock/shape.css +124 -0
  382. package/src/styles/dock/shell.css +23 -5
  383. package/src/styles/dock/stack-rail.css +264 -0
  384. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  385. package/src/styles/dock-controls/icon-button.css +14 -0
  386. package/src/styles/dock.css +11 -1
  387. package/src/styles/glass/accent-tone.css +66 -0
  388. package/src/styles/glass/control-surfaces.css +167 -0
  389. package/src/styles/glass/ladder.css +67 -17
  390. package/src/styles/glass/rim.css +19 -9
  391. package/src/styles/glass/surfaces.css +69 -148
  392. package/src/styles/glass.css +10 -0
  393. package/src/styles/index.css +15 -0
  394. package/src/styles/scroll-chrome.css +123 -0
  395. package/src/styles/scroll-driven.css +38 -0
  396. package/src/styles/segmented-tabs.css +50 -14
  397. package/src/styles/theme/bridges.css +22 -0
  398. package/src/styles/theme/radius.css +18 -1
  399. package/src/styles/tokens/color-radius.css +13 -3
  400. package/src/styles/tokens/dark-arm.css +39 -6
  401. package/src/styles/tokens/glass-deep.css +28 -3
  402. package/src/styles/tokens/glass-fx.css +44 -1
  403. package/src/styles/tokens/glass.css +91 -31
  404. package/src/styles/tokens/light-dark.css +1 -1
  405. package/src/styles/tokens/offsets.css +27 -0
  406. package/src/styles/tokens/property-regs.css +133 -0
  407. package/src/styles/tokens/scale-paper.css +73 -29
  408. package/src/styles/tokens/scheme-motion.css +44 -6
  409. package/src/styles/tokens/sizing-config.css +110 -0
  410. package/src/styles/tokens/sizing.css +55 -104
  411. package/src/styles/tokens.css +5 -0
  412. package/src/styles/typography/semantic.css +18 -5
  413. package/src/styles/utilities/a11y-overrides.css +20 -5
  414. package/src/styles/utilities/base-misc.css +52 -0
  415. package/src/styles/utilities/btn.css +14 -3
  416. package/src/styles/utilities/components.css +31 -6
  417. package/src/styles/utilities/metal.css +26 -0
  418. package/dist/ContextMenuContent-uWnVxDab.js +0 -85
  419. package/dist/DialogFooter-BZNX5aVr.js +0 -165
  420. package/dist/HoverCardContent-b2uaAMRR.js +0 -83
  421. package/dist/Input-h9v5LeXf.js +0 -55
  422. package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
  423. package/dist/Separator-pKF0oA4M.js +0 -37
  424. package/dist/Switch-CwYNf8bo.js +0 -47
  425. package/dist/TooltipProvider-rzvnXz60.js +0 -104
  426. package/dist/color-DweYl7pE.js +0 -86
  427. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  428. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  429. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  430. package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
  431. package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
  432. package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
  433. package/dist/styles/dock/rail-extend.css +0 -397
  434. package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
  435. package/dist/useRAFLoop-UYa4zoiN.js +0 -109
  436. package/dist/useSpringPress-BsqPr7FJ.js +0 -34
  437. package/src/styles/dock/rail-extend.css +0 -397
  438. /package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-DLRbH5Xr.js} +0 -0
  439. /package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-BcIxvyqZ.js} +0 -0
  440. /package/dist/{InstrumentChassis-Bx0F_q5g.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  441. /package/dist/{PaperBackdrop-Vf3tlpvd.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  442. /package/dist/{Progress-DctG61iZ.js → Progress-CnqB7gLm.js} +0 -0
  443. /package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-CTZbA_cG.js} +0 -0
  444. /package/dist/{SelectGroup-DwwjicPY.js → SelectGroup-BFiod7X2.js} +0 -0
  445. /package/dist/{compile-CQEFRTmx.js → compile-nZ1xVYTp.js} +0 -0
  446. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  447. /package/dist/{math-BINYmg5z.js → math-Eb0w3LqU.js} +0 -0
  448. /package/dist/{prng-Za0Rmgag.js → prng-B-d9eYX8.js} +0 -0
  449. /package/dist/{slider-DVb4HXU-.js → slider-2A0rPn79.js} +0 -0
  450. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  451. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  452. /package/dist/{useInterval-CvK1mL92.js → useInterval-CNdua40W.js} +0 -0
  453. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  454. /package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  455. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  456. /package/dist/{useSortable-DHjtZSEd.js → useSortable-BVqlJRBR.js} +0 -0
  457. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
  458. /package/dist/{vReveal-Czsb7zQC.js → vReveal-D9k0jADx.js} +0 -0
  459. /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
@@ -0,0 +1 @@
1
+ export declare const CONSTELLATION_POINTS_WGSL = "\n// \u2500\u2500 Node storage row + uniforms (the typed-struct source-of-truth \u2014 uniformBridgeWGPU.ts) \u2500\u2500\nstruct Node {\n // (pos.x, pos.y, radius, dim)\n data: vec4<f32>,\n};\n\nstruct ConstellationUniforms {\n // u0: (resolution.x, resolution.y, dpr, kVis)\n u0: vec4<f32>,\n // u1: (time, lineWidth, opacityCeiling, alpha)\n u1: vec4<f32>,\n // uEdge: (edgeAlpha, edgeFocusAlpha, edgeAccentAlpha, edgeFloor)\n uEdge: vec4<f32>,\n // colours (premultiplied-ready rgba)\n uNode: vec4<f32>,\n uNodeDim: vec4<f32>,\n uLine: vec4<f32>,\n uAccent: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u: ConstellationUniforms;\n@group(0) @binding(1) var<storage, read> nodes: array<Node>;\n\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) uv: vec2<f32>, // [-1,1] billboard-local \u2192 fragment SDF coord\n @location(1) dim: f32, // 0 = full node, 1 = dim node\n};\n\n@vertex\nfn vs_main(\n @builtin(vertex_index) vIdx: u32,\n @builtin(instance_index) iIdx: u32,\n) -> VSOut {\n // Two-triangle quad corners in billboard-local space.\n var QUAD = array<vec2<f32>, 6>(\n vec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0), vec2<f32>(-1.0, 1.0),\n vec2<f32>(-1.0, 1.0), vec2<f32>(1.0, -1.0), vec2<f32>(1.0, 1.0),\n );\n let corner = QUAD[vIdx];\n\n let node = nodes[iIdx].data;\n let res = u.u0.xy;\n let dpr = u.u0.z;\n let kVis = u.u0.w;\n\n // center: node px \u2192 clip space (y-flip \u2014 px is y-down, clip is y-up).\n let centerPx = node.xy;\n let centerNdc = vec2<f32>(\n centerPx.x / max(res.x, 1.0) * 2.0 - 1.0,\n 1.0 - centerPx.y / max(res.y, 1.0) * 2.0,\n );\n // half-extent: radius\u00B7kVis in CSS px \u2192 backing-store px (\u00B7dpr) \u2192 NDC half (\u00B72/res).\n // (the DPR-aware crispness leg \u2014 the disc samples at device resolution.)\n // (half is a WGSL reserved keyword \u2014 name it halfExt.)\n let radPx = node.z * kVis * dpr;\n let halfExt = vec2<f32>(radPx / max(res.x, 1.0) * 2.0, radPx / max(res.y, 1.0) * 2.0);\n\n var out: VSOut;\n out.pos = vec4<f32>(centerNdc + corner * halfExt, 0.0, 1.0);\n out.uv = corner;\n out.dim = node.w;\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n // SDF: distance to the unit-circle edge in billboard-local space (0 at the rim, neg inside).\n let d = length(in.uv) - 1.0;\n // fwidth(d) = |dpdx(d)| + |dpdy(d)| \u2014 the pixel footprint of the SDF, the resolution-\n // independent AA width (~1px band at ANY DPR/zoom/size).\n let aa = max(fwidth(d), 1e-4);\n let coverage = 1.0 - smoothstep(-aa, aa, d);\n if (coverage <= 0.0) { discard; }\n let col = mix(u.uNode, u.uNodeDim, in.dim);\n let a = col.a * coverage * u.u1.z; // \u00B7opacityCeiling\n // premultiplied-alpha output.\n return vec4<f32>(col.rgb * a, a);\n}\n";
@@ -0,0 +1,29 @@
1
+ type __VLS_Props = {
2
+ /** Total slide count. */
3
+ total: number;
4
+ /** Window to `fit` dots centered on the active dot. Off → show every dot. */
5
+ windowFit?: number;
6
+ /** Encapsulate the rail in the glass pager pill chassis. Default false —
7
+ a deck owns its own ambient glass host, so the dots sit FLUSH on it. */
8
+ ring?: boolean;
9
+ /** Accessible name for the rail group. */
10
+ ariaLabel?: string;
11
+ };
12
+ type __VLS_ModelProps = {
13
+ /** v-model:index — the active 0-based slide index. */
14
+ "index"?: number;
15
+ };
16
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
+ "update:index": (value: number) => any;
19
+ } & {
20
+ select: (index: number) => any;
21
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
22
+ onSelect?: ((index: number) => any) | undefined;
23
+ "onUpdate:index"?: ((value: number) => any) | undefined;
24
+ }>, {
25
+ ariaLabel: string;
26
+ ring: boolean;
27
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
28
+ declare const _default: typeof __VLS_export;
29
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import { type ComputedRef, type Ref } from "vue";
2
+ export interface DeckCore {
3
+ /** The 0-based active slide index (clamped to [0, total-1]). */
4
+ index: Ref<number>;
5
+ /** The total slide count. */
6
+ total: number;
7
+ /** 1-based completion as a percentage (slide 1 of N → 100/N), for a bar. */
8
+ progress: ComputedRef<number>;
9
+ /** The accessible "Slide N of M" announcement off the live index (§3 — the
10
+ portable aria-live seam; surface it in an `sr-only` polite region). */
11
+ liveMessage: ComputedRef<string>;
12
+ go: (i: number) => void;
13
+ next: () => void;
14
+ prev: () => void;
15
+ first: () => void;
16
+ last: () => void;
17
+ }
18
+ export interface UseDeckOptions {
19
+ /** The initial 0-based index (clamped). Default 0. */
20
+ initial?: number;
21
+ /** Fired AFTER a navigation commits, with the new + previous index. */
22
+ onChange?: (to: number, from: number) => void;
23
+ /** Resolve a per-slide accessible name for the live announcement (e.g. the
24
+ manifest title). When set, `liveMessage` reads "Slide N of M: <name>". */
25
+ label?: (index: number) => string;
26
+ }
27
+ export declare function useDeck(total: number, opts?: UseDeckOptions): DeckCore;
@@ -0,0 +1,25 @@
1
+ import { type MaybeRefOrGetter } from "vue";
2
+ /** The minimal move surface the handler drives (a structural subset of DeckCore,
3
+ so the consumer can pass its `DeckCore` directly). */
4
+ export interface DeckMoves {
5
+ next(): void;
6
+ prev(): void;
7
+ first(): void;
8
+ last(): void;
9
+ go(i: number): void;
10
+ }
11
+ export interface DeckKeyOptions {
12
+ /** Override the focused-control test (defaults to `target.closest(controls)`). */
13
+ isControl?: (target: EventTarget | null) => boolean;
14
+ }
15
+ /** Handle ONE keydown against the deck. Returns true if it navigated (and called
16
+ `preventDefault`), false if the key was left for the page/control. */
17
+ export declare function handleDeckKey(e: KeyboardEvent, deck: DeckMoves, opts?: DeckKeyOptions): boolean;
18
+ export interface UseDeckKeyboardOptions extends DeckKeyOptions {
19
+ /** The element the listener binds to. Default `window` (deck-global paging). */
20
+ target?: MaybeRefOrGetter<EventTarget | null | undefined>;
21
+ }
22
+ /** Bind the focus-guarded deck keyboard contract to a target (default `window`)
23
+ for the component lifetime. The `target` may be a ref/getter so a not-yet-mounted
24
+ element resolves at `onMounted`. */
25
+ export declare function useDeckKeyboard(deck: DeckMoves, opts?: UseDeckKeyboardOptions): void;
@@ -0,0 +1,22 @@
1
+ /** The deck spring preset, re-exported from the colocated constants for consumers
2
+ sampling the same `(response, ζ)` row. */
3
+ export { DECK_SPRING } from "../constants";
4
+ /**
5
+ * Count-up easing. Defaults to a monotone cubic-out so a still render (or a failed
6
+ * engine chunk) is always faithful; replaced in-place with the engine's
7
+ * `springTimingFunction(.smooth)` once keyframes.js resolves. Callers read
8
+ * `deckEase.fn` each frame, so the swap is picked up live with no re-wiring.
9
+ */
10
+ export declare const deckEase: {
11
+ fn: (t: number) => number;
12
+ };
13
+ /**
14
+ * Swap `deckEase.fn` to the engine's matching JS easing once keyframes.js resolves.
15
+ * Idempotent. No-op off-DOM (SSR / export tooling) and a silent no-op if the engine
16
+ * chunk fails — the count-up keeps its monotone cubic fallback.
17
+ *
18
+ * The slide transition needs no JS write: `--spring-deck: var(--spring-smooth)`
19
+ * (glass-ui's `.smooth` `linear()` token) resolves the declarative half at first
20
+ * paint.
21
+ */
22
+ export declare function installDeckSpring(): void;
@@ -0,0 +1,14 @@
1
+ /** SwiftUI `.smooth` — the deck's slide-transition + count-up curve: a calm settle
2
+ with a barely-there micro-overshoot, the right cadence for a content deck (the
3
+ page change reads as a settle, not a bounce). It is the SAME family the
4
+ `--spring-smooth` token derives from (`springLinearStops()` output), so the deck
5
+ inherits the constellation's iOS curve instead of forking a third easing
6
+ vocabulary — `--spring-deck: var(--spring-smooth)`. */
7
+ export declare const DECK_SPRING: {
8
+ readonly response: 0.5;
9
+ readonly dampingFraction: 0.85;
10
+ };
11
+ /** The focused-control selector the keyboard handler tests: when a control (button
12
+ / link / field) is focused, Space + digit jumps reach that control's native
13
+ activation instead of being stolen for navigation (the C6 correctness fix). */
14
+ export declare const CONTROL_SELECTOR = "button, a, input, textarea, select, [role=button]";
@@ -0,0 +1,8 @@
1
+ export { useDeck } from "./composables/useDeck";
2
+ export type { DeckCore, UseDeckOptions } from "./composables/useDeck";
3
+ export { useDeckKeyboard, handleDeckKey } from "./composables/useDeckKeyboard";
4
+ export type { DeckMoves, DeckKeyOptions, UseDeckKeyboardOptions, } from "./composables/useDeckKeyboard";
5
+ export { installDeckSpring, deckEase, DECK_SPRING, } from "./composables/useDeckSpring";
6
+ export { default as DeckPager } from "./DeckPager.vue";
7
+ export { CONTROL_SELECTOR } from "./constants";
8
+ export type { PagerWindow } from "../pager-dots/pagerWindow";
@@ -22,6 +22,17 @@ import { type ButtonHTMLAttributes, type Component, type HTMLAttributes } from "
22
22
  type __VLS_Props = {
23
23
  /** Compact variant: auto-sized instead of fixed 2.5rem square. */
24
24
  compact?: boolean;
25
+ /**
26
+ * Selected/toggled state (BC.W-DOCK-ENGINE cross-repo fold — fourier-M #10).
27
+ * The icon button is otherwise STATELESS (hover/press only); a consumer
28
+ * building a selectable dock control (a filter toggle, a mode picker) had to
29
+ * hand-roll the active register. Setting `active` stamps `aria-pressed` (the
30
+ * load-bearing AT-selectable semantic) + `data-active` (the CSS hook reading
31
+ * the existing `--dock-control-active-bg` "selected reads as glass" tier —
32
+ * NEVER a saturated brand hue, per W-REGISTER-IOS). Ergonomic sugar over the
33
+ * shipped register; no new token, no new paint.
34
+ */
35
+ active?: boolean;
25
36
  /** Button type attribute (default: "button" to prevent form submission). */
26
37
  type?: ButtonHTMLAttributes["type"];
27
38
  /** Host tag/component (reka-ui Primitive `as`; default "button"). */
@@ -35,6 +46,7 @@ type __VLS_Slots = {} & {
35
46
  default?: (props: typeof __VLS_8) => any;
36
47
  };
37
48
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
49
+ active: boolean;
38
50
  type: "button" | "reset" | "submit";
39
51
  compact: boolean;
40
52
  asChild: boolean;
@@ -0,0 +1,65 @@
1
+ import { type Component } from "vue";
2
+ import type { DockStackItem } from "./constants";
3
+ /**
4
+ * <DockStack> — BC.W-DOCK-STACK-RAIL. The macOS Dock hover-expand STACK (the clean-break
5
+ * rebuild of the retired divider-carousel `DockRail`). It renders in `GlassDock`'s `#rail`
6
+ * slot, over the KEPT `.glass-dock-frame` non-clipping escape, so it extends BEYOND the
7
+ * dock edge into its own gutter WITHOUT touching the dock box (the box-INVIOLATE
8
+ * discipline — `deltaW = deltaH = 0`).
9
+ *
10
+ * THE STACK. A `core` anchor item (the always-visible glyph, sitting in the dock(1)) +
11
+ * `items: readonly DockStackItem[]` (the members). On hover (pointer-enter) OR focus of
12
+ * the core item, the members FAN OUT next to the rail — a column (vertical dock) / row
13
+ * (horizontal dock) of FULLY-VISIBLE glass icons springing open beside the line, each on
14
+ * the iOS liquid clock, staggered by `--dock-stack-stagger * var(--i)` in reading order.
15
+ * The hover-collapse reverses on the no-overshoot `--ease-out`. Every member is a clear
16
+ * `--glass-bg-floating` glass icon — NEVER a shadowed half-tucked chip (the "NOT shadowed"
17
+ * verbatim ask). At rest only the core (1) shows; expanded, the n members.
18
+ *
19
+ * 3 CONFIGURABLE, SCROLLABLE, N-STACK. `visibleCount` (default 3) members fan at rest;
20
+ * an >visibleCount stack routes the fanned column through `<FadingScroll>` (the one
21
+ * scroll-fade port) so the n-stack is reachable by scrolling the rail, NOT by overflowing
22
+ * the dock box.
23
+ *
24
+ * THE HOVER-HYSTERESIS (REUSED, not re-forked — AZ.W-DOCK-FLICKER). The pointer-enter
25
+ * commits the open only after the `HOVER_INTENT_MS` intent-dwell (the SAME constant the
26
+ * dock-collapse hysteresis reads), so a sweeping-edge enter does not flash the stack open.
27
+ * Focus opens immediately (keyboard intent is explicit); blur/leave closes.
28
+ *
29
+ * ONE REGISTRY (R2 KEPT). The members write the consumer-owned `v-model:selected`; this
30
+ * primitive owns NO internal `ref()`/`reactive()` shadow of the active member. The hover
31
+ * `expanded` is a transient UI state (optionally `v-model:expanded` controlled), NOT a
32
+ * selection shadow.
33
+ */
34
+ type __VLS_Props = {
35
+ /** The stack members — the fan-out contents (NOT facet chips; the macOS stack). */
36
+ items: readonly DockStackItem[];
37
+ /** The core anchor glyph (the always-visible dock(1) item). Default: a layers glyph. */
38
+ core?: Component;
39
+ /** The core's accessible label (the stack's name). */
40
+ coreLabel?: string;
41
+ /** Members visible at rest before scrolling (the verbatim "3 configurable"). */
42
+ visibleCount?: number;
43
+ /** Which dock edge the stack anchors to. */
44
+ position?: "start" | "end";
45
+ };
46
+ type __VLS_ModelProps = {
47
+ "selected"?: string;
48
+ "expanded"?: boolean;
49
+ };
50
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
51
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
52
+ select: (id: string) => any;
53
+ "update:selected": (value: string | undefined) => any;
54
+ "update:expanded": (value: boolean) => any;
55
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
56
+ onSelect?: ((id: string) => any) | undefined;
57
+ "onUpdate:selected"?: ((value: string | undefined) => any) | undefined;
58
+ "onUpdate:expanded"?: ((value: boolean) => any) | undefined;
59
+ }>, {
60
+ position: "start" | "end";
61
+ visibleCount: number;
62
+ coreLabel: string;
63
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
64
+ declare const _default: typeof __VLS_export;
65
+ export default _default;
@@ -1,5 +1,5 @@
1
1
  import { type DockProps } from "./composables/useDockShellProps";
2
- declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
2
+ declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {};
3
3
  type __VLS_Slots = {} & {
4
4
  persistent?: (props: typeof __VLS_1) => any;
5
5
  } & {
@@ -7,7 +7,9 @@ type __VLS_Slots = {} & {
7
7
  } & {
8
8
  collapsed?: (props: typeof __VLS_5) => any;
9
9
  } & {
10
- rail?: (props: typeof __VLS_7) => any;
10
+ search?: (props: typeof __VLS_7) => any;
11
+ } & {
12
+ rail?: (props: typeof __VLS_9) => any;
11
13
  };
12
14
  declare const __VLS_base: import("vue").DefineComponent<DockProps, {
13
15
  expanded: import("vue").Ref<boolean, boolean>;
@@ -24,6 +24,17 @@ export declare function dimOf(axis: "horizontal" | "vertical"): "width" | "heigh
24
24
  export declare function morphAxisProp(axis: "horizontal" | "vertical"): "inline-size" | "block-size";
25
25
  export declare function getSize(el: HTMLElement, axis: "horizontal" | "vertical"): number;
26
26
  export declare function clearMorphVars(el: HTMLElement): void;
27
+ /**
28
+ * BC.W-LIQUID-MORPH (M3) — the reserve-floor in px (the measure-failure floor). The
29
+ * CSS reserve floors the box at `max(var(--dock-morph-to), var(--dock-morph-min))`
30
+ * (layers.css), but the SCALAR ratio still runs toward `--dock-morph-to`, so a
31
+ * `to:0` mis-measure would interpolate toward a degenerate target. The orchestrator's
32
+ * measure-failure guard seats the measured `to` at THIS px so the morph interpolates
33
+ * toward a visible footprint, never 0 — "visible at the floor," never "white." Reads
34
+ * the element's RESOLVED `--dock-morph-min` (density-scaled), falling back to the WCAG
35
+ * ~44px touch floor when the token is unset / unresolvable. Pure read — no write.
36
+ */
37
+ export declare function morphMinFloorPx(el: HTMLElement | null): number;
27
38
  /**
28
39
  * BA-VJS-1 (valuejs-fold A-1) — the OTHER registered targets whose container is a
29
40
  * DOM DESCENDANT of `outerEl` (a nested `<DockLayerGroup>` stack inside the outer
@@ -73,3 +84,72 @@ export interface MorphSeatCallbacks {
73
84
  * resolves to the class endpoint with `[data-morphing]` cleared).
74
85
  */
75
86
  export declare function seatTargetSync(t: MorphMeasureTarget, id: number, root: HTMLElement | null, targets: Iterable<MorphMeasureTarget>, cb: MorphSeatCallbacks): void;
87
+ /**
88
+ * The swap-while-morphing sibling re-base. The shared scalar resets to 0 for the
89
+ * new span; if SIBLING targets are mid-morph, re-base their `from` to their CURRENT
90
+ * painted px first, so resetting the scalar keeps them visually continuous (they
91
+ * interpolate fresh from where they are, toward their unchanged `to`) rather than
92
+ * snapping back to their old `from`. PURE over the swapping target + the target set.
93
+ */
94
+ export declare function rebaseSiblingSpans(swapping: MorphMeasureTarget, targets: Iterable<MorphMeasureTarget>): void;
95
+ /**
96
+ * BC.W-DOCK-ROOT-MORPH — clear the ROOT box's own morph span (the `inline-size` =
97
+ * f(scalar) recipe in layers.css reads `--dock-root-morph-from/to`; clearing them
98
+ * hands the box back to the at-rest shrink-wrap once the morph settles). PURE on
99
+ * the root element — no orchestrator closure.
100
+ */
101
+ export declare function clearRootMorphSpan(root: HTMLElement | null): void;
102
+ /**
103
+ * BC.W-DOCK-ROOT-MORPH — pin the ROOT box's own from→to span on the dock root.
104
+ *
105
+ * THE SNAP ROOT CAUSE: the inner `.dock-layers` reserves its SETTLED `to`
106
+ * footprint (`inline-size: var(--dock-morph-to)`, layers.css — the E4-frozen
107
+ * CDP-Layout-flat mechanism) and morphs VISUALLY via `transform: scaleX()`. A
108
+ * `transform` is paint-only — a parent does NOT shrink-wrap to a scaled child —
109
+ * so the root `.glass-dock` (display:inline-flex) shrink-wraps to the inner's
110
+ * RESERVED full `to` width and SNAPS to full on frame 0, while the inner's scaled
111
+ * box rides the spring smoothly. The gate (and the page) measure the ROOT box, so
112
+ * the root must ALSO ramp. The layers.css recipe reads
113
+ * `inline-size: calc(from + (to−from)·--dock-morph-t)` (the SAME scalar the spring
114
+ * glides, NO CSS transition — proof:no-layout-animation stays GREEN; a `calc()`
115
+ * over the registered `--dock-morph-t` is not a transition). PURE on the root.
116
+ */
117
+ export declare function armRootMorphSpan(root: HTMLElement | null, rootFrom: number, rootTo: number): void;
118
+ /** The orchestrator callbacks the rAF measure-and-arm window composes — the arm
119
+ * step re-pins the per-target + root spans on the shared scalar. */
120
+ export interface MorphMeasureArmCallbacks {
121
+ /** Arm the per-target `--dock-morph-from/to` span + ensure the shared spring. */
122
+ armTarget(t: MorphMeasureTarget, id: number, fromSize: number, toSize: number): void;
123
+ }
124
+ /**
125
+ * BC.W-DOCK-ROOT-MORPH / BA-VJS-1 / BC.W-LIQUID-MORPH (M3) — the rAF measure-and-arm
126
+ * window: ONE rAF (post-flush) later, lift the pin for a single synchronous
127
+ * measurement of the now-correct shrink-wrapped to-size, then re-pin + start the
128
+ * spring IN THE SAME FRAME. The measurement + arm are gated on THIS target's own
129
+ * `txId`, so a sibling target swapping in the same tick does NOT clobber it.
130
+ *
131
+ * BA-VJS-1 — the nested-`DockLayerGroup` measure-ORDERING fix: force every OTHER
132
+ * registered target whose container is a DOM descendant of this outer's container
133
+ * to its own-axis `max-content` (clearing its pinned calc span) for the single
134
+ * synchronous measurement, then RESTORE its exact prior inline state, so the outer
135
+ * shrink-wraps around the inner's TRUE intrinsic content, not its pinned collapse.
136
+ *
137
+ * BC.W-DOCK-ROOT-MORPH — for the OUTER target, LIFT the root's own pinned span for
138
+ * the duration of this synchronous measure (clearing `--dock-root-morph-from/to`,
139
+ * which the layers.css recipe constrains the root by) so the root shrink-wraps to
140
+ * its TRUE expanded width, read it DIRECTLY (sidestepping the chrome-offset
141
+ * arithmetic + the empty-summary `inner-to:0` trap), then RESTORE the pin and
142
+ * arm the root from→to span so its `inline-size` ramps on the SAME scalar.
143
+ *
144
+ * BC.W-LIQUID-MORPH (M3) — the measure-failure guard: a `to:0` mis-measure (a
145
+ * mid-morph re-grab, a nested collapsible still pinned, a race the ordering fix
146
+ * missed) seats the measured `to` at the resolved floor (`--dock-morph-min`,
147
+ * density-scaled, WCAG ~44px fallback) so the morph interpolates toward a visible
148
+ * footprint, never toward 0 — "visible at the floor," never "white." Inert on a
149
+ * healthy measurement.
150
+ *
151
+ * PURE over its explicit deps (the orchestrator passes the live element/targets/
152
+ * outer identity + the `armTarget` re-pin callback) — no module-level state, so the
153
+ * extraction is behaviour-identical to the prior inline rAF closure.
154
+ */
155
+ export declare function measureAndArmMorph(t: MorphMeasureTarget, id: number, axis: "horizontal" | "vertical", fromSize: number, rootFromSize: number, isOuter: boolean, rootEl: HTMLElement | null, targets: Iterable<MorphMeasureTarget>, cb: MorphMeasureArmCallbacks): void;
@@ -1,5 +1,7 @@
1
1
  export { useDockState } from "./useDockState";
2
2
  export type { UseDockStateOptions, UseDockStateReturn, DockState } from "./useDockState";
3
+ export { useDockSearch } from "./useDockSearch";
4
+ export type { UseDockSearchOptions, UseDockSearchReturn } from "./useDockSearch";
3
5
  export { useLayerTransition } from "./useLayerTransition";
4
6
  export type { UseLayerTransitionOptions, UseLayerTransitionReturn } from "./useLayerTransition";
5
7
  export { useDockHold } from "./useDockHold";
@@ -0,0 +1,85 @@
1
+ import { type MaybeRefOrGetter, type Ref } from "vue";
2
+ import type { UseDockStateReturn } from "./useDockState";
3
+ import { type FuzzySearchState, type SearchableItem, type SearchResult } from "../../search/composables";
4
+ import { type UseScrollChromeReturn } from "../../../../composables/motion/useScrollChrome";
5
+ export interface UseDockSearchOptions<T extends SearchableItem = SearchableItem> {
6
+ /** Composes the existing dock state machine (no fork) — `armSearch`/`disarmSearch`
7
+ ride its `onClickCollapsed`/`keepOpen`/`release`. */
8
+ dockState: UseDockStateReturn;
9
+ /**
10
+ * The search items (sync) — a static array or a getter. Drives the composed
11
+ * `useFuzzySearch` matcher. MUTUALLY EXCLUSIVE with `onSearch` (sync XOR async).
12
+ */
13
+ items?: T[] | (() => T[]);
14
+ /**
15
+ * The pluggable async data source (the words network case). The consumer owns the
16
+ * abort/network race-guard; the dock owns the gesture/shrink/dropdown. When set, the
17
+ * dock awaits the source on each query, cancelling the prior request's
18
+ * `AbortController` (the generic thin abort). MUTUALLY EXCLUSIVE with `items`.
19
+ */
20
+ onSearch?: (query: string, signal: AbortSignal) => Promise<T[]>;
21
+ /** Debounce delay in ms forwarded to the matcher / the async source. Default 120. */
22
+ debounceMs?: number;
23
+ /** Maximum results forwarded to the matcher. Default 30. */
24
+ maxResults?: number;
25
+ /**
26
+ * Opt-in collapse-on-scroll — composes `useScrollChrome` (persistent-default, the
27
+ * iOS-27 lesson). DEFAULT FALSE: the dock is PERSISTENT; the morph fires on user
28
+ * intent (tap/focus), never a passive scroll. When true the chrome shrinks+fades on
29
+ * scroll-down + expands on scroll-up (the transform-only `--chrome-collapse-t` ramp).
30
+ */
31
+ collapseOnScroll?: boolean;
32
+ /** The scroll source for the optional collapse-on-scroll (a container or window). */
33
+ scrollContainer?: MaybeRefOrGetter<HTMLElement | Window | null>;
34
+ /** The dock element the collapse-on-scroll writes `--chrome-collapse-t` onto. */
35
+ chromeRef?: MaybeRefOrGetter<HTMLElement | null>;
36
+ /**
37
+ * Result-select hook — wires the ToC subsume: `ensureTargetWindow(id)` (warm the
38
+ * window so the target renders) + `scrollTo(id)` (the rAF-retry scroll-to-and-land).
39
+ * The dock owns the gesture; the consumer passes the two leaves' bound functions.
40
+ */
41
+ onResultSelect?: (result: SearchResult<T>) => void;
42
+ /**
43
+ * The virtual-window warm step (composed `useVirtualSectionWindow.ensureTargetWindow`).
44
+ * Called BEFORE `scrollTo` on a result-select so the windowed target is rendered.
45
+ */
46
+ ensureTargetWindow?: (id: string) => void;
47
+ /**
48
+ * The ToC scroll-to (composed `useScrollTo.scrollTo`) — the rAF-retry scroll-to-id.
49
+ * Called AFTER the warm step on a result-select.
50
+ */
51
+ scrollTo?: (id: string) => void;
52
+ }
53
+ export interface UseDockSearchReturn<T extends SearchableItem = SearchableItem> {
54
+ /** The composed `useFuzzySearch` handle (query/results/selectedIndex/onKeydown/…). */
55
+ fuzzy: FuzzySearchState<T>;
56
+ /** The ghost-text top-match completion (the unmatched suffix of `results[0].label`). */
57
+ autocompleteText: Ref<string>;
58
+ /** The optional collapse-on-scroll machine (null when `collapseOnScroll` is false). */
59
+ scrollChrome: UseScrollChromeReturn | null;
60
+ /** Tap/focus → expand + hold (composes `onClickCollapsed` + `keepOpen`). */
61
+ armSearch: () => void;
62
+ /** Close → release the hold (composes `release`) + close the fuzzy surface. */
63
+ disarmSearch: () => void;
64
+ /** Tab/Space/ArrowRight → fill the ghost-text into the query. */
65
+ acceptAutocomplete: () => void;
66
+ /** True while the search field is the armed/morphed surface. */
67
+ isSearchArmed: Ref<boolean>;
68
+ }
69
+ /**
70
+ * The dock-search seam — composes `useDockState` + `useFuzzySearch` (+ optional
71
+ * `useScrollChrome`); the `armSearch`/`disarmSearch`/`autocompleteText`/
72
+ * `acceptAutocomplete` surface; the async `onSearch` adapter; the `onResultSelect` →
73
+ * `ensureTargetWindow` + `scrollTo` wire. Does NOT edit the morph engine
74
+ * (`dockMorphContext`/`DOCK_SPRING` byte-untouched — the box-inviolate fence); the
75
+ * pill→field morph is the dock's OWN `--dock-morph-t` glide + the `morph-bridge.css`
76
+ * metaball.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * const dockState = useDockState({ rootEl });
81
+ * const search = useDockSearch({ dockState, items: () => sections.value });
82
+ * // armSearch() on tap → the pill morphs into the field; type → fuzzy dropdown ranks.
83
+ * ```
84
+ */
85
+ export declare function useDockSearch<T extends SearchableItem = SearchableItem>(options: UseDockSearchOptions<T>): UseDockSearchReturn<T>;
@@ -143,6 +143,17 @@ export interface DockProps {
143
143
  * case); absent, it stack-walks the painted page background (the static case).
144
144
  */
145
145
  backgroundCanvas?: HTMLCanvasElement | (() => HTMLCanvasElement | null) | string | null;
146
+ /**
147
+ * BC.W-DOCK-SEARCH — the dock-as-native-dynamic-search-bar MODE (additive,
148
+ * default `false`). When true the dock stamps `[data-search]` (the CSS hook the
149
+ * `dock/search.css` active-field tint seam + the `.glass-menu-row` result rows
150
+ * target) and renders the `#search` slot INSIDE the existing morph aperture — the
151
+ * consumer composes `useDockSearch` (the gesture/shrink/dropdown seam) and slots
152
+ * its search field + fuzzy dropdown there. The pill→field morph is the dock's OWN
153
+ * `--dock-morph-t` glide (box-inviolate — no second engine). A non-search dock is
154
+ * byte-identical to HEAD (the slot + the data-attr are present only when authored).
155
+ */
156
+ search?: boolean;
146
157
  }
147
158
  /** The resolved shell-prop computeds the GlassDock SFC binds. */
148
159
  export interface DockShellProps {
@@ -1,18 +1,22 @@
1
1
  import type { Component } from "vue";
2
2
  /**
3
- * AZ.W-RAIL3 — one `<DockRail>` chip descriptor: the visible facet the floating
4
- * carousel strip renders (id + label + glyph). A `<script setup>` SFC cannot
5
- * re-export a named type through the `export { default }` barrel, so the chip
6
- * descriptor lives here (the colocated types home) and the SFC imports it; the
7
- * barrel re-exports it for consumers typing their `items` array.
3
+ * BC.W-DOCK-STACK-RAIL — one `<DockStack>` member descriptor: a stack member that fans
4
+ * OUT of the macOS hover-expand stack (id + label + glyph + optional select handler).
5
+ * A `<script setup>` SFC cannot re-export a named type through the `export { default }`
6
+ * barrel, so the descriptor lives here (the colocated types home) and the SFC imports
7
+ * it; the barrel re-exports it for consumers typing their `items` array. This is the
8
+ * stack's MEMBER, not a facet chip — the divider-carousel `DockRailItem` is RETIRED
9
+ * (clean break, no alias).
8
10
  */
9
- export interface DockRailItem {
10
- /** The context id this chip selects (written to `v-model:context`). */
11
+ export interface DockStackItem {
12
+ /** Stable identifier — the `v-for` key + the selected-member id. */
11
13
  id: string;
12
- /** The chip label. */
14
+ /** The member's accessible label (the `aria-label` + tooltip). */
13
15
  label: string;
14
- /** The chip glyph (a `@lucide/vue` icon or any component). */
16
+ /** The member glyph (a `@lucide/vue` icon or any component). */
15
17
  icon?: Component;
18
+ /** Optional per-member select handler (fired alongside the model write). */
19
+ onSelect?: () => void;
16
20
  }
17
21
  /**
18
22
  * BA.W-DOCK-SECTIONS — the three named zone kinds the declarative `<DockSection>`
@@ -42,12 +46,12 @@ export interface DockSectionDescriptor {
42
46
  /** Optional accessible label for the grouped zone. */
43
47
  label?: string;
44
48
  /**
45
- * For a `section` kind: the contextual facets this section carries. When present
46
- * (length > 1) the section's facets are the rail's chips (the W-RAIL3 move OUT of
47
- * the dock body — the facets ride the seam rail, never re-inflate the box). The
48
- * descriptor names them; `<DockRail :items>` renders them.
49
+ * For a `section` kind: the stack members this section carries. When present
50
+ * (length > 1) the members ride the dock's `#rail` stack (the macOS hover-expand
51
+ * stack, OUTSIDE the dock box — never re-inflating it). The descriptor names them;
52
+ * `<DockStack :items>` fans them out.
49
53
  */
50
- layers?: readonly DockRailItem[];
54
+ layers?: readonly DockStackItem[];
51
55
  }
52
56
  /**
53
57
  * The ONE dock-morph spring authority — the iOS-26 interruptible-physics tuning the
@@ -7,8 +7,8 @@ export { default as DockTabButton } from "./DockTabButton.vue";
7
7
  export { default as DockSelectTrigger } from "./DockSelectTrigger.vue";
8
8
  export { default as DockDropdownTrigger } from "./DockDropdownTrigger.vue";
9
9
  export { default as DockSeparator } from "./DockSeparator.vue";
10
- export { default as DockRail } from "./DockRail.vue";
11
- export type { DockRailItem } from "./constants";
10
+ export { default as DockStack } from "./DockStack.vue";
11
+ export type { DockStackItem } from "./constants";
12
12
  export { default as DockSection } from "./DockSection.vue";
13
13
  export type { DockSectionDescriptor, DockSectionKind } from "./constants";
14
14
  export type { UseDockStateOptions, UseDockStateReturn, DockState } from "./composables";
@@ -16,3 +16,6 @@ export { useLayerTransition } from "./composables";
16
16
  export type { UseLayerTransitionOptions, UseLayerTransitionReturn, } from "./composables";
17
17
  export { DOCK_CONTEXT_KEY, useDockContext, useOptionalDockContext, provideDockContext, type DockContext, type DockOrientation, type DockLayout, } from "./composables/dockContext";
18
18
  export { useDockOrientationMorph, type DockMorphOrientation, type UseDockOrientationMorphOptions, type UseDockOrientationMorphReturn, } from "./composables/useDockOrientationMorph";
19
+ export { useDockCtaReceive, type UseDockCtaReceiveOptions, type UseDockCtaReceiveReturn, type DockCtaReceivePreset, } from "../../../composables/motion/useDockCtaReceive";
20
+ export { useDockSearch } from "./composables";
21
+ export type { UseDockSearchOptions, UseDockSearchReturn } from "./composables";
@@ -1,18 +1,22 @@
1
1
  import type { FlowFieldConfig } from "./constants";
2
2
  /**
3
- * DotFlowField — small dots seeded along undulating streamlines, rippling in waves.
3
+ * DotFlowField — a calm anchored dot-matrix a slow LARGE wave sweeps through
4
+ * (BC.W-VIZ-DOTFLOW retopology — NOT the BB free-advecting particle cloud).
4
5
  *
5
- * A curl-noise flow field traced by advected particles, where the scalar potential
6
- * undulates as a Gerstner/Tessendorf sum-of-sines water-wave field (the cited SOTA
7
- * math — `composables/flowField.ts`). WebGPU-FIRST: the compute pass advects N
8
- * particles through the analytic ∇⊥ψ velocity, the render pass draws instanced
9
- * billboard quads; a Canvas2D point-cloud fallback steps the SAME evaluator where
10
- * WebGPU is absent (the ~5-10% tail). It composes `useDotFlowField` → the
11
- * `createGpuSubstrate` picker over the ONE canvas lifecycle leaf (offscreen-pause,
12
- * live-PRM freeze, consumer-owned DPR) — it never bootstraps its own context.
6
+ * Each dot is anchored to a deterministic lattice cell and eases toward its sub-cell
7
+ * displacement target with a restoring spring (no advection, no re-seed); a broad
8
+ * bright iso-band sweeps the lattice, lighting the dots it passes — the low-frequency
9
+ * Gerstner/Tessendorf sum-of-sines height (`composables/flowField.ts`). WebGPU-FIRST:
10
+ * the compute pass pulls the lattice to its target, the render pass draws instanced
11
+ * billboard quads lit by the sweeping band; a pure WebGL2 FRAGMENT fallback evaluates
12
+ * the SAME field where WebGPU is absent (no Canvas2D — the §E "no canvas" mandate). It
13
+ * composes `useDotFlowField` → the `createGpuSubstrate` picker over the ONE canvas
14
+ * lifecycle leaf (offscreen-pause, live-PRM freeze, the shared pointer field) — it never
15
+ * bootstraps its own context.
13
16
  *
14
- * The DEFAULT palette is the warm-cream library identity; the reference teal-on-navy
15
- * is a DEMO preset (presets-in-consumers — never a library token).
17
+ * The DEFAULT palette is the warm-cream library identity; the mono-dim-on-near-black
18
+ * reference + the globe mask are DEMO presets (presets-in-consumers — never a library
19
+ * token). The teal-on-navy is GONE entirely (clean break).
16
20
  */
17
21
  type __VLS_Props = {
18
22
  /** The full author schema (the studio's `useConfiguratorState` model). */
@@ -29,13 +29,55 @@ export declare function curlFBM(p: Vec2): Vec2;
29
29
  /**
30
30
  * The COMPOSITE flow velocity v(p,t): the Gerstner sum-of-sines analytic ∇⊥h PLUS the
31
31
  * `curlStrength`-weighted fbm curl-noise braiding term. The SINGLE math source the WGSL
32
- * compute kernel transcribes; `proof:flow-field` clause 3 round-trips the two paths.
32
+ * compute kernel transcribes; `proof:viz-dotflow` clause F3 round-trips the two paths.
33
+ *
34
+ * RETOPOLOGY (BC.W-VIZ-DOTFLOW). The curl domain-scale dropped 1.7→0.55 (coarse braiding,
35
+ * not fine chatter) per the §3.2 regime inversion. The velocity is no longer an advection
36
+ * integrand (the lattice does not advect) — it is the DISPLACEMENT field's perp-gradient
37
+ * source. `sampleDisplacement` is the per-frame sub-cell offset; `sampleVelocity` stays as
38
+ * the round-trip anchor + the analytic ∇⊥h the displacement reads.
33
39
  */
34
40
  export declare function sampleVelocity(p: Vec2, timeSec: number, waves: readonly WaveComponent[], windSpeed: number, curlStrength: number): Vec2;
41
+ /** The shipped domain half-extent (the lattice is laid out over [-half, half]²). */
42
+ export declare const FLOW_DOMAIN_HALF = 0.85;
35
43
  /**
36
- * Build the default 6-octave Phillips-spectrum wave ladder about a dominant wind
37
- * direction. Amplitudes follow `A_i ∝ exp(−1/(k_i·L)²) / k_i²` (Tessendorf §4), so the
38
- * field is energy-realistic. The directions spread about `windDirection` so the
39
- * streamlines braid like a river delta (not a flat band).
44
+ * The deterministic lattice origin for a particle index — the WGSL `instance_index →
45
+ * origin` mapping matches this EXACTLY (the F3 round-trip anchor). `cols` columns, square
46
+ * pitch in DOMAIN units; the grid is centered on the origin so the field reads symmetric.
47
+ * Index `i` walks row-major (`col = i % cols`, `row = floor(i / cols)`).
40
48
  */
41
- export declare function buildWaveLadder(windDirection: number, octaves?: number): WaveComponent[];
49
+ export declare function gridOrigin(index: number, cols: number, pitch: number): Vec2;
50
+ /**
51
+ * The scalar Gerstner HEIGHT at an origin — the brightness driver (the moving bright
52
+ * stripe the lattice paints). `h(o,t) = Σ_i A_i·sin(k_i·(D_i·o) − ω_i·t + φ_i)`, the SAME
53
+ * sum the velocity derives from (no second wave table). The brightness field reads at the
54
+ * ANCHOR (`o`), not the live position, so the sweep is stable + low-frequency.
55
+ */
56
+ export declare function sampleHeight(o: Vec2, timeSec: number, waves: readonly WaveComponent[], windSpeed: number): number;
57
+ /**
58
+ * The sub-cell DISPLACEMENT for an origin — the divergence-free ∇⊥h (the Gerstner perp-
59
+ * gradient) PLUS a faint coarse curl break. The dot eases toward `o + disp·displaceAmp`
60
+ * (the restoring spring lives in the kernel); this is the target offset, NOT an advection
61
+ * step. Capped LOW by `displaceAmp` so the dot never leaves its cell by > ~0.5 pitch.
62
+ */
63
+ export declare function sampleDisplacement(o: Vec2, timeSec: number, waves: readonly WaveComponent[], windSpeed: number, curlStrength: number): Vec2;
64
+ /**
65
+ * The sweeping bright-stripe band: a `smoothstep` band centered `center` width `width`
66
+ * over the normalized height — the moving iso-band that lights the dots it passes. The
67
+ * band is symmetric about the center (a soft ridge crossing the lattice as `h` sweeps).
68
+ */
69
+ export declare function waveBand(h: number, center: number, width: number): number;
70
+ /**
71
+ * Build the wave ladder about a dominant wind direction. BC.W-VIZ-DOTFLOW REGIME
72
+ * INVERSION (research/viz/dot-flow-field.md §3.2): the LOW-frequency coherent regime — a
73
+ * LARGE base wavelength (≈½–1 period across the view → ONE dominant sweeping wave), 2-3
74
+ * octaves (no fine chatter), a steep amplitude persistence (×0.38 → the base wave
75
+ * dominates, detail a whisper), the λ falloff floored so the finest λ ≥ ~⅓ view. The
76
+ * directions spread MODESTLY about `windDirection` (the sweep reads as ONE coherent form,
77
+ * not a braided delta).
78
+ *
79
+ * `lambda0Mul` is λ₀ as a MULTIPLE of the domain extent (default 2.5 — the §1 target);
80
+ * `octaves` is 2-3 (the coherent band). Amplitudes follow the Phillips falloff × the
81
+ * per-octave persistence so the field stays energy-realistic.
82
+ */
83
+ export declare function buildWaveLadder(windDirection: number, octaves?: number, lambda0Mul?: number): WaveComponent[];