@mkbabb/glass-ui 6.0.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (910) hide show
  1. package/README.md +36 -34
  2. package/dist/DropdownMenuTrigger-ClIq8RJE.js +93 -0
  3. package/dist/FeedbackMark-DZq5001h.js +23 -0
  4. package/dist/Input-9BlLluik.js +77 -0
  5. package/dist/{PagerDots-BoTQ7g5l.js → PagerDots-BEq0MgtH.js} +85 -81
  6. package/dist/Surface-kFQeYrYv.js +82 -0
  7. package/dist/accent-tone-solve-Cw7WkRD9.js +14 -0
  8. package/dist/animated-digit.js +5 -5
  9. package/dist/asElement-CRnm6A2v.js +9 -0
  10. package/dist/aurora.js +831 -776
  11. package/dist/axes.js +25 -14
  12. package/dist/badge-u65NClWn.js +62 -0
  13. package/dist/badge.js +1 -1
  14. package/dist/blob-config.js +1 -1
  15. package/dist/blob.js +442 -395
  16. package/dist/button-Bu9F4uU6.js +98 -0
  17. package/dist/button.js +2 -2
  18. package/dist/canvas.js +1 -1
  19. package/dist/card-Bk96VI2R.js +234 -0
  20. package/dist/card.js +2 -2
  21. package/dist/carousel.js +109 -169
  22. package/dist/chip-DFZQr6rV.js +129 -0
  23. package/dist/chip.js +2 -81
  24. package/dist/{class-names-5jotTFzp.js → class-names-Cpy5eaBk.js} +11 -4
  25. package/dist/collapsible-BAP95XTt.js +154 -0
  26. package/dist/collapsible.js +1 -1
  27. package/dist/color.js +46 -50
  28. package/dist/{procedural-color.wgsl-B9mLK7v0.js → color.wgsl-Ct5o9dpf.js} +155 -121
  29. package/dist/command-SFqDQ65h.js +320 -0
  30. package/dist/command.js +1 -1
  31. package/dist/completion-seal.js +54 -54
  32. package/dist/components/_shared/FeedbackMark.vue.d.ts +11 -0
  33. package/dist/components/_shared/axes.d.ts +9 -3
  34. package/dist/components/_shared/class-names.d.ts +9 -8
  35. package/dist/components/_shared/control-size.d.ts +2 -0
  36. package/dist/components/_shared/disclosure-context.d.ts +7 -0
  37. package/dist/components/_shared/disclosure.css +1 -0
  38. package/dist/components/_shared/feedback.d.ts +7 -0
  39. package/dist/components/_shared/field-control.css +1 -0
  40. package/dist/components/_shared/field-surfaces.css +1 -1
  41. package/dist/components/_shared/fieldControl.d.ts +13 -0
  42. package/dist/components/_shared/floating.d.ts +14 -0
  43. package/dist/components/_shared/index.d.ts +2 -6
  44. package/dist/components/_shared/interaction.d.ts +23 -0
  45. package/dist/components/_shared/menu.css +1 -1
  46. package/dist/components/_shared/menuRowClass.d.ts +2 -0
  47. package/dist/components/_shared/primitive.d.ts +19 -0
  48. package/dist/components/_shared/resolveSurfaceClass.d.ts +3 -0
  49. package/dist/components/_shared/selection.d.ts +7 -0
  50. package/dist/components/_shared/useMotionAxis.d.ts +3 -2
  51. package/dist/components/accordion/Accordion.vue.d.ts +41 -16
  52. package/dist/components/accordion/AccordionContent.vue.d.ts +11 -9
  53. package/dist/components/accordion/AccordionItem.vue.d.ts +12 -9
  54. package/dist/components/accordion/AccordionTrigger.vue.d.ts +8 -11
  55. package/dist/components/accordion/index.d.ts +4 -4
  56. package/dist/components/alert/Alert.vue.d.ts +9 -5
  57. package/dist/components/alert/index.d.ts +17 -8
  58. package/dist/components/animated-digit/AnimatedDigit.vue.d.ts +2 -3
  59. package/dist/components/aurora/Aurora.vue.d.ts +37 -42
  60. package/dist/components/aurora/composables/atoms-fields.d.ts +13 -2
  61. package/dist/components/aurora/composables/atoms.d.ts +52 -50
  62. package/dist/components/aurora/composables/auroraFallbackGround.d.ts +13 -13
  63. package/dist/components/aurora/composables/auroraImageSource.d.ts +4 -5
  64. package/dist/components/aurora/composables/color.d.ts +15 -20
  65. package/dist/components/aurora/composables/frameLoop.d.ts +14 -11
  66. package/dist/components/aurora/composables/glSetup.d.ts +19 -2
  67. package/dist/components/aurora/composables/runtime.d.ts +56 -60
  68. package/dist/components/aurora/composables/uniformBridge.d.ts +9 -14
  69. package/dist/components/aurora/composables/uniformBridgeWGPU.d.ts +21 -22
  70. package/dist/components/aurora/composables/uniformBridgeWGPUImage.d.ts +13 -13
  71. package/dist/components/aurora/composables/useAurora.d.ts +19 -30
  72. package/dist/components/aurora/composables/wgpuSetup.d.ts +10 -8
  73. package/dist/components/aurora/constants/budget.d.ts +12 -25
  74. package/dist/components/aurora/constants/presets.d.ts +47 -58
  75. package/dist/components/aurora/constants/renderMode.d.ts +21 -36
  76. package/dist/components/aurora/constants/shaders/aurora-image.wgsl.d.ts +1 -1
  77. package/dist/components/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -1
  78. package/dist/components/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  79. package/dist/components/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  80. package/dist/components/aurora/constants/shaders/composition.glsl.d.ts +1 -1
  81. package/dist/components/aurora/constants/shaders/flow.glsl.d.ts +1 -1
  82. package/dist/components/aurora/constants/shaders/metal-medium.glsl.d.ts +2 -2
  83. package/dist/components/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -1
  84. package/dist/components/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -1
  85. package/dist/components/aurora/index.d.ts +2 -1
  86. package/dist/components/avatar/Avatar.vue.d.ts +72 -11
  87. package/dist/components/avatar/AvatarFallback.vue.d.ts +1 -2
  88. package/dist/components/avatar/AvatarImage.vue.d.ts +12 -8
  89. package/dist/components/avatar/index.d.ts +3 -9
  90. package/dist/components/avatar/styles.css +1 -0
  91. package/dist/components/badge/Badge.vue.d.ts +2 -9
  92. package/dist/components/badge/index.d.ts +32 -9
  93. package/dist/components/blob/Blob.vue.d.ts +5 -12
  94. package/dist/components/blob/composables/blobSimulation.d.ts +80 -0
  95. package/dist/components/blob/composables/buildMetaballProgram.d.ts +1 -1
  96. package/dist/components/blob/composables/resolveBlobSurface.d.ts +6 -0
  97. package/dist/components/blob/composables/satelliteKinematics.d.ts +3 -3
  98. package/dist/components/blob/composables/uniformBridgeWGPU.d.ts +1 -1
  99. package/dist/components/blob/composables/uploadBlobUniforms.d.ts +4 -31
  100. package/dist/components/blob/composables/useBlobMood.d.ts +5 -5
  101. package/dist/components/blob/composables/useBlobPointer.d.ts +11 -12
  102. package/dist/components/blob/composables/useMetaballRenderer.d.ts +27 -24
  103. package/dist/components/blob/composables/wgpuSetup.d.ts +7 -5
  104. package/dist/components/blob/config.d.ts +1 -1
  105. package/dist/components/blob/index.d.ts +2 -2
  106. package/dist/components/blob/presets.d.ts +2 -2
  107. package/dist/components/blob/shaders/metaball-palette.wgsl.d.ts +1 -1
  108. package/dist/components/blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  109. package/dist/components/blob/shaders/metaball.wgsl.d.ts +1 -1
  110. package/dist/components/blob/shaders/sdf-body.glsl.d.ts +1 -1
  111. package/dist/components/blob/shaders/watercolor-edges.glsl.d.ts +1 -1
  112. package/dist/components/blob/types.d.ts +28 -60
  113. package/dist/components/button/Button.vue.d.ts +26 -20
  114. package/dist/components/button/index.d.ts +1 -9
  115. package/dist/components/button/styles.css +1 -0
  116. package/dist/components/card/Card.vue.d.ts +20 -155
  117. package/dist/components/card/CardAction.vue.d.ts +0 -7
  118. package/dist/components/card/CardContent.vue.d.ts +2 -2
  119. package/dist/components/card/CardDescription.vue.d.ts +2 -2
  120. package/dist/components/card/CardFooter.vue.d.ts +2 -2
  121. package/dist/components/card/CardHeader.vue.d.ts +3 -42
  122. package/dist/components/card/CardTitle.vue.d.ts +6 -3
  123. package/dist/components/card/card-scroll.css +1 -1
  124. package/dist/components/card/index.d.ts +1 -3
  125. package/dist/components/card/styles.css +1 -1
  126. package/dist/components/carousel/index.d.ts +0 -2
  127. package/dist/components/carousel/interface.d.ts +2 -0
  128. package/dist/components/checkbox/Checkbox.vue.d.ts +17 -9
  129. package/dist/components/checkbox/index.d.ts +1 -1
  130. package/dist/components/checkbox/styles.css +1 -0
  131. package/dist/components/chip/Chip.vue.d.ts +12 -7
  132. package/dist/components/chip/chipVariants.d.ts +20 -43
  133. package/dist/components/chip/index.d.ts +1 -1
  134. package/dist/components/chip/types.d.ts +45 -30
  135. package/dist/components/collapsible/Collapsible.vue.d.ts +22 -9
  136. package/dist/components/collapsible/CollapsibleContent.vue.d.ts +11 -5
  137. package/dist/components/collapsible/CollapsibleTrigger.vue.d.ts +12 -9
  138. package/dist/components/collapsible/index.d.ts +3 -3
  139. package/dist/components/combobox/Combobox.vue.d.ts +10 -20
  140. package/dist/components/combobox/ComboboxAnchor.vue.d.ts +2 -6
  141. package/dist/components/combobox/ComboboxEmpty.vue.d.ts +2 -6
  142. package/dist/components/combobox/ComboboxGroup.vue.d.ts +2 -7
  143. package/dist/components/combobox/ComboboxInput.vue.d.ts +7 -12
  144. package/dist/components/combobox/ComboboxItem.vue.d.ts +7 -11
  145. package/dist/components/combobox/ComboboxItemIndicator.vue.d.ts +2 -6
  146. package/dist/components/combobox/ComboboxList.vue.d.ts +14 -17
  147. package/dist/components/combobox/ComboboxTrigger.vue.d.ts +16 -0
  148. package/dist/components/combobox/index.d.ts +2 -1
  149. package/dist/components/combobox/types.d.ts +87 -0
  150. package/dist/components/command/Command.vue.d.ts +9 -23
  151. package/dist/components/command/CommandDialog.vue.d.ts +4 -9
  152. package/dist/components/command/CommandEmpty.vue.d.ts +2 -6
  153. package/dist/components/command/CommandGroup.vue.d.ts +2 -7
  154. package/dist/components/command/CommandInput.vue.d.ts +6 -7
  155. package/dist/components/command/CommandItem.vue.d.ts +7 -11
  156. package/dist/components/command/CommandList.vue.d.ts +12 -19
  157. package/dist/components/command/CommandSeparator.vue.d.ts +2 -6
  158. package/dist/components/command/CommandShortcut.vue.d.ts +2 -2
  159. package/dist/components/command/dialogContext.d.ts +6 -0
  160. package/dist/components/command/index.d.ts +10 -10
  161. package/dist/components/command/styles.css +1 -0
  162. package/dist/components/command/types.d.ts +27 -0
  163. package/dist/components/completion-seal/CompletionSeal.vue.d.ts +2 -2
  164. package/dist/components/completion-seal/constants.d.ts +2 -2
  165. package/dist/components/configurator/Configurator.vue.d.ts +6 -6
  166. package/dist/components/configurator/ConfiguratorLayer.vue.d.ts +14 -18
  167. package/dist/components/configurator/ConfiguratorRow.vue.d.ts +14 -17
  168. package/dist/components/configurator/size.d.ts +5 -7
  169. package/dist/components/configurator/styles.css +1 -1
  170. package/dist/components/constellation/Constellation.vue.d.ts +1 -1
  171. package/dist/components/constellation/composables/createConstellationField.d.ts +2 -2
  172. package/dist/components/constellation/constants.d.ts +8 -8
  173. package/dist/components/constellation/constellationField.d.ts +5 -6
  174. package/dist/components/constellation/constellationInteraction.d.ts +8 -8
  175. package/dist/components/constellation/constellationTypes.d.ts +53 -54
  176. package/dist/components/constellation/constellationWell.d.ts +2 -2
  177. package/dist/components/dark-mode-toggle/DarkModeToggle.vue.d.ts +12 -0
  178. package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -0
  179. package/dist/components/dark-mode-toggle/index.d.ts +2 -0
  180. package/dist/components/data-table/DataTable.vue.d.ts +11 -59
  181. package/dist/components/data-table/composables/useDataTableRowIdentity.d.ts +5 -23
  182. package/dist/components/data-table/index.d.ts +1 -1
  183. package/dist/components/data-table/styles.css +1 -0
  184. package/dist/components/data-table/types.d.ts +10 -12
  185. package/dist/components/deck/index.d.ts +0 -1
  186. package/dist/components/dialog/Dialog.vue.d.ts +8 -3
  187. package/dist/components/dialog/DialogClose.vue.d.ts +3 -1
  188. package/dist/components/dialog/DialogContent.vue.d.ts +27 -90
  189. package/dist/components/dialog/DialogDescription.vue.d.ts +5 -6
  190. package/dist/components/dialog/DialogTitle.vue.d.ts +5 -6
  191. package/dist/components/dialog/DialogTrigger.vue.d.ts +3 -1
  192. package/dist/components/{_shared → dialog}/ModalOverlay.vue.d.ts +18 -16
  193. package/dist/components/dialog/dialogStageContext.d.ts +7 -0
  194. package/dist/components/dialog/index.d.ts +8 -8
  195. package/dist/components/dialog/placement.css +1 -1
  196. package/dist/components/dialog/sheet-motion.d.ts +17 -0
  197. package/dist/components/dock/DockControl.vue.d.ts +9 -12
  198. package/dist/components/dock/DockCrossfade.vue.d.ts +4 -8
  199. package/dist/components/dock/DockLayer.vue.d.ts +2 -3
  200. package/dist/components/dock/DockLayerGroup.vue.d.ts +6 -6
  201. package/dist/components/dock/DockSeparator.vue.d.ts +8 -8
  202. package/dist/components/dock/composables/dockContext.d.ts +4 -14
  203. package/dist/components/dock/composables/dockCrossfadeContext.d.ts +6 -7
  204. package/dist/components/dock/composables/dockMorphMeasure.d.ts +7 -86
  205. package/dist/components/dock/composables/index.d.ts +1 -1
  206. package/dist/components/dock/composables/useDockClickIntegrity.d.ts +1 -1
  207. package/dist/components/dock/composables/useDockHold.d.ts +4 -5
  208. package/dist/components/dock/composables/useDockMorph.d.ts +26 -0
  209. package/dist/components/dock/composables/useDockOverflowFit.d.ts +4 -6
  210. package/dist/components/dock/composables/useDockSearch.d.ts +8 -8
  211. package/dist/components/dock/composables/useDockShellProps.d.ts +46 -43
  212. package/dist/components/dock/composables/useDockSpring.d.ts +7 -11
  213. package/dist/components/dock/composables/useDockState.d.ts +12 -3
  214. package/dist/components/dock/composables/useDockTouchGate.d.ts +14 -23
  215. package/dist/components/dock/constants.d.ts +5 -78
  216. package/dist/components/dock/index.d.ts +2 -7
  217. package/dist/components/dock/styles/controls.css +1 -1
  218. package/dist/components/dock/styles/crossfade.css +1 -1
  219. package/dist/components/dock/styles/density.css +1 -1
  220. package/dist/components/dock/styles/index.css +1 -1
  221. package/dist/components/dock/styles/layer-group.css +1 -1
  222. package/dist/components/dock/styles/layers.css +1 -1
  223. package/dist/components/dock/styles/morph.css +1 -1
  224. package/dist/components/dock/styles/shape.css +1 -1
  225. package/dist/components/dock/styles/shell.css +1 -1
  226. package/dist/components/drawer/Drawer.vue.d.ts +17 -20
  227. package/dist/components/drawer/DrawerContent.vue.d.ts +15 -16
  228. package/dist/components/drawer/DrawerDescription.vue.d.ts +5 -6
  229. package/dist/components/drawer/DrawerOverlay.vue.d.ts +6 -6
  230. package/dist/components/drawer/DrawerTitle.vue.d.ts +5 -6
  231. package/dist/components/drawer/composables/drawerSnapContext.d.ts +7 -1
  232. package/dist/components/drawer/composables/useDrawerSnap.d.ts +3 -1
  233. package/dist/components/drawer/constants.d.ts +7 -25
  234. package/dist/components/drawer/index.d.ts +10 -10
  235. package/dist/components/drawer/styles.css +1 -1
  236. package/dist/components/dropdown-menu/DropdownMenu.vue.d.ts +43 -16
  237. package/dist/components/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +22 -13
  238. package/dist/components/dropdown-menu/DropdownMenuContent.vue.d.ts +28 -19
  239. package/dist/components/dropdown-menu/DropdownMenuGroup.vue.d.ts +6 -4
  240. package/dist/components/dropdown-menu/DropdownMenuItem.vue.d.ts +21 -9
  241. package/dist/components/dropdown-menu/DropdownMenuLabel.vue.d.ts +9 -9
  242. package/dist/components/dropdown-menu/DropdownMenuRadioGroup.vue.d.ts +13 -6
  243. package/dist/components/dropdown-menu/DropdownMenuRadioItem.vue.d.ts +18 -11
  244. package/dist/components/dropdown-menu/DropdownMenuSeparator.vue.d.ts +5 -6
  245. package/dist/components/dropdown-menu/DropdownMenuShortcut.vue.d.ts +7 -8
  246. package/dist/components/dropdown-menu/DropdownMenuSub.vue.d.ts +15 -7
  247. package/dist/components/dropdown-menu/DropdownMenuSubContent.vue.d.ts +24 -17
  248. package/dist/components/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +11 -9
  249. package/dist/components/dropdown-menu/DropdownMenuTrigger.vue.d.ts +15 -8
  250. package/dist/components/dropdown-menu/index.d.ts +15 -15
  251. package/dist/components/dropdown-menu/styles.css +1 -0
  252. package/dist/components/dropdown-menu/useMenuTrigger.d.ts +2 -9
  253. package/dist/components/easing/composables/useEasingPicker.d.ts +5 -8
  254. package/dist/components/easing/constants.d.ts +1 -1
  255. package/dist/components/expandable-container/ExpandableContainer.vue.d.ts +1 -25
  256. package/dist/components/expandable-container/styles.css +1 -0
  257. package/dist/components/fading-scroll/FadingScroll.vue.d.ts +4 -0
  258. package/dist/components/fading-scroll/composables/useFadingScroll.d.ts +4 -0
  259. package/dist/components/fading-scroll/constants.d.ts +1 -2
  260. package/dist/components/fourier-field/FourierField.vue.d.ts +3 -5
  261. package/dist/components/fourier-field/composables/fourierFieldGLSetup.d.ts +1 -1
  262. package/dist/components/fourier-field/composables/fourierFieldWGPUSetup.d.ts +1 -1
  263. package/dist/components/fourier-field/composables/useFourierField.d.ts +4 -4
  264. package/dist/components/fourier-field/constants.d.ts +10 -10
  265. package/dist/components/fourier-field/index.d.ts +3 -3
  266. package/dist/components/fourier-field/presets.d.ts +3 -3
  267. package/dist/components/fourier-field/shaders/fourier-field.glsl.d.ts +2 -2
  268. package/dist/components/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
  269. package/dist/components/handmark/HandMark.vue.d.ts +1 -1
  270. package/dist/components/handmark/brush.d.ts +1 -1
  271. package/dist/components/handmark/composables/useHandMark.d.ts +4 -4
  272. package/dist/components/handmark/constants.d.ts +10 -10
  273. package/dist/components/handmark/geometry.d.ts +8 -8
  274. package/dist/components/handmark/index.d.ts +7 -8
  275. package/dist/components/handmark/noise.d.ts +3 -3
  276. package/dist/components/handmark/types.d.ts +2 -2
  277. package/dist/components/header-ribbon/HeaderRibbon.vue.d.ts +3 -21
  278. package/dist/components/header-ribbon/styles.css +1 -0
  279. package/dist/components/header-ribbon/types.d.ts +5 -2
  280. package/dist/components/index.d.ts +0 -3
  281. package/dist/components/infinite-scroll/composables/types.d.ts +1 -1
  282. package/dist/components/input/Input.vue.d.ts +10 -35
  283. package/dist/components/input/index.d.ts +2 -1
  284. package/dist/components/input/types.d.ts +22 -0
  285. package/dist/components/instrument-chassis/InstrumentChassis.vue.d.ts +10 -84
  286. package/dist/components/instrument-chassis/index.d.ts +1 -2
  287. package/dist/components/instrument-chassis/styles.css +1 -1
  288. package/dist/components/instrument-chassis/types.d.ts +13 -0
  289. package/dist/components/label/Label.vue.d.ts +9 -14
  290. package/dist/components/label/index.d.ts +1 -1
  291. package/dist/components/labeled-field/LabeledField.vue.d.ts +10 -108
  292. package/dist/components/labeled-field/LabeledInput.vue.d.ts +3 -23
  293. package/dist/components/labeled-field/LabeledSelect.vue.d.ts +12 -18
  294. package/dist/components/labeled-field/LabeledSlider.vue.d.ts +12 -18
  295. package/dist/components/labeled-field/LabeledSwitch.vue.d.ts +14 -17
  296. package/dist/components/labeled-field/index.d.ts +1 -0
  297. package/dist/components/labeled-field/types.d.ts +50 -0
  298. package/dist/components/liquid-grid/composables/liquidGrid.d.ts +5 -5
  299. package/dist/components/liquid-grid/constants.d.ts +6 -7
  300. package/dist/components/liquid-grid/shaders/liquid-grid.glsl.d.ts +1 -1
  301. package/dist/components/liquid-grid/shaders/liquid-grid.wgsl.d.ts +1 -1
  302. package/dist/components/metric/Metric.vue.d.ts +24 -0
  303. package/dist/components/metric/MetricCell.vue.d.ts +26 -0
  304. package/dist/components/metric/MetricRow.vue.d.ts +22 -0
  305. package/dist/components/metric/MetricStack.vue.d.ts +16 -0
  306. package/dist/components/metric/coalesce-metric.d.ts +7 -28
  307. package/dist/components/metric/index.d.ts +5 -0
  308. package/dist/components/metric/styles.css +1 -0
  309. package/dist/components/metric/types.d.ts +32 -0
  310. package/dist/components/number-field/NumberField.vue.d.ts +21 -9
  311. package/dist/components/number-field/NumberFieldContent.vue.d.ts +2 -2
  312. package/dist/components/number-field/NumberFieldDecrement.vue.d.ts +6 -6
  313. package/dist/components/number-field/NumberFieldIncrement.vue.d.ts +6 -6
  314. package/dist/components/number-field/NumberFieldInput.vue.d.ts +1 -6
  315. package/dist/components/number-field/context.d.ts +6 -0
  316. package/dist/components/number-field/index.d.ts +5 -5
  317. package/dist/components/number-field/styles.css +1 -0
  318. package/dist/components/pager-dots/constants.d.ts +1 -2
  319. package/dist/components/pager-dots/index.d.ts +0 -2
  320. package/dist/components/paper-backdrop/PaperBackdrop.vue.d.ts +1 -14
  321. package/dist/components/paper-backdrop/index.d.ts +1 -1
  322. package/dist/components/popover/Popover.vue.d.ts +24 -36
  323. package/dist/components/popover/PopoverContent.vue.d.ts +23 -29
  324. package/dist/components/popover/PopoverTrigger.vue.d.ts +12 -7
  325. package/dist/components/popover/index.d.ts +3 -3
  326. package/dist/components/popover/popoverContext.d.ts +3 -4
  327. package/dist/components/progress/Progress.vue.d.ts +5 -13
  328. package/dist/components/progress/index.d.ts +1 -0
  329. package/dist/components/progress/types.d.ts +19 -0
  330. package/dist/components/pulse/Pulse.vue.d.ts +8 -47
  331. package/dist/components/pulse/index.d.ts +1 -0
  332. package/dist/components/radio-group/RadioGroup.vue.d.ts +27 -15
  333. package/dist/components/radio-group/RadioGroupItem.vue.d.ts +9 -6
  334. package/dist/components/radio-group/index.d.ts +2 -0
  335. package/dist/components/radio-group/styles.css +1 -0
  336. package/dist/components/scroll-progress-rim/styles.css +1 -1
  337. package/dist/components/search/FuzzySearch.vue.d.ts +2 -2
  338. package/dist/components/search/SearchBar.vue.d.ts +2 -2
  339. package/dist/components/search/searchVariants.d.ts +15 -17
  340. package/dist/components/select/Select.vue.d.ts +25 -14
  341. package/dist/components/select/SelectContent.vue.d.ts +26 -29
  342. package/dist/components/select/SelectGroup.vue.d.ts +7 -11
  343. package/dist/components/select/SelectItem.vue.d.ts +24 -13
  344. package/dist/components/select/SelectLabel.vue.d.ts +7 -11
  345. package/dist/components/select/SelectScrollDownButton.vue.d.ts +3 -4
  346. package/dist/components/select/SelectScrollUpButton.vue.d.ts +3 -4
  347. package/dist/components/select/SelectSeparator.vue.d.ts +5 -6
  348. package/dist/components/select/SelectTrigger.vue.d.ts +15 -41
  349. package/dist/components/select/SelectValue.vue.d.ts +13 -7
  350. package/dist/components/select/index.d.ts +16 -8
  351. package/dist/components/separator/Separator.vue.d.ts +11 -6
  352. package/dist/components/separator/index.d.ts +1 -1
  353. package/dist/components/skeleton/Skeleton.vue.d.ts +3 -31
  354. package/dist/components/slider/Slider.vue.d.ts +10 -37
  355. package/dist/components/slider/index.d.ts +1 -45
  356. package/dist/components/slider/types.d.ts +25 -0
  357. package/dist/components/sortable-list/SortableList.vue.d.ts +1 -1
  358. package/dist/components/sortable-list/composables/ghostRenderer.d.ts +1 -1
  359. package/dist/components/sortable-list/composables/touchGate.d.ts +1 -1
  360. package/dist/components/sortable-list/composables/transitionTiming.d.ts +1 -1
  361. package/dist/components/status-dot/StatusDot.vue.d.ts +7 -10
  362. package/dist/components/status-dot/index.d.ts +1 -0
  363. package/dist/components/surface/Surface.vue.d.ts +13 -21
  364. package/dist/components/surface/index.d.ts +2 -2
  365. package/dist/components/switch/Switch.vue.d.ts +20 -11
  366. package/dist/components/switch/index.d.ts +2 -1
  367. package/dist/components/switch/styles.css +1 -0
  368. package/dist/components/table/Table.vue.d.ts +1 -1
  369. package/dist/components/tabs/SegmentedTabs.vue.d.ts +21 -13
  370. package/dist/components/tabs/composables/useTabDragMorph.d.ts +6 -6
  371. package/dist/components/tabs/composables/useTabResponsive.d.ts +5 -6
  372. package/dist/components/tabs/composables/useTabRovingFocus.d.ts +16 -16
  373. package/dist/components/tabs/constants.d.ts +1 -1
  374. package/dist/components/tabs/index.d.ts +1 -1
  375. package/dist/components/tabs/styles/drag.css +1 -1
  376. package/dist/components/tabs/styles/segmented.css +1 -1
  377. package/dist/components/tags-input/TagsInput.vue.d.ts +28 -15
  378. package/dist/components/tags-input/TagsInputInput.vue.d.ts +8 -6
  379. package/dist/components/tags-input/TagsInputItem.vue.d.ts +9 -8
  380. package/dist/components/tags-input/TagsInputItemDelete.vue.d.ts +5 -6
  381. package/dist/components/tags-input/TagsInputItemText.vue.d.ts +5 -6
  382. package/dist/components/tags-input/context.d.ts +5 -0
  383. package/dist/components/tags-input/index.d.ts +5 -5
  384. package/dist/components/tags-input/styles.css +1 -0
  385. package/dist/components/textarea/Textarea.vue.d.ts +10 -55
  386. package/dist/components/textarea/index.d.ts +2 -1
  387. package/dist/components/textarea/types.d.ts +22 -0
  388. package/dist/components/timeline/ContinuousMarkers.vue.d.ts +2 -4
  389. package/dist/components/timeline/ContinuousRail.vue.d.ts +3 -6
  390. package/dist/components/timeline/ContinuousTimeline.vue.d.ts +12 -13
  391. package/dist/components/timeline/GlassTimeline.vue.d.ts +7 -8
  392. package/dist/components/timeline/ScrubberTimeline.vue.d.ts +4 -4
  393. package/dist/components/timeline/SegmentedTimeline.vue.d.ts +2 -3
  394. package/dist/components/timeline/geometry.d.ts +3 -4
  395. package/dist/components/timeline/types.d.ts +3 -3
  396. package/dist/components/toast/Toast.vue.d.ts +37 -79
  397. package/dist/components/toast/ToastAction.vue.d.ts +5 -5
  398. package/dist/components/toast/ToastClose.vue.d.ts +4 -5
  399. package/dist/components/toast/ToastDescription.vue.d.ts +4 -5
  400. package/dist/components/toast/ToastTitle.vue.d.ts +4 -5
  401. package/dist/components/toast/Toaster.vue.d.ts +1 -1
  402. package/dist/components/toast/index.d.ts +8 -9
  403. package/dist/components/toast/use-toast.d.ts +20 -163
  404. package/dist/components/toggle-group/ToggleGroup.vue.d.ts +44 -22
  405. package/dist/components/toggle-group/ToggleGroupItem.vue.d.ts +11 -9
  406. package/dist/components/toggle-group/index.d.ts +3 -2
  407. package/dist/components/toggle-group/styles.css +1 -0
  408. package/dist/components/toggle-group/toggleGroupContext.d.ts +4 -15
  409. package/dist/components/tooltip/Tooltip.vue.d.ts +20 -7
  410. package/dist/components/tooltip/TooltipContent.vue.d.ts +20 -12
  411. package/dist/components/tooltip/TooltipProvider.vue.d.ts +12 -5
  412. package/dist/components/tooltip/TooltipTrigger.vue.d.ts +12 -5
  413. package/dist/components/tooltip/index.d.ts +4 -4
  414. package/dist/components/typewriter/composables/useTypewriter.d.ts +1 -0
  415. package/dist/components/typewriter/utils/timing.d.ts +0 -2
  416. package/dist/components/watercolor-dot/WatercolorDot.vue.d.ts +5 -18
  417. package/dist/components/watercolor-dot/useWatercolorBlob.d.ts +1 -4
  418. package/dist/composables/color/accent-tone-solve.d.ts +2 -5
  419. package/dist/composables/color/index.d.ts +31 -38
  420. package/dist/composables/color/useAccentTone.d.ts +0 -3
  421. package/dist/composables/color/value.d.ts +21 -0
  422. package/dist/composables/context/createContext.d.ts +2 -2
  423. package/dist/composables/dark/index.d.ts +1 -1
  424. package/dist/composables/dark/useGlobalDark.d.ts +7 -6
  425. package/dist/composables/dom/useBreakpoint.d.ts +2 -2
  426. package/dist/composables/dom/useClipboard.d.ts +28 -52
  427. package/dist/composables/dom/useDocumentVisibility.d.ts +3 -1
  428. package/dist/composables/dom/useIdleReady.d.ts +5 -6
  429. package/dist/composables/dom/useTokenColor.d.ts +2 -2
  430. package/dist/composables/dom/useUserInvalidAria.d.ts +2 -3
  431. package/dist/composables/dom/useViewportReady.d.ts +4 -4
  432. package/dist/composables/glass/backdropLuminanceSample.d.ts +7 -6
  433. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +7 -1
  434. package/dist/composables/glass/textureUpload.d.ts +8 -10
  435. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +11 -19
  436. package/dist/composables/glass/useSpecularPointer.d.ts +6 -6
  437. package/dist/composables/glass/useSpecularTracking.d.ts +12 -15
  438. package/dist/composables/glass/wave/waveField.d.ts +2 -2
  439. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -1
  440. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -1
  441. package/dist/composables/glass/webgl/backingSize.d.ts +5 -8
  442. package/dist/composables/glass/webgl/compile.d.ts +1 -1
  443. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +20 -20
  444. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -28
  445. package/dist/composables/glass/webgl/visibility.d.ts +3 -4
  446. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +10 -10
  447. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -1
  448. package/dist/composables/glass/webgpu/webgpuCanvasTypes.d.ts +12 -10
  449. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +15 -16
  450. package/dist/composables/motion/core/asElement.d.ts +2 -0
  451. package/dist/composables/motion/{constants.d.ts → core/constants.d.ts} +2 -3
  452. package/dist/composables/motion/core/index.d.ts +20 -23
  453. package/dist/composables/motion/core/useReducedMotion.d.ts +5 -0
  454. package/dist/composables/motion/core/useViewTransition.d.ts +44 -0
  455. package/dist/composables/motion/index.d.ts +14 -16
  456. package/dist/composables/motion/{useDockCtaReceive.d.ts → morph/useDockCtaReceive.d.ts} +2 -3
  457. package/dist/composables/motion/{useDragMorph.d.ts → morph/useDragMorph.d.ts} +7 -7
  458. package/dist/composables/motion/morph/useElementMorph.d.ts +50 -0
  459. package/dist/composables/motion/{useLeadTrail.d.ts → morph/useLeadTrail.d.ts} +6 -6
  460. package/dist/composables/motion/{useSelectionGroup.d.ts → morph/useSelectionGroup.d.ts} +7 -5
  461. package/dist/composables/motion/{useSelectionIndicator.d.ts → morph/useSelectionIndicator.d.ts} +9 -16
  462. package/dist/composables/motion/{useNumericTransition.d.ts → number/useNumericTransition.d.ts} +2 -2
  463. package/dist/composables/motion/{pointerFieldMappings.d.ts → pointer/pointerFieldMappings.d.ts} +7 -10
  464. package/dist/composables/motion/{usePointerVelocityField.d.ts → pointer/usePointerVelocityField.d.ts} +1 -1
  465. package/dist/composables/motion/{bloomUpField.d.ts → reveal/bloomUpField.d.ts} +1 -1
  466. package/dist/composables/motion/reveal/useBloomUp.d.ts +33 -0
  467. package/dist/composables/motion/{useLiquidReveal.d.ts → reveal/useLiquidReveal.d.ts} +5 -5
  468. package/dist/composables/motion/{useStagger.d.ts → reveal/useStagger.d.ts} +3 -3
  469. package/dist/composables/motion/reveal/useStaggerReveal.d.ts +28 -0
  470. package/dist/composables/motion/{useScrollChrome.d.ts → scroll/useScrollChrome.d.ts} +2 -2
  471. package/dist/composables/motion/{useScrollProgress.d.ts → scroll/useScrollProgress.d.ts} +12 -2
  472. package/dist/composables/motion/{springPresets.d.ts → spring/springPresets.d.ts} +8 -7
  473. package/dist/composables/motion/{springProjection.d.ts → spring/springProjection.d.ts} +3 -0
  474. package/dist/composables/motion/{useLiquidFlex.d.ts → spring/useLiquidFlex.d.ts} +11 -12
  475. package/dist/composables/motion/{useLiquidPress.d.ts → spring/useLiquidPress.d.ts} +3 -3
  476. package/dist/composables/motion/{useSpring.d.ts → spring/useSpring.d.ts} +5 -2
  477. package/dist/composables/motion/{useSpringMount.d.ts → spring/useSpringMount.d.ts} +8 -1
  478. package/dist/composables/sidebar/types.d.ts +3 -3
  479. package/dist/{configurator-CSENXXSy.js → configurator-M5OaIlJd.js} +11 -11
  480. package/dist/configurator.js +1 -1
  481. package/dist/{constants-DRZmNIY-.js → constants-nBz23tJE.js} +1 -1
  482. package/dist/constellation.js +125 -124
  483. package/dist/{createCanvasLifecycle-hsFkQVdl.js → createCanvasLifecycle-DbXRwjU_.js} +87 -82
  484. package/dist/dark-mode-toggle.d.ts +1 -0
  485. package/dist/dark-mode-toggle.js +43 -0
  486. package/dist/dark.js +1 -1
  487. package/dist/data-table-BygKg6ZA.js +491 -0
  488. package/dist/data-table.js +1 -1
  489. package/dist/deck.js +3 -3
  490. package/dist/dialog-TNRDkcE4.js +385 -0
  491. package/dist/dialog.js +1 -1
  492. package/dist/dock.js +523 -940
  493. package/dist/dockContext-BUTlGRNJ.js +13 -0
  494. package/dist/dom.js +52 -114
  495. package/dist/drawer.js +262 -209
  496. package/dist/dropdown-menu-BlbnvMaZ.js +507 -0
  497. package/dist/dropdown-menu.js +2 -2
  498. package/dist/easing.js +294 -278
  499. package/dist/expandable-container.js +107 -93
  500. package/dist/fading-scroll-DhxXIhm2.js +96 -0
  501. package/dist/fading-scroll.js +1 -1
  502. package/dist/field-control.css_vue_type_style_index_0_src_true_lang-CeLay9Tk.js +21 -0
  503. package/dist/floating-dB5TD88k.js +7 -0
  504. package/dist/{flow.glsl-DEGFGE11.js → flow.wgsl-Cd2GUkPx.js} +2 -2
  505. package/dist/fonts/README.md +14 -18
  506. package/dist/forms.js +279 -174
  507. package/dist/fourier-field.js +148 -148
  508. package/dist/glass-ui.css +1 -1
  509. package/dist/glass-ui.js +512 -373
  510. package/dist/handmark.js +4 -4
  511. package/dist/header-ribbon.js +37 -68
  512. package/dist/index.d.ts +9 -18
  513. package/dist/infinite-scroll.js +31 -28
  514. package/dist/instrument-chassis.js +54 -2
  515. package/dist/label-DnMqH7jr.js +55 -0
  516. package/dist/label.js +1 -1
  517. package/dist/labeled-field.js +291 -214
  518. package/dist/liquid-grid.js +141 -151
  519. package/dist/menuRowClass-Nh7CtMON.js +12 -0
  520. package/dist/metric.d.ts +1 -0
  521. package/dist/metric.js +192 -0
  522. package/dist/motion-core.js +73 -165
  523. package/dist/motion.js +104 -161
  524. package/dist/number-field-Boe09SvX.js +154 -0
  525. package/dist/number-field.js +1 -1
  526. package/dist/pager-dots.js +2 -2
  527. package/dist/paper-backdrop.js +16 -24
  528. package/dist/{pointerFieldMappings-CZojkgKj.js → pointerFieldMappings-DP5tla5z.js} +4 -7
  529. package/dist/popover-BQGYXZyO.js +244 -0
  530. package/dist/popover.js +1 -1
  531. package/dist/{presets-CxeNvxuO.js → presets-5myqNv59.js} +1 -1
  532. package/dist/primitive-B2t2jdqM.js +11 -0
  533. package/dist/progress-DClbhRAT.js +88 -0
  534. package/dist/progress.js +1 -1
  535. package/dist/pulse.js +29 -43
  536. package/dist/reactive.js +1 -1
  537. package/dist/resolveCanvasColor-DS_6DBxA.js +82 -0
  538. package/dist/resolveSurfaceClass-DCZ4PZcy.js +6 -0
  539. package/dist/{scrollReader-C2oK9Hb8.js → scrollReader-Brf5cQNo.js} +1 -1
  540. package/dist/search.js +241 -213
  541. package/dist/select-BcBAyLXA.js +336 -0
  542. package/dist/select.js +1 -1
  543. package/dist/selection-DqIULxRG.js +6 -0
  544. package/dist/separator-CgZInrX-.js +75 -0
  545. package/dist/separator.js +1 -1
  546. package/dist/sidebar.js +53 -42
  547. package/dist/slider-DzqeQmMu.js +162 -0
  548. package/dist/slider.js +2 -2
  549. package/dist/sortable-list.js +9 -8
  550. package/dist/springPresets-rCii5KqX.js +52 -0
  551. package/dist/status-dot.js +26 -43
  552. package/dist/styles/accessibility.css +1 -1
  553. package/dist/styles/animations.css +1 -1
  554. package/dist/styles/components.css +1 -1
  555. package/dist/styles/glass/a11y-fallback.css +1 -1
  556. package/dist/styles/glass/accent-tone.css +1 -1
  557. package/dist/styles/glass/control-surfaces.css +1 -1
  558. package/dist/styles/glass/defined.css +1 -1
  559. package/dist/styles/glass/glass-atom.css +1 -1
  560. package/dist/styles/glass/glass-capsule.css +1 -1
  561. package/dist/styles/glass/glass-chip.css +1 -1
  562. package/dist/styles/glass/ladder.css +1 -1
  563. package/dist/styles/glass/liquid-fill.css +1 -1
  564. package/dist/styles/glass/material-roles.css +1 -1
  565. package/dist/styles/glass/material.css +1 -1
  566. package/dist/styles/glass/reveal.css +1 -1
  567. package/dist/styles/glass/squircle.css +1 -1
  568. package/dist/styles/glass/surface-axis.css +1 -1
  569. package/dist/styles/glass/surfaces-pager.css +1 -1
  570. package/dist/styles/glass/surfaces.css +1 -1
  571. package/dist/styles/glass-refract.css +1 -1
  572. package/dist/styles/glass.css +1 -1
  573. package/dist/styles/index.css +1 -1
  574. package/dist/styles/paper.css +1 -1
  575. package/dist/styles/scroll-driven.css +1 -1
  576. package/dist/styles/theme/bridges.css +1 -1
  577. package/dist/styles/theme/radius.css +1 -1
  578. package/dist/styles/tokens/color-radius.css +1 -1
  579. package/dist/styles/tokens/dark-arm.css +1 -1
  580. package/dist/styles/tokens/glass-deep.css +1 -1
  581. package/dist/styles/tokens/glass-fx.css +1 -1
  582. package/dist/styles/tokens/glass.css +1 -1
  583. package/dist/styles/tokens/light-dark.css +1 -1
  584. package/dist/styles/tokens/manifest.d.ts +14 -0
  585. package/dist/styles/tokens/manifest.ts +56 -0
  586. package/dist/styles/tokens/motion-registers.css +1 -1
  587. package/dist/styles/tokens/offsets.css +1 -1
  588. package/dist/styles/tokens/property-regs-specular.css +1 -1
  589. package/dist/styles/tokens/property-regs.css +1 -1
  590. package/dist/styles/tokens/scale-paper.css +1 -1
  591. package/dist/styles/tokens/scheme-motion.css +1 -1
  592. package/dist/styles/tokens/scheme-spring.css +1 -1
  593. package/dist/styles/tokens/scroll-tokens.css +1 -1
  594. package/dist/styles/tokens/shadow.css +1 -1
  595. package/dist/styles/tokens/sizing-config.css +1 -1
  596. package/dist/styles/tokens/sizing.css +1 -1
  597. package/dist/styles/tokens.d.ts +4 -9
  598. package/dist/styles/tokens.ts +5 -9
  599. package/dist/styles/transitions.css +1 -1
  600. package/dist/styles/typography/scale.css +1 -1
  601. package/dist/styles/typography/semantic.css +1 -1
  602. package/dist/styles/typography/utilities.css +1 -1
  603. package/dist/styles/utilities/a11y-overrides.css +1 -1
  604. package/dist/styles/utilities/base-misc.css +1 -1
  605. package/dist/styles/utilities/base.css +1 -1
  606. package/dist/styles/utilities/btn.css +1 -1
  607. package/dist/styles/utilities/components.css +1 -1
  608. package/dist/styles/utilities/metal.css +1 -1
  609. package/dist/styles/utilities/responsive.css +1 -0
  610. package/dist/styles/view-transition.css +1 -1
  611. package/dist/{supportsCssTimeline-Dz-GVxXM.js → supportsCssTimeline-C2zyWpl8.js} +1 -1
  612. package/dist/surface.js +2 -3
  613. package/dist/switch-DZjQuFLa.js +54 -0
  614. package/dist/switch.js +1 -1
  615. package/dist/tabs.js +141 -169
  616. package/dist/timeline.js +86 -87
  617. package/dist/toast-CH5mnsYT.js +267 -0
  618. package/dist/toast.js +1 -1
  619. package/dist/toggle-group-O6jBo7AE.js +150 -0
  620. package/dist/toggle-group.js +1 -1
  621. package/dist/tokens.js +96 -5
  622. package/dist/tooltip-Drx5qnw_.js +148 -0
  623. package/dist/tooltip.js +1 -1
  624. package/dist/typewriter.js +222 -193
  625. package/dist/{useAccentTone-C-p6WdPe.js → useAccentTone-DyInfHXE.js} +2 -2
  626. package/dist/{useAnimatedNumber-BRVVaFFc.js → useAnimatedNumber-WPtMz0AN.js} +2 -2
  627. package/dist/useClipboard-D36OTaeT.js +53 -0
  628. package/dist/useDockCtaReceive-DkrOTM0q.js +146 -0
  629. package/dist/useDocumentVisibility-Dh_TGXsU.js +21 -0
  630. package/dist/useDragMorph-BogSV_nv.js +293 -0
  631. package/dist/{useIntersectionPause-B-dbxl9w.js → useIntersectionPause-B5mAU6XY.js} +15 -15
  632. package/dist/useLeadTrail-AW1-zZcd.js +74 -0
  633. package/dist/{useLiquidFlex-Ch4exNvN.js → useLiquidFlex-TJZmRqyY.js} +1 -1
  634. package/dist/useLiquidPress-BOxuDkKa.js +101 -0
  635. package/dist/useMotionAxis-D-rtIhca.js +19 -0
  636. package/dist/usePointerVelocityField-DsIf7yyq.js +121 -0
  637. package/dist/useRAFLoop-B3YlWK4M.js +98 -0
  638. package/dist/useReducedMotion-vCXA_vyM.js +27 -0
  639. package/dist/useRoutePointer-B8itM7Ka.js +53 -0
  640. package/dist/useScrollProgress-CSFYXIZT.js +43 -0
  641. package/dist/useScrollTrigger-BDdqptlc.js +87 -0
  642. package/dist/useSelectionGroup-B5XplBbo.js +132 -0
  643. package/dist/{useSpring-BBSKFx_0.js → useSpring-9u2_shxV.js} +2 -2
  644. package/dist/useSpringMount-uQ8QL9Ff.js +74 -0
  645. package/dist/useTabRovingFocus-YnWh-Ytr.js +169 -0
  646. package/dist/useTextHighlight-mfwNIC1f.js +112 -0
  647. package/dist/{useTouchGate-Cj5fOkTv.js → useTouchGate-B4mzQcHJ.js} +1 -1
  648. package/dist/vSpecular-DMJo8pfD.js +68 -0
  649. package/dist/value-DMhh2R94.js +33 -0
  650. package/dist/watercolor-dot.js +77 -103
  651. package/package.json +163 -232
  652. package/dist/DropdownMenuTrigger-BzQtd9lt.js +0 -65
  653. package/dist/FadingScroll-C1ZWEjmG.js +0 -83
  654. package/dist/Input-B4WQ_CMc.js +0 -57
  655. package/dist/Surface-BWRfwyn8.js +0 -59
  656. package/dist/accent-tone-solve-Dii9ePhK.js +0 -20
  657. package/dist/badge-C0C-rTBu.js +0 -80
  658. package/dist/button-32mg6xA8.js +0 -194
  659. package/dist/card-16xmzIr3.js +0 -303
  660. package/dist/coalesce-metric-znAcLzkB.js +0 -13
  661. package/dist/collapsible-bPzS1aQk.js +0 -63
  662. package/dist/color-swatch.d.ts +0 -1
  663. package/dist/color-swatch.js +0 -48
  664. package/dist/command-BjPjUU9z.js +0 -307
  665. package/dist/components/_shared/menuItemVariants.d.ts +0 -51
  666. package/dist/components/_shared/useControlSize.d.ts +0 -46
  667. package/dist/components/_shared/useStalePropWarning.d.ts +0 -27
  668. package/dist/components/_shared/useSurfaceAxis.d.ts +0 -64
  669. package/dist/components/card/ScrollCard.vue.d.ts +0 -33
  670. package/dist/components/card/ScrollCardHeader.vue.d.ts +0 -17
  671. package/dist/components/carousel/CarouselNext.vue.d.ts +0 -21
  672. package/dist/components/carousel/CarouselPrevious.vue.d.ts +0 -21
  673. package/dist/components/color-swatch/ColorSwatch.vue.d.ts +0 -22
  674. package/dist/components/color-swatch/index.d.ts +0 -1
  675. package/dist/components/controls/DarkModeToggle.vue.d.ts +0 -32
  676. package/dist/components/controls/dark-mode-toggle.css +0 -1
  677. package/dist/components/controls/index.d.ts +0 -1
  678. package/dist/components/data-table/DataTablePagination.vue.d.ts +0 -13
  679. package/dist/components/dock/DockSection.vue.d.ts +0 -69
  680. package/dist/components/dock/DockStack.vue.d.ts +0 -73
  681. package/dist/components/dock/composables/dockMorphContext.d.ts +0 -91
  682. package/dist/components/dock/composables/useDockFisheye.d.ts +0 -24
  683. package/dist/components/dock/composables/useDockPopover.d.ts +0 -70
  684. package/dist/components/dock/styles/fisheye.css +0 -1
  685. package/dist/components/dock/styles/popover.css +0 -1
  686. package/dist/components/dock/styles/section.css +0 -1
  687. package/dist/components/focus-scope/FocusScope.vue.d.ts +0 -20
  688. package/dist/components/focus-scope/index.d.ts +0 -2
  689. package/dist/components/goo-filter/GooFilter.vue.d.ts +0 -22
  690. package/dist/components/goo-filter/index.d.ts +0 -1
  691. package/dist/components/icon-chip/IconChip.vue.d.ts +0 -4
  692. package/dist/components/icon-chip/index.d.ts +0 -2
  693. package/dist/components/icon-chip/styles.css +0 -1
  694. package/dist/components/icon-chip/types.d.ts +0 -92
  695. package/dist/components/icon-tooltip/IconTooltip.vue.d.ts +0 -16
  696. package/dist/components/icon-tooltip/index.d.ts +0 -1
  697. package/dist/components/instrument-chassis/ChassisDivider.vue.d.ts +0 -30
  698. package/dist/components/metric-badge/MetricBadge.vue.d.ts +0 -40
  699. package/dist/components/metric-badge/index.d.ts +0 -2
  700. package/dist/components/metric-cell/MetricCell.vue.d.ts +0 -108
  701. package/dist/components/metric-cell/index.d.ts +0 -2
  702. package/dist/components/metric-stack/MetricRow.vue.d.ts +0 -120
  703. package/dist/components/metric-stack/MetricStack.vue.d.ts +0 -92
  704. package/dist/components/metric-stack/index.d.ts +0 -4
  705. package/dist/components/notification/Notification.vue.d.ts +0 -16
  706. package/dist/components/notification/index.d.ts +0 -1
  707. package/dist/components/progress/ProgressDefault.vue.d.ts +0 -9
  708. package/dist/components/progress/ProgressGradient.vue.d.ts +0 -26
  709. package/dist/components/progress/ProgressLiquid.vue.d.ts +0 -22
  710. package/dist/components/progress/valueMarks.css +0 -1
  711. package/dist/components/spa-view/SpaView.vue.d.ts +0 -50
  712. package/dist/components/spa-view/index.d.ts +0 -2
  713. package/dist/components/split-chars/SplitChars.vue.d.ts +0 -53
  714. package/dist/components/split-chars/index.d.ts +0 -1
  715. package/dist/components/tabs/composables/useEyeglassLive.d.ts +0 -17
  716. package/dist/components/toggle/Toggle.vue.d.ts +0 -29
  717. package/dist/components/toggle/index.d.ts +0 -26
  718. package/dist/composables/glass/webgl/shaders/glass-refract.glsl.d.ts +0 -36
  719. package/dist/composables/motion/curves.d.ts +0 -48
  720. package/dist/composables/motion/gooBarbellGeometry.d.ts +0 -79
  721. package/dist/composables/motion/morphSignatures.d.ts +0 -88
  722. package/dist/composables/motion/suite.d.ts +0 -2
  723. package/dist/composables/motion/useBloomUp.d.ts +0 -97
  724. package/dist/composables/motion/useCharStagger.d.ts +0 -44
  725. package/dist/composables/motion/useElementMorph.d.ts +0 -107
  726. package/dist/composables/motion/useGooMorph.d.ts +0 -72
  727. package/dist/composables/motion/usePrioritizedTask.d.ts +0 -41
  728. package/dist/composables/motion/useStaggerReveal.d.ts +0 -52
  729. package/dist/composables/motion/useViewTransition.d.ts +0 -81
  730. package/dist/composables/virtual/index.d.ts +0 -4
  731. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +0 -72
  732. package/dist/composables/virtual/useWindowedStore.d.ts +0 -43
  733. package/dist/composables/virtual/virtualSectionLayout.d.ts +0 -103
  734. package/dist/controls.d.ts +0 -1
  735. package/dist/controls.js +0 -83
  736. package/dist/data-table-DveMdgBM.js +0 -629
  737. package/dist/dialog-BzQxKrUr.js +0 -281
  738. package/dist/dockContext-4S9qP0Z4.js +0 -13
  739. package/dist/dropdown-menu-DORIA52F.js +0 -378
  740. package/dist/focus-scope-DUTKveod.js +0 -23
  741. package/dist/focus-scope.d.ts +0 -1
  742. package/dist/focus-scope.js +0 -2
  743. package/dist/icon-chip-BWuxz1-u.js +0 -57
  744. package/dist/icon-chip.d.ts +0 -1
  745. package/dist/icon-chip.js +0 -2
  746. package/dist/icon-tooltip-CO6rw0dZ.js +0 -25
  747. package/dist/icon-tooltip.d.ts +0 -1
  748. package/dist/icon-tooltip.js +0 -2
  749. package/dist/instrument-chassis-Cvstg4_U.js +0 -65
  750. package/dist/label-Cj38tJKG.js +0 -36
  751. package/dist/menuItemVariants-D6AOzzND.js +0 -36
  752. package/dist/metric-badge.d.ts +0 -1
  753. package/dist/metric-badge.js +0 -79
  754. package/dist/metric-cell.d.ts +0 -1
  755. package/dist/metric-cell.js +0 -61
  756. package/dist/metric-stack.d.ts +0 -1
  757. package/dist/metric-stack.js +0 -113
  758. package/dist/motion-curves.d.ts +0 -1
  759. package/dist/motion-curves.js +0 -146
  760. package/dist/notification-DVs7ODMg.js +0 -52
  761. package/dist/notification.d.ts +0 -1
  762. package/dist/notification.js +0 -2
  763. package/dist/number-field-PvkGedHk.js +0 -140
  764. package/dist/popover-WMgyRSyN.js +0 -256
  765. package/dist/progress-C-HHuFZy.js +0 -192
  766. package/dist/resolveCanvasColor-yarP5bdk.js +0 -93
  767. package/dist/select-BIv4R3Ir.js +0 -326
  768. package/dist/separator-CBU94kTM.js +0 -62
  769. package/dist/slider-Cc_qw6GA.js +0 -166
  770. package/dist/spa-view.d.ts +0 -1
  771. package/dist/spa-view.js +0 -46
  772. package/dist/springPresets-h5VKJQqG.js +0 -58
  773. package/dist/styles/glass/progress-rail.css +0 -1
  774. package/dist/switch-Boj4Ucn5.js +0 -49
  775. package/dist/toast-kAbchIN2.js +0 -281
  776. package/dist/toggle-group-BPchFsns.js +0 -178
  777. package/dist/tooltip-BmOQJzh0.js +0 -111
  778. package/dist/useControlSize-CFfOk8I-.js +0 -9
  779. package/dist/useDockCtaReceive-CK-RLASa.js +0 -257
  780. package/dist/useDocumentVisibility-YeBDGqtI.js +0 -17
  781. package/dist/useDragMorph-7ygF9O0m.js +0 -93
  782. package/dist/useGooMorph-D1F6QJlH.js +0 -349
  783. package/dist/useLeadTrail-BYu8dq4G.js +0 -74
  784. package/dist/useLiquidPress-BYcwwGQV.js +0 -68
  785. package/dist/useMotionAxis-DCCXMC-i.js +0 -20
  786. package/dist/usePointerVelocityField-BdvnO0py.js +0 -122
  787. package/dist/useRAFLoop-BtwQ9DyY.js +0 -109
  788. package/dist/useRoutePointer-BDNMFN73.js +0 -52
  789. package/dist/useScrollProgress-DZI4nf4v.js +0 -35
  790. package/dist/useSelectionGroup-LDzBdR1Y.js +0 -215
  791. package/dist/useSpringMount-C6-DBx4e.js +0 -71
  792. package/dist/useSpringPress-BypV_KO-.js +0 -36
  793. package/dist/useSurfaceAxis-DudiZVOR.js +0 -10
  794. package/dist/useTabRovingFocus-DkLYwo4L.js +0 -143
  795. package/dist/vReveal-DZfWl9XI.js +0 -10
  796. package/dist/vSpecular-CQFmLNzA.js +0 -68
  797. package/src/fonts/README.md +0 -124
  798. package/src/fonts/fira-code/OFL.txt +0 -93
  799. package/src/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
  800. package/src/fonts/fira-code/fira-code-latin.woff2 +0 -0
  801. package/src/fonts/plus-jakarta-sans/OFL.txt +0 -93
  802. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
  803. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
  804. package/src/styles/accessibility.css +0 -48
  805. package/src/styles/animations.css +0 -468
  806. package/src/styles/draw-in.css +0 -89
  807. package/src/styles/fonts.css +0 -143
  808. package/src/styles/glass/a11y-fallback.css +0 -188
  809. package/src/styles/glass/accent-tone.css +0 -66
  810. package/src/styles/glass/control-surfaces.css +0 -171
  811. package/src/styles/glass/deep.css +0 -114
  812. package/src/styles/glass/defined.css +0 -88
  813. package/src/styles/glass/glass-atom.css +0 -247
  814. package/src/styles/glass/glass-capsule.css +0 -175
  815. package/src/styles/glass/glass-chip.css +0 -211
  816. package/src/styles/glass/grain-overlay.css +0 -79
  817. package/src/styles/glass/ladder-undershadow.css +0 -61
  818. package/src/styles/glass/ladder.css +0 -452
  819. package/src/styles/glass/liquid-enter.css +0 -240
  820. package/src/styles/glass/liquid-fill.css +0 -65
  821. package/src/styles/glass/material-roles.css +0 -18
  822. package/src/styles/glass/material.css +0 -500
  823. package/src/styles/glass/progress-rail.css +0 -78
  824. package/src/styles/glass/reveal.css +0 -333
  825. package/src/styles/glass/rim.css +0 -122
  826. package/src/styles/glass/squircle.css +0 -58
  827. package/src/styles/glass/surface-axis.css +0 -136
  828. package/src/styles/glass/surfaces-pager.css +0 -79
  829. package/src/styles/glass/surfaces.css +0 -434
  830. package/src/styles/glass-refract.css +0 -112
  831. package/src/styles/glass-specular-track.css +0 -74
  832. package/src/styles/glass.css +0 -110
  833. package/src/styles/index.css +0 -288
  834. package/src/styles/paper.css +0 -187
  835. package/src/styles/scroll-choreography.css +0 -294
  836. package/src/styles/scroll-chrome.css +0 -123
  837. package/src/styles/scroll-driven.css +0 -123
  838. package/src/styles/theme/bridges.css +0 -380
  839. package/src/styles/theme/dark.css +0 -7
  840. package/src/styles/theme/literals.css +0 -104
  841. package/src/styles/theme/radius.css +0 -148
  842. package/src/styles/theme.css +0 -33
  843. package/src/styles/tokens/color-radius.css +0 -308
  844. package/src/styles/tokens/dark-arm-glass.css +0 -55
  845. package/src/styles/tokens/dark-arm.css +0 -455
  846. package/src/styles/tokens/glass-deep.css +0 -126
  847. package/src/styles/tokens/glass-fx.css +0 -480
  848. package/src/styles/tokens/glass.css +0 -477
  849. package/src/styles/tokens/light-dark.css +0 -216
  850. package/src/styles/tokens/motion-registers.css +0 -93
  851. package/src/styles/tokens/offsets.css +0 -142
  852. package/src/styles/tokens/on-glass-fg.css +0 -39
  853. package/src/styles/tokens/property-regs-specular.css +0 -160
  854. package/src/styles/tokens/property-regs.css +0 -448
  855. package/src/styles/tokens/scale-paper.css +0 -495
  856. package/src/styles/tokens/scheme-motion.css +0 -425
  857. package/src/styles/tokens/scheme-spring.css +0 -282
  858. package/src/styles/tokens/scroll-tokens.css +0 -137
  859. package/src/styles/tokens/shadow.css +0 -206
  860. package/src/styles/tokens/sizing-config.css +0 -110
  861. package/src/styles/tokens/sizing.css +0 -505
  862. package/src/styles/tokens.css +0 -68
  863. package/src/styles/tokens.ts +0 -58
  864. package/src/styles/transitions.css +0 -228
  865. package/src/styles/typography/scale.css +0 -166
  866. package/src/styles/typography/semantic.css +0 -233
  867. package/src/styles/typography/utilities.css +0 -197
  868. package/src/styles/typography.css +0 -46
  869. package/src/styles/utilities/a11y-overrides.css +0 -184
  870. package/src/styles/utilities/base-misc.css +0 -307
  871. package/src/styles/utilities/base.css +0 -337
  872. package/src/styles/utilities/btn.css +0 -306
  873. package/src/styles/utilities/components.css +0 -337
  874. package/src/styles/utilities/metal.css +0 -272
  875. package/src/styles/utilities.css +0 -24
  876. package/src/styles/view-transition.css +0 -67
  877. package/src/styles/viz-reveal.css +0 -63
  878. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-B3ysoDQm.js} +0 -0
  879. /package/dist/{compile-DK3Fri1B.js → compile-D7VYG3gi.js} +0 -0
  880. /package/dist/composables/glass/{webgl/shaders/procedural-color.glsl.d.ts → procedural/color.glsl.d.ts} +0 -0
  881. /package/dist/{components/aurora/constants/shaders/procedural-color.wgsl.d.ts → composables/glass/procedural/color.wgsl.d.ts} +0 -0
  882. /package/dist/composables/motion/{motionTempo.d.ts → core/motionTempo.d.ts} +0 -0
  883. /package/dist/composables/motion/{useIntersectionPause.d.ts → core/useIntersectionPause.d.ts} +0 -0
  884. /package/dist/composables/motion/{useRAFLoop.d.ts → core/useRAFLoop.d.ts} +0 -0
  885. /package/dist/composables/motion/{useYieldToMain.d.ts → core/useYieldToMain.d.ts} +0 -0
  886. /package/dist/composables/motion/{useAnimatedNumber.d.ts → number/useAnimatedNumber.d.ts} +0 -0
  887. /package/dist/composables/motion/{useAnimatedNumberMap.d.ts → number/useAnimatedNumberMap.d.ts} +0 -0
  888. /package/dist/composables/motion/{useCountup.d.ts → number/useCountup.d.ts} +0 -0
  889. /package/dist/composables/motion/{useRoutePointer.d.ts → pointer/useRoutePointer.d.ts} +0 -0
  890. /package/dist/composables/motion/{useTextHighlight.d.ts → reveal/useTextHighlight.d.ts} +0 -0
  891. /package/dist/composables/motion/{vReveal.d.ts → reveal/vReveal.d.ts} +0 -0
  892. /package/dist/composables/motion/{scrollReader.d.ts → scroll/scrollReader.d.ts} +0 -0
  893. /package/dist/composables/motion/{supportsCssTimeline.d.ts → scroll/supportsCssTimeline.d.ts} +0 -0
  894. /package/dist/composables/motion/{useScrollPin.d.ts → scroll/useScrollPin.d.ts} +0 -0
  895. /package/dist/composables/motion/{useScrollScene.d.ts → scroll/useScrollScene.d.ts} +0 -0
  896. /package/dist/composables/motion/{useScrollTrigger.d.ts → scroll/useScrollTrigger.d.ts} +0 -0
  897. /package/dist/composables/motion/{useSpringPress.d.ts → spring/useSpringPress.d.ts} +0 -0
  898. /package/dist/{createContext-FU0n5MGK.js → createContext-BhkE9mLH.js} +0 -0
  899. /package/dist/{dark-DIH-blY1.js → dark-z_P5QwqI.js} +0 -0
  900. /package/dist/{motionTempo-CMS5b0Vu.js → motionTempo-tscp92Nm.js} +0 -0
  901. /package/dist/{prng-Dz2_9RJu.js → prng-2uS6J_A1.js} +0 -0
  902. /package/dist/{rendererStatus-C2-zC2Q-.js → rendererStatus-BxUlBLVy.js} +0 -0
  903. /package/dist/{useDragVelocity-CbMZEBaC.js → useDragVelocity-6ONX0sr0.js} +0 -0
  904. /package/dist/{useFuzzySearch-BOgep7RE.js → useFuzzySearch-CUnZknpm.js} +0 -0
  905. /package/dist/{useResizeObserver-BcUTquV7.js → useResizeObserver-CdUlm2QZ.js} +0 -0
  906. /package/dist/{useResolveTokenColor-C07e-qaT.js → useResolveTokenColor-B2FfJnd9.js} +0 -0
  907. /package/dist/{useTimer-D8koDvJS.js → useTimer-C3yfti4C.js} +0 -0
  908. /package/dist/{useUserInvalidAria-Cr4nR3tu.js → useUserInvalidAria-0GNrddMX.js} +0 -0
  909. /package/dist/{valueDomain-B8L04u3U.js → valueDomain-SbVzoHMH.js} +0 -0
  910. /package/dist/{writeVelocityWeight-D_AcvTsE.js → writeVelocityWeight-DoGOCW3e.js} +0 -0
@@ -1,12 +1,12 @@
1
1
  import { type ComputedRef, type Ref } from "vue";
2
- import { jumpTerms } from "@mkbabb/value.js";
2
+ import { jumpTerms } from "@mkbabb/value.js/easing";
3
3
  /** The two curve-authoring modes — the two donor arms unified. */
4
4
  export type EasingPickerMode = "bezier" | "steps";
5
5
  /** A `(t: number) => number` easing callable — the value.js family shape. */
6
6
  export type EasingFn = (t: number) => number;
7
7
  /** The bezier control-point quad `[x1, y1, x2, y2]`. */
8
8
  export type BezierPoints = [number, number, number, number];
9
- /** A value.js step jump-term (`jump-start`/`end`/`both`/`none` + aliases). */
9
+ /** A canonical CSS step jump term. */
10
10
  export type JumpTerm = (typeof jumpTerms)[number];
11
11
  /** The picker's v-model payload — the live curve callable + its re-parseable
12
12
  * CSS literal + the mode, so a consumer can read back the authored curve. */
@@ -30,7 +30,7 @@ export interface UseEasingPickerOptions {
30
30
  initialPreset?: string;
31
31
  /** The initial step count (default 4). */
32
32
  initialSteps?: number;
33
- /** The initial step term (default `"end"`). */
33
+ /** The initial step term (default `"jump-end"`). */
34
34
  initialTerm?: JumpTerm;
35
35
  }
36
36
  export interface UseEasingPickerReturn {
@@ -47,10 +47,7 @@ export interface UseEasingPickerReturn {
47
47
  easingFn: ComputedRef<EasingFn>;
48
48
  /** The complete re-parseable readout literal for the active mode. */
49
49
  readout: ComputedRef<string>;
50
- /** Whether the steps-mode readout round-trips through value.js `parseSteps`
51
- * back to the live (n, term) — the boundary-law proof that the painted
52
- * staircase IS a re-parseable value.js literal, not a hand-rolled string
53
- * the catalogue cannot read back. `true` in bezier mode (no steps literal). */
50
+ /** Whether the authored readout round-trips through Value's CSS parser. */
54
51
  reparseOk: ComputedRef<boolean>;
55
52
  /** The full v-model payload (mode + css + fn + raw params). */
56
53
  value: ComputedRef<EasingPickerValue>;
@@ -71,7 +68,7 @@ export interface UseEasingPickerReturn {
71
68
  progress: Ref<number>;
72
69
  playing: Ref<boolean>;
73
70
  playbackState: ComputedRef<"idle" | "playing" | "complete">;
74
- reducedMotion: Ref<boolean>;
71
+ reducedMotion: Readonly<Ref<boolean>>;
75
72
  playTravel: () => void;
76
73
  cancelTravel: () => void;
77
74
  stopTravel: () => void;
@@ -4,7 +4,7 @@ export declare const CUSTOM_PRESET: "custom";
4
4
  export declare const DEFAULT_BEZIER_PRESET: "ease-out-back";
5
5
  /** The default steps-mode jump count + term. */
6
6
  export declare const DEFAULT_STEP_COUNT = 4;
7
- export declare const DEFAULT_STEP_TERM: "end";
7
+ export declare const DEFAULT_STEP_TERM: "jump-end";
8
8
  /** The steps-mode slider bounds. */
9
9
  export declare const STEP_COUNT_MIN = 1;
10
10
  export declare const STEP_COUNT_MAX = 12;
@@ -1,41 +1,21 @@
1
- import { type Surface } from "../_shared/useSurfaceAxis";
1
+ import type { Surface } from "../_shared/axes";
2
2
  declare const _default: typeof __VLS_export;
3
3
  export default _default;
4
4
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
5
5
  buttonPosition?: "left" | "right";
6
- /** Accessible name for the expand (fullscreen) button. */
7
6
  expandLabel?: string;
8
- /** Accessible name for the collapse (exit fullscreen) button. */
9
7
  collapseLabel?: string;
10
- /** Surface decoration register for the fullscreen overlay
11
- * (BA.W-SURFACE-AXIS) — `glass` (default) frosts over the page;
12
- * `opaque` is the solid-wall opt-out; `veil` the borderless plate. */
13
8
  surface?: Surface;
14
9
  } & {
15
- /**
16
- * Two-way `open` model so consumers can drive fullscreen externally
17
- * (programmatic toggles, route-driven launches, etc.) while the corner
18
- * buttons continue to operate without parent wiring.
19
- */
20
10
  open?: boolean;
21
11
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
22
12
  "update:open": (value: boolean) => any;
23
13
  }, string, import("vue").PublicProps, Readonly<{
24
14
  buttonPosition?: "left" | "right";
25
- /** Accessible name for the expand (fullscreen) button. */
26
15
  expandLabel?: string;
27
- /** Accessible name for the collapse (exit fullscreen) button. */
28
16
  collapseLabel?: string;
29
- /** Surface decoration register for the fullscreen overlay
30
- * (BA.W-SURFACE-AXIS) — `glass` (default) frosts over the page;
31
- * `opaque` is the solid-wall opt-out; `veil` the borderless plate. */
32
17
  surface?: Surface;
33
18
  } & {
34
- /**
35
- * Two-way `open` model so consumers can drive fullscreen externally
36
- * (programmatic toggles, route-driven launches, etc.) while the corner
37
- * buttons continue to operate without parent wiring.
38
- */
39
19
  open?: boolean;
40
20
  }> & Readonly<{
41
21
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
@@ -49,10 +29,6 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
49
29
  expand: () => void;
50
30
  label: string;
51
31
  }) => any;
52
- } & {
53
- default?: (props: {
54
- fullscreen: boolean;
55
- }) => any;
56
32
  } & {
57
33
  'fullscreen-chrome'?: (props: {
58
34
  collapse: () => void;
@@ -0,0 +1 @@
1
+ .expandable-container { position: relative; } .expandable-container[data-state="expanded"] { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; flex-direction: column; } .expandable-container__chrome { display: contents; } .expandable-container__chrome[hidden] { display: none; } .expandable-container [data-part="trigger"] { position: absolute; inset-block-start: 0.5rem; z-index: 1; display: inline-grid; min-inline-size: var(--control-h-md); min-block-size: var(--control-h-md); place-items: center; border: 1px solid color-mix(in srgb, var(--border) 40%, transparent); border-radius: var(--radius-button); background: color-mix(in srgb, var(--card) 70%, transparent); color: var(--muted-foreground); box-shadow: var(--shadow-sm); -webkit-backdrop-filter: var(--glass-blur-wash); backdrop-filter: var(--glass-blur-wash); transition: color var(--duration-fast) var(--ease-standard); } .expandable-container [data-part="trigger"][data-position="left"] { inset-inline-start: 0.5rem; } .expandable-container [data-part="trigger"][data-position="right"] { inset-inline-end: 0.5rem; } .expandable-container [data-part="trigger"]:hover { color: var(--foreground); } .expandable-container [data-part="trigger"]:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring-color); outline-offset: 2px; } .expandable-container[data-state="expanded"] [data-part="panel"] { min-block-size: 0; inline-size: 100%; block-size: 100%; } .expandable-container__icon { inline-size: var(--icon-sm); block-size: var(--icon-sm); } @media (prefers-reduced-motion: reduce) { .expandable-container [data-part="trigger"] { transition: none; } }
@@ -5,6 +5,10 @@ type __VLS_Props = {
5
5
  fadeStart?: boolean;
6
6
  /** Feather the end edge while trailing overflow remains. Default `true`. */
7
7
  fadeEnd?: boolean;
8
+ /** Name the scroll port and expose it as a region. */
9
+ ariaLabel?: string;
10
+ /** Reference visible naming text and expose the scroll port as a region. */
11
+ ariaLabelledby?: string;
8
12
  };
9
13
  declare var __VLS_1: {};
10
14
  type __VLS_Slots = {} & {
@@ -1,4 +1,7 @@
1
1
  import type { MaybeRef, Ref } from "vue";
2
+ type RtlScrollType = "negative" | "positive-ascending" | "positive-descending";
3
+ /** Normalize every browser RTL scrollLeft model to distance from inline-start. */
4
+ export declare function normalizeHorizontalScrollLeft(scrollLeft: number, max: number, direction: string, type?: RtlScrollType): number;
2
5
  export interface UseFadingScrollOptions {
3
6
  /** Scroll axis. `"x"` reads scrollLeft/Width; `"y"` reads scrollTop/Height. Default `"x"`. */
4
7
  axis?: MaybeRef<"x" | "y">;
@@ -29,3 +32,4 @@ export interface UseFadingScrollControls {
29
32
  * @param target the scroll-port element (the same element the CSS customs apply to)
30
33
  */
31
34
  export declare function useFadingScroll(target: MaybeRef<HTMLElement | null>, options?: UseFadingScrollOptions): UseFadingScrollControls;
35
+ export {};
@@ -1,6 +1,5 @@
1
1
  /**
2
- * The module-scope constants for the FadingScroll family — the colocation home
3
- * (`proof:colocation`) the dir owes once it carries a complex composable. Both
2
+ * Module-scope constants colocated with the FadingScroll family. Both
4
3
  * were promoted out of `composables/useFadingScroll.ts` verbatim.
5
4
  */
6
5
  /**
@@ -3,13 +3,12 @@ import { type BasisComponent } from "./math";
3
3
  import type { FourierFieldConfig } from "./constants";
4
4
  import type { RendererStatus } from "../../composables/glass/webgpu/rendererStatus";
5
5
  /**
6
- * FourierField — a Fourier epicycle field on the GPU substrate (BC.W-VIZ-FOURIER), a
6
+ * FourierField — a Fourier epicycle field on the GPU substrate, a
7
7
  * sibling primitive to Aurora, GooBlob, and DotFlowField. A chain of rotating circles
8
8
  * stacked tip-to-tail draws the reconstructing partial-sum curve; a glowing comet head
9
9
  * leads the fading trail. WebGPU-FIRST: the compute pass writes the partial-sum curve +
10
10
  * the epicycle chain tips, the fullscreen-fragment render pass composites the SDF field; a
11
- * WebGL2 GLSL twin is the genuinely-absent-tail fallback (the §E "WebGPU everywhere"
12
- * mandate — the Canvas2D renderer is RETIRED). It composes `useFourierField` → the
11
+ * WebGL2 GLSL twin is the fallback. It composes `useFourierField` with the
13
12
  * `createGpuSubstrate` picker over the ONE canvas lifecycle leaf (offscreen-pause, live-PRM
14
13
  * freeze, consumer-owned DPR) and the SHARED `usePointerVelocityField` (the pointer SCRUBS
15
14
  * the reconstruction).
@@ -17,8 +16,7 @@ import type { RendererStatus } from "../../composables/glass/webgpu/rendererStat
17
16
  * The DEFAULT palette is the warm-cream library identity (`--viz-fourier` warm-amber); a
18
17
  * demo Teal/cool preset stays demo-LOCAL (presets-in-consumers — never a library token).
19
18
  *
20
- * The `variant: "hero"|"final"` prop is RETIRED (BC.W-VIZ-FOURIER — the bundles fold into
21
- * config presets, MIGRATION row). An ambient-background consumer passes `color` (+ the
19
+ * Visual bundles live in config presets. An ambient-background consumer passes `color` and the
22
20
  * `colorResolver`) for a thin warm default preserving the recessive look; the studio passes
23
21
  * the full `config` + `spectrum` + `getPalette`.
24
22
  */
@@ -11,7 +11,7 @@ export interface FourierGLSetupDeps {
11
11
  shouldContinue: () => boolean;
12
12
  onFrame?: (timeSec: number) => void;
13
13
  /**
14
- * BG.W-FOURIER-BEAUTY B3 — the 2-D cursor FOLLOW (model-space center lean). Mirrors the
14
+ * B3 — the 2-D cursor FOLLOW (model-space center lean). Mirrors the
15
15
  * WGSL arm exactly (both read the SAME uFit center) — parity-safe by construction.
16
16
  * `{x:0,y:0}` (ambient/PRM) is byte-identical to today.
17
17
  */
@@ -16,7 +16,7 @@ export interface FourierWGPUSetupDeps {
16
16
  /** The per-frame pointer hook — useFourierField advances the shared pointer field here. */
17
17
  onFrame?: (timeSec: number) => void;
18
18
  /**
19
- * BD.W-VIZ-BROKEN-FIX D6b — the 2-D cursor FOLLOW: a small MODEL-space offset added to
19
+ * D6b — the 2-D cursor FOLLOW: a small MODEL-space offset added to
20
20
  * the view-fit center so the whole reconstruction LEANS toward the cursor (the spatial
21
21
  * "follow" beside D6a's velocity scrub). Reuses the EXISTING uFit center uniform (NO new
22
22
  * uniform, NO shader/bridge edit — parity-safe by construction, both arms read the same
@@ -9,7 +9,7 @@ export interface UseFourierFieldOptions {
9
9
  getSpectrum: () => readonly BasisComponent[];
10
10
  /** Resolve the curve-color palette as OKLCh (the demo themes it; default warm-identity). */
11
11
  getPalette: () => OklchStop[];
12
- /** When true, hold the deterministic best-frame and never advance (the capture / freeze lever). */
12
+ /** When true, hold the deterministic best-frame and never advance (the capture, freeze lever). */
13
13
  freeze?: () => boolean;
14
14
  /** The static deterministic best-frame parameter under `freeze`/PRM. Default 0.34. */
15
15
  frozenT?: number;
@@ -18,7 +18,7 @@ export interface UseFourierFieldOptions {
18
18
  /** `"capture"` → renderAt-only (the deterministic π capture path). Default `"live"`. */
19
19
  mode?: "live" | "capture";
20
20
  /**
21
- * BI.W-FIELD-CORE — the route pointer BROADCASTER read (the SUBTLE-interactive background
21
+ * the route pointer BROADCASTER read (the SUBTLE-interactive background
22
22
  * register). A full-bleed `pointer-events:none` field cannot listen for its own pointer, so
23
23
  * an ambient consumer reads the route-level `useRoutePointer` and feeds the shared field
24
24
  * from here each frame (viewport-normalized ≈ host-normalized for a full-bleed field). The
@@ -41,14 +41,14 @@ export interface FourierFieldHandle {
41
41
  resume: () => void;
42
42
  /** Re-arm a parked loop on demand. */
43
43
  wake: () => void;
44
- /** Draw one frame out-of-loop (capture / thumbnail). */
44
+ /** Draw one frame out-of-loop (capture, thumbnail). */
45
45
  renderAt: (timeSec: number) => void;
46
46
  /** The live `prefers-reduced-motion: reduce` state. */
47
47
  readonly reducedMotion: boolean;
48
48
  /** The current loop parameter `head_t ∈ [0,1)` (the scrubber reads/writes it). */
49
49
  readonly headT: number;
50
50
  readonly rendererStatus: Readonly<Ref<RendererStatus>>;
51
- /** Scrub the clock directly (the transport scrubber / a pointer drag). */
51
+ /** Scrub the clock directly (the transport scrubber, a pointer drag). */
52
52
  setHeadT: (t: number) => void;
53
53
  /** Tear down the renderer + release GPU/GL resources. */
54
54
  dispose: () => void;
@@ -22,10 +22,10 @@ export declare const MAX_CURVE_SAMPLES = 384;
22
22
  /** The palette-stop ceiling — the WGSL `MAX_FOURIER_STOPS` #define. */
23
23
  export declare const MAX_FOURIER_STOPS = 4;
24
24
  /**
25
- * The cursor-velocity → head_t clock-coupling gain (BD.W-VIZ-BROKEN-FIX D6 — the weighted
26
- * scrub). The cursor MOTION (not its absolute X) nudges the loop clock: a flick fast-
25
+ * The cursor-velocity → head_t clock-coupling gain. Cursor motion (not absolute X)
26
+ * nudges the loop clock: a flick fast-
27
27
  * forwards, a still cursor lets the field drift at its config speed. Velocity-continuous —
28
- * the head never teleports (the prior `headT = pointerX` absolute-X scrub read as "not
28
+ * the head never teleports (an absolute-X `headT = pointerX` scrub reads as "not
29
29
  * following" a 2-D cursor).
30
30
  */
31
31
  export declare const SCRUB_GAIN = 0.15;
@@ -35,7 +35,7 @@ export declare const SCRUB_GAIN = 0.15;
35
35
  * of it. The taper is `f(age) = RIBBON_TAIL_FRAC + (1 − RIBBON_TAIL_FRAC)·age` (LINEAR, so the
36
36
  * age-0.5 MID-BODY is `RIBBON_TAIL_FRAC + (1 − RIBBON_TAIL_FRAC)·0.5` of the head). Declared
37
37
  * ONCE here + MIRRORED verbatim as the `RIBBON_TAIL_FRAC` const in BOTH shaders (the GLSL twin
38
- * cannot import a TS constant); `proof:viz` FB1 cross-checks the three copies are equal so the
38
+ * cannot import a TS constant); keep the three copies equal so the
39
39
  * mid-body floor below can never drift off the taper.
40
40
  */
41
41
  export declare const RIBBON_TAIL_FRAC = 0.4;
@@ -55,7 +55,7 @@ export declare const RIBBON_MID_FLOOR_PX = 2.5;
55
55
  */
56
56
  export declare const RIBBON_HEAD_FLOOR_PX: number;
57
57
  /**
58
- * The degenerate-tangent guard (BD.W-FOURIER-LOOM §2b). At a cusp the head's instantaneous
58
+ * The degenerate-tangent guard ( §2b). At a cusp the head's instantaneous
59
59
  * speed `s = length(head − headBack)` collapses to ~0 and the unit tangent `T = d/s` blows
60
60
  * up; below `FOURIER_TANGENT_EPS` the shaders + the GL CPU bead path all fall back to the
61
61
  * LAST stable tangent, so `s→0` resolves IDENTICALLY across both engines (the cross-engine
@@ -63,7 +63,7 @@ export declare const RIBBON_HEAD_FLOOR_PX: number;
63
63
  */
64
64
  export declare const FOURIER_TANGENT_EPS = 0.0001;
65
65
  /**
66
- * The head squash-and-stretch gain (BD.W-FOURIER-LOOM §2b). The round head bead becomes a
66
+ * The head squash-and-stretch gain ( §2b). The round head bead becomes a
67
67
  * volume-preserving anisotropic ellipse: the tangent extent scales `1 + k·ŝ`, the normal
68
68
  * extent `1/(1 + k·ŝ)`, where `ŝ` is the normalized head speed. The library identity carries
69
69
  * a SMALL non-zero gain (cartoon-weight at rest — the head is never a dead disc); a consumer
@@ -71,7 +71,7 @@ export declare const FOURIER_TANGENT_EPS = 0.0001;
71
71
  */
72
72
  export declare const FOURIER_SQUASH_GAIN = 0.55;
73
73
  /**
74
- * The cartoon cel-shadow gain (BD.W-FOURIER-LOOM §3b). Each chain ring/arm/dot + the comet
74
+ * The cartoon cel-shadow gain ( §3b). Each chain ring/arm/dot + the comet
75
75
  * rope paints a second darker copy OFFSET opposite its travel — the 1940s technicolor ink.
76
76
  * The library identity carries a SMALL non-zero gain (a quiet weight under the chain); a
77
77
  * consumer vivid preset floors it UP. `0` = no cel pass (byte-frozen). The offset rides the
@@ -107,17 +107,17 @@ export interface FourierFieldConfig {
107
107
  palette: OklchStop[];
108
108
  /** ONE static frame then park under `prefers-reduced-motion: reduce`. */
109
109
  respectReducedMotion: boolean;
110
- /** Pointer scrubs `head_t` + a flick injects clock momentum (the W-VIZ-INTERACTION consume). */
110
+ /** Pointer scrubs `head_t` + a flick injects clock momentum (the consume). */
111
111
  interactive: boolean;
112
112
  /**
113
- * Head squash-and-stretch gain (BD.W-FOURIER-LOOM §2b). The head bead stretches along the
113
+ * Head squash-and-stretch gain ( §2b). The head bead stretches along the
114
114
  * curve tangent on straights, squashes across it on corners (volume-preserving). The
115
115
  * library identity carries a small non-zero default (cartoon-weight at rest); a vivid
116
116
  * consumer preset turns it to 11. 0 = the byte-frozen round disc.
117
117
  */
118
118
  squashGain: number;
119
119
  /**
120
- * Cartoon cel-shadow gain (BD.W-FOURIER-LOOM §3b). A second darker copy of the chain + rope,
120
+ * Cartoon cel-shadow gain ( §3b). A second darker copy of the chain + rope,
121
121
  * offset opposite the head travel (the technicolor ink). The library identity carries a
122
122
  * small non-zero default; a vivid consumer preset floors it UP. 0 = no cel pass.
123
123
  */
@@ -7,9 +7,9 @@ export { DEFAULT_FOURIER_CONFIG, WARM_IDENTITY_PALETTE, MAX_PHASORS, MAX_CURVE_S
7
7
  export { useFourierField, type FourierFieldHandle, type UseFourierFieldOptions, } from "./composables/useFourierField";
8
8
  /**
9
9
  * The props a consumer forwards when wrapping `<FourierField>` (the GPU-substrate epicycle
10
- * field; ships via `/fourier-field`). Mirrors the component's inline `defineProps` shape (an
11
- * SFC cannot export its inline props type). BC.W-VIZ-FOURIER — the `variant: "hero"|"final"`
12
- * enum is RETIRED (folds into config presets); the renderer is the WGSL-primary GPU substrate.
10
+ * field; ships via `/fourier-field`). Mirrors the component's inline `defineProps` shape because
11
+ * an SFC cannot export its inline props type. Visual bundles live in config presets; the
12
+ * renderer is the WGSL-primary GPU substrate.
13
13
  */
14
14
  export interface FourierFieldProps {
15
15
  /** The full author config (the studio's `useConfiguratorState` model). Defaults to the warm identity. */
@@ -17,10 +17,10 @@ export interface VariantPreset {
17
17
  /** The parameter `t` of the static best-frame painted under `freeze`. */
18
18
  frozenT: number;
19
19
  /** Comet-trail PEAK alpha (the head segment). The reference trail rides ~0.9
20
- * near-opaque — present, not the prior 0.45 hairline whisper. */
20
+ * near-opaque — present, not a 0.45 hairline whisper. */
21
21
  peakAlpha: number;
22
22
  /** Trail stroke weight in CSS px (the reference is a BOLD 3.5px stroke, not
23
- * the prior 1.6 hairline). The single biggest faintness lever. */
23
+ * a 1.6 hairline). The single biggest faintness lever. */
24
24
  trailWidth: number;
25
25
  /** Head-glow alpha — the STRONGEST layer (head-forward: > peakAlpha). */
26
26
  headGlowAlpha: number;
@@ -30,7 +30,7 @@ export interface VariantPreset {
30
30
  * saturated core + white highlight + soft halo). 0 disables it. */
31
31
  headDotRadius: number;
32
32
  /** Epicycle scaffolding alphas ÷ peak (hero only; {0,0} disables the scaffold).
33
- * The reference circles/arms are PRESENT (≈0.5/0.75), not the prior 0.18 ghost. */
33
+ * The reference circles/arms are PRESENT (≈0.5/0.75), not a 0.18 ghost. */
34
34
  epicycleRatios: {
35
35
  circle: number;
36
36
  arm: number;
@@ -1,4 +1,4 @@
1
1
  /** The instanced ribbon VERTEX — expands the unit quad to each instance's covered bbox. */
2
- export declare const FOURIER_FIELD_VERT_GLSL = "#version 300 es\n// BI.W-FOURIER-RIBBON \u00A72b \u2014 MUST equal the WGSL twin + FOURIER_TANGENT_EPS (constants.ts).\n#define RIBBON_UNDERGLOW_SCALE 2.2\n\nin vec2 aCorner; // the unit quad corner \u2208 [0,1]\u00B2\nin vec4 aSeg; // (ax, ay, bx, by) \u2014 segment endpoints in MODEL space\nin vec4 aData; // (age, strokeHalf, arg2, _pad) \u2014 strokeHalf/age/arg2 per layer\n\nuniform vec4 uFit; // (centerX, centerY, scale, aspect) \u2014 model\u2192clip fit\nuniform int uLayer; // 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm\nuniform float uEdgeMargin; // AA-feather slop in MODEL units (a few CSS px), padding the bbox\n\nout vec2 vP; // the MODEL-space fragment coordinate (the fs runs the SDF on it)\nout vec2 vA;\nout vec2 vB;\nout float vAge;\nout float vHalf;\nout float vArg2;\n\nvoid main() {\n vec2 a = aSeg.xy;\n vec2 b = aSeg.zw;\n float strokeHalf = aData.y;\n vA = a; vB = b; vAge = aData.x; vHalf = strokeHalf; vArg2 = aData.z;\n\n vec2 pos;\n if (uLayer == 1 || uLayer == 2) {\n // AABB around a \u2014 the epicycle orbit RING (radius = |b-a|) or the head HALO.\n float ext = (uLayer == 1) ? (length(b - a) + strokeHalf * 0.7) : (strokeHalf * 4.5);\n ext += uEdgeMargin;\n pos = a + (aCorner * 2.0 - 1.0) * ext;\n } else {\n // Capsule along a\u2192b padded by the covered extent (trail under-glow / cel stroke).\n float ext = (uLayer == 0) ? (strokeHalf * RIBBON_UNDERGLOW_SCALE) : strokeHalf;\n ext += uEdgeMargin;\n vec2 d = b - a;\n float len = length(d);\n vec2 dir = len > 1e-6 ? d / len : vec2(1.0, 0.0);\n vec2 perp = vec2(-dir.y, dir.x);\n vec2 along = mix(a - dir * ext, b + dir * ext, aCorner.x);\n pos = along + perp * (aCorner.y * 2.0 - 1.0) * ext;\n }\n\n vP = pos;\n vec2 center = uFit.xy;\n float scale = max(uFit.z, 1e-6);\n float aspect = max(uFit.w, 1e-4);\n // model \u2192 clip (the inverse of the fs's p = center + vClip\u00B7aspect / scale).\n float clipX = (pos.x - center.x) * scale / aspect;\n float clipY = (pos.y - center.y) * scale;\n gl_Position = vec4(clipX, clipY, 0.0, 1.0);\n}\n";
2
+ export declare const FOURIER_FIELD_VERT_GLSL = "#version 300 es\n// Must equal the WGSL twin and FOURIER_TANGENT_EPS in constants.ts.\n#define RIBBON_UNDERGLOW_SCALE 2.2\n\nin vec2 aCorner; // the unit quad corner \u2208 [0,1]\u00B2\nin vec4 aSeg; // (ax, ay, bx, by) \u2014 segment endpoints in MODEL space\nin vec4 aData; // (age, strokeHalf, arg2, _pad) \u2014 strokeHalf/age/arg2 per layer\n\nuniform vec4 uFit; // (centerX, centerY, scale, aspect) \u2014 model\u2192clip fit\nuniform int uLayer; // 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm\nuniform float uEdgeMargin; // AA-feather slop in MODEL units (a few CSS px), padding the bbox\n\nout vec2 vP; // the MODEL-space fragment coordinate (the fs runs the SDF on it)\nout vec2 vA;\nout vec2 vB;\nout float vAge;\nout float vHalf;\nout float vArg2;\n\nvoid main() {\n vec2 a = aSeg.xy;\n vec2 b = aSeg.zw;\n float strokeHalf = aData.y;\n vA = a; vB = b; vAge = aData.x; vHalf = strokeHalf; vArg2 = aData.z;\n\n vec2 pos;\n if (uLayer == 1 || uLayer == 2) {\n // AABB around a \u2014 the epicycle orbit RING (radius = |b-a|) or the head HALO.\n float ext = (uLayer == 1) ? (length(b - a) + strokeHalf * 0.7) : (strokeHalf * 4.5);\n ext += uEdgeMargin;\n pos = a + (aCorner * 2.0 - 1.0) * ext;\n } else {\n // Capsule along a\u2192b padded by the covered extent (trail under-glow, cel stroke).\n float ext = (uLayer == 0) ? (strokeHalf * RIBBON_UNDERGLOW_SCALE) : strokeHalf;\n ext += uEdgeMargin;\n vec2 d = b - a;\n float len = length(d);\n vec2 dir = len > 1e-6 ? d / len : vec2(1.0, 0.0);\n vec2 perp = vec2(-dir.y, dir.x);\n vec2 along = mix(a - dir * ext, b + dir * ext, aCorner.x);\n pos = along + perp * (aCorner.y * 2.0 - 1.0) * ext;\n }\n\n vP = pos;\n vec2 center = uFit.xy;\n float scale = max(uFit.z, 1e-6);\n float aspect = max(uFit.w, 1e-4);\n // model \u2192 clip (the inverse of the fs's p = center + vClip\u00B7aspect, scale).\n float clipX = (pos.x - center.x) * scale / aspect;\n float clipY = (pos.y - center.y) * scale;\n gl_Position = vec4(clipX, clipY, 0.0, 1.0);\n}\n";
3
3
  /** The instanced ribbon FRAGMENT — the exact per-layer SDF over-composite, loop-free. */
4
- export declare const FOURIER_FIELD_FRAG_GLSL = "#version 300 es\nprecision highp float;\n\n#define MAX_FOURIER_STOPS 4\n// BD.W-FOURIER-LOOM \u00A72b \u2014 MUST equal the WGSL twin + FOURIER_TANGENT_EPS (constants.ts).\n#define TANGENT_EPS 1e-4\n#define SPEED_REF_HALFWIDTHS 6.0\n// BG.W-FOURIER-BEAUTY B1 \u2014 the THICK luminous RIBBON. RIBBON_TAIL_FRAC is MIRRORED verbatim\n// from constants.ts (the GLSL twin cannot import a TS const); proof:viz FB1 cross-checks the\n// two copies are equal so the mid-body floor (RIBBON_HEAD_FLOOR_PX) can never drift off it.\n#define RIBBON_TAIL_FRAC 0.4\n#define RIBBON_UNDERGLOW_SCALE 2.2\n#define RIBBON_UNDERGLOW_ALPHA 0.16\n\nin vec2 vP;\nin vec2 vA;\nin vec2 vB;\nin float vAge;\nin float vHalf;\nin float vArg2;\nout vec4 fragColor;\n\nuniform vec4 uTrail; // (trailWidth, peakAlpha, headGlowAlpha, trailFadeExp)\nuniform vec4 uEnv; // (trailFloor, intensity, showEpicycles, rainbowChain)\nuniform vec4 uLoom; // (squashGain, celGain, _pad, _pad) \u2014 FOURIER-LOOM \u00A72b/\u00A73b\nuniform int uLayer; // 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm\nuniform int uStopCount;\nuniform vec3 uPalette[MAX_FOURIER_STOPS]; // linear-sRGB stops\n\nconst float PI = 3.141592653589793;\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// Negative-safe cube root (the WGSL chunk's cbrt3 twin; the GLSL chunk inlines it).\nvec3 cbrt3(vec3 v) { return sign(v) * pow(abs(v), vec3(1.0 / 3.0)); }\n\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 vec3 labA = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * uPalette[i0]);\n vec3 labB = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * uPalette[i1]);\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\nvec3 chainColorLin(float seg, bool rainbow) {\n vec3 baseLin = uPalette[0];\n if (!rainbow) return baseLin;\n vec3 lab = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * baseLin);\n vec3 lch = oklabToOklch(lab);\n float hueShift = mix(-0.45, 1.15, clamp(seg, 0.0, 1.0));\n vec3 lifted = vec3(0.66, max(lch.y, 0.14), lch.z + hueShift);\n return oklabToLinearSrgb(oklchToOklab(lifted));\n}\n\nfloat segDist(vec2 p, vec2 a, vec2 b) {\n vec2 pa = p - a;\n vec2 ba = b - a;\n float h = clamp(dot(pa, ba) / max(dot(ba, ba), 1e-8), 0.0, 1.0);\n return length(pa - ba * h);\n}\n\n// BD.W-FOURIER-LOOM \u00A72b \u2014 the head travel frame (T, \u015D), the GLSL twin of the WGSL headFrame.\nstruct HeadFrame { vec2 T; float sHat; };\nHeadFrame headFrame(vec2 head, vec2 headBack, float halfW) {\n vec2 d = head - headBack;\n float s = length(d);\n HeadFrame fr;\n if (s <= TANGENT_EPS) { fr.T = vec2(1.0, 0.0); fr.sHat = 0.0; return fr; }\n fr.T = d / s;\n float refScale = max(halfW * SPEED_REF_HALFWIDTHS, 1e-6);\n fr.sHat = clamp(s / refScale, 0.0, 1.0);\n return fr;\n}\n\n// The volume-preserving anisotropic head distance (the WGSL headAniso twin).\nfloat headAniso(vec2 p, vec2 head, HeadFrame fr, float k) {\n float g = 1.0 + k * fr.sHat;\n vec2 n = vec2(-fr.T.y, fr.T.x);\n vec2 rel = p - head;\n float along = dot(rel, fr.T) / g;\n float across = dot(rel, n) * g;\n return length(vec2(along, across));\n}\n\nvoid main() {\n vec2 p = vP;\n float aa = max(fwidth(p.x) + fwidth(p.y), 1e-5) * 0.75;\n float peak = uTrail.y * uEnv.y;\n float headGlow = uTrail.z * uEnv.y;\n float fadeExp = uTrail.w;\n float trailFloor = uEnv.x;\n bool rainbow = uEnv.w > 0.5;\n float squashGain = uLoom.x;\n float celGain = uLoom.y;\n float halfW = vHalf;\n\n if (uLayer == 0) {\n // \u2500\u2500 TRAIL \u2014 the tapered luminous ribbon over its own soft under-glow \u2500\u2500\n float age = vAge;\n float d = segDist(p, vA, vB);\n // B1 \u2014 the head\u2192tail TAPER: the ribbon half-width scales with age (thick head, thin tail).\n float ribbonHalf = halfW * (RIBBON_TAIL_FRAC + (1.0 - RIBBON_TAIL_FRAC) * age);\n vec3 lin = samplePaletteLin(1.0 - age * 0.4);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n // B1 \u2014 the soft UNDER-GLOW: a wider, low-alpha copy UNDER the crisp ribbon (ONE color event).\n float glowHalf = ribbonHalf * RIBBON_UNDERGLOW_SCALE;\n float glowCover = 1.0 - smoothstep(glowHalf, glowHalf + aa * 3.0, d);\n float ga = peak * RIBBON_UNDERGLOW_ALPHA * pow(age, fadeExp) * glowCover;\n // the crisp tapered ribbon core.\n float cover = 1.0 - smoothstep(ribbonHalf, ribbonHalf + aa, d);\n float ca = max(peak * pow(age, fadeExp), peak * trailFloor) * cover;\n // core OVER glow OVER transparent (both premultiplied on the SAME rgb \u2192 out = rgb\u00B7outA).\n float outA = ca + ga * (1.0 - ca);\n fragColor = vec4(rgb * outA, outA);\n } else if (uLayer == 1) {\n // \u2500\u2500 EPICYCLE \u2014 orbit RING + ARM + joint DOT union (MAX-blended, no join seam) \u2500\u2500\n float seg = vArg2;\n vec3 lin = chainColorLin(seg, rainbow);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n float radius = length(vB - vA);\n float dRing = abs(length(p - vA) - radius);\n float ringW = max(halfW * 0.45, aa);\n float ringMask = (1.0 - smoothstep(ringW, ringW + aa, dRing)) * 0.5;\n float dArm = segDist(p, vA, vB);\n float armMask = 1.0 - smoothstep(halfW * 0.55, halfW * 0.55 + aa, dArm);\n float dotR = max(halfW * 0.7, aa * 2.0);\n float dDot = length(p - vA);\n float dotMask = 1.0 - smoothstep(dotR, dotR + aa, dDot);\n float m = clamp(max(max(ringMask, armMask), dotMask), 0.0, 1.0) * peak * 0.7;\n fragColor = vec4(rgb * m, m);\n } else if (uLayer == 2) {\n // \u2500\u2500 HEAD \u2014 squash-and-stretch (\u00A72b): halo + saturated core + white specular \u2500\u2500\n vec2 head = vA;\n vec2 headBack = vB;\n HeadFrame fr = headFrame(head, headBack, halfW);\n float dHead = headAniso(p, head, fr, squashGain);\n float coreR = halfW * 1.5;\n float haloR = coreR * 3.0;\n vec3 headRgb = clamp(linearToSrgb(samplePaletteLin(0.0)), vec3(0.0), vec3(1.0));\n float halo = (1.0 - smoothstep(0.0, haloR, dHead)) * headGlow * 0.35;\n vec4 accum = vec4(headRgb * halo, halo);\n float core = (1.0 - smoothstep(coreR, coreR + aa, dHead)) * headGlow;\n accum = vec4(headRgb * core, core) + accum * (1.0 - core);\n float spec = (1.0 - smoothstep(coreR * 0.4, coreR * 0.4 + aa, dHead)) * headGlow * 0.9;\n accum = vec4(vec3(1.0) * spec, spec) + accum * (1.0 - spec);\n fragColor = accum;\n } else {\n // \u2500\u2500 CEL \u2014 the technicolor ink shadow (rope uLayer==3 / arm uLayer==4) \u2500\u2500\n float celA = clamp(celGain, 0.0, 1.0);\n float d = segDist(p, vA, vB);\n float cover = 1.0 - smoothstep(halfW, halfW + aa, d);\n float m = cover * celA * peak * vArg2; // vArg2 = celStrength (1.0 rope / 0.7 arm)\n fragColor = vec4(0.0, 0.0, 0.0, m);\n }\n}\n";
4
+ export declare const FOURIER_FIELD_FRAG_GLSL = "#version 300 es\nprecision highp float;\n\n#define MAX_FOURIER_STOPS 4\n// Must equal the WGSL twin and FOURIER_TANGENT_EPS in constants.ts.\n#define TANGENT_EPS 1e-4\n#define SPEED_REF_HALFWIDTHS 6.0\n// The thick luminous ribbon mirrors RIBBON_TAIL_FRAC verbatim\n// from constants.ts because the GLSL twin cannot import a TS const; parity coverage verifies the\n// two copies are equal so the mid-body floor (RIBBON_HEAD_FLOOR_PX) can never drift off it.\n#define RIBBON_TAIL_FRAC 0.4\n#define RIBBON_UNDERGLOW_SCALE 2.2\n#define RIBBON_UNDERGLOW_ALPHA 0.16\n\nin vec2 vP;\nin vec2 vA;\nin vec2 vB;\nin float vAge;\nin float vHalf;\nin float vArg2;\nout vec4 fragColor;\n\nuniform vec4 uTrail; // (trailWidth, peakAlpha, headGlowAlpha, trailFadeExp)\nuniform vec4 uEnv; // (trailFloor, intensity, showEpicycles, rainbowChain)\nuniform vec4 uLoom; // (squashGain, celGain, _pad, _pad) \u2014 FOURIER-LOOM \u00A72b/\u00A73b\nuniform int uLayer; // 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm\nuniform int uStopCount;\nuniform vec3 uPalette[MAX_FOURIER_STOPS]; // linear-sRGB stops\n\nconst float PI = 3.141592653589793;\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// Negative-safe cube root (the WGSL chunk's cbrt3 twin; the GLSL chunk inlines it).\nvec3 cbrt3(vec3 v) { return sign(v) * pow(abs(v), vec3(1.0 / 3.0)); }\n\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 vec3 labA = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * uPalette[i0]);\n vec3 labB = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * uPalette[i1]);\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\nvec3 chainColorLin(float seg, bool rainbow) {\n vec3 baseLin = uPalette[0];\n if (!rainbow) return baseLin;\n vec3 lab = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * baseLin);\n vec3 lch = oklabToOklch(lab);\n float hueShift = mix(-0.45, 1.15, clamp(seg, 0.0, 1.0));\n vec3 lifted = vec3(0.66, max(lch.y, 0.14), lch.z + hueShift);\n return oklabToLinearSrgb(oklchToOklab(lifted));\n}\n\nfloat segDist(vec2 p, vec2 a, vec2 b) {\n vec2 pa = p - a;\n vec2 ba = b - a;\n float h = clamp(dot(pa, ba) / max(dot(ba, ba), 1e-8), 0.0, 1.0);\n return length(pa - ba * h);\n}\n\n// The head travel frame (T, \u015D), the GLSL twin of the WGSL headFrame.\nstruct HeadFrame { vec2 T; float sHat; };\nHeadFrame headFrame(vec2 head, vec2 headBack, float halfW) {\n vec2 d = head - headBack;\n float s = length(d);\n HeadFrame fr;\n if (s <= TANGENT_EPS) { fr.T = vec2(1.0, 0.0); fr.sHat = 0.0; return fr; }\n fr.T = d / s;\n float refScale = max(halfW * SPEED_REF_HALFWIDTHS, 1e-6);\n fr.sHat = clamp(s / refScale, 0.0, 1.0);\n return fr;\n}\n\n// The volume-preserving anisotropic head distance (the WGSL headAniso twin).\nfloat headAniso(vec2 p, vec2 head, HeadFrame fr, float k) {\n float g = 1.0 + k * fr.sHat;\n vec2 n = vec2(-fr.T.y, fr.T.x);\n vec2 rel = p - head;\n float along = dot(rel, fr.T) / g;\n float across = dot(rel, n) * g;\n return length(vec2(along, across));\n}\n\nvoid main() {\n vec2 p = vP;\n float aa = max(fwidth(p.x) + fwidth(p.y), 1e-5) * 0.75;\n float peak = uTrail.y * uEnv.y;\n float headGlow = uTrail.z * uEnv.y;\n float fadeExp = uTrail.w;\n float trailFloor = uEnv.x;\n bool rainbow = uEnv.w > 0.5;\n float squashGain = uLoom.x;\n float celGain = uLoom.y;\n float halfW = vHalf;\n\n if (uLayer == 0) {\n // \u2500\u2500 TRAIL \u2014 the tapered luminous ribbon over its own soft under-glow \u2500\u2500\n float age = vAge;\n float d = segDist(p, vA, vB);\n // Head\u2192tail taper: the ribbon half-width scales with age (thick head, thin tail).\n float ribbonHalf = halfW * (RIBBON_TAIL_FRAC + (1.0 - RIBBON_TAIL_FRAC) * age);\n vec3 lin = samplePaletteLin(1.0 - age * 0.4);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n // Soft under-glow: a wider, low-alpha copy under the crisp ribbon (one color event).\n float glowHalf = ribbonHalf * RIBBON_UNDERGLOW_SCALE;\n float glowCover = 1.0 - smoothstep(glowHalf, glowHalf + aa * 3.0, d);\n float ga = peak * RIBBON_UNDERGLOW_ALPHA * pow(age, fadeExp) * glowCover;\n // The crisp tapered ribbon core.\n float cover = 1.0 - smoothstep(ribbonHalf, ribbonHalf + aa, d);\n float ca = max(peak * pow(age, fadeExp), peak * trailFloor) * cover;\n // core OVER glow OVER transparent (both premultiplied on the SAME rgb \u2192 out = rgb\u00B7outA).\n float outA = ca + ga * (1.0 - ca);\n fragColor = vec4(rgb * outA, outA);\n } else if (uLayer == 1) {\n // \u2500\u2500 EPICYCLE \u2014 orbit RING + ARM + joint DOT union (MAX-blended, no join seam) \u2500\u2500\n float seg = vArg2;\n vec3 lin = chainColorLin(seg, rainbow);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n float radius = length(vB - vA);\n float dRing = abs(length(p - vA) - radius);\n float ringW = max(halfW * 0.45, aa);\n float ringMask = (1.0 - smoothstep(ringW, ringW + aa, dRing)) * 0.5;\n float dArm = segDist(p, vA, vB);\n float armMask = 1.0 - smoothstep(halfW * 0.55, halfW * 0.55 + aa, dArm);\n float dotR = max(halfW * 0.7, aa * 2.0);\n float dDot = length(p - vA);\n float dotMask = 1.0 - smoothstep(dotR, dotR + aa, dDot);\n float m = clamp(max(max(ringMask, armMask), dotMask), 0.0, 1.0) * peak * 0.7;\n fragColor = vec4(rgb * m, m);\n } else if (uLayer == 2) {\n // \u2500\u2500 HEAD \u2014 squash-and-stretch (\u00A72b): halo + saturated core + white specular \u2500\u2500\n vec2 head = vA;\n vec2 headBack = vB;\n HeadFrame fr = headFrame(head, headBack, halfW);\n float dHead = headAniso(p, head, fr, squashGain);\n float coreR = halfW * 1.5;\n float haloR = coreR * 3.0;\n vec3 headRgb = clamp(linearToSrgb(samplePaletteLin(0.0)), vec3(0.0), vec3(1.0));\n float halo = (1.0 - smoothstep(0.0, haloR, dHead)) * headGlow * 0.35;\n vec4 accum = vec4(headRgb * halo, halo);\n float core = (1.0 - smoothstep(coreR, coreR + aa, dHead)) * headGlow;\n accum = vec4(headRgb * core, core) + accum * (1.0 - core);\n float spec = (1.0 - smoothstep(coreR * 0.4, coreR * 0.4 + aa, dHead)) * headGlow * 0.9;\n accum = vec4(vec3(1.0) * spec, spec) + accum * (1.0 - spec);\n fragColor = accum;\n } else {\n // \u2500\u2500 CEL \u2014 the technicolor ink shadow (rope uLayer==3, arm uLayer==4) \u2500\u2500\n float celA = clamp(celGain, 0.0, 1.0);\n float d = segDist(p, vA, vB);\n float cover = 1.0 - smoothstep(halfW, halfW + aa, d);\n float m = cover * celA * peak * vArg2; // vArg2 = celStrength (1.0 rope / 0.7 arm)\n fragColor = vec4(0.0, 0.0, 0.0, m);\n }\n}\n";
@@ -1 +1 @@
1
- export declare const FOURIER_FIELD_RENDER_WGSL = "\n// The instanced-ribbon LAYER selector (a pipeline-overridable constant \u2014 5 pipelines share the\n// ONE module, each specializing this): 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm.\noverride LAYER: i32 = 0;\n\nconst PI: f32 = 3.141592653589793;\n// BD.W-FOURIER-LOOM \u00A72b \u2014 the degenerate-tangent guard (must equal FOURIER_TANGENT_EPS in\n// constants.ts + the GL CPU bead path so a cusp resolves IDENTICALLY across both engines).\nconst TANGENT_EPS: f32 = 1e-4;\nconst SPEED_REF_HALFWIDTHS: f32 = 6.0;\n// BG.W-FOURIER-BEAUTY B1 \u2014 the THICK luminous RIBBON. RIBBON_TAIL_FRAC is MIRRORED verbatim\n// from constants.ts (the WGSL twin cannot import a TS const); proof:viz FB1 cross-checks the\n// two copies are equal so the mid-body floor (RIBBON_HEAD_FLOOR_PX) can never drift off it.\nconst RIBBON_TAIL_FRAC: f32 = 0.4;\nconst RIBBON_UNDERGLOW_SCALE: f32 = 2.2;\nconst RIBBON_UNDERGLOW_ALPHA: f32 = 0.16;\n\n// \u2500\u2500 Render uniforms (the typed-struct source-of-truth \u2014 see uniformBridgeWGPU.ts) \u2500\u2500\nstruct RenderUniforms {\n // r0: (centerX, centerY, scale, aspect) \u2014 model\u2192clip fit transform\n r0: vec4<f32>,\n // r1: (trailWidth, peakAlpha, headGlowAlpha, trailFadeExp)\n r1: vec4<f32>,\n // r2: (trailFloor, intensity, showEpicycles, rainbowChain)\n r2: vec4<f32>,\n // r3: (squashGain, celGain, edgeMargin, _pad) \u2014 FOURIER-LOOM \u00A72b/\u00A73b + the ribbon bbox slop\n r3: vec4<f32>,\n // ints: (sampleCount, armCount, stopCount, _pad)\n ints: vec4<i32>,\n // palette stops: linear-sRGB rgb + _pad\n palette: array<vec4<f32>, 4>,\n};\n\n@group(0) @binding(0) var<uniform> u: RenderUniforms;\n// curveSamples[i] = (x, y, age, _pad) in MODEL space \u2014 the render VERTEX-PULLS these.\n@group(0) @binding(1) var<storage, read> curveSamples: array<vec4<f32>>;\n// chainTips[k] = (x, y, _pad, _pad) in MODEL space.\n@group(0) @binding(2) var<storage, read> chainTips: array<vec4<f32>>;\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\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\nfn chainColorLin(seg: f32, rainbow: bool) -> vec3<f32> {\n let baseLin = u.palette[0].rgb;\n if (!rainbow) { return baseLin; }\n let lab = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * baseLin);\n let lch = oklabToOklch(lab);\n let hueShift = mix(-0.45, 1.15, clamp(seg, 0.0, 1.0));\n let h = lch.z + hueShift;\n let lifted = vec3<f32>(0.66, max(lch.y, 0.14), h);\n return oklabToLinearSrgb(oklchToOklab(lifted));\n}\n\nfn segDist(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>) -> f32 {\n let pa = p - a;\n let ba = b - a;\n let h = clamp(dot(pa, ba) / max(dot(ba, ba), 1e-8), 0.0, 1.0);\n return length(pa - ba * h);\n}\n\n// BD.W-FOURIER-LOOM \u00A72b \u2014 the head travel frame + the volume-preserving anisotropic distance.\nstruct HeadFrame { T: vec2<f32>, sHat: f32, };\nfn headFrame(head: vec2<f32>, headBack: vec2<f32>, halfW: f32) -> HeadFrame {\n let d = head - headBack;\n let s = length(d);\n var out: HeadFrame;\n if (s <= TANGENT_EPS) {\n out.T = vec2<f32>(1.0, 0.0);\n out.sHat = 0.0;\n return out;\n }\n out.T = d / s;\n let refScale = max(halfW * SPEED_REF_HALFWIDTHS, 1e-6);\n out.sHat = clamp(s / refScale, 0.0, 1.0);\n return out;\n}\n\nfn headAniso(p: vec2<f32>, head: vec2<f32>, fr: HeadFrame, k: f32) -> f32 {\n let g = 1.0 + k * fr.sHat;\n let n = vec2<f32>(-fr.T.y, fr.T.x);\n let rel = p - head;\n let along = dot(rel, fr.T) / g;\n let across = dot(rel, n) * g;\n return length(vec2<f32>(along, across));\n}\n\n// The cel ink lags behind the travel \u2014 the SAME \u2212T\u00B7halfW\u00B71.4 offset both engines apply (the\n// head frame is read straight off the compute-filled curveSamples[0]/[1], parity by construction).\nfn celOffset(halfW: f32) -> vec2<f32> {\n let fr = headFrame(curveSamples[0].xy, curveSamples[1].xy, halfW);\n return -fr.T * halfW * 1.4;\n}\n\n// The unit quad as two triangles (6 verts) in [0,1]\u00B2 \u2014 the instanced vertex expands it.\nfn quadCorner(vi: u32) -> vec2<f32> {\n var c = array<vec2<f32>, 6>(\n vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0),\n vec2<f32>(0.0, 1.0), vec2<f32>(1.0, 0.0), vec2<f32>(1.0, 1.0),\n );\n return c[vi];\n}\n\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) p: vec2<f32>, // model-space fragment coordinate\n @location(1) a: vec2<f32>,\n @location(2) b: vec2<f32>,\n @location(3) segData: vec3<f32>, // (age, strokeHalf, arg2)\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32, @builtin(instance_index) inst: u32) -> VSOut {\n let corner = quadCorner(vi);\n let center = u.r0.xy;\n let scale = max(u.r0.z, 1e-6);\n let aspect = max(u.r0.w, 1e-4);\n let halfW = u.r1.x * 0.5;\n let margin = u.r3.z;\n\n var a: vec2<f32> = vec2<f32>(0.0);\n var b: vec2<f32> = vec2<f32>(0.0);\n var strokeHalf: f32 = halfW;\n var age: f32 = 0.0;\n var arg2: f32 = 0.0;\n var isCapsule: bool = true;\n var ext: f32 = halfW;\n\n if (LAYER == 0) {\n // TRAIL \u2014 the curve capsule; the covered extent is the head-width under-glow.\n a = curveSamples[inst].xy;\n b = curveSamples[inst + 1u].xy;\n age = max(curveSamples[inst].z, curveSamples[inst + 1u].z);\n ext = halfW * RIBBON_UNDERGLOW_SCALE;\n isCapsule = true;\n } else if (LAYER == 1) {\n // EPICYCLE \u2014 the chain AABB around a (radius = |b\u2212a|).\n a = chainTips[inst].xy;\n b = chainTips[inst + 1u].xy;\n arg2 = f32(inst) / max(f32(u.ints.y - 1), 1.0);\n ext = length(b - a) + halfW * 0.7;\n isCapsule = false;\n } else if (LAYER == 2) {\n // HEAD \u2014 the comet head at curveSamples[0], AABB by the halo radius.\n a = curveSamples[0].xy;\n b = curveSamples[1].xy;\n ext = halfW * 4.5;\n isCapsule = false;\n } else if (LAYER == 3) {\n // CEL-ROPE \u2014 the curve capsule, offset opposite travel; full-width ink.\n let off = celOffset(halfW);\n a = curveSamples[inst].xy + off;\n b = curveSamples[inst + 1u].xy + off;\n arg2 = 1.0;\n ext = halfW;\n isCapsule = true;\n } else {\n // CEL-ARM (LAYER == 4) \u2014 the chain capsule, offset; the narrower arm ink (0.55\u00B7halfW).\n let off = celOffset(halfW);\n a = chainTips[inst].xy + off;\n b = chainTips[inst + 1u].xy + off;\n strokeHalf = halfW * 0.55;\n arg2 = 0.7;\n ext = halfW * 0.55;\n isCapsule = true;\n }\n ext = ext + margin;\n\n var pos: vec2<f32>;\n if (isCapsule) {\n let d = b - a;\n let len = length(d);\n var dir = vec2<f32>(1.0, 0.0);\n if (len > 1e-6) { dir = d / len; }\n let perp = vec2<f32>(-dir.y, dir.x);\n let along = mix(a - dir * ext, b + dir * ext, corner.x);\n pos = along + perp * (corner.y * 2.0 - 1.0) * ext;\n } else {\n pos = a + (corner * 2.0 - vec2<f32>(1.0)) * ext;\n }\n\n let clipX = (pos.x - center.x) * scale / aspect;\n let clipY = (pos.y - center.y) * scale;\n var out: VSOut;\n out.pos = vec4<f32>(clipX, clipY, 0.0, 1.0);\n out.p = pos;\n out.a = a;\n out.b = b;\n out.segData = vec3<f32>(age, strokeHalf, arg2);\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n let p = in.p;\n let aa = max(fwidth(p.x) + fwidth(p.y), 1e-5) * 0.75;\n let peak = u.r1.y * u.r2.y;\n let headGlow = u.r1.z * u.r2.y;\n let fadeExp = u.r1.w;\n let trailFloor = u.r2.x;\n let rainbow = u.r2.w > 0.5;\n let squashGain = u.r3.x;\n let celGain = u.r3.y;\n let halfW = in.segData.y;\n let age = in.segData.x;\n let arg2 = in.segData.z;\n let a = in.a;\n let b = in.b;\n\n if (LAYER == 0) {\n // \u2500\u2500 TRAIL \u2014 the tapered luminous ribbon over its own soft under-glow \u2500\u2500\n let d = segDist(p, a, b);\n let ribbonHalf = halfW * (RIBBON_TAIL_FRAC + (1.0 - RIBBON_TAIL_FRAC) * age);\n let lin = samplePaletteLin(1.0 - age * 0.4);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n let glowHalf = ribbonHalf * RIBBON_UNDERGLOW_SCALE;\n let glowCover = 1.0 - smoothstep(glowHalf, glowHalf + aa * 3.0, d);\n let ga = peak * RIBBON_UNDERGLOW_ALPHA * pow(age, fadeExp) * glowCover;\n let cover = 1.0 - smoothstep(ribbonHalf, ribbonHalf + aa, d);\n let ca = max(peak * pow(age, fadeExp), peak * trailFloor) * cover;\n let outA = ca + ga * (1.0 - ca);\n return vec4<f32>(rgb * outA, outA);\n } else if (LAYER == 1) {\n // \u2500\u2500 EPICYCLE \u2014 orbit RING + ARM + joint DOT union (MAX-blended, no join seam) \u2500\u2500\n let lin = chainColorLin(arg2, rainbow);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n let radius = length(b - a);\n let dRing = abs(length(p - a) - radius);\n let ringW = max(halfW * 0.45, aa);\n let ringMask = (1.0 - smoothstep(ringW, ringW + aa, dRing)) * 0.5;\n let dArm = segDist(p, a, b);\n let armMask = 1.0 - smoothstep(halfW * 0.55, halfW * 0.55 + aa, dArm);\n let dotR = max(halfW * 0.7, aa * 2.0);\n let dDot = length(p - a);\n let dotMask = 1.0 - smoothstep(dotR, dotR + aa, dDot);\n let m = clamp(max(max(ringMask, armMask), dotMask), 0.0, 1.0) * peak * 0.7;\n return vec4<f32>(rgb * m, m);\n } else if (LAYER == 2) {\n // \u2500\u2500 HEAD \u2014 squash-and-stretch (\u00A72b): halo + saturated core + white specular \u2500\u2500\n let head = a;\n let headBack = b;\n let fr = headFrame(head, headBack, halfW);\n let dHead = headAniso(p, head, fr, squashGain);\n let coreR = halfW * 1.5;\n let haloR = coreR * 3.0;\n let headRgb = clamp(linearToSrgb(samplePaletteLin(0.0)), vec3<f32>(0.0), vec3<f32>(1.0));\n let halo = (1.0 - smoothstep(0.0, haloR, dHead)) * headGlow * 0.35;\n var accum = vec4<f32>(headRgb * halo, halo);\n let core = (1.0 - smoothstep(coreR, coreR + aa, dHead)) * headGlow;\n accum = vec4<f32>(headRgb * core, core) + accum * (1.0 - core);\n let spec = (1.0 - smoothstep(coreR * 0.4, coreR * 0.4 + aa, dHead)) * headGlow * 0.9;\n accum = vec4<f32>(vec3<f32>(1.0) * spec, spec) + accum * (1.0 - spec);\n return accum;\n } else {\n // \u2500\u2500 CEL \u2014 the technicolor ink shadow (rope LAYER==3 / arm LAYER==4) \u2500\u2500\n let celA = clamp(celGain, 0.0, 1.0);\n let d = segDist(p, a, b);\n let cover = 1.0 - smoothstep(halfW, halfW + aa, d);\n let m = cover * celA * peak * arg2; // arg2 = celStrength (1.0 rope / 0.7 arm)\n return vec4<f32>(0.0, 0.0, 0.0, m);\n }\n}\n";
1
+ export declare const FOURIER_FIELD_RENDER_WGSL = "\n// The instanced-ribbon LAYER selector (a pipeline-overridable constant \u2014 5 pipelines share the\n// ONE module, each specializing this): 0 trail \u00B7 1 epicycle \u00B7 2 head \u00B7 3 cel-rope \u00B7 4 cel-arm.\noverride LAYER: i32 = 0;\n\nconst PI: f32 = 3.141592653589793;\n// The degenerate-tangent guard must equal FOURIER_TANGENT_EPS in\n// constants.ts and the GL CPU bead path so a cusp resolves identically across both engines.\nconst TANGENT_EPS: f32 = 1e-4;\nconst SPEED_REF_HALFWIDTHS: f32 = 6.0;\n// The thick luminous ribbon mirrors RIBBON_TAIL_FRAC verbatim\n// from constants.ts because the WGSL twin cannot import a TS const; parity coverage verifies the\n// two copies are equal so the mid-body floor (RIBBON_HEAD_FLOOR_PX) can never drift off it.\nconst RIBBON_TAIL_FRAC: f32 = 0.4;\nconst RIBBON_UNDERGLOW_SCALE: f32 = 2.2;\nconst RIBBON_UNDERGLOW_ALPHA: f32 = 0.16;\n\n// \u2500\u2500 Render uniforms (the typed-struct source-of-truth \u2014 see uniformBridgeWGPU.ts) \u2500\u2500\nstruct RenderUniforms {\n // r0: (centerX, centerY, scale, aspect) \u2014 model\u2192clip fit transform\n r0: vec4<f32>,\n // r1: (trailWidth, peakAlpha, headGlowAlpha, trailFadeExp)\n r1: vec4<f32>,\n // r2: (trailFloor, intensity, showEpicycles, rainbowChain)\n r2: vec4<f32>,\n // r3: (squashGain, celGain, edgeMargin, _pad) \u2014 FOURIER-LOOM \u00A72b/\u00A73b + the ribbon bbox slop\n r3: vec4<f32>,\n // ints: (sampleCount, armCount, stopCount, _pad)\n ints: vec4<i32>,\n // palette stops: linear-sRGB rgb + _pad\n palette: array<vec4<f32>, 4>,\n};\n\n@group(0) @binding(0) var<uniform> u: RenderUniforms;\n// curveSamples[i] = (x, y, age, _pad) in MODEL space \u2014 the render VERTEX-PULLS these.\n@group(0) @binding(1) var<storage, read> curveSamples: array<vec4<f32>>;\n// chainTips[k] = (x, y, _pad, _pad) in MODEL space.\n@group(0) @binding(2) var<storage, read> chainTips: array<vec4<f32>>;\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\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\nfn chainColorLin(seg: f32, rainbow: bool) -> vec3<f32> {\n let baseLin = u.palette[0].rgb;\n if (!rainbow) { return baseLin; }\n let lab = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * baseLin);\n let lch = oklabToOklch(lab);\n let hueShift = mix(-0.45, 1.15, clamp(seg, 0.0, 1.0));\n let h = lch.z + hueShift;\n let lifted = vec3<f32>(0.66, max(lch.y, 0.14), h);\n return oklabToLinearSrgb(oklchToOklab(lifted));\n}\n\nfn segDist(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>) -> f32 {\n let pa = p - a;\n let ba = b - a;\n let h = clamp(dot(pa, ba) / max(dot(ba, ba), 1e-8), 0.0, 1.0);\n return length(pa - ba * h);\n}\n\n// The head travel frame + the volume-preserving anisotropic distance.\nstruct HeadFrame { T: vec2<f32>, sHat: f32, };\nfn headFrame(head: vec2<f32>, headBack: vec2<f32>, halfW: f32) -> HeadFrame {\n let d = head - headBack;\n let s = length(d);\n var out: HeadFrame;\n if (s <= TANGENT_EPS) {\n out.T = vec2<f32>(1.0, 0.0);\n out.sHat = 0.0;\n return out;\n }\n out.T = d / s;\n let refScale = max(halfW * SPEED_REF_HALFWIDTHS, 1e-6);\n out.sHat = clamp(s / refScale, 0.0, 1.0);\n return out;\n}\n\nfn headAniso(p: vec2<f32>, head: vec2<f32>, fr: HeadFrame, k: f32) -> f32 {\n let g = 1.0 + k * fr.sHat;\n let n = vec2<f32>(-fr.T.y, fr.T.x);\n let rel = p - head;\n let along = dot(rel, fr.T) / g;\n let across = dot(rel, n) * g;\n return length(vec2<f32>(along, across));\n}\n\n// The cel ink lags behind the travel \u2014 the SAME \u2212T\u00B7halfW\u00B71.4 offset both engines apply (the\n// head frame is read straight off the compute-filled curveSamples[0]/[1], parity by construction).\nfn celOffset(halfW: f32) -> vec2<f32> {\n let fr = headFrame(curveSamples[0].xy, curveSamples[1].xy, halfW);\n return -fr.T * halfW * 1.4;\n}\n\n// The unit quad as two triangles (6 verts) in [0,1]\u00B2 \u2014 the instanced vertex expands it.\nfn quadCorner(vi: u32) -> vec2<f32> {\n var c = array<vec2<f32>, 6>(\n vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0),\n vec2<f32>(0.0, 1.0), vec2<f32>(1.0, 0.0), vec2<f32>(1.0, 1.0),\n );\n return c[vi];\n}\n\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) p: vec2<f32>, // model-space fragment coordinate\n @location(1) a: vec2<f32>,\n @location(2) b: vec2<f32>,\n @location(3) segData: vec3<f32>, // (age, strokeHalf, arg2)\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32, @builtin(instance_index) inst: u32) -> VSOut {\n let corner = quadCorner(vi);\n let center = u.r0.xy;\n let scale = max(u.r0.z, 1e-6);\n let aspect = max(u.r0.w, 1e-4);\n let halfW = u.r1.x * 0.5;\n let margin = u.r3.z;\n\n var a: vec2<f32> = vec2<f32>(0.0);\n var b: vec2<f32> = vec2<f32>(0.0);\n var strokeHalf: f32 = halfW;\n var age: f32 = 0.0;\n var arg2: f32 = 0.0;\n var isCapsule: bool = true;\n var ext: f32 = halfW;\n\n if (LAYER == 0) {\n // TRAIL \u2014 the curve capsule; the covered extent is the head-width under-glow.\n a = curveSamples[inst].xy;\n b = curveSamples[inst + 1u].xy;\n age = max(curveSamples[inst].z, curveSamples[inst + 1u].z);\n ext = halfW * RIBBON_UNDERGLOW_SCALE;\n isCapsule = true;\n } else if (LAYER == 1) {\n // EPICYCLE \u2014 the chain AABB around a (radius = |b\u2212a|).\n a = chainTips[inst].xy;\n b = chainTips[inst + 1u].xy;\n arg2 = f32(inst) / max(f32(u.ints.y - 1), 1.0);\n ext = length(b - a) + halfW * 0.7;\n isCapsule = false;\n } else if (LAYER == 2) {\n // HEAD \u2014 the comet head at curveSamples[0], AABB by the halo radius.\n a = curveSamples[0].xy;\n b = curveSamples[1].xy;\n ext = halfW * 4.5;\n isCapsule = false;\n } else if (LAYER == 3) {\n // CEL-ROPE \u2014 the curve capsule, offset opposite travel; full-width ink.\n let off = celOffset(halfW);\n a = curveSamples[inst].xy + off;\n b = curveSamples[inst + 1u].xy + off;\n arg2 = 1.0;\n ext = halfW;\n isCapsule = true;\n } else {\n // CEL-ARM (LAYER == 4) \u2014 the chain capsule, offset; the narrower arm ink (0.55\u00B7halfW).\n let off = celOffset(halfW);\n a = chainTips[inst].xy + off;\n b = chainTips[inst + 1u].xy + off;\n strokeHalf = halfW * 0.55;\n arg2 = 0.7;\n ext = halfW * 0.55;\n isCapsule = true;\n }\n ext = ext + margin;\n\n var pos: vec2<f32>;\n if (isCapsule) {\n let d = b - a;\n let len = length(d);\n var dir = vec2<f32>(1.0, 0.0);\n if (len > 1e-6) { dir = d / len; }\n let perp = vec2<f32>(-dir.y, dir.x);\n let along = mix(a - dir * ext, b + dir * ext, corner.x);\n pos = along + perp * (corner.y * 2.0 - 1.0) * ext;\n } else {\n pos = a + (corner * 2.0 - vec2<f32>(1.0)) * ext;\n }\n\n let clipX = (pos.x - center.x) * scale / aspect;\n let clipY = (pos.y - center.y) * scale;\n var out: VSOut;\n out.pos = vec4<f32>(clipX, clipY, 0.0, 1.0);\n out.p = pos;\n out.a = a;\n out.b = b;\n out.segData = vec3<f32>(age, strokeHalf, arg2);\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n let p = in.p;\n let aa = max(fwidth(p.x) + fwidth(p.y), 1e-5) * 0.75;\n let peak = u.r1.y * u.r2.y;\n let headGlow = u.r1.z * u.r2.y;\n let fadeExp = u.r1.w;\n let trailFloor = u.r2.x;\n let rainbow = u.r2.w > 0.5;\n let squashGain = u.r3.x;\n let celGain = u.r3.y;\n let halfW = in.segData.y;\n let age = in.segData.x;\n let arg2 = in.segData.z;\n let a = in.a;\n let b = in.b;\n\n if (LAYER == 0) {\n // \u2500\u2500 TRAIL \u2014 the tapered luminous ribbon over its own soft under-glow \u2500\u2500\n let d = segDist(p, a, b);\n let ribbonHalf = halfW * (RIBBON_TAIL_FRAC + (1.0 - RIBBON_TAIL_FRAC) * age);\n let lin = samplePaletteLin(1.0 - age * 0.4);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n let glowHalf = ribbonHalf * RIBBON_UNDERGLOW_SCALE;\n let glowCover = 1.0 - smoothstep(glowHalf, glowHalf + aa * 3.0, d);\n let ga = peak * RIBBON_UNDERGLOW_ALPHA * pow(age, fadeExp) * glowCover;\n let cover = 1.0 - smoothstep(ribbonHalf, ribbonHalf + aa, d);\n let ca = max(peak * pow(age, fadeExp), peak * trailFloor) * cover;\n let outA = ca + ga * (1.0 - ca);\n return vec4<f32>(rgb * outA, outA);\n } else if (LAYER == 1) {\n // \u2500\u2500 EPICYCLE \u2014 orbit RING + ARM + joint DOT union (MAX-blended, no join seam) \u2500\u2500\n let lin = chainColorLin(arg2, rainbow);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n let radius = length(b - a);\n let dRing = abs(length(p - a) - radius);\n let ringW = max(halfW * 0.45, aa);\n let ringMask = (1.0 - smoothstep(ringW, ringW + aa, dRing)) * 0.5;\n let dArm = segDist(p, a, b);\n let armMask = 1.0 - smoothstep(halfW * 0.55, halfW * 0.55 + aa, dArm);\n let dotR = max(halfW * 0.7, aa * 2.0);\n let dDot = length(p - a);\n let dotMask = 1.0 - smoothstep(dotR, dotR + aa, dDot);\n let m = clamp(max(max(ringMask, armMask), dotMask), 0.0, 1.0) * peak * 0.7;\n return vec4<f32>(rgb * m, m);\n } else if (LAYER == 2) {\n // \u2500\u2500 HEAD \u2014 squash-and-stretch (\u00A72b): halo + saturated core + white specular \u2500\u2500\n let head = a;\n let headBack = b;\n let fr = headFrame(head, headBack, halfW);\n let dHead = headAniso(p, head, fr, squashGain);\n let coreR = halfW * 1.5;\n let haloR = coreR * 3.0;\n let headRgb = clamp(linearToSrgb(samplePaletteLin(0.0)), vec3<f32>(0.0), vec3<f32>(1.0));\n let halo = (1.0 - smoothstep(0.0, haloR, dHead)) * headGlow * 0.35;\n var accum = vec4<f32>(headRgb * halo, halo);\n let core = (1.0 - smoothstep(coreR, coreR + aa, dHead)) * headGlow;\n accum = vec4<f32>(headRgb * core, core) + accum * (1.0 - core);\n let spec = (1.0 - smoothstep(coreR * 0.4, coreR * 0.4 + aa, dHead)) * headGlow * 0.9;\n accum = vec4<f32>(vec3<f32>(1.0) * spec, spec) + accum * (1.0 - spec);\n return accum;\n } else {\n // \u2500\u2500 CEL \u2014 the technicolor ink shadow (rope LAYER==3, arm LAYER==4) \u2500\u2500\n let celA = clamp(celGain, 0.0, 1.0);\n let d = segDist(p, a, b);\n let cover = 1.0 - smoothstep(halfW, halfW + aa, d);\n let m = cover * celA * peak * arg2; // arg2 = celStrength (1.0 rope / 0.7 arm)\n return vec4<f32>(0.0, 0.0, 0.0, m);\n }\n}\n";
@@ -11,11 +11,11 @@ declare const __VLS_base: import("vue").DefineComponent<HandMarkProps, {
11
11
  seed: number;
12
12
  shape: import("./types").HandShape;
13
13
  animation: import("./types").HandAnimation;
14
- appear: "mount" | "visible" | "manual";
15
14
  jagged: boolean;
16
15
  brush: import("./brush").BrushName | Partial<import("./brush").Brush>;
17
16
  drawMs: number;
18
17
  drawDelayMs: number;
18
+ appear: "mount" | "visible" | "manual";
19
19
  boilFps: number;
20
20
  boilFrames: number;
21
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -84,7 +84,7 @@ export interface InkPath {
84
84
  stroke?: string;
85
85
  opacity: number;
86
86
  blend: BlendMode;
87
- /** geometry finish — bound to the SVG `stroke-linecap` on the path (C-1(d)). */
87
+ /** geometry finish — bound to the SVG `stroke-linecap` on the path (d). */
88
88
  cap?: "round" | "square" | "butt";
89
89
  }
90
90
  /**
@@ -4,7 +4,7 @@
4
4
  * Sits between the props and the SFC template so a future React/web-component skin
5
5
  * reuses L1–L4. It orchestrates: resolve brush → shapeGeom → ink → animation. It
6
6
  * owns NO DOM (the SFC anchors/measures/mounts the filter); it owns the reactive
7
- * pipeline + the draw-on / boil state machine.
7
+ * pipeline + the draw-on, boil state machine.
8
8
  *
9
9
  * Two draw-on mechanisms, picked by a FIELD (never an instrument `if`):
10
10
  * - clean ink (no grain): `stroke-dashoffset` on `pathLength="1"` — the slides
@@ -47,7 +47,7 @@ export interface UseHandMarkInput {
47
47
  jagged: boolean;
48
48
  /** NATURAL underline morphology (C-2) — procedural off the house-seeded engine. */
49
49
  natural: boolean;
50
- /** NATURAL-underline excursion knob (BG.W-HANDMARK-PERFECT (c)); `null` ⇒ derive from brush wobble. */
50
+ /** NATURAL-underline excursion knob ( (c)); `null` ⇒ derive from brush wobble. */
51
51
  amplitude: number | null;
52
52
  box: MarkBox | null;
53
53
  path: string | null;
@@ -60,8 +60,8 @@ export interface UseHandMarkInput {
60
60
  */
61
61
  baselineFrac: number | null;
62
62
  /**
63
- * The aspect-correct marking-space HEIGHT (BG.W-HANDMARK-PERFECT (a)) — `VB_W /
64
- * boxAspect` from the SFC-measured `.hm` box px-aspect, so `preserveAspectRatio="none"`
63
+ * The aspect-correct marking-space height: `VB_W * boxAspect`, using the
64
+ * SFC-measured `.hm` box aspect so `preserveAspectRatio="none"`
65
65
  * scales the text-mode wobble SHAPE uniformly (the humps stop crushing flat on a short
66
66
  * word). Defaults to `VB_H`; used ONLY for the measured text-mode marks (the positioned/
67
67
  * box path keeps `VB_H` byte-for-byte).
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * constants.ts — the marking-space geometry constants (the colocation home).
3
3
  * ─────────────────────────────────────────────────────────────────────────────
4
- * The hand-mark family's named geometry constants live here (the AY.W-COLOCATE
4
+ * The hand-mark family's named geometry constants live here (the
5
5
  * convention's `constants.ts` home). geometry.ts + the SFC re-read them by name.
6
6
  */
7
7
  /** Marking-space width (the 0..100 × 0..40 viewBox; `preserveAspectRatio="none"`). */
@@ -17,7 +17,7 @@ export declare const VB_H = 40;
17
17
  */
18
18
  export declare const UNDERLINE_GAP = 0.06;
19
19
  /**
20
- * The highlighter LOW-SEAT band (BA.W-HANDMARK C-1(a)). A real highlighter rides
20
+ * The highlighter LOW-SEAT band ( C-1(a)). A real highlighter rides
21
21
  * the low two-thirds of the line — the ink sits on the baseline and rises to
22
22
  * ~x-height — NOT the box vertical center the fork shipped. The band centerline
23
23
  * seats at `baselineFrac − HIGHLIGHT_RISE` (raised off the baseline by ~half a
@@ -31,20 +31,20 @@ export declare const HIGHLIGHT_FALLBACK_FRAC = 0.66;
31
31
  * The boil voice — φ-incommensurate fractal value-noise (the masthead morphology).
32
32
  * ─────────────────────────────────────────────────────────────────────────────
33
33
  * The boil centerline is a 1-D fractal value-noise displacement off the HOUSE
34
- * `mulberry32`, NOT a seeded sinusoid. A sinusoid (the prior body) self-correlates
34
+ * `mulberry32`, NOT a seeded sinusoid. A sinusoid self-correlates
35
35
  * into a near-period — it reads as a spell-check squiggle and a clean sine fails any
36
36
  * honest non-periodicity discriminator (a sine's extrema are near-uniformly spaced).
37
37
  * The value-noise sums octaves at φ-stepped frequencies (mutually irrational → the
38
38
  * sum NEVER closes into a period); each octave's amplitude decays by 1/φ. The result
39
39
  * is a hump-to-hump-IRREGULAR hand line whose inter-extremum spacing-CV is the honest
40
40
  * teeth (measured: ~0.41 at the paint's segment count, ~0.71 resampled at RES=64,
41
- * over 400 seeds — vs the prior sinusoid's ~0.14; a clean separation either side of a
41
+ * over 400 seeds — vs a sinusoid's ~0.14; a clean separation either side of a
42
42
  * 0.30 floor). The amplitude is SCALE-RELATIVE (a fraction of the rendered span), so
43
43
  * a long word and a short word wobble in proportion. FILTER-FREE — the wander lives
44
44
  * in the control points + the hull width, never a feTurbulence.
45
45
  *
46
- * Constants pinned against a 400-seed spacing-CV spike (NOT the seed-overfit autocorr
47
- * peak the prior gate keyed — autocorr cannot separate smooth low-frequency value-
46
+ * Constants pinned against a 400-seed spacing-CV spike (NOT a seed-overfit autocorr
47
+ * peak — autocorr cannot separate smooth low-frequency value-
48
48
  * noise from a sinusoid at any resolution).
49
49
  */
50
50
  /** φ — the per-octave frequency step (mutually irrational → never periodic). */
@@ -58,10 +58,10 @@ export declare const NOISE_AMP_FRAC = 0.05;
58
58
  /** endpoint-only cosine taper width (the ends settle to baseline; the BODY stays irregular). */
59
59
  export declare const NOISE_EDGE = 0.12;
60
60
  /**
61
- * The AMPLITUDE-KNOB reference wobble (BG.W-HANDMARK-PERFECT (c)). The natural-underline
62
- * excursion is `span × NOISE_AMP_FRAC × f(wobble)` where `f(wobble) = wobble / NOISE_WOBBLE_REF`
63
- * — repurposing the existing Brush `wobble` scalar to drive the centerline amplitude,
64
- * decoupling excursion from stroke `weight` (the atlas's published `amplitude` ask, no 13th
61
+ * The AMPLITUDE-KNOB reference wobble ( (c)). The natural-underline
62
+ * excursion is `span × NOISE_AMP_FRAC × f(wobble)` where `f(wobble) = wobble, NOISE_WOBBLE_REF`
63
+ * repurposing the existing Brush `wobble` scalar to drive the centerline amplitude,
64
+ * decoupling excursion from stroke `weight` (the published `amplitude` contract, no 13th
65
65
  * scalar). Pinned to the shipped `boil` brush's wobble (1.4) so `f(1.4) = 1` ⇒ the default
66
66
  * boil render is BYTE-IDENTICAL; a consumer lifts excursion by raising `wobble` (or the
67
67
  * explicit `amplitude` prop, which wins). A lower-wobble brush wobbles proportionally less.