@mkbabb/glass-ui 5.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 (1048) hide show
  1. package/README.md +61 -56
  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-BEq0MgtH.js +311 -0
  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 +858 -793
  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.d.ts +0 -4
  15. package/dist/blob-config.js +1 -1
  16. package/dist/blob.js +490 -424
  17. package/dist/button-Bu9F4uU6.js +98 -0
  18. package/dist/button.js +2 -2
  19. package/dist/canvas.js +1 -1
  20. package/dist/card-Bk96VI2R.js +234 -0
  21. package/dist/card.js +2 -2
  22. package/dist/carousel.d.ts +1 -2
  23. package/dist/carousel.js +109 -238
  24. package/dist/chip-DFZQr6rV.js +129 -0
  25. package/dist/chip.d.ts +0 -9
  26. package/dist/chip.js +2 -81
  27. package/dist/{class-names-5jotTFzp.js → class-names-Cpy5eaBk.js} +11 -4
  28. package/dist/collapsible-BAP95XTt.js +154 -0
  29. package/dist/collapsible.js +1 -1
  30. package/dist/color.js +83 -3
  31. package/dist/{procedural-color.wgsl-ByduxnzV.js → color.wgsl-Ct5o9dpf.js} +410 -3
  32. package/dist/command-SFqDQ65h.js +320 -0
  33. package/dist/command.js +1 -1
  34. package/dist/completion-seal.js +72 -63
  35. package/dist/components/_shared/FeedbackMark.vue.d.ts +11 -0
  36. package/dist/components/_shared/axes.d.ts +9 -3
  37. package/dist/components/_shared/class-names.d.ts +9 -8
  38. package/dist/components/_shared/control-size.d.ts +2 -0
  39. package/dist/components/_shared/disclosure-context.d.ts +7 -0
  40. package/dist/components/_shared/disclosure.css +1 -0
  41. package/dist/components/_shared/feedback.d.ts +7 -0
  42. package/dist/components/_shared/field-control.css +1 -0
  43. package/dist/components/_shared/field-surfaces.css +1 -0
  44. package/dist/components/_shared/fieldControl.d.ts +13 -0
  45. package/dist/components/_shared/floating.d.ts +14 -0
  46. package/dist/components/_shared/index.d.ts +2 -6
  47. package/dist/components/_shared/interaction.d.ts +23 -0
  48. package/dist/components/_shared/menu.css +1 -0
  49. package/dist/components/_shared/menuRowClass.d.ts +2 -0
  50. package/dist/components/_shared/primitive.d.ts +19 -0
  51. package/dist/components/_shared/resolveSurfaceClass.d.ts +3 -0
  52. package/dist/components/_shared/selection.d.ts +7 -0
  53. package/dist/components/_shared/useMotionAxis.d.ts +5 -4
  54. package/dist/components/_shared/valueDomain.d.ts +6 -0
  55. package/dist/components/accordion/Accordion.vue.d.ts +41 -16
  56. package/dist/components/accordion/AccordionContent.vue.d.ts +11 -9
  57. package/dist/components/accordion/AccordionItem.vue.d.ts +12 -9
  58. package/dist/components/accordion/AccordionTrigger.vue.d.ts +8 -11
  59. package/dist/components/accordion/index.d.ts +4 -4
  60. package/dist/components/alert/Alert.vue.d.ts +9 -5
  61. package/dist/components/alert/index.d.ts +17 -8
  62. package/dist/components/animated-digit/AnimatedDigit.vue.d.ts +3 -4
  63. package/dist/components/aurora/Aurora.vue.d.ts +44 -43
  64. package/dist/components/aurora/composables/atoms-fields.d.ts +13 -2
  65. package/dist/components/aurora/composables/atoms.d.ts +52 -50
  66. package/dist/components/aurora/composables/auroraFallbackGround.d.ts +13 -13
  67. package/dist/components/aurora/composables/auroraImageSource.d.ts +4 -5
  68. package/dist/components/aurora/composables/color.d.ts +15 -20
  69. package/dist/components/aurora/composables/frameLoop.d.ts +14 -11
  70. package/dist/components/aurora/composables/glSetup.d.ts +19 -2
  71. package/dist/components/aurora/composables/runtime.d.ts +58 -60
  72. package/dist/components/aurora/composables/uniformBridge.d.ts +9 -14
  73. package/dist/components/aurora/composables/uniformBridgeWGPU.d.ts +21 -22
  74. package/dist/components/aurora/composables/uniformBridgeWGPUImage.d.ts +13 -13
  75. package/dist/components/aurora/composables/useAurora.d.ts +21 -30
  76. package/dist/components/aurora/composables/wgpuSetup.d.ts +10 -8
  77. package/dist/components/aurora/constants/budget.d.ts +12 -25
  78. package/dist/components/aurora/constants/presets.d.ts +47 -58
  79. package/dist/components/aurora/constants/renderMode.d.ts +21 -36
  80. package/dist/components/aurora/constants/shaders/aurora-image.wgsl.d.ts +1 -1
  81. package/dist/components/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -1
  82. package/dist/components/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  83. package/dist/components/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  84. package/dist/components/aurora/constants/shaders/composition.glsl.d.ts +1 -1
  85. package/dist/components/aurora/constants/shaders/flow.glsl.d.ts +1 -1
  86. package/dist/components/aurora/constants/shaders/metal-medium.glsl.d.ts +2 -2
  87. package/dist/components/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -1
  88. package/dist/components/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -1
  89. package/dist/components/aurora/index.d.ts +2 -1
  90. package/dist/components/avatar/Avatar.vue.d.ts +72 -11
  91. package/dist/components/avatar/AvatarFallback.vue.d.ts +1 -2
  92. package/dist/components/avatar/AvatarImage.vue.d.ts +12 -6
  93. package/dist/components/avatar/index.d.ts +3 -9
  94. package/dist/components/avatar/styles.css +1 -0
  95. package/dist/components/badge/Badge.vue.d.ts +2 -9
  96. package/dist/components/badge/index.d.ts +32 -9
  97. package/dist/components/blob/Blob.vue.d.ts +16 -12
  98. package/dist/components/blob/composables/blobSimulation.d.ts +80 -0
  99. package/dist/components/blob/composables/buildMetaballProgram.d.ts +1 -1
  100. package/dist/components/blob/composables/resolveBlobSurface.d.ts +6 -0
  101. package/dist/components/blob/composables/satelliteKinematics.d.ts +3 -3
  102. package/dist/components/blob/composables/uniformBridgeWGPU.d.ts +1 -1
  103. package/dist/components/blob/composables/uploadBlobUniforms.d.ts +4 -31
  104. package/dist/components/blob/composables/useBlobMood.d.ts +5 -5
  105. package/dist/components/blob/composables/useBlobPointer.d.ts +11 -12
  106. package/dist/components/blob/composables/useMetaballRenderer.d.ts +29 -24
  107. package/dist/components/blob/composables/wgpuSetup.d.ts +7 -5
  108. package/dist/components/blob/config.d.ts +1 -1
  109. package/dist/components/blob/index.d.ts +2 -2
  110. package/dist/components/blob/presets.d.ts +2 -2
  111. package/dist/components/blob/shaders/metaball-palette.wgsl.d.ts +1 -1
  112. package/dist/components/blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  113. package/dist/components/blob/shaders/metaball.wgsl.d.ts +1 -1
  114. package/dist/components/blob/shaders/sdf-body.glsl.d.ts +1 -1
  115. package/dist/components/blob/shaders/watercolor-edges.glsl.d.ts +1 -1
  116. package/dist/components/blob/types.d.ts +28 -60
  117. package/dist/components/button/Button.vue.d.ts +27 -19
  118. package/dist/components/button/index.d.ts +1 -9
  119. package/dist/components/button/styles.css +1 -0
  120. package/dist/components/card/Card.vue.d.ts +20 -155
  121. package/dist/components/card/CardAction.vue.d.ts +0 -7
  122. package/dist/components/card/CardContent.vue.d.ts +2 -2
  123. package/dist/components/card/CardDescription.vue.d.ts +2 -2
  124. package/dist/components/card/CardFooter.vue.d.ts +2 -2
  125. package/dist/components/card/CardHeader.vue.d.ts +3 -42
  126. package/dist/components/card/CardTitle.vue.d.ts +6 -3
  127. package/dist/components/card/card-scroll.css +1 -0
  128. package/dist/components/card/index.d.ts +1 -3
  129. package/dist/components/card/styles.css +1 -0
  130. package/dist/components/carousel/Carousel.vue.d.ts +2 -2
  131. package/dist/components/carousel/index.d.ts +0 -3
  132. package/dist/components/carousel/interface.d.ts +2 -0
  133. package/dist/components/carousel/useCarousel.d.ts +2 -2
  134. package/dist/components/checkbox/Checkbox.vue.d.ts +17 -9
  135. package/dist/components/checkbox/index.d.ts +1 -1
  136. package/dist/components/checkbox/styles.css +1 -0
  137. package/dist/components/chip/Chip.vue.d.ts +12 -7
  138. package/dist/components/chip/chipVariants.d.ts +20 -43
  139. package/dist/components/chip/index.d.ts +1 -1
  140. package/dist/components/chip/types.d.ts +45 -30
  141. package/dist/components/collapsible/Collapsible.vue.d.ts +22 -9
  142. package/dist/components/collapsible/CollapsibleContent.vue.d.ts +11 -5
  143. package/dist/components/collapsible/CollapsibleTrigger.vue.d.ts +12 -9
  144. package/dist/components/collapsible/index.d.ts +3 -3
  145. package/dist/components/combobox/Combobox.vue.d.ts +10 -20
  146. package/dist/components/combobox/ComboboxAnchor.vue.d.ts +2 -6
  147. package/dist/components/combobox/ComboboxEmpty.vue.d.ts +2 -6
  148. package/dist/components/combobox/ComboboxGroup.vue.d.ts +2 -7
  149. package/dist/components/combobox/ComboboxInput.vue.d.ts +7 -12
  150. package/dist/components/combobox/ComboboxItem.vue.d.ts +7 -11
  151. package/dist/components/combobox/ComboboxItemIndicator.vue.d.ts +2 -6
  152. package/dist/components/combobox/ComboboxList.vue.d.ts +14 -17
  153. package/dist/components/combobox/ComboboxTrigger.vue.d.ts +16 -0
  154. package/dist/components/combobox/index.d.ts +2 -3
  155. package/dist/components/combobox/types.d.ts +87 -0
  156. package/dist/components/command/Command.vue.d.ts +9 -23
  157. package/dist/components/command/CommandDialog.vue.d.ts +8 -10
  158. package/dist/components/command/CommandEmpty.vue.d.ts +2 -6
  159. package/dist/components/command/CommandGroup.vue.d.ts +2 -7
  160. package/dist/components/command/CommandInput.vue.d.ts +6 -7
  161. package/dist/components/command/CommandItem.vue.d.ts +7 -11
  162. package/dist/components/command/CommandList.vue.d.ts +12 -19
  163. package/dist/components/command/CommandSeparator.vue.d.ts +2 -6
  164. package/dist/components/command/CommandShortcut.vue.d.ts +2 -2
  165. package/dist/components/command/dialogContext.d.ts +6 -0
  166. package/dist/components/command/index.d.ts +10 -10
  167. package/dist/components/command/styles.css +1 -0
  168. package/dist/components/command/types.d.ts +27 -0
  169. package/dist/components/completion-seal/CompletionSeal.vue.d.ts +2 -2
  170. package/dist/components/completion-seal/constants.d.ts +2 -2
  171. package/dist/components/completion-seal/styles.css +1 -0
  172. package/dist/components/configurator/Configurator.vue.d.ts +6 -6
  173. package/dist/components/configurator/ConfiguratorLayer.vue.d.ts +14 -18
  174. package/dist/components/configurator/ConfiguratorRow.vue.d.ts +14 -17
  175. package/dist/components/configurator/size.d.ts +5 -7
  176. package/dist/components/configurator/styles.css +1 -0
  177. package/dist/components/constellation/Constellation.vue.d.ts +7 -2
  178. package/dist/components/constellation/composables/createConstellationField.d.ts +2 -2
  179. package/dist/components/constellation/composables/useConstellation.d.ts +3 -16
  180. package/dist/components/constellation/constants.d.ts +14 -24
  181. package/dist/components/constellation/constellationField.d.ts +8 -11
  182. package/dist/components/constellation/constellationInteraction.d.ts +9 -9
  183. package/dist/components/constellation/constellationRender.d.ts +11 -21
  184. package/dist/components/constellation/constellationTypes.d.ts +64 -62
  185. package/dist/components/constellation/constellationWell.d.ts +2 -2
  186. package/dist/components/constellation/index.d.ts +1 -1
  187. package/dist/components/dark-mode-toggle/DarkModeToggle.vue.d.ts +12 -0
  188. package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -0
  189. package/dist/components/dark-mode-toggle/index.d.ts +2 -0
  190. package/dist/components/data-table/DataTable.vue.d.ts +12 -48
  191. package/dist/components/data-table/composables/useDataTableRowIdentity.d.ts +5 -23
  192. package/dist/components/data-table/index.d.ts +1 -2
  193. package/dist/components/data-table/styles.css +1 -0
  194. package/dist/components/data-table/types.d.ts +36 -13
  195. package/dist/components/deck/constants.d.ts +0 -10
  196. package/dist/components/deck/index.d.ts +0 -2
  197. package/dist/components/dialog/Dialog.vue.d.ts +8 -3
  198. package/dist/components/dialog/DialogClose.vue.d.ts +3 -1
  199. package/dist/components/dialog/DialogContent.vue.d.ts +28 -85
  200. package/dist/components/dialog/DialogDescription.vue.d.ts +5 -6
  201. package/dist/components/dialog/DialogTitle.vue.d.ts +5 -6
  202. package/dist/components/dialog/DialogTrigger.vue.d.ts +3 -1
  203. package/dist/components/dialog/ModalOverlay.vue.d.ts +45 -0
  204. package/dist/components/dialog/dialogStageContext.d.ts +7 -0
  205. package/dist/components/dialog/index.d.ts +8 -9
  206. package/dist/components/dialog/placement.css +1 -0
  207. package/dist/components/dialog/sheet-motion.d.ts +17 -0
  208. package/dist/components/dock/DockControl.vue.d.ts +13 -16
  209. package/dist/components/dock/DockCrossfade.vue.d.ts +4 -8
  210. package/dist/components/dock/DockLayer.vue.d.ts +2 -3
  211. package/dist/components/dock/DockLayerGroup.vue.d.ts +6 -6
  212. package/dist/components/dock/DockSeparator.vue.d.ts +8 -8
  213. package/dist/components/dock/GlassDock.vue.d.ts +1 -0
  214. package/dist/components/dock/composables/dockContext.d.ts +4 -14
  215. package/dist/components/dock/composables/dockCrossfadeContext.d.ts +6 -7
  216. package/dist/components/dock/composables/dockMorphMeasure.d.ts +6 -75
  217. package/dist/components/dock/composables/index.d.ts +1 -1
  218. package/dist/components/dock/composables/useDockClickIntegrity.d.ts +5 -1
  219. package/dist/components/dock/composables/useDockHold.d.ts +4 -5
  220. package/dist/components/dock/composables/useDockMorph.d.ts +26 -0
  221. package/dist/components/dock/composables/useDockOverflowFit.d.ts +7 -9
  222. package/dist/components/dock/composables/useDockSearch.d.ts +8 -8
  223. package/dist/components/dock/composables/useDockShellProps.d.ts +53 -43
  224. package/dist/components/dock/composables/useDockSpring.d.ts +7 -11
  225. package/dist/components/dock/composables/useDockState.d.ts +14 -5
  226. package/dist/components/dock/composables/useDockTouchGate.d.ts +14 -23
  227. package/dist/components/dock/constants.d.ts +5 -90
  228. package/dist/components/dock/index.d.ts +2 -6
  229. package/dist/components/dock/styles/adaptive-legibility.css +1 -0
  230. package/dist/components/dock/styles/controls/icon-button.css +1 -0
  231. package/dist/{styles/dock-controls → components/dock/styles/controls}/touch-floor.css +1 -1
  232. package/dist/components/dock/styles/controls.css +1 -0
  233. package/dist/components/dock/styles/crossfade.css +1 -0
  234. package/dist/{styles/dock → components/dock/styles}/density.css +1 -1
  235. package/dist/components/dock/styles/dock.css +1 -0
  236. package/dist/components/dock/styles/index.css +1 -0
  237. package/dist/components/dock/styles/layer-group.css +1 -0
  238. package/dist/components/dock/styles/layers.css +1 -0
  239. package/dist/components/dock/styles/morph.css +1 -0
  240. package/dist/components/dock/styles/overflow.css +1 -0
  241. package/dist/components/dock/styles/shape.css +1 -0
  242. package/dist/components/dock/styles/shell.css +1 -0
  243. package/dist/components/drawer/Drawer.vue.d.ts +20 -23
  244. package/dist/components/drawer/DrawerContent.vue.d.ts +15 -16
  245. package/dist/components/drawer/DrawerDescription.vue.d.ts +5 -6
  246. package/dist/components/drawer/DrawerOverlay.vue.d.ts +6 -6
  247. package/dist/components/drawer/DrawerTitle.vue.d.ts +5 -6
  248. package/dist/components/drawer/composables/drawerSnapContext.d.ts +9 -1
  249. package/dist/components/drawer/composables/useDrawerSnap.d.ts +3 -1
  250. package/dist/components/drawer/constants.d.ts +10 -28
  251. package/dist/components/drawer/index.d.ts +13 -15
  252. package/dist/components/drawer/styles.css +1 -0
  253. package/dist/components/dropdown-menu/DropdownMenu.vue.d.ts +43 -16
  254. package/dist/components/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +22 -13
  255. package/dist/components/dropdown-menu/DropdownMenuContent.vue.d.ts +28 -19
  256. package/dist/components/dropdown-menu/DropdownMenuGroup.vue.d.ts +6 -4
  257. package/dist/components/dropdown-menu/DropdownMenuItem.vue.d.ts +21 -9
  258. package/dist/components/dropdown-menu/DropdownMenuLabel.vue.d.ts +9 -9
  259. package/dist/components/dropdown-menu/DropdownMenuRadioGroup.vue.d.ts +13 -6
  260. package/dist/components/dropdown-menu/DropdownMenuRadioItem.vue.d.ts +18 -11
  261. package/dist/components/dropdown-menu/DropdownMenuSeparator.vue.d.ts +5 -6
  262. package/dist/components/dropdown-menu/DropdownMenuShortcut.vue.d.ts +7 -8
  263. package/dist/components/dropdown-menu/DropdownMenuSub.vue.d.ts +15 -7
  264. package/dist/components/dropdown-menu/DropdownMenuSubContent.vue.d.ts +24 -17
  265. package/dist/components/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +11 -9
  266. package/dist/components/dropdown-menu/DropdownMenuTrigger.vue.d.ts +18 -5
  267. package/dist/components/dropdown-menu/index.d.ts +15 -16
  268. package/dist/components/dropdown-menu/styles.css +1 -0
  269. package/dist/components/dropdown-menu/useMenuTrigger.d.ts +2 -9
  270. package/dist/components/easing/EasingConfigurator.vue.d.ts +1 -1
  271. package/dist/components/easing/EasingPicker.vue.d.ts +2 -2
  272. package/dist/components/easing/composables/useEasingPicker.d.ts +8 -7
  273. package/dist/components/easing/constants.d.ts +3 -1
  274. package/dist/components/expandable-container/ExpandableContainer.vue.d.ts +1 -25
  275. package/dist/components/expandable-container/styles.css +1 -0
  276. package/dist/components/fading-scroll/FadingScroll.vue.d.ts +4 -0
  277. package/dist/components/fading-scroll/composables/useFadingScroll.d.ts +7 -3
  278. package/dist/components/fading-scroll/constants.d.ts +1 -2
  279. package/dist/components/fourier-field/FourierField.vue.d.ts +10 -6
  280. package/dist/components/fourier-field/composables/fourierFieldGLSetup.d.ts +1 -1
  281. package/dist/components/fourier-field/composables/fourierFieldWGPUSetup.d.ts +1 -1
  282. package/dist/components/fourier-field/composables/useFourierField.d.ts +6 -5
  283. package/dist/components/fourier-field/constants.d.ts +10 -10
  284. package/dist/components/fourier-field/index.d.ts +3 -3
  285. package/dist/components/fourier-field/presets.d.ts +3 -3
  286. package/dist/components/fourier-field/shaders/fourier-field.glsl.d.ts +2 -2
  287. package/dist/components/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
  288. package/dist/components/handmark/HandMark.vue.d.ts +2 -2
  289. package/dist/components/handmark/brush.d.ts +1 -1
  290. package/dist/components/handmark/composables/useHandMark.d.ts +4 -4
  291. package/dist/components/handmark/constants.d.ts +10 -10
  292. package/dist/components/handmark/geometry.d.ts +9 -9
  293. package/dist/components/handmark/index.d.ts +11 -14
  294. package/dist/components/handmark/noise.d.ts +3 -3
  295. package/dist/components/handmark/types.d.ts +2 -2
  296. package/dist/components/header-ribbon/HeaderRibbon.vue.d.ts +3 -21
  297. package/dist/components/header-ribbon/styles.css +1 -0
  298. package/dist/components/header-ribbon/types.d.ts +5 -2
  299. package/dist/components/index.d.ts +0 -4
  300. package/dist/components/infinite-scroll/composables/types.d.ts +1 -1
  301. package/dist/components/infinite-scroll/index.d.ts +1 -0
  302. package/dist/components/input/Input.vue.d.ts +10 -35
  303. package/dist/components/input/index.d.ts +2 -1
  304. package/dist/components/input/types.d.ts +22 -0
  305. package/dist/components/instrument-chassis/InstrumentChassis.vue.d.ts +10 -84
  306. package/dist/components/instrument-chassis/index.d.ts +1 -2
  307. package/dist/components/instrument-chassis/styles.css +1 -0
  308. package/dist/components/instrument-chassis/types.d.ts +13 -0
  309. package/dist/components/label/Label.vue.d.ts +9 -14
  310. package/dist/components/label/index.d.ts +1 -1
  311. package/dist/components/labeled-field/LabeledField.vue.d.ts +11 -99
  312. package/dist/components/labeled-field/LabeledInput.vue.d.ts +5 -18
  313. package/dist/components/labeled-field/LabeledSelect.vue.d.ts +12 -18
  314. package/dist/components/labeled-field/LabeledSlider.vue.d.ts +12 -18
  315. package/dist/components/labeled-field/LabeledSwitch.vue.d.ts +14 -17
  316. package/dist/components/labeled-field/index.d.ts +1 -0
  317. package/dist/components/labeled-field/types.d.ts +50 -0
  318. package/dist/components/liquid-grid/LiquidGrid.vue.d.ts +4 -0
  319. package/dist/components/liquid-grid/composables/liquidGrid.d.ts +5 -5
  320. package/dist/components/liquid-grid/composables/useLiquidGrid.d.ts +2 -1
  321. package/dist/components/liquid-grid/constants.d.ts +6 -7
  322. package/dist/components/liquid-grid/shaders/liquid-grid.glsl.d.ts +1 -1
  323. package/dist/components/liquid-grid/shaders/liquid-grid.wgsl.d.ts +1 -1
  324. package/dist/components/metric/Metric.vue.d.ts +24 -0
  325. package/dist/components/metric/MetricCell.vue.d.ts +26 -0
  326. package/dist/components/metric/MetricRow.vue.d.ts +22 -0
  327. package/dist/components/metric/MetricStack.vue.d.ts +16 -0
  328. package/dist/components/metric/coalesce-metric.d.ts +7 -28
  329. package/dist/components/metric/index.d.ts +5 -0
  330. package/dist/components/metric/styles.css +1 -0
  331. package/dist/components/metric/types.d.ts +32 -0
  332. package/dist/components/number-field/NumberField.vue.d.ts +21 -9
  333. package/dist/components/number-field/NumberFieldContent.vue.d.ts +2 -2
  334. package/dist/components/number-field/NumberFieldDecrement.vue.d.ts +6 -6
  335. package/dist/components/number-field/NumberFieldIncrement.vue.d.ts +6 -6
  336. package/dist/components/number-field/NumberFieldInput.vue.d.ts +1 -6
  337. package/dist/components/number-field/context.d.ts +6 -0
  338. package/dist/components/number-field/index.d.ts +5 -5
  339. package/dist/components/number-field/styles.css +1 -0
  340. package/dist/components/pager-dots/PagerDots.vue.d.ts +1 -1
  341. package/dist/components/pager-dots/constants.d.ts +1 -2
  342. package/dist/components/pager-dots/index.d.ts +0 -2
  343. package/dist/components/paper-backdrop/PaperBackdrop.vue.d.ts +1 -14
  344. package/dist/components/paper-backdrop/index.d.ts +1 -1
  345. package/dist/components/popover/Popover.vue.d.ts +24 -36
  346. package/dist/components/popover/PopoverContent.vue.d.ts +23 -29
  347. package/dist/components/popover/PopoverTrigger.vue.d.ts +12 -7
  348. package/dist/components/popover/index.d.ts +3 -3
  349. package/dist/components/popover/popoverContext.d.ts +3 -4
  350. package/dist/components/progress/Progress.vue.d.ts +6 -49
  351. package/dist/components/progress/index.d.ts +1 -5
  352. package/dist/components/progress/types.d.ts +19 -0
  353. package/dist/components/pulse/Pulse.vue.d.ts +8 -47
  354. package/dist/components/pulse/index.d.ts +1 -0
  355. package/dist/components/radio-group/RadioGroup.vue.d.ts +27 -15
  356. package/dist/components/radio-group/RadioGroupItem.vue.d.ts +9 -6
  357. package/dist/components/radio-group/index.d.ts +2 -0
  358. package/dist/components/radio-group/styles.css +1 -0
  359. package/dist/components/scroll-progress-rim/styles.css +1 -0
  360. package/dist/components/search/FuzzySearch.vue.d.ts +4 -2
  361. package/dist/components/search/SearchBar.vue.d.ts +3 -3
  362. package/dist/components/search/searchVariants.d.ts +15 -17
  363. package/dist/components/select/Select.vue.d.ts +25 -14
  364. package/dist/components/select/SelectContent.vue.d.ts +26 -29
  365. package/dist/components/select/SelectGroup.vue.d.ts +7 -11
  366. package/dist/components/select/SelectItem.vue.d.ts +24 -13
  367. package/dist/components/select/SelectLabel.vue.d.ts +7 -11
  368. package/dist/components/select/SelectScrollDownButton.vue.d.ts +3 -4
  369. package/dist/components/select/SelectScrollUpButton.vue.d.ts +3 -4
  370. package/dist/components/select/SelectSeparator.vue.d.ts +5 -6
  371. package/dist/components/select/SelectTrigger.vue.d.ts +15 -41
  372. package/dist/components/select/SelectValue.vue.d.ts +13 -7
  373. package/dist/components/select/index.d.ts +16 -10
  374. package/dist/components/separator/Separator.vue.d.ts +11 -6
  375. package/dist/components/separator/index.d.ts +1 -1
  376. package/dist/components/skeleton/Skeleton.vue.d.ts +3 -31
  377. package/dist/components/slider/Slider.vue.d.ts +10 -35
  378. package/dist/components/slider/index.d.ts +1 -45
  379. package/dist/components/slider/types.d.ts +25 -0
  380. package/dist/components/sortable-list/SortableList.vue.d.ts +1 -1
  381. package/dist/components/sortable-list/composables/ghostRenderer.d.ts +1 -1
  382. package/dist/components/sortable-list/composables/touchGate.d.ts +1 -1
  383. package/dist/components/sortable-list/composables/transitionTiming.d.ts +1 -1
  384. package/dist/components/status-dot/StatusDot.vue.d.ts +7 -10
  385. package/dist/components/status-dot/index.d.ts +1 -0
  386. package/dist/components/surface/Surface.vue.d.ts +13 -21
  387. package/dist/components/surface/index.d.ts +2 -2
  388. package/dist/components/switch/Switch.vue.d.ts +20 -11
  389. package/dist/components/switch/index.d.ts +2 -1
  390. package/dist/components/switch/styles.css +1 -0
  391. package/dist/components/table/Table.vue.d.ts +5 -1
  392. package/dist/components/tabs/SegmentedTabs.vue.d.ts +31 -13
  393. package/dist/components/tabs/composables/useTabDragMorph.d.ts +6 -6
  394. package/dist/components/tabs/composables/useTabResponsive.d.ts +5 -6
  395. package/dist/components/tabs/composables/useTabRovingFocus.d.ts +16 -16
  396. package/dist/components/tabs/constants.d.ts +1 -1
  397. package/dist/components/tabs/index.d.ts +1 -1
  398. package/dist/components/tabs/styles/drag.css +1 -0
  399. package/dist/components/tabs/styles/segmented.css +1 -0
  400. package/dist/components/tags-input/TagsInput.vue.d.ts +28 -15
  401. package/dist/components/tags-input/TagsInputInput.vue.d.ts +8 -6
  402. package/dist/components/tags-input/TagsInputItem.vue.d.ts +9 -8
  403. package/dist/components/tags-input/TagsInputItemDelete.vue.d.ts +5 -6
  404. package/dist/components/tags-input/TagsInputItemText.vue.d.ts +5 -6
  405. package/dist/components/tags-input/context.d.ts +5 -0
  406. package/dist/components/tags-input/index.d.ts +5 -5
  407. package/dist/components/tags-input/styles.css +1 -0
  408. package/dist/components/textarea/Textarea.vue.d.ts +10 -55
  409. package/dist/components/textarea/index.d.ts +2 -1
  410. package/dist/components/textarea/types.d.ts +22 -0
  411. package/dist/components/timeline/ContinuousMarkers.vue.d.ts +2 -4
  412. package/dist/components/timeline/ContinuousRail.vue.d.ts +3 -6
  413. package/dist/components/timeline/ContinuousTimeline.vue.d.ts +11 -12
  414. package/dist/components/timeline/GlassTimeline.vue.d.ts +9 -10
  415. package/dist/components/timeline/ScrubberTimeline.vue.d.ts +4 -4
  416. package/dist/components/timeline/SegmentedTimeline.vue.d.ts +2 -3
  417. package/dist/components/timeline/geometry.d.ts +3 -4
  418. package/dist/components/timeline/types.d.ts +3 -3
  419. package/dist/components/toast/Toast.vue.d.ts +38 -80
  420. package/dist/components/toast/ToastAction.vue.d.ts +5 -5
  421. package/dist/components/toast/ToastClose.vue.d.ts +4 -5
  422. package/dist/components/toast/ToastDescription.vue.d.ts +4 -5
  423. package/dist/components/toast/ToastTitle.vue.d.ts +4 -5
  424. package/dist/components/toast/Toaster.vue.d.ts +1 -1
  425. package/dist/components/toast/index.d.ts +8 -9
  426. package/dist/components/toast/use-toast.d.ts +20 -163
  427. package/dist/components/toggle-group/ToggleGroup.vue.d.ts +44 -22
  428. package/dist/components/toggle-group/ToggleGroupItem.vue.d.ts +11 -9
  429. package/dist/components/toggle-group/index.d.ts +3 -2
  430. package/dist/components/toggle-group/styles.css +1 -0
  431. package/dist/components/toggle-group/toggleGroupContext.d.ts +4 -15
  432. package/dist/components/tooltip/Tooltip.vue.d.ts +20 -7
  433. package/dist/components/tooltip/TooltipContent.vue.d.ts +20 -12
  434. package/dist/components/tooltip/TooltipProvider.vue.d.ts +12 -5
  435. package/dist/components/tooltip/TooltipTrigger.vue.d.ts +12 -5
  436. package/dist/components/tooltip/index.d.ts +4 -4
  437. package/dist/components/typewriter/TypewriterText.vue.d.ts +1 -4
  438. package/dist/components/typewriter/composables/useTypewriter.d.ts +1 -1
  439. package/dist/components/typewriter/utils/graphemes.d.ts +1 -0
  440. package/dist/components/typewriter/utils/timing.d.ts +0 -2
  441. package/dist/components/watercolor-dot/WatercolorDot.vue.d.ts +5 -18
  442. package/dist/components/watercolor-dot/useWatercolorBlob.d.ts +1 -4
  443. package/dist/composables/color/accent-tone-solve.d.ts +2 -5
  444. package/dist/composables/color/index.d.ts +31 -38
  445. package/dist/composables/color/useAccentTone.d.ts +0 -3
  446. package/dist/composables/color/value.d.ts +21 -0
  447. package/dist/composables/context/createContext.d.ts +2 -2
  448. package/dist/composables/dark/index.d.ts +1 -1
  449. package/dist/composables/dark/useGlobalDark.d.ts +7 -6
  450. package/dist/composables/dom/useBreakpoint.d.ts +2 -2
  451. package/dist/composables/dom/useClipboard.d.ts +28 -52
  452. package/dist/composables/dom/useDocumentVisibility.d.ts +3 -1
  453. package/dist/composables/dom/useIdleReady.d.ts +5 -6
  454. package/dist/composables/dom/useTokenColor.d.ts +2 -2
  455. package/dist/composables/dom/useUserInvalidAria.d.ts +2 -3
  456. package/dist/composables/dom/useViewportReady.d.ts +4 -4
  457. package/dist/composables/glass/backdropLuminanceSample.d.ts +7 -6
  458. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +7 -1
  459. package/dist/composables/glass/textureUpload.d.ts +8 -10
  460. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +42 -19
  461. package/dist/composables/glass/useSpecularPointer.d.ts +6 -6
  462. package/dist/composables/glass/useSpecularTracking.d.ts +12 -15
  463. package/dist/composables/glass/wave/waveField.d.ts +2 -2
  464. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -1
  465. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -1
  466. package/dist/composables/glass/webgl/backingSize.d.ts +5 -8
  467. package/dist/composables/glass/webgl/compile.d.ts +1 -1
  468. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +20 -20
  469. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -28
  470. package/dist/composables/glass/webgl/visibility.d.ts +3 -4
  471. package/dist/composables/glass/webgpu/rendererStatus.d.ts +13 -0
  472. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +13 -10
  473. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -1
  474. package/dist/composables/glass/webgpu/webgpuCanvasTypes.d.ts +14 -10
  475. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +15 -16
  476. package/dist/composables/motion/core/asElement.d.ts +2 -0
  477. package/dist/composables/motion/{constants.d.ts → core/constants.d.ts} +2 -3
  478. package/dist/composables/motion/core/index.d.ts +20 -23
  479. package/dist/composables/motion/core/useReducedMotion.d.ts +5 -0
  480. package/dist/composables/motion/core/useViewTransition.d.ts +44 -0
  481. package/dist/composables/motion/index.d.ts +14 -16
  482. package/dist/composables/motion/{useDockCtaReceive.d.ts → morph/useDockCtaReceive.d.ts} +57 -3
  483. package/dist/composables/motion/{useDragMorph.d.ts → morph/useDragMorph.d.ts} +7 -7
  484. package/dist/composables/motion/morph/useElementMorph.d.ts +50 -0
  485. package/dist/composables/motion/{useLeadTrail.d.ts → morph/useLeadTrail.d.ts} +6 -6
  486. package/dist/composables/motion/{useSelectionGroup.d.ts → morph/useSelectionGroup.d.ts} +7 -5
  487. package/dist/composables/motion/{useSelectionIndicator.d.ts → morph/useSelectionIndicator.d.ts} +9 -16
  488. package/dist/composables/motion/{useAnimatedNumber.d.ts → number/useAnimatedNumber.d.ts} +1 -6
  489. package/dist/composables/motion/{useCountup.d.ts → number/useCountup.d.ts} +1 -6
  490. package/dist/composables/motion/{useNumericTransition.d.ts → number/useNumericTransition.d.ts} +4 -2
  491. package/dist/composables/motion/{pointerFieldMappings.d.ts → pointer/pointerFieldMappings.d.ts} +7 -10
  492. package/dist/composables/motion/{usePointerVelocityField.d.ts → pointer/usePointerVelocityField.d.ts} +1 -1
  493. package/dist/composables/motion/{bloomUpField.d.ts → reveal/bloomUpField.d.ts} +1 -1
  494. package/dist/composables/motion/reveal/useBloomUp.d.ts +33 -0
  495. package/dist/composables/motion/{useLiquidReveal.d.ts → reveal/useLiquidReveal.d.ts} +5 -5
  496. package/dist/composables/motion/{useStagger.d.ts → reveal/useStagger.d.ts} +3 -3
  497. package/dist/composables/motion/reveal/useStaggerReveal.d.ts +28 -0
  498. package/dist/composables/motion/{useTextHighlight.d.ts → reveal/useTextHighlight.d.ts} +2 -1
  499. package/dist/composables/motion/{useScrollChrome.d.ts → scroll/useScrollChrome.d.ts} +2 -2
  500. package/dist/composables/motion/{useScrollProgress.d.ts → scroll/useScrollProgress.d.ts} +12 -2
  501. package/dist/composables/motion/{springPresets.d.ts → spring/springPresets.d.ts} +8 -7
  502. package/dist/composables/motion/spring/springProjection.d.ts +19 -0
  503. package/dist/composables/motion/{useLiquidFlex.d.ts → spring/useLiquidFlex.d.ts} +11 -12
  504. package/dist/composables/motion/{useLiquidPress.d.ts → spring/useLiquidPress.d.ts} +15 -7
  505. package/dist/composables/motion/{useSpring.d.ts → spring/useSpring.d.ts} +5 -2
  506. package/dist/composables/motion/{useSpringMount.d.ts → spring/useSpringMount.d.ts} +8 -1
  507. package/dist/composables/sidebar/types.d.ts +3 -3
  508. package/dist/configurator-M5OaIlJd.js +311 -0
  509. package/dist/configurator.js +2 -3
  510. package/dist/{constants-D8lSMkOz.js → constants-nBz23tJE.js} +1 -1
  511. package/dist/constellation.js +230 -565
  512. package/dist/createCanvasLifecycle-DbXRwjU_.js +214 -0
  513. package/dist/dark-mode-toggle.d.ts +1 -0
  514. package/dist/dark-mode-toggle.js +43 -0
  515. package/dist/dark-z_P5QwqI.js +70 -0
  516. package/dist/dark.d.ts +1 -2
  517. package/dist/dark.js +2 -20
  518. package/dist/data-table-BygKg6ZA.js +491 -0
  519. package/dist/data-table.js +2 -2
  520. package/dist/deck.js +12 -23
  521. package/dist/dialog-TNRDkcE4.js +385 -0
  522. package/dist/dialog.js +2 -3
  523. package/dist/dock.js +624 -908
  524. package/dist/dockContext-BUTlGRNJ.js +13 -0
  525. package/dist/dom.js +134 -7
  526. package/dist/drawer.js +291 -193
  527. package/dist/dropdown-menu-BlbnvMaZ.js +507 -0
  528. package/dist/dropdown-menu.js +3 -2
  529. package/dist/easing.d.ts +0 -9
  530. package/dist/easing.js +385 -222
  531. package/dist/expandable-container.js +107 -85
  532. package/dist/fading-scroll-DhxXIhm2.js +96 -0
  533. package/dist/fading-scroll.js +1 -1
  534. package/dist/field-control.css_vue_type_style_index_0_src_true_lang-CeLay9Tk.js +21 -0
  535. package/dist/floating-dB5TD88k.js +7 -0
  536. package/dist/{flow.glsl-CVqPSj8_.js → flow.wgsl-Cd2GUkPx.js} +2 -2
  537. package/dist/fonts/README.md +14 -18
  538. package/dist/forms.js +268 -204
  539. package/dist/fourier-field.js +298 -288
  540. package/dist/fourier-math.d.ts +0 -6
  541. package/dist/fourier-math.js +112 -2
  542. package/dist/glass-ui.css +1 -1
  543. package/dist/glass-ui.js +512 -437
  544. package/dist/handmark.d.ts +0 -2
  545. package/dist/handmark.js +84 -84
  546. package/dist/header-ribbon.js +37 -57
  547. package/dist/index.d.ts +9 -19
  548. package/dist/infinite-scroll.d.ts +0 -1
  549. package/dist/infinite-scroll.js +39 -34
  550. package/dist/instrument-chassis.js +54 -2
  551. package/dist/keyboard.js +104 -2
  552. package/dist/label-DnMqH7jr.js +55 -0
  553. package/dist/label.js +1 -1
  554. package/dist/labeled-field.js +295 -192
  555. package/dist/liquid-grid.js +199 -198
  556. package/dist/menuRowClass-Nh7CtMON.js +12 -0
  557. package/dist/metric.d.ts +1 -0
  558. package/dist/metric.js +192 -0
  559. package/dist/motion-core.js +73 -166
  560. package/dist/motion.js +111 -167
  561. package/dist/number-field-Boe09SvX.js +154 -0
  562. package/dist/number-field.js +1 -1
  563. package/dist/pager-dots.js +2 -2
  564. package/dist/paper-backdrop.js +23 -2
  565. package/dist/{pointerFieldMappings-4VtmkOWv.js → pointerFieldMappings-DP5tla5z.js} +4 -7
  566. package/dist/popover-BQGYXZyO.js +244 -0
  567. package/dist/popover.js +1 -1
  568. package/dist/{presets-B07HzyKd.js → presets-5myqNv59.js} +1 -1
  569. package/dist/primitive-B2t2jdqM.js +11 -0
  570. package/dist/progress-DClbhRAT.js +88 -0
  571. package/dist/progress.js +2 -2
  572. package/dist/pulse.js +29 -41
  573. package/dist/reactive.js +19 -3
  574. package/dist/rendererStatus-BxUlBLVy.js +40 -0
  575. package/dist/resolveCanvasColor-DS_6DBxA.js +82 -0
  576. package/dist/resolveSurfaceClass-DCZ4PZcy.js +6 -0
  577. package/dist/scroll-progress-rim.js +1 -1
  578. package/dist/{scrollReader-DzYqPQ6V.js → scrollReader-Brf5cQNo.js} +1 -1
  579. package/dist/search.js +287 -218
  580. package/dist/select-BcBAyLXA.js +336 -0
  581. package/dist/select.js +2 -4
  582. package/dist/selection-DqIULxRG.js +6 -0
  583. package/dist/separator-CgZInrX-.js +75 -0
  584. package/dist/separator.js +1 -1
  585. package/dist/sidebar.js +53 -42
  586. package/dist/slider-DzqeQmMu.js +162 -0
  587. package/dist/slider.js +2 -2
  588. package/dist/sortable-list.js +51 -50
  589. package/dist/springPresets-rCii5KqX.js +52 -0
  590. package/dist/status-dot.js +26 -43
  591. package/dist/styles/accessibility.css +1 -0
  592. package/dist/styles/animations.css +1 -1
  593. package/dist/styles/components.css +1 -1
  594. package/dist/styles/glass/a11y-fallback.css +1 -1
  595. package/dist/styles/glass/accent-tone.css +1 -1
  596. package/dist/styles/glass/control-surfaces.css +1 -1
  597. package/dist/styles/glass/defined.css +1 -1
  598. package/dist/styles/glass/glass-atom.css +1 -1
  599. package/dist/styles/glass/glass-capsule.css +1 -1
  600. package/dist/styles/glass/glass-chip.css +1 -1
  601. package/dist/styles/glass/ladder.css +1 -1
  602. package/dist/styles/glass/liquid-fill.css +1 -1
  603. package/dist/styles/glass/material-roles.css +1 -0
  604. package/dist/styles/glass/material.css +1 -1
  605. package/dist/styles/glass/reveal.css +1 -1
  606. package/dist/styles/glass/squircle.css +1 -1
  607. package/dist/styles/glass/surface-axis.css +1 -1
  608. package/dist/styles/glass/surfaces-pager.css +1 -1
  609. package/dist/styles/glass/surfaces.css +1 -1
  610. package/dist/styles/glass-refract.css +1 -1
  611. package/dist/styles/glass.css +1 -1
  612. package/dist/styles/index.css +1 -1
  613. package/dist/styles/paper.css +1 -1
  614. package/dist/styles/scroll-driven.css +1 -1
  615. package/dist/styles/theme/bridges.css +1 -1
  616. package/dist/styles/theme/radius.css +1 -1
  617. package/dist/styles/tokens/color-radius.css +1 -1
  618. package/dist/styles/tokens/dark-arm.css +1 -1
  619. package/dist/styles/tokens/glass-deep.css +1 -1
  620. package/dist/styles/tokens/glass-fx.css +1 -1
  621. package/dist/styles/tokens/glass.css +1 -1
  622. package/dist/styles/tokens/light-dark.css +1 -1
  623. package/dist/styles/tokens/manifest.d.ts +14 -0
  624. package/dist/styles/tokens/manifest.ts +56 -0
  625. package/dist/styles/tokens/motion-registers.css +1 -1
  626. package/dist/styles/tokens/offsets.css +1 -1
  627. package/dist/styles/tokens/property-regs-specular.css +1 -1
  628. package/dist/styles/tokens/property-regs.css +1 -1
  629. package/dist/styles/tokens/scale-paper.css +1 -1
  630. package/dist/styles/tokens/scheme-motion.css +1 -1
  631. package/dist/styles/tokens/scheme-spring.css +1 -1
  632. package/dist/styles/tokens/scroll-tokens.css +1 -1
  633. package/dist/styles/tokens/shadow.css +1 -1
  634. package/dist/styles/tokens/sizing-config.css +1 -1
  635. package/dist/styles/tokens/sizing.css +1 -1
  636. package/dist/styles/tokens.d.ts +48 -0
  637. package/dist/styles/tokens.ts +54 -0
  638. package/dist/styles/transitions.css +1 -1
  639. package/dist/styles/typography/scale.css +1 -1
  640. package/dist/styles/typography/semantic.css +1 -1
  641. package/dist/styles/typography/utilities.css +1 -1
  642. package/dist/styles/utilities/a11y-overrides.css +1 -1
  643. package/dist/styles/utilities/base-misc.css +1 -1
  644. package/dist/styles/utilities/base.css +1 -1
  645. package/dist/styles/utilities/btn.css +1 -1
  646. package/dist/styles/utilities/components.css +1 -1
  647. package/dist/styles/utilities/metal.css +1 -1
  648. package/dist/styles/utilities/responsive.css +1 -0
  649. package/dist/styles/utilities.css +1 -1
  650. package/dist/styles/view-transition.css +1 -1
  651. package/dist/{supportsCssTimeline-Ie4xJFbD.js → supportsCssTimeline-C2zyWpl8.js} +1 -1
  652. package/dist/surface.js +2 -3
  653. package/dist/switch-DZjQuFLa.js +54 -0
  654. package/dist/switch.js +1 -1
  655. package/dist/tabs.js +146 -168
  656. package/dist/timeline.js +86 -87
  657. package/dist/toast-CH5mnsYT.js +267 -0
  658. package/dist/toast.js +1 -1
  659. package/dist/toggle-group-O6jBo7AE.js +150 -0
  660. package/dist/toggle-group.js +1 -1
  661. package/dist/tokens.d.ts +1 -53
  662. package/dist/tokens.js +96 -5
  663. package/dist/tooltip-Drx5qnw_.js +148 -0
  664. package/dist/tooltip.js +1 -1
  665. package/dist/typewriter.js +233 -219
  666. package/dist/{useAccentTone-D25DxviG.js → useAccentTone-DyInfHXE.js} +2 -2
  667. package/dist/{useAnimatedNumber-2XC4aRB6.js → useAnimatedNumber-WPtMz0AN.js} +2 -2
  668. package/dist/useClipboard-D36OTaeT.js +53 -0
  669. package/dist/useDockCtaReceive-DkrOTM0q.js +146 -0
  670. package/dist/useDocumentVisibility-Dh_TGXsU.js +21 -0
  671. package/dist/useDragMorph-BogSV_nv.js +293 -0
  672. package/dist/{useIntersectionPause-Cmt5Tnv9.js → useIntersectionPause-B5mAU6XY.js} +15 -15
  673. package/dist/useLeadTrail-AW1-zZcd.js +74 -0
  674. package/dist/{useLiquidFlex-Ch4exNvN.js → useLiquidFlex-TJZmRqyY.js} +1 -1
  675. package/dist/useLiquidPress-BOxuDkKa.js +101 -0
  676. package/dist/useMotionAxis-D-rtIhca.js +19 -0
  677. package/dist/usePointerVelocityField-DsIf7yyq.js +121 -0
  678. package/dist/useRAFLoop-B3YlWK4M.js +98 -0
  679. package/dist/useReducedMotion-vCXA_vyM.js +27 -0
  680. package/dist/useRoutePointer-B8itM7Ka.js +53 -0
  681. package/dist/useScrollProgress-CSFYXIZT.js +43 -0
  682. package/dist/useScrollTrigger-BDdqptlc.js +87 -0
  683. package/dist/useSelectionGroup-B5XplBbo.js +132 -0
  684. package/dist/{useSpring-BBSKFx_0.js → useSpring-9u2_shxV.js} +2 -2
  685. package/dist/useSpringMount-uQ8QL9Ff.js +74 -0
  686. package/dist/useTabRovingFocus-YnWh-Ytr.js +169 -0
  687. package/dist/useTextHighlight-mfwNIC1f.js +112 -0
  688. package/dist/{useTouchGate-BlegwvwL.js → useTouchGate-B4mzQcHJ.js} +1 -1
  689. package/dist/vSpecular-DMJo8pfD.js +68 -0
  690. package/dist/value-DMhh2R94.js +33 -0
  691. package/dist/valueDomain-SbVzoHMH.js +13 -0
  692. package/dist/watercolor-dot.js +77 -101
  693. package/package.json +166 -242
  694. package/dist/CardAction-2uUvjMQK.js +0 -285
  695. package/dist/CollapsibleContent-DiHcB_HH.js +0 -63
  696. package/dist/CommandShortcut-fmdbsEJL.js +0 -302
  697. package/dist/ConfiguratorRow-BV6zPjTM.js +0 -151
  698. package/dist/DataTable-Bxya8nBn.js +0 -518
  699. package/dist/DialogContent-Bl4v10AC.js +0 -192
  700. package/dist/DialogFooter-C0v4Hz2F.js +0 -168
  701. package/dist/FadingScroll-BSRLqQCx.js +0 -76
  702. package/dist/FocusScope-BzKwhsBn.js +0 -23
  703. package/dist/IconChip-CwLmBJ_K.js +0 -57
  704. package/dist/IconTooltip-D9sbK-Mk.js +0 -25
  705. package/dist/Input-DKf-XwUM.js +0 -57
  706. package/dist/InstrumentChassis-Dss5Tjcm.js +0 -65
  707. package/dist/Label-C84TaQiw.js +0 -36
  708. package/dist/Notification-DQv2cOh9.js +0 -43
  709. package/dist/NumberFieldContent-BkE7xPS9.js +0 -140
  710. package/dist/PagerDots-BP6jh7z4.js +0 -279
  711. package/dist/PaperBackdrop-BYwE8_kg.js +0 -31
  712. package/dist/PopoverContent-DOtszFWK.js +0 -251
  713. package/dist/Progress-uWLyXE7J.js +0 -308
  714. package/dist/SelectGroup-BuEptUsa.js +0 -31
  715. package/dist/SelectScrollDownButton-CDtwaWkZ.js +0 -261
  716. package/dist/SelectSeparator-4QGephvr.js +0 -49
  717. package/dist/Separator-DqJ6PfOd.js +0 -44
  718. package/dist/Surface-BWRfwyn8.js +0 -59
  719. package/dist/Switch-BPBfhMU3.js +0 -49
  720. package/dist/Toaster-C_-WeU9W.js +0 -281
  721. package/dist/ToggleGroupItem-DNWx2aSW.js +0 -175
  722. package/dist/TooltipProvider-GtfYdSVf.js +0 -110
  723. package/dist/accent-tone-solve-CBw3L0cy.js +0 -20
  724. package/dist/badge-C0C-rTBu.js +0 -80
  725. package/dist/button-BXzhydVB.js +0 -187
  726. package/dist/coalesce-metric-B8o7zT9u.js +0 -13
  727. package/dist/color-Bp5jmv4Z.js +0 -86
  728. package/dist/color-swatch.d.ts +0 -1
  729. package/dist/color-swatch.js +0 -47
  730. package/dist/components/_shared/ModalOverlay.vue.d.ts +0 -90
  731. package/dist/components/_shared/menuItemVariants.d.ts +0 -51
  732. package/dist/components/_shared/useControlSize.d.ts +0 -46
  733. package/dist/components/_shared/useStalePropWarning.d.ts +0 -27
  734. package/dist/components/_shared/useSurfaceAxis.d.ts +0 -64
  735. package/dist/components/card/ScrollCard.vue.d.ts +0 -33
  736. package/dist/components/card/ScrollCardHeader.vue.d.ts +0 -17
  737. package/dist/components/carousel/CarouselNext.vue.d.ts +0 -21
  738. package/dist/components/carousel/CarouselPrevious.vue.d.ts +0 -21
  739. package/dist/components/carousel/GlassCarouselPager.vue.d.ts +0 -50
  740. package/dist/components/color-swatch/ColorSwatch.vue.d.ts +0 -22
  741. package/dist/components/color-swatch/index.d.ts +0 -1
  742. package/dist/components/combobox/ComboboxSeparator.vue.d.ts +0 -18
  743. package/dist/components/combobox/ComboboxViewport.vue.d.ts +0 -18
  744. package/dist/components/constellation/composables/constellationGLSetup.d.ts +0 -10
  745. package/dist/components/constellation/composables/constellationWGPUSetup.d.ts +0 -19
  746. package/dist/components/constellation/composables/uniformBridgeWGPU.d.ts +0 -66
  747. package/dist/components/constellation/shaders/constellation-lines.glsl.d.ts +0 -2
  748. package/dist/components/constellation/shaders/constellation-lines.wgsl.d.ts +0 -1
  749. package/dist/components/constellation/shaders/constellation-points.glsl.d.ts +0 -2
  750. package/dist/components/constellation/shaders/constellation-points.wgsl.d.ts +0 -1
  751. package/dist/components/controls/DarkModeToggle.vue.d.ts +0 -34
  752. package/dist/components/controls/index.d.ts +0 -1
  753. package/dist/components/data-table/DataTablePagination.vue.d.ts +0 -13
  754. package/dist/components/deck/composables/useDeckSpring.d.ts +0 -22
  755. package/dist/components/dialog/DialogScrollContent.vue.d.ts +0 -33
  756. package/dist/components/dock/DockSection.vue.d.ts +0 -69
  757. package/dist/components/dock/DockStack.vue.d.ts +0 -73
  758. package/dist/components/dock/composables/dockMorphContext.d.ts +0 -89
  759. package/dist/components/dock/composables/useDockFisheye.d.ts +0 -24
  760. package/dist/components/dock/composables/useDockPopover.d.ts +0 -68
  761. package/dist/components/focus-scope/FocusScope.vue.d.ts +0 -20
  762. package/dist/components/focus-scope/index.d.ts +0 -2
  763. package/dist/components/goo-filter/GooFilter.vue.d.ts +0 -22
  764. package/dist/components/goo-filter/index.d.ts +0 -1
  765. package/dist/components/icon-chip/IconChip.vue.d.ts +0 -4
  766. package/dist/components/icon-chip/index.d.ts +0 -2
  767. package/dist/components/icon-chip/types.d.ts +0 -92
  768. package/dist/components/icon-tooltip/IconTooltip.vue.d.ts +0 -16
  769. package/dist/components/icon-tooltip/index.d.ts +0 -1
  770. package/dist/components/instrument-chassis/ChassisDivider.vue.d.ts +0 -30
  771. package/dist/components/metric-badge/MetricBadge.vue.d.ts +0 -40
  772. package/dist/components/metric-badge/index.d.ts +0 -2
  773. package/dist/components/metric-cell/MetricCell.vue.d.ts +0 -108
  774. package/dist/components/metric-cell/index.d.ts +0 -2
  775. package/dist/components/metric-stack/MetricRow.vue.d.ts +0 -120
  776. package/dist/components/metric-stack/MetricStack.vue.d.ts +0 -92
  777. package/dist/components/metric-stack/index.d.ts +0 -4
  778. package/dist/components/notification/Notification.vue.d.ts +0 -16
  779. package/dist/components/notification/index.d.ts +0 -1
  780. package/dist/components/progress/ProgressDefault.vue.d.ts +0 -25
  781. package/dist/components/progress/ProgressGradient.vue.d.ts +0 -25
  782. package/dist/components/progress/ProgressLiquid.vue.d.ts +0 -21
  783. package/dist/components/progress/ProgressSectioned.vue.d.ts +0 -47
  784. package/dist/components/progress/useProgressGeometry.d.ts +0 -60
  785. package/dist/components/section/Section.vue.d.ts +0 -73
  786. package/dist/components/section/index.d.ts +0 -1
  787. package/dist/components/spa-view/SpaView.vue.d.ts +0 -50
  788. package/dist/components/spa-view/index.d.ts +0 -2
  789. package/dist/components/split-chars/SplitChars.vue.d.ts +0 -53
  790. package/dist/components/split-chars/index.d.ts +0 -1
  791. package/dist/components/stacked-icons/StackedIconGroup.vue.d.ts +0 -30
  792. package/dist/components/stacked-icons/index.d.ts +0 -2
  793. package/dist/components/stacked-icons/types.d.ts +0 -19
  794. package/dist/components/tabs/composables/useEyeglassLive.d.ts +0 -17
  795. package/dist/components/toggle/Toggle.vue.d.ts +0 -29
  796. package/dist/components/toggle/index.d.ts +0 -26
  797. package/dist/composables/glass/webgl/shaders/glass-refract.glsl.d.ts +0 -36
  798. package/dist/composables/motion/curves.d.ts +0 -48
  799. package/dist/composables/motion/gooBarbellGeometry.d.ts +0 -79
  800. package/dist/composables/motion/morphSignatures.d.ts +0 -88
  801. package/dist/composables/motion/suite.d.ts +0 -2
  802. package/dist/composables/motion/useBloomUp.d.ts +0 -97
  803. package/dist/composables/motion/useCharStagger.d.ts +0 -44
  804. package/dist/composables/motion/useElementMorph.d.ts +0 -99
  805. package/dist/composables/motion/useGooMorph.d.ts +0 -72
  806. package/dist/composables/motion/usePrioritizedTask.d.ts +0 -41
  807. package/dist/composables/motion/useStaggerReveal.d.ts +0 -52
  808. package/dist/composables/motion/useViewTransition.d.ts +0 -81
  809. package/dist/composables/virtual/index.d.ts +0 -4
  810. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +0 -72
  811. package/dist/composables/virtual/useWindowedStore.d.ts +0 -43
  812. package/dist/composables/virtual/virtualSectionLayout.d.ts +0 -103
  813. package/dist/controls.d.ts +0 -1
  814. package/dist/controls.js +0 -91
  815. package/dist/createCanvasLifecycle-DlrcvWbb.js +0 -209
  816. package/dist/dockContext-d-WpJN2Z.js +0 -13
  817. package/dist/dropdown-menu-DaGlVdp9.js +0 -421
  818. package/dist/focus-scope.d.ts +0 -1
  819. package/dist/focus-scope.js +0 -2
  820. package/dist/icon-chip.d.ts +0 -1
  821. package/dist/icon-chip.js +0 -2
  822. package/dist/icon-tooltip.d.ts +0 -1
  823. package/dist/icon-tooltip.js +0 -2
  824. package/dist/math-CIEcwsYi.js +0 -112
  825. package/dist/menuItemVariants-DbO-Fr74.js +0 -36
  826. package/dist/metric-badge.d.ts +0 -1
  827. package/dist/metric-badge.js +0 -79
  828. package/dist/metric-cell.d.ts +0 -1
  829. package/dist/metric-cell.js +0 -61
  830. package/dist/metric-stack.d.ts +0 -1
  831. package/dist/metric-stack.js +0 -113
  832. package/dist/motion-curves.d.ts +0 -21
  833. package/dist/motion-curves.js +0 -146
  834. package/dist/notification.d.ts +0 -1
  835. package/dist/notification.js +0 -2
  836. package/dist/resolveCanvasColor-B3L-akX0.js +0 -93
  837. package/dist/slider-Cxuj_W_H.js +0 -151
  838. package/dist/spa-view.d.ts +0 -1
  839. package/dist/spa-view.js +0 -46
  840. package/dist/springPresets-h5VKJQqG.js +0 -58
  841. package/dist/stacked-icons.d.ts +0 -1
  842. package/dist/stacked-icons.js +0 -98
  843. package/dist/styles/card-scroll.css +0 -1
  844. package/dist/styles/cards.css +0 -1
  845. package/dist/styles/completion-seal.css +0 -1
  846. package/dist/styles/configurator.css +0 -1
  847. package/dist/styles/dialog-placement.css +0 -1
  848. package/dist/styles/dock/adaptive-legibility.css +0 -1
  849. package/dist/styles/dock/crossfade.css +0 -1
  850. package/dist/styles/dock/dock.css +0 -1
  851. package/dist/styles/dock/fisheye.css +0 -1
  852. package/dist/styles/dock/layer-group.css +0 -1
  853. package/dist/styles/dock/layers.css +0 -1
  854. package/dist/styles/dock/morph.css +0 -1
  855. package/dist/styles/dock/overflow.css +0 -1
  856. package/dist/styles/dock/popover.css +0 -1
  857. package/dist/styles/dock/section.css +0 -1
  858. package/dist/styles/dock/shape.css +0 -1
  859. package/dist/styles/dock/shell.css +0 -1
  860. package/dist/styles/dock-controls/dark-mode-toggle.css +0 -1
  861. package/dist/styles/dock-controls/icon-button.css +0 -1
  862. package/dist/styles/dock-controls.css +0 -1
  863. package/dist/styles/dock.css +0 -1
  864. package/dist/styles/drawer.css +0 -1
  865. package/dist/styles/glass/progress-rail.css +0 -1
  866. package/dist/styles/icon-chip.css +0 -1
  867. package/dist/styles/instrument-chassis.css +0 -1
  868. package/dist/styles/menu.css +0 -1
  869. package/dist/styles/scroll-progress-rim.css +0 -1
  870. package/dist/styles/segmented-tabs.css +0 -1
  871. package/dist/styles/select.css +0 -1
  872. package/dist/styles/tabs/segmented-tabs-drag.css +0 -1
  873. package/dist/styles/utilities/animate.css +0 -0
  874. package/dist/useConfiguratorState-Dq35N_7t.js +0 -167
  875. package/dist/useControlSize-DJwe-7ZQ.js +0 -9
  876. package/dist/useDockCtaReceive-BgMmeINo.js +0 -161
  877. package/dist/useDocumentVisibility-CpJGUgcJ.js +0 -17
  878. package/dist/useDragMorph-65ihHePq.js +0 -93
  879. package/dist/useGlobalDark-DjKMEQE2.js +0 -53
  880. package/dist/useGooMorph-CU1pwuC6.js +0 -268
  881. package/dist/useGpuSubstrate-DcY584kE.js +0 -347
  882. package/dist/useInterval-ZATRi-1T.js +0 -18
  883. package/dist/useKeyboardShortcuts-ynVmNFo3.js +0 -104
  884. package/dist/useLeadTrail-DOH4XkL1.js +0 -74
  885. package/dist/useLiquidPress-BXNHydZh.js +0 -40
  886. package/dist/useMotionAxis-DCCXMC-i.js +0 -20
  887. package/dist/usePointerVelocityField-CwXyeW0Z.js +0 -122
  888. package/dist/useRAFLoop-CvOo_kgb.js +0 -109
  889. package/dist/useRoutePointer-DL7I0gY4.js +0 -52
  890. package/dist/useScrollProgress-C-yImzhU.js +0 -35
  891. package/dist/useSelectionGroup-Btpf24aY.js +0 -215
  892. package/dist/useSpringMount-CNvvgGiC.js +0 -71
  893. package/dist/useSpringPress-BypV_KO-.js +0 -36
  894. package/dist/useSurfaceAxis-DudiZVOR.js +0 -10
  895. package/dist/useTabRovingFocus-CG1H1k1J.js +0 -143
  896. package/dist/useTextHighlight-C46Le9u_.js +0 -72
  897. package/dist/useViewportReady-c0isoKL8.js +0 -191
  898. package/dist/vReveal-DUmiEkX_.js +0 -10
  899. package/dist/vSpecular-DlYN0UZy.js +0 -68
  900. package/src/fonts/README.md +0 -124
  901. package/src/fonts/fira-code/OFL.txt +0 -93
  902. package/src/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
  903. package/src/fonts/fira-code/fira-code-latin.woff2 +0 -0
  904. package/src/fonts/plus-jakarta-sans/OFL.txt +0 -93
  905. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
  906. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
  907. package/src/styles/animations.css +0 -468
  908. package/src/styles/card-scroll.css +0 -189
  909. package/src/styles/cards.css +0 -485
  910. package/src/styles/completion-seal.css +0 -205
  911. package/src/styles/configurator.css +0 -359
  912. package/src/styles/dialog-placement.css +0 -68
  913. package/src/styles/dock/adaptive-legibility.css +0 -119
  914. package/src/styles/dock/crossfade.css +0 -139
  915. package/src/styles/dock/cta-seat.css +0 -87
  916. package/src/styles/dock/density.css +0 -458
  917. package/src/styles/dock/dock.css +0 -199
  918. package/src/styles/dock/fisheye.css +0 -81
  919. package/src/styles/dock/layer-group.css +0 -329
  920. package/src/styles/dock/layers.css +0 -438
  921. package/src/styles/dock/morph.css +0 -455
  922. package/src/styles/dock/overflow.css +0 -332
  923. package/src/styles/dock/popover.css +0 -249
  924. package/src/styles/dock/search.css +0 -68
  925. package/src/styles/dock/section.css +0 -59
  926. package/src/styles/dock/shape.css +0 -188
  927. package/src/styles/dock/shell-regions.css +0 -73
  928. package/src/styles/dock/shell.css +0 -500
  929. package/src/styles/dock-controls/dark-mode-toggle.css +0 -123
  930. package/src/styles/dock-controls/icon-button.css +0 -221
  931. package/src/styles/dock-controls/tab-button.css +0 -143
  932. package/src/styles/dock-controls/touch-floor.css +0 -119
  933. package/src/styles/dock-controls/triggers.css +0 -157
  934. package/src/styles/dock-controls.css +0 -92
  935. package/src/styles/dock.css +0 -219
  936. package/src/styles/draw-in.css +0 -89
  937. package/src/styles/drawer.css +0 -434
  938. package/src/styles/feedback-tone.css +0 -104
  939. package/src/styles/fonts.css +0 -143
  940. package/src/styles/glass/a11y-fallback.css +0 -188
  941. package/src/styles/glass/accent-tone.css +0 -66
  942. package/src/styles/glass/control-surfaces.css +0 -171
  943. package/src/styles/glass/deep.css +0 -114
  944. package/src/styles/glass/defined.css +0 -88
  945. package/src/styles/glass/glass-atom.css +0 -247
  946. package/src/styles/glass/glass-capsule.css +0 -175
  947. package/src/styles/glass/glass-chip.css +0 -211
  948. package/src/styles/glass/grain-overlay.css +0 -79
  949. package/src/styles/glass/ladder-undershadow.css +0 -61
  950. package/src/styles/glass/ladder.css +0 -452
  951. package/src/styles/glass/liquid-enter.css +0 -240
  952. package/src/styles/glass/liquid-fill.css +0 -65
  953. package/src/styles/glass/material.css +0 -494
  954. package/src/styles/glass/progress-rail.css +0 -78
  955. package/src/styles/glass/reveal.css +0 -333
  956. package/src/styles/glass/rim.css +0 -122
  957. package/src/styles/glass/squircle.css +0 -58
  958. package/src/styles/glass/surface-axis.css +0 -136
  959. package/src/styles/glass/surfaces-pager.css +0 -79
  960. package/src/styles/glass/surfaces.css +0 -434
  961. package/src/styles/glass-refract.css +0 -112
  962. package/src/styles/glass-specular-track.css +0 -74
  963. package/src/styles/glass.css +0 -110
  964. package/src/styles/icon-chip.css +0 -256
  965. package/src/styles/index.css +0 -280
  966. package/src/styles/instrument-chassis.css +0 -449
  967. package/src/styles/menu.css +0 -187
  968. package/src/styles/paper.css +0 -187
  969. package/src/styles/scroll-choreography.css +0 -294
  970. package/src/styles/scroll-chrome.css +0 -123
  971. package/src/styles/scroll-driven.css +0 -123
  972. package/src/styles/scroll-progress-rim.css +0 -87
  973. package/src/styles/segmented-tabs.css +0 -424
  974. package/src/styles/select.css +0 -201
  975. package/src/styles/tabs/segmented-tabs-drag.css +0 -200
  976. package/src/styles/theme/bridges.css +0 -386
  977. package/src/styles/theme/dark.css +0 -7
  978. package/src/styles/theme/literals.css +0 -104
  979. package/src/styles/theme/radius.css +0 -148
  980. package/src/styles/theme.css +0 -33
  981. package/src/styles/tokens/color-radius.css +0 -308
  982. package/src/styles/tokens/dark-arm-glass.css +0 -55
  983. package/src/styles/tokens/dark-arm.css +0 -455
  984. package/src/styles/tokens/glass-deep.css +0 -126
  985. package/src/styles/tokens/glass-fx.css +0 -484
  986. package/src/styles/tokens/glass.css +0 -478
  987. package/src/styles/tokens/light-dark.css +0 -216
  988. package/src/styles/tokens/motion-registers.css +0 -93
  989. package/src/styles/tokens/offsets.css +0 -143
  990. package/src/styles/tokens/on-glass-fg.css +0 -39
  991. package/src/styles/tokens/property-regs-specular.css +0 -160
  992. package/src/styles/tokens/property-regs.css +0 -447
  993. package/src/styles/tokens/scale-paper.css +0 -496
  994. package/src/styles/tokens/scheme-motion.css +0 -422
  995. package/src/styles/tokens/scheme-spring.css +0 -292
  996. package/src/styles/tokens/scroll-tokens.css +0 -137
  997. package/src/styles/tokens/shadow.css +0 -232
  998. package/src/styles/tokens/sizing-config.css +0 -110
  999. package/src/styles/tokens/sizing.css +0 -505
  1000. package/src/styles/tokens.css +0 -68
  1001. package/src/styles/transitions.css +0 -228
  1002. package/src/styles/typography/scale.css +0 -163
  1003. package/src/styles/typography/semantic.css +0 -233
  1004. package/src/styles/typography/utilities.css +0 -197
  1005. package/src/styles/typography.css +0 -46
  1006. package/src/styles/utilities/a11y-overrides.css +0 -184
  1007. package/src/styles/utilities/animate.css +0 -29
  1008. package/src/styles/utilities/base-misc.css +0 -307
  1009. package/src/styles/utilities/base.css +0 -337
  1010. package/src/styles/utilities/btn.css +0 -327
  1011. package/src/styles/utilities/components.css +0 -337
  1012. package/src/styles/utilities/metal.css +0 -272
  1013. package/src/styles/utilities.css +0 -26
  1014. package/src/styles/view-transition.css +0 -67
  1015. package/src/styles/viz-reveal.css +0 -63
  1016. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-B3ysoDQm.js} +0 -0
  1017. /package/dist/{compile-C55K3P9g.js → compile-D7VYG3gi.js} +0 -0
  1018. /package/dist/{styles → components/_shared}/feedback-tone.css +0 -0
  1019. /package/dist/{styles/dock-controls → components/dock/styles/controls}/tab-button.css +0 -0
  1020. /package/dist/{styles/dock-controls → components/dock/styles/controls}/triggers.css +0 -0
  1021. /package/dist/{styles/dock → components/dock/styles}/cta-seat.css +0 -0
  1022. /package/dist/{styles/dock → components/dock/styles}/search.css +0 -0
  1023. /package/dist/{styles/dock → components/dock/styles}/shell-regions.css +0 -0
  1024. /package/dist/composables/glass/{webgl/shaders/procedural-color.glsl.d.ts → procedural/color.glsl.d.ts} +0 -0
  1025. /package/dist/{components/aurora/constants/shaders/procedural-color.wgsl.d.ts → composables/glass/procedural/color.wgsl.d.ts} +0 -0
  1026. /package/dist/composables/motion/{motionTempo.d.ts → core/motionTempo.d.ts} +0 -0
  1027. /package/dist/composables/motion/{useIntersectionPause.d.ts → core/useIntersectionPause.d.ts} +0 -0
  1028. /package/dist/composables/motion/{useRAFLoop.d.ts → core/useRAFLoop.d.ts} +0 -0
  1029. /package/dist/composables/motion/{useYieldToMain.d.ts → core/useYieldToMain.d.ts} +0 -0
  1030. /package/dist/composables/motion/{useAnimatedNumberMap.d.ts → number/useAnimatedNumberMap.d.ts} +0 -0
  1031. /package/dist/composables/motion/{useRoutePointer.d.ts → pointer/useRoutePointer.d.ts} +0 -0
  1032. /package/dist/composables/motion/{vReveal.d.ts → reveal/vReveal.d.ts} +0 -0
  1033. /package/dist/composables/motion/{scrollReader.d.ts → scroll/scrollReader.d.ts} +0 -0
  1034. /package/dist/composables/motion/{supportsCssTimeline.d.ts → scroll/supportsCssTimeline.d.ts} +0 -0
  1035. /package/dist/composables/motion/{useScrollPin.d.ts → scroll/useScrollPin.d.ts} +0 -0
  1036. /package/dist/composables/motion/{useScrollScene.d.ts → scroll/useScrollScene.d.ts} +0 -0
  1037. /package/dist/composables/motion/{useScrollTrigger.d.ts → scroll/useScrollTrigger.d.ts} +0 -0
  1038. /package/dist/composables/motion/{useSpringPress.d.ts → spring/useSpringPress.d.ts} +0 -0
  1039. /package/dist/{createContext-BQ1Gy_LB.js → createContext-BhkE9mLH.js} +0 -0
  1040. /package/dist/{motionTempo-CMS5b0Vu.js → motionTempo-tscp92Nm.js} +0 -0
  1041. /package/dist/{prng-B0PLRmR6.js → prng-2uS6J_A1.js} +0 -0
  1042. /package/dist/{useDragVelocity-BWcNMCux.js → useDragVelocity-6ONX0sr0.js} +0 -0
  1043. /package/dist/{useFuzzySearch-KslRxiJY.js → useFuzzySearch-CUnZknpm.js} +0 -0
  1044. /package/dist/{useResizeObserver-DDuoBeBo.js → useResizeObserver-CdUlm2QZ.js} +0 -0
  1045. /package/dist/{useResolveTokenColor-DVT5kwv6.js → useResolveTokenColor-B2FfJnd9.js} +0 -0
  1046. /package/dist/{useTimer-CkDV8SC2.js → useTimer-C3yfti4C.js} +0 -0
  1047. /package/dist/{useUserInvalidAria-Bkruei7M.js → useUserInvalidAria-0GNrddMX.js} +0 -0
  1048. /package/dist/{writeVelocityWeight-D1rvdxJu.js → writeVelocityWeight-DoGOCW3e.js} +0 -0
@@ -1,18 +1,17 @@
1
1
  /**
2
- * Aurora v4.1 — library config shape.
2
+ * Aurora library configuration.
3
3
  *
4
4
  * Authored presets (Sky, Dawn, Meadow, Deliberative, Day9, Oil Impasto,
5
5
  * Oil Gestural, Oil Van Gogh, Crayon Sunset, Crayon Rainbow, Crayon Ocean)
6
6
  * live in the consumer — see demo/stories/substrates/aurora/presets.ts.
7
7
  *
8
- * Per memory rule "Presets in consumers": named themed presets belong in
9
- * each consumer project, not in the library. The library exports only the
10
- * shape + a minimum-viable DEFAULT_AURORA_CONFIG for the component's own
8
+ * Named themed presets belong in each consumer project. The library exports only
9
+ * the shape and a minimum-viable DEFAULT_AURORA_CONFIG for the component's own
11
10
  * type-check ergonomics.
12
11
  */
13
12
  import type { OklchStop } from "../../../composables/color";
14
13
  export type { OklchStop };
15
- import type { HueInterpolationMethod } from "@mkbabb/value.js";
14
+ import type { HueInterpolationMethod } from "@mkbabb/value.js/color";
16
15
  export type AuroraHuePath = HueInterpolationMethod;
17
16
  export type AuroraSource = "palette" | "image";
18
17
  import type { ImageInputSource } from "../../../composables/glass/textureUpload";
@@ -55,7 +54,7 @@ export type AuroraMedium = "smooth" | "pastel" | "watercolor" | "oil" | "crayon"
55
54
  export type StrokeMode = "oil" | "knife" | "chunky";
56
55
  export type FlowPattern = "none" | "radial" | "swirl" | "diagonal" | "multi" | "tensor";
57
56
  /**
58
- * AW.W4.1 — how a stroke's orientation is sourced. `flow` keeps the hand-authored
57
+ * How a stroke's orientation is sourced. `flow` keeps the hand-authored
59
58
  * `flowField` pattern + per-cell jitter (the named legacy choice); `tensor`
60
59
  * substitutes the structure-tensor minor-eigenvector (the color field's own
61
60
  * edge-tangent flow). No default that hides one as a duplicate of the other.
@@ -63,30 +62,26 @@ export type FlowPattern = "none" | "radial" | "swirl" | "diagonal" | "multi" | "
63
62
  export type StrokeOrient = "flow" | "tensor";
64
63
  export type WarpMode = "fbm" | "cellular" | "hybrid" | "curl";
65
64
  /**
66
- * AW.W6/W8 — the interactivity flag SHAPE (declared at W6, default OFF; behavior
67
- * wired at W8). Each axis opts the aurora into a pointer/scroll response:
65
+ * Interactivity shape. Each axis opts Aurora into a pointer/scroll response:
68
66
  * - `light` — the cursor drives the impasto `uLightDir` (cursor-as-light + idle orbit).
69
- * - `flow` — pointer/scroll VELOCITY injects a transient swirl-burst (velocity-reactive).
70
67
  * - `scroll` — palette/breath progress couples to scroll (via `useScrollProgress`).
71
- * - `wake` — the WebGPU stateful pointer wake (a ping-pong velocity texture; AW.W8.2).
68
+ * - `swirl` — cursor-local warp and luminance lean on both engines.
69
+ * - `amplitude` — sizes the transient burst folded into cursor strength on the CPU.
72
70
  * Every axis is suppressed under `prefers-reduced-motion` + the DockBackgroundToggle
73
71
  * pause (the master tempo scalar is the single suppression seam). The wispy-sky
74
72
  * default carries no `interactivity` (every axis OFF — the default stays static).
75
73
  */
76
74
  export interface AuroraInteractivity {
77
75
  light?: boolean;
78
- flow?: boolean;
79
76
  scroll?: boolean;
80
- wake?: boolean;
81
77
  /**
82
- * BI.W-FIELD-CORE (FC6/T-38) — the MEDIUM-GATED cursor swirl/luminance-lean (reads on the
83
- * `smooth` medium via the engagement-driven `auroraCursorMapping` strength, ZERO shader
84
- * edit — the T-38 dead-swirl-axis fix). The atoms door defaults it ON when interactive.
78
+ * Cursor-local field warp and luminance lean. The atoms
79
+ * door defaults it ON when interactive, including on the smooth medium.
85
80
  */
86
81
  swirl?: boolean;
87
82
  /**
88
- * BI.W-FIELD-CORE (FC6) — the SIZED amplitude of the cursor's field influence (0..1) —
89
- * how much the velocity burst perturbs the domain-warp path near the cursor.
83
+ * Sized burst amplitude (0..1). The CPU projection folds
84
+ * the pointer-field burst into the shared cursor strength before either engine sees it.
90
85
  */
91
86
  amplitude?: number;
92
87
  }
@@ -112,13 +107,13 @@ export interface AuroraConfig {
112
107
  noiseOctaves: 3 | 4 | 5;
113
108
  source?: AuroraSource;
114
109
  /**
115
- * BG.W-AUR-IMAGE-SOURCE — the photo the `source:"image"` program dissolves. A URL
116
- * string / `Blob` (decoded through the shared normalisation) OR an already-uploadable
110
+ * the photo the `source:"image"` program dissolves. A URL
111
+ * string, `Blob` (decoded through the shared normalisation) OR an already-uploadable
117
112
  * source (`ImageBitmap`/`HTMLImageElement`/…). Ignored when `source !== "image"`.
118
113
  */
119
114
  src?: AuroraImageSource;
120
115
  /**
121
- * BG.W-AUR-IMAGE-SOURCE — the per-fragment blur-radius band (uv units) the drifting
116
+ * the per-fragment blur-radius band (uv units) the drifting
122
117
  * zone lerps between (`radius = mix(min, max, zone)`). Optional; omitted = the
123
118
  * `IMAGE_BLUR_MIN_DEFAULT`/`IMAGE_BLUR_MAX_DEFAULT` band (near-sharp → heavy-bokeh
124
119
  * dissolve). Only read on the `source:"image"` program.
@@ -126,19 +121,18 @@ export interface AuroraConfig {
126
121
  imageBlur?: AuroraImageBlur;
127
122
  medium: AuroraMedium;
128
123
  /**
129
- * W5 — the hue-arc method for the OKLCh palette interpolation. Optional;
124
+ * Hue-arc method for OKLCh palette interpolation. Optional;
130
125
  * omitted = `"shorter"` (the OKLab-rectangular ramp — the muddy-midtone-free
131
126
  * default). `"increasing"`/`"decreasing"` request the OKLCh hue-arc for a
132
- * deliberate rainbow sweep across the stops. Aliased on `/api` as `AuroraHuePath`.
127
+ * deliberate rainbow sweep across the stops.
133
128
  */
134
129
  huePath?: AuroraHuePath;
135
130
  flow: AuroraFlow;
136
131
  /**
137
- * AW.W4.1 — how the painterly stroke direction is sourced. Optional; omitted =
138
- * `"flow"` (the hand-authored `flowField` pattern — the pre-W4 path, so an
139
- * unset config renders identically). `"tensor"` substitutes the structure-tensor
140
- * minor eigenvector (the color field's own edge-tangent flow); the `vangogh` /
141
- * `oil-pastel` mediums force it.
132
+ * How the painterly stroke direction is sourced. Optional; omitted =
133
+ * `"flow"`, the hand-authored `flowField` pattern. `"tensor"` substitutes the
134
+ * structure-tensor minor eigenvector, the color field's edge-tangent flow;
135
+ * the `vangogh` and `oil-pastel` mediums force it.
142
136
  */
143
137
  strokeOrient?: StrokeOrient;
144
138
  strokeAmount: number;
@@ -152,7 +146,7 @@ export interface AuroraConfig {
152
146
  brokenColor: number;
153
147
  canvasGrain: number;
154
148
  /**
155
- * BC.W-VIZ-AURORA (T4) — the anisotropic-Kuwahara painterly-finish knobs (the
149
+ * Anisotropic-Kuwahara painterly-finish knobs (the
156
150
  * `medium:"kuwahara"` register; the WGSL primary's keystone). Optional; omitted =
157
151
  * the recipe defaults (radius 0.010 procedural-patch units, q 4.0 the SOFT
158
152
  * variance-weight exponent). Sectors are fixed at 8 (the soft-blend overlap floor —
@@ -162,29 +156,28 @@ export interface AuroraConfig {
162
156
  kuwaharaRadius?: number;
163
157
  kuwaharaQ?: number;
164
158
  /**
165
- * BG.W-AUR-METAL-FINISH — the metal-medium knobs (the `medium:"metal"` /
166
- * `"metal-gradient"` register; uMedium==8/9). Optional; omitted = the recipe
159
+ * Metal-medium knobs for `medium:"metal"` and `"metal-gradient"` (uMedium==8/9).
160
+ * Optional; omitted = the recipe
167
161
  * defaults (`METAL_POLISH_DEFAULT` catch intensity, `METAL_HEIGHT_SCALE_DEFAULT`
168
162
  * relief tilt). `metalPolish` scales the specular catch; `metalHeightScale` scales
169
163
  * the luma-relief → normal tilt (a higher value reads as sharper folds). On the WGSL
170
- * primary these ride the free cursor.z/.w pad lanes; the .frag carries them as its
164
+ * primary these ride the free cursor.z/.w pad lanes; the.frag carries them as its
171
165
  * own uniforms. A non-metal config never reads them (no-op).
172
166
  */
173
167
  metalPolish?: number;
174
168
  metalHeightScale?: number;
175
169
  /**
176
- * AW.W4.2 — the impasto relight direction (the movable directional source the
170
+ * Impasto relight direction (the movable directional source the
177
171
  * accumulated paint-height field catches). Optional; omitted = upper-left
178
- * (matching the prior fixed-rim default, so the still default reads identically).
179
- * Unit-ish [x, y, z] in screen space (z toward the viewer). AW.W8 drives this
180
- * from the cursor (cursor-as-light); the shader re-normalizes it.
172
+ * Unit-ish [x, y, z] in screen space (z toward the viewer). The shader
173
+ * re-normalizes it.
181
174
  */
182
175
  lightDir?: [number, number, number];
183
176
  /**
184
- * AW.W4.2 / AX.W11 — the relight tint (the impasto catch-light). Optional;
177
+ * Relight tint for the impasto catch-light. Optional;
185
178
  * omitted = the canonical warm-white the shared `warmCatchLight` OKLCh helper
186
- * derives (the `(0.985, 0.0125, 77.5°)` anchor — perceptually the prior eyeballed
187
- * warm-white, now on the OKLCh core). Author it either as a raw LINEAR-light
179
+ * derives (the `(0.985, 0.0125, 77.5°)` anchor — perceptually a warm-white, on
180
+ * the OKLCh core). Author it either as a raw LINEAR-light
188
181
  * `[r,g,b]` triple OR as an `{L,C,h}` OKLCh anchor (the bridge derives the linear
189
182
  * triple via `warmCatchLight`). The diffuse + Blinn-specular terms modulate by it.
190
183
  */
@@ -197,11 +190,11 @@ export interface AuroraConfig {
197
190
  paperGrain: number;
198
191
  alpha: number;
199
192
  /**
200
- * BD.W-AUR-VIVIDNESS — the §3 chroma FLOOR (the warm-field vividness contract).
193
+ * the §3 chroma FLOOR (the warm-field vividness contract).
201
194
  * Optional; omitted = `DEFAULT_VIVIDNESS` (1 — high, the library's vivid identity).
202
195
  * A shader-resident OKLab chroma-floor lifts any pale zone toward `VIVID_TARGET`
203
196
  * (mode-scaled in the shader) so the field never resolves toward gray BEHIND glass
204
- * — the literal fix for the "missing colorful field → gray glass" defect. The lift
197
+ * the literal fix for the "missing colorful field → gray glass" defect. The lift
205
198
  * is HUE-PRESERVING (scales chroma along the zone's existing OKLab direction); below
206
199
  * `VIVID_EPS` the hue is precision noise, so the floor synthesizes along the WARM
207
200
  * anchor (`VIVID_WARM_ANCHOR`) — NEVER teal/navy, the warm-floor guarantee. A
@@ -211,9 +204,8 @@ export interface AuroraConfig {
211
204
  */
212
205
  vividness?: number;
213
206
  /**
214
- * AW.W6/W8 — the pointer/scroll interactivity opt-in (default OFF — the wispy-sky
215
- * default stays static). W6 declares the SHAPE; W8 wires the cursor-as-light /
216
- * velocity-reactive flow / scroll-coupling / WebGPU-wake behavior. Omitted = every
207
+ * Pointer/scroll interactivity opt-in (default OFF — the wispy-sky
208
+ * default stays static). Omitted = every
217
209
  * axis off. Aliased on `/api` as part of the `AuroraConfig` surface.
218
210
  */
219
211
  interactivity?: AuroraInteractivity;
@@ -229,16 +221,14 @@ export interface AuroraCursorApi {
229
221
  }
230
222
  export interface AuroraInstance extends AuroraCursorApi {
231
223
  /**
232
- * Run the expensive WebGL init — context creation, shader compile + GPU
233
- * link, first uniform upload, rAF arm. Idempotent. On the `"eager"` /
234
- * capture `initStrategy` `createAurora` already calls this before
224
+ * Start GPU initialization. Idempotent. With the `"eager"` capture
225
+ * `initStrategy`, `createAurora` calls this before
235
226
  * returning; on `"deferred"` the consumer (e.g. `useAurora`) invokes it
236
- * past first paint. Throws on WebGL2/compile/link failure (O invariant
237
- * 24). A no-op once armed or once `dispose()` has run.
227
+ * past first paint. A no-op once armed or once `dispose()` has run.
238
228
  */
239
229
  arm(): void;
240
230
  /**
241
- * BC.W-VIZ-AURORA (T2) — the device-resolved arm PROMISE. On the WebGPU
231
+ * Device-resolved arm promise. On the WebGPU
242
232
  * backend `renderAt`/`arm` are no-ops until this resolves the async
243
233
  * adapter→device→configure→setup prelude. A CAPTURE consumer (thumbnail bake)
244
234
  * MUST `await armAsync()` before the first `renderAt` or the frame is BLANK
@@ -250,10 +240,9 @@ export interface AuroraInstance extends AuroraCursorApi {
250
240
  renderAt(timeSec: number): void;
251
241
  pause(): void;
252
242
  resume(): void;
253
- setReducedMotion(flag: boolean): void;
254
243
  dispose(): void;
255
244
  }
256
- export declare const MAX_NUCLEI = 6;
245
+ export declare const MAX_NUCLEI = 8;
257
246
  export declare const MAX_STOPS = 8;
258
247
  /**
259
248
  * The default `vividness` for a bare `<Aurora>` — HIGH (the library's vivid identity).
@@ -271,7 +260,7 @@ export declare const DEFAULT_VIVIDNESS = 1;
271
260
  */
272
261
  export declare const VIVID_TARGET = 0.115;
273
262
  /**
274
- * The default `metalPolish` (specular catch intensity) for a `medium:"metal"` /
263
+ * The default `metalPolish` (specular catch intensity) for a `medium:"metal"` or
275
264
  * `"metal-gradient"` config when omitted. The metal light rakes at unit intensity.
276
265
  */
277
266
  export declare const METAL_POLISH_DEFAULT = 1;
@@ -282,7 +271,7 @@ export declare const METAL_POLISH_DEFAULT = 1;
282
271
  export declare const METAL_HEIGHT_SCALE_DEFAULT = 1;
283
272
  /**
284
273
  * The default near-sharp blur radius (uv units) at zone 0 for a `source:"image"` aurora
285
- * — a whisper so the recognizable zones read crisp against the dissolved ones.
274
+ * a whisper so the recognizable zones read crisp against the dissolved ones.
286
275
  */
287
276
  export declare const IMAGE_BLUR_MIN_DEFAULT = 0.004;
288
277
  /**
@@ -297,18 +286,18 @@ export declare const IMAGE_BLUR_MAX_DEFAULT = 0.06;
297
286
  */
298
287
  export declare const DEFAULT_AURORA_CONFIG: AuroraConfig;
299
288
  /**
300
- * `PAPER_WASH_GROUND` — the library-canon recessive-ground crayon calibration
301
- * (BA.W-ATLAS-RECONCILE A-4a; d6 9467bd16 adopt). A pure PRESET PARTIAL (no
289
+ * `PAPER_WASH_GROUND` — the library-canon recessive-ground crayon calibration.
290
+ * A pure PRESET PARTIAL (no
302
291
  * palette/nuclei/motion) pinning the recessive crayon-ground deposition dials so a
303
292
  * data-ground aurora reads as paper-on-tooth without each consumer dial-tuning the
304
293
  * same recessive calibration by hand. It carries NO palette/nuclei — the consumer
305
294
  * spreads it over its own pole-derived pigment (page-glow IS data-glow):
306
- * `const cfg = { ...consumerBase, ...PAPER_WASH_GROUND }`.
295
+ * `const cfg = {...consumerBase,...PAPER_WASH_GROUND }`.
307
296
  *
308
297
  * House-rule clean (presets-in-consumers): this is the LIBRARY's own recessive-ground
309
298
  * IDENTITY, not a consumer theme — admissible at the root. `satisfies
310
- * Partial<AuroraConfig>` holds (every key is a first-class `AuroraConfig` field at
311
- * HEAD; the `crayon` medium is `uMedium==4`).
299
+ * Partial<AuroraConfig>` holds (every key is a first-class `AuroraConfig` field;
300
+ * the `crayon` medium is `uMedium==4`).
312
301
  */
313
302
  export declare const PAPER_WASH_GROUND: {
314
303
  readonly medium: "crayon";
@@ -1,13 +1,10 @@
1
1
  export type AuroraRenderMode = "webgl" | "css" | "auto";
2
2
  /**
3
- * Detect a SOFTWARE / CPU WebGL renderer (SwiftShader, llvmpipe, the Microsoft
4
- * Basic Render Driver) via the shared `probeWebGL2Renderer` capability helper
5
- * (BB.W-CI-GREEN — the substrate owns the SINGLE `getContext("webgl2")`
6
- * bootstrap; this consumer reads the renderer STRING through it rather than
7
- * creating a second probe context, per `proof:webgl-substrate-single`).
3
+ * Detect a SOFTWARE, CPU WebGL renderer (SwiftShader, llvmpipe, the Microsoft
4
+ * Basic Render Driver) through the shared `probeWebGL2Renderer` capability helper,
5
+ * so this consumer does not create another context.
8
6
  *
9
- * WHY this is a `"css"` signal (the N.W5 Defect-A root cause, proven live under
10
- * the playwright SwiftShader harness): a full-viewport WebGL2 surface is a
7
+ * A full-viewport WebGL2 surface is a
11
8
  * compositor layer the rasteriser must re-raster on every composite. On a
12
9
  * software rasteriser that per-composite cost is so high that a REAL pointer
13
10
  * interaction — which forces a composite — starves the renderer's input ack and
@@ -19,68 +16,56 @@ export type AuroraRenderMode = "webgl" | "css" | "auto";
19
16
  * same palette, composites cheaply, and never stalls input. A blocklisted-GPU
20
17
  * user gets a smooth atmosphere instead of a janky/hanging one.
21
18
  *
22
- * A `null` probe (no WebGL2 / extension masked / throw) returns `false` — we
19
+ * A `null` probe (no WebGL2, extension masked, throw) returns `false` — we
23
20
  * never downgrade a renderer we cannot PROVE is software (the `"css"` path is the
24
21
  * conservative-but-lossy choice, so a false miss keeps the richer default).
25
22
  */
26
23
  export declare function isSoftwareWebGLRenderer(): boolean;
27
24
  /**
28
- * Resolve-mode options. The software-raster GUARD is the safe DEFAULT (see
29
- * {@link resolveRenderMode}); the single ESCAPE is `forceWebGLUnderSoftwareRaster`
30
- * (BB.W-AURORA-SWRASTER).
25
+ * Resolve-mode options. The software-raster guard is the safe default; the named
26
+ * escape is `forceWebGLUnderSoftwareRaster`.
31
27
  */
32
28
  export interface ResolveRenderModeOptions {
33
29
  /**
34
30
  * Opt OUT of the universal software-raster guard. When `true`, a forced
35
31
  * `mode:"webgl"`/`mode:"capture"` arm ARMS the live WebGL2 surface even on a
36
- * detected software renderer (SwiftShader / llvmpipe / MS Basic Render) — for
32
+ * detected software renderer (SwiftShader, llvmpipe, MS Basic Render) — for
37
33
  * a deterministic test that ACCEPTS the per-composite raster cost. Default
38
34
  * `false`: the guard is the SAFE default (a software-raster signal forces
39
35
  * `"css"` regardless of the requested mode, so a consumer who pins
40
- * `mode:"webgl"` on a headless / GPU-blocklisted device gets the static
36
+ * `mode:"webgl"` on a headless, GPU-blocklisted device gets the static
41
37
  * ground, never the page-wedging hang). The escape is NAMED + recorded,
42
38
  * never silent.
43
39
  */
44
40
  forceWebGLUnderSoftwareRaster?: boolean;
45
41
  }
46
42
  /**
47
- * Resolve `"auto"` to a concrete substrate per device tier — AND universalize the
48
- * software-raster guard out of the `"auto"`-only branch (BB.W-AURORA-SWRASTER).
43
+ * Resolve `"auto"` to a concrete substrate per device tier and apply the
44
+ * software-raster guard to every GPU-arming mode.
49
45
  *
50
- * THE GUARD (the universal first leg). A SOFTWARE WebGL renderer (SwiftShader /
51
- * llvmpipe / MS Basic Render — the GPU-blocklisted / headless path) forces `"css"`
46
+ * A software WebGL renderer (SwiftShader, llvmpipe, or MS Basic Render) forces `"css"`
52
47
  * for ANY WebGL-ARMING requested mode (`"webgl"` OR `"auto"`), not only `"auto"`.
53
48
  * A full-viewport software-rastered GL layer is so expensive to re-raster on every
54
49
  * composite that a pointer interaction starves the renderer's input ack and the
55
- * page goes UNRESPONSIVE (the headless-Chromium hang the speedtest harness
56
- * documents). A consumer (or a capture harness) that pins `mode:"webgl"` /
57
- * `mode:"capture"` on such a device MUST still fall to the static ground — so the
50
+ * page becomes unresponsive. A consumer that pins `mode:"webgl"` or
51
+ * `mode:"capture"` on such a device must still fall to the static ground, so the
58
52
  * probe runs BEFORE the `mode !== "auto"` short-circuit when the requested mode
59
53
  * would arm WebGL. The single ESCAPE is `options.forceWebGLUnderSoftwareRaster`
60
54
  * (default `false` — the guard is the safe default).
61
55
  *
62
- * BC.W-VIZ-AURORA (T1) — the DEAD-STATIC `"auto"` fall is RETIRED. The
63
- * `lowConcurrency` (`hardwareConcurrency <= 4`) and `saveData` heuristics are
64
- * GONE: they predate the offscreen-park + the `AV_AURORA_DPR_MAX` sub-2× cap +
65
- * the demand-gate that make a full-viewport aurora cheap, and `<= 4` is
66
- * false-positive-prone in 2026 (a capable base-M-series laptop / a throttled VM
67
- * tab reports 4 logical cores → it got a FROZEN static gradient that reads as
68
- * "the aurora is broken", USER-DEFECTS §E "renders SLOW"). So `"auto"` arms the
69
- * GPU on every Chrome-113/Safari-26/Firefox-141 device.
56
+ * `"auto"` arms the GPU unless the software-renderer guard fires. Core-count and
57
+ * save-data heuristics do not select a static substrate.
70
58
  *
71
59
  * Reduced-motion is handled SOLELY by the substrate's live `matchMedia` freeze
72
- * (`createCanvasLifecycle` paints ONE static frame then parks, and re-arms on
73
- * un-reduce) — NOT a render-mode fall (the old `"css"` fall never armed WebGL,
74
- * so an un-reduce mid-session could never wake it; the substrate freeze does).
75
- * The ONLY `"css"` signal that remains is the genuine software-raster GUARD
76
- * (the universal first leg above) — and even that is subsumed by
77
- * `BC.W-WEBGPU-EVERYWHERE`'s try-WebGPU-then-rebuild-WebGL2 picker.
60
+ * (`createCanvasLifecycle` paints one static frame then parks and re-arms on
61
+ * un-reduce), not by changing render mode. The only automatic `"css"` signal is
62
+ * the software-raster guard.
78
63
  *
79
- * THE CAPABLE PATH IS BYTE-UNTOUCHED: `isSoftwareWebGLRenderer()` returns `false`
64
+ * `isSoftwareWebGLRenderer()` returns `false`
80
65
  * on a real GPU (or a null probe — never a false downgrade), so a forced
81
66
  * `mode:"webgl"` on hardware passes through exactly as before.
82
67
  *
83
- * SSR / missing-API safe: if `navigator` / `window` / the probes are
68
+ * SSR, missing-API safe: if `navigator`, `window`, the probes are
84
69
  * unavailable we ASSUME a capable device and resolve `"webgl"` (the warm wash
85
70
  * still composites either way — the only question is whether it animates).
86
71
  *
@@ -1,3 +1,3 @@
1
1
  export declare const IMAGE_BLUR_RINGS_WGSL = 3;
2
2
  export declare const IMAGE_BLUR_SECTORS_WGSL = 8;
3
- export declare const AURORA_IMAGE_WGSL = "\nconst MAX_NUCLEI: i32 = 6;\nconst PI: f32 = 3.141592653589793;\nconst BLUR_RINGS: i32 = 3;\nconst BLUR_SECTORS: i32 = 8;\n\n// The image program's OWN uniform struct (packed vec4 lanes \u2014 trivial std140/WGSL\n// alignment). DISTINCT from the palette program's 576-byte struct (a separate program).\nstruct ImageUniforms {\n // scalars0: (uTime, uWarpAmount, uWarpScale, uWarpDrift)\n scalars0: vec4<f32>,\n // scalars1: (uSoftmaxBeta, uNucleiDrift, uCursorStrength, uCursorRadius)\n scalars1: vec4<f32>,\n // scalars2: (uSaturation, uPaperGrain, uAlpha, uVividness)\n scalars2: vec4<f32>,\n // image: (uBlurMin, uBlurMax, uImageAspect, _)\n image: vec4<f32>,\n // cursor: (uCursor.x, uCursor.y, _, _)\n cursor: vec4<f32>,\n // ints: (uNucleiCount, uNoiseOctaves, _, _)\n ints: vec4<i32>,\n // nuc0[i] = (pos.x, pos.y, radius, valueBias); nuc1[i] = (driftRadius, driftPhase, elong, angle)\n nuc0: array<vec4<f32>, 6>,\n nuc1: array<vec4<f32>, 6>,\n};\n\n@group(0) @binding(0) var<uniform> u: ImageUniforms;\n@group(0) @binding(1) var imgTex: texture_2d<f32>;\n@group(0) @binding(2) var imgSampler: sampler;\n\nconst K_NUCLEI: f32 = 14.0;\nconst K_WARP: f32 = 5.0;\n\n// \u2500\u2500 Noise (aurora-local hash21/vnoise/fbm \u2014 the same compact foundation) \u2500\u2500\nfn hash21(p0: vec2<f32>) -> f32 {\n var p = fract(p0 * vec2<f32>(123.34, 456.21));\n p = p + dot(p, p + 45.32);\n return fract(p.x * p.y);\n}\nfn vnoise(p: vec2<f32>) -> f32 {\n let i = floor(p);\n let f = fract(p);\n let uu = f * f * (3.0 - 2.0 * f);\n let a = hash21(i);\n let b = hash21(i + vec2<f32>(1.0, 0.0));\n let c = hash21(i + vec2<f32>(0.0, 1.0));\n let d = hash21(i + vec2<f32>(1.0, 1.0));\n return mix(mix(a, b, uu.x), mix(c, d, uu.x), uu.y);\n}\nconst FBM_ROT: mat2x2<f32> = mat2x2<f32>(0.8, 0.6, -0.6, 0.8);\nfn fbm(p0: vec2<f32>) -> f32 {\n var v = 0.0;\n var a = 0.5;\n var p = p0;\n let octaves = u.ints.y;\n for (var i = 0; i < 5; i = i + 1) {\n if (i >= octaves) { break; }\n v = v + a * vnoise(p);\n p = FBM_ROT * p * 2.02;\n a = a * 0.5;\n }\n return v;\n}\nfn ign(p: vec2<f32>) -> f32 {\n return fract(52.9829189 * fract(dot(p, vec2<f32>(0.06711056, 0.00583715))));\n}\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 linOklab(lin: vec3<f32>) -> vec3<f32> {\n let lms = LINEAR_SRGB_TO_LMS * lin;\n return LMS_TO_OKLAB * cbrt3(lms);\n}\n\n// The Quilez double-warp (fbm) + the cursor swirl \u2014 the drift that moves the blur zone.\nfn domainWarp(p: vec2<f32>, t: f32) -> vec2<f32> {\n let warpAmount = u.scalars0.y;\n let warpScale = u.scalars0.z;\n let warpDrift = u.scalars0.w;\n let cursorStrength = u.scalars1.z;\n let cursorRadius = u.scalars1.w;\n let cursor = u.cursor.xy;\n let q = vec2<f32>(fbm(p * warpScale + vec2<f32>(0.0, 0.0) + t * warpDrift * K_WARP),\n fbm(p * warpScale + vec2<f32>(5.2, 1.3) + t * warpDrift * K_WARP));\n let r = vec2<f32>(fbm(p * warpScale + 4.0 * q + vec2<f32>(1.7, 9.2)),\n fbm(p * warpScale + 4.0 * q + vec2<f32>(8.3, 2.8)));\n var warped = p + warpAmount * r;\n if (cursorStrength > 0.001) {\n let toP = p - cursor;\n let d = length(toP);\n let rr = max(cursorRadius, 0.01);\n let w = exp(-(d * d) / (rr * rr * 0.45));\n let ang = w * cursorStrength * 2.1;\n let ca = cos(ang);\n let sa = sin(ang);\n let rotated = vec2<f32>(ca * toP.x - sa * toP.y, sa * toP.x + ca * toP.y) + cursor;\n warped = mix(warped, rotated + warpAmount * r * 0.7, w * cursorStrength);\n }\n return warped;\n}\n\n// The drifting BLUR ZONE \u2014 the anisotropic-Gaussian nuclei softmax (the SAME field the\n// palette program reads), drift-coupled.\nfn zoneField(p: vec2<f32>, t: f32) -> f32 {\n let nucleiCount = u.ints.x;\n let nucleiDrift = u.scalars1.y;\n let softmaxBeta = u.scalars1.x;\n var accum = 0.0;\n var accumW = 0.0;\n for (var i = 0; i < MAX_NUCLEI; i = i + 1) {\n if (i >= nucleiCount) { break; }\n let n0 = u.nuc0[i]; // pos.x, pos.y, radius, valueBias\n let n1 = u.nuc1[i]; // driftRadius, driftPhase, elong, angle\n let posI = n0.xy + n1.x * vec2<f32>(\n cos(t * nucleiDrift * K_NUCLEI + n1.y),\n sin(t * nucleiDrift * K_NUCLEI + n1.y * 1.13));\n let diff = p - posI;\n let ca = cos(n1.w);\n let sa = sin(n1.w);\n let local = vec2<f32>(ca * diff.x + sa * diff.y, -sa * diff.x + ca * diff.y);\n let along = local.x / max(n1.z, 0.01);\n let d2 = along * along + local.y * local.y;\n let rad = max(n0.z, 0.01);\n let w = exp(-softmaxBeta * d2 / (rad * rad));\n accum = accum + w * (0.5 + 0.5 * n0.w);\n accumW = accumW + w;\n }\n return clamp(accum / max(accumW, 1e-4), 0.0, 1.0);\n}\n\nfn coverUv(uv: vec2<f32>) -> vec2<f32> {\n let aspect = max(u.image.z, 0.0001);\n var c = uv - vec2<f32>(0.5);\n c.x = c.x * aspect;\n let s = 1.0 / max(aspect, 1.0);\n return c * s + vec2<f32>(0.5);\n}\n\n// The bounded 24-tap zone blur \u2014 a FIXED 3-ring \u00D7 8-sector stratified kernel, radius\n// per-fragment, sampled in LINEAR light. textureSampleLevel (explicit LOD 0) \u2014 WGSL has\n// no implicit derivative in a varying-radius loop.\nfn zoneBlur(uv: vec2<f32>, radius: f32) -> vec3<f32> {\n let aspect = max(u.image.z, 0.0001);\n var sum = srgbToLinear(textureSampleLevel(imgTex, imgSampler, coverUv(uv), 0.0).rgb);\n var wsum = 1.0;\n for (var ring = 1; ring <= BLUR_RINGS; ring = ring + 1) {\n let rr = radius * (f32(ring) / f32(BLUR_RINGS));\n for (var s = 0; s < BLUR_SECTORS; s = s + 1) {\n let a = (f32(s) + 0.5 * f32(ring)) / f32(BLUR_SECTORS) * 2.0 * PI;\n let off = vec2<f32>(cos(a) / aspect, sin(a)) * rr;\n sum = sum + srgbToLinear(textureSampleLevel(imgTex, imgSampler, coverUv(uv + off), 0.0).rgb);\n wsum = wsum + 1.0;\n }\n }\n return sum / wsum;\n}\n\nconst VIVID_TARGET: f32 = 0.115;\nconst VIVID_EPS: f32 = 0.012;\nconst VIVID_WARM_ANCHOR: vec2<f32> = vec2<f32>(0.34202, 0.93969);\nfn vividnessFloor(c: vec3<f32>, vividness: f32) -> vec3<f32> {\n if (vividness <= 0.0001) { return c; }\n var lab = linOklab(c);\n let C = length(lab.yz);\n let modeLift = mix(1.18, 1.0, clamp(lab.x * 1.4, 0.0, 1.0));\n let Cmin = vividness * VIVID_TARGET * modeLift;\n var hueDir = VIVID_WARM_ANCHOR;\n if (C > VIVID_EPS) { hueDir = lab.yz / C; }\n let yz = hueDir * max(C, Cmin);\n lab = vec3<f32>(lab.x, yz.x, yz.y);\n return max(oklabToLinearSrgb(lab), vec3<f32>(0.0));\n}\n\nfn saturate3(c: vec3<f32>, amt: f32) -> vec3<f32> {\n var lch = oklabToOklch(linOklab(c));\n lch.y = max(lch.y * amt, 0.0);\n return max(oklabToLinearSrgb(oklchToOklab(lch)), vec3<f32>(0.0));\n}\n\nfn aces(color0: vec3<f32>) -> vec3<f32> {\n let startCompression = 0.8 - 0.04;\n let desaturation = 0.15;\n var color = color0;\n let x = min(color.r, min(color.g, color.b));\n var offset = 0.04;\n if (x < 0.08) { offset = x - 6.25 * x * x; }\n color = color - offset;\n let peak = max(color.r, max(color.g, color.b));\n if (peak < startCompression) { return clamp(color, vec3<f32>(0.0), vec3<f32>(1.0)); }\n let d = 1.0 - startCompression;\n let newPeak = 1.0 - d * d / (peak + d - startCompression);\n color = color * (newPeak / peak);\n let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n return clamp(mix(color, newPeak * vec3<f32>(1.0), g), vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) uv: vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {\n var p = vec2<f32>(-1.0, -1.0);\n if (vi == 1u) { p = vec2<f32>(3.0, -1.0); }\n else if (vi == 2u) { p = vec2<f32>(-1.0, 3.0); }\n var out: VSOut;\n out.pos = vec4<f32>(p, 0.0, 1.0);\n out.uv = p * 0.5 + 0.5;\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n let t = u.scalars0.x;\n let saturation = u.scalars2.x;\n let paperGrain = u.scalars2.y;\n let alpha = u.scalars2.z;\n let vividness = u.scalars2.w;\n let blurMin = u.image.x;\n let blurMax = u.image.y;\n\n let uv = in.uv;\n let p_warp = domainWarp(uv, t);\n let zone = zoneField(p_warp, t);\n\n let radius = mix(blurMin, blurMax, zone);\n var col = zoneBlur(uv, radius);\n\n col = saturate3(col, saturation);\n col = vividnessFloor(col, vividness);\n\n col = aces(col);\n let fragCoord = in.pos.xy;\n let grain = hash21(fragCoord + t * 17.0);\n col = col + (grain - 0.5) * paperGrain;\n col = clamp(col * 0.985 + 0.008, vec3<f32>(0.0), vec3<f32>(1.0));\n\n col = linearToSrgb(col);\n col = col + (1.0 / 255.0) * (ign(fragCoord) - 0.5);\n\n return vec4<f32>(col * alpha, alpha);\n}\n";
3
+ export declare const AURORA_IMAGE_WGSL = "\nconst MAX_NUCLEI: i32 = 8;\nconst PI: f32 = 3.141592653589793;\nconst BLUR_RINGS: i32 = 3;\nconst BLUR_SECTORS: i32 = 8;\n\n// The image program's OWN uniform struct (packed vec4 lanes \u2014 trivial std140/WGSL\n// alignment). DISTINCT from the palette program's 672-byte struct (a separate program).\nstruct ImageUniforms {\n // scalars0: (uTime, uWarpAmount, uWarpScale, uWarpDrift)\n scalars0: vec4<f32>,\n // scalars1: (uSoftmaxBeta, uNucleiDrift, uCursorStrength, uCursorRadius)\n scalars1: vec4<f32>,\n // scalars2: (uSaturation, uPaperGrain, uAlpha, uVividness)\n scalars2: vec4<f32>,\n // image: (uBlurMin, uBlurMax, uImageAspect, _)\n image: vec4<f32>,\n // cursor: (uCursor.x, uCursor.y, _, _)\n cursor: vec4<f32>,\n // ints: (uNucleiCount, uNoiseOctaves, _, _)\n ints: vec4<i32>,\n // nuc0[i] = (pos.x, pos.y, radius, valueBias); nuc1[i] = (driftRadius, driftPhase, elong, angle)\n nuc0: array<vec4<f32>, 8>,\n nuc1: array<vec4<f32>, 8>,\n};\n\n@group(0) @binding(0) var<uniform> u: ImageUniforms;\n@group(0) @binding(1) var imgTex: texture_2d<f32>;\n@group(0) @binding(2) var imgSampler: sampler;\n\nconst K_NUCLEI: f32 = 14.0;\nconst K_WARP: f32 = 5.0;\n\n// \u2500\u2500 Noise (aurora-local hash21/vnoise/fbm \u2014 the same compact foundation) \u2500\u2500\nfn hash21(p0: vec2<f32>) -> f32 {\n var p = fract(p0 * vec2<f32>(123.34, 456.21));\n p = p + dot(p, p + 45.32);\n return fract(p.x * p.y);\n}\nfn vnoise(p: vec2<f32>) -> f32 {\n let i = floor(p);\n let f = fract(p);\n let uu = f * f * (3.0 - 2.0 * f);\n let a = hash21(i);\n let b = hash21(i + vec2<f32>(1.0, 0.0));\n let c = hash21(i + vec2<f32>(0.0, 1.0));\n let d = hash21(i + vec2<f32>(1.0, 1.0));\n return mix(mix(a, b, uu.x), mix(c, d, uu.x), uu.y);\n}\nconst FBM_ROT: mat2x2<f32> = mat2x2<f32>(0.8, 0.6, -0.6, 0.8);\nfn fbm(p0: vec2<f32>) -> f32 {\n var v = 0.0;\n var a = 0.5;\n var p = p0;\n let octaves = u.ints.y;\n for (var i = 0; i < 5; i = i + 1) {\n if (i >= octaves) { break; }\n v = v + a * vnoise(p);\n p = FBM_ROT * p * 2.02;\n a = a * 0.5;\n }\n return v;\n}\nfn ign(p: vec2<f32>) -> f32 {\n return fract(52.9829189 * fract(dot(p, vec2<f32>(0.06711056, 0.00583715))));\n}\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 linOklab(lin: vec3<f32>) -> vec3<f32> {\n let lms = LINEAR_SRGB_TO_LMS * lin;\n return LMS_TO_OKLAB * cbrt3(lms);\n}\n\n// The Quilez double-warp (fbm) + the cursor swirl \u2014 the drift that moves the blur zone.\nfn domainWarp(p: vec2<f32>, t: f32) -> vec2<f32> {\n let warpAmount = u.scalars0.y;\n let warpScale = u.scalars0.z;\n let warpDrift = u.scalars0.w;\n let cursorStrength = u.scalars1.z;\n let cursorRadius = u.scalars1.w;\n let cursor = u.cursor.xy;\n let q = vec2<f32>(fbm(p * warpScale + vec2<f32>(0.0, 0.0) + t * warpDrift * K_WARP),\n fbm(p * warpScale + vec2<f32>(5.2, 1.3) + t * warpDrift * K_WARP));\n let r = vec2<f32>(fbm(p * warpScale + 4.0 * q + vec2<f32>(1.7, 9.2)),\n fbm(p * warpScale + 4.0 * q + vec2<f32>(8.3, 2.8)));\n var warped = p + warpAmount * r;\n if (cursorStrength > 0.001) {\n let toP = p - cursor;\n let d = length(toP);\n let rr = max(cursorRadius, 0.01);\n let w = exp(-(d * d) / (rr * rr * 0.45));\n let ang = w * cursorStrength * 2.1;\n let ca = cos(ang);\n let sa = sin(ang);\n let rotated = vec2<f32>(ca * toP.x - sa * toP.y, sa * toP.x + ca * toP.y) + cursor;\n warped = mix(warped, rotated + warpAmount * r * 0.7, w * cursorStrength);\n }\n return warped;\n}\n\n// The drifting BLUR ZONE \u2014 the anisotropic-Gaussian nuclei softmax (the SAME field the\n// palette program reads), drift-coupled.\nfn zoneField(p: vec2<f32>, t: f32) -> f32 {\n let nucleiCount = u.ints.x;\n let nucleiDrift = u.scalars1.y;\n let softmaxBeta = u.scalars1.x;\n var accum = 0.0;\n var accumW = 0.0;\n for (var i = 0; i < MAX_NUCLEI; i = i + 1) {\n if (i >= nucleiCount) { break; }\n let n0 = u.nuc0[i]; // pos.x, pos.y, radius, valueBias\n let n1 = u.nuc1[i]; // driftRadius, driftPhase, elong, angle\n let posI = n0.xy + n1.x * vec2<f32>(\n cos(t * nucleiDrift * K_NUCLEI + n1.y),\n sin(t * nucleiDrift * K_NUCLEI + n1.y * 1.13));\n let diff = p - posI;\n let ca = cos(n1.w);\n let sa = sin(n1.w);\n let local = vec2<f32>(ca * diff.x + sa * diff.y, -sa * diff.x + ca * diff.y);\n let along = local.x / max(n1.z, 0.01);\n let d2 = along * along + local.y * local.y;\n let rad = max(n0.z, 0.01);\n let w = exp(-softmaxBeta * d2 / (rad * rad));\n accum = accum + w * (0.5 + 0.5 * n0.w);\n accumW = accumW + w;\n }\n return clamp(accum / max(accumW, 1e-4), 0.0, 1.0);\n}\n\nfn coverUv(uv: vec2<f32>) -> vec2<f32> {\n let aspect = max(u.image.z, 0.0001);\n var c = uv - vec2<f32>(0.5);\n c.x = c.x * aspect;\n let s = 1.0 / max(aspect, 1.0);\n return c * s + vec2<f32>(0.5);\n}\n\n// The bounded 24-tap zone blur \u2014 a FIXED 3-ring \u00D7 8-sector stratified kernel, radius\n// per-fragment, sampled in LINEAR light. textureSampleLevel (explicit LOD 0) \u2014 WGSL has\n// no implicit derivative in a varying-radius loop.\nfn zoneBlur(uv: vec2<f32>, radius: f32) -> vec3<f32> {\n let aspect = max(u.image.z, 0.0001);\n var sum = srgbToLinear(textureSampleLevel(imgTex, imgSampler, coverUv(uv), 0.0).rgb);\n var wsum = 1.0;\n for (var ring = 1; ring <= BLUR_RINGS; ring = ring + 1) {\n let rr = radius * (f32(ring) / f32(BLUR_RINGS));\n for (var s = 0; s < BLUR_SECTORS; s = s + 1) {\n let a = (f32(s) + 0.5 * f32(ring)) / f32(BLUR_SECTORS) * 2.0 * PI;\n let off = vec2<f32>(cos(a) / aspect, sin(a)) * rr;\n sum = sum + srgbToLinear(textureSampleLevel(imgTex, imgSampler, coverUv(uv + off), 0.0).rgb);\n wsum = wsum + 1.0;\n }\n }\n return sum / wsum;\n}\n\nconst VIVID_TARGET: f32 = 0.115;\nconst VIVID_EPS: f32 = 0.012;\nconst VIVID_WARM_ANCHOR: vec2<f32> = vec2<f32>(0.34202, 0.93969);\nfn vividnessFloor(c: vec3<f32>, vividness: f32) -> vec3<f32> {\n if (vividness <= 0.0001) { return c; }\n var lab = linOklab(c);\n let C = length(lab.yz);\n let modeLift = mix(1.18, 1.0, clamp(lab.x * 1.4, 0.0, 1.0));\n let Cmin = vividness * VIVID_TARGET * modeLift;\n var hueDir = VIVID_WARM_ANCHOR;\n if (C > VIVID_EPS) { hueDir = lab.yz / C; }\n let yz = hueDir * max(C, Cmin);\n lab = vec3<f32>(lab.x, yz.x, yz.y);\n return max(oklabToLinearSrgb(lab), vec3<f32>(0.0));\n}\n\nfn saturate3(c: vec3<f32>, amt: f32) -> vec3<f32> {\n var lch = oklabToOklch(linOklab(c));\n lch.y = max(lch.y * amt, 0.0);\n return max(oklabToLinearSrgb(oklchToOklab(lch)), vec3<f32>(0.0));\n}\n\nfn aces(color0: vec3<f32>) -> vec3<f32> {\n let startCompression = 0.8 - 0.04;\n let desaturation = 0.15;\n var color = color0;\n let x = min(color.r, min(color.g, color.b));\n var offset = 0.04;\n if (x < 0.08) { offset = x - 6.25 * x * x; }\n color = color - offset;\n let peak = max(color.r, max(color.g, color.b));\n if (peak < startCompression) { return clamp(color, vec3<f32>(0.0), vec3<f32>(1.0)); }\n let d = 1.0 - startCompression;\n let newPeak = 1.0 - d * d / (peak + d - startCompression);\n color = color * (newPeak / peak);\n let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n return clamp(mix(color, newPeak * vec3<f32>(1.0), g), vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) uv: vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {\n var p = vec2<f32>(-1.0, -1.0);\n if (vi == 1u) { p = vec2<f32>(3.0, -1.0); }\n else if (vi == 2u) { p = vec2<f32>(-1.0, 3.0); }\n var out: VSOut;\n out.pos = vec4<f32>(p, 0.0, 1.0);\n out.uv = p * 0.5 + 0.5;\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n let t = u.scalars0.x;\n let saturation = u.scalars2.x;\n let paperGrain = u.scalars2.y;\n let alpha = u.scalars2.z;\n let vividness = u.scalars2.w;\n let blurMin = u.image.x;\n let blurMax = u.image.y;\n\n let uv = in.uv;\n let p_warp = domainWarp(uv, t);\n let zone = zoneField(p_warp, t);\n\n let radius = mix(blurMin, blurMax, zone);\n var col = zoneBlur(uv, radius);\n\n let cursorDelta = uv - u.cursor.xy;\n let cursorRadius = max(u.scalars1.w, 0.01);\n let cursorLean = exp(-dot(cursorDelta, cursorDelta) / (cursorRadius * cursorRadius * 0.5));\n col = col * (1.0 + 0.12 * cursorLean * u.scalars1.z);\n\n col = saturate3(col, saturation);\n col = vividnessFloor(col, vividness);\n\n col = aces(col);\n let fragCoord = in.pos.xy;\n let grain = hash21(fragCoord + t * 17.0);\n col = col + (grain - 0.5) * paperGrain;\n col = clamp(col * 0.985 + 0.008, vec3<f32>(0.0), vec3<f32>(1.0));\n\n col = linearToSrgb(col);\n col = col + (1.0 / 255.0) * (ign(fragCoord) - 0.5);\n\n return vec4<f32>(col * alpha, alpha);\n}\n";
@@ -1 +1 @@
1
- export declare const AURORA_MEDIUMS_WGSL = "\n// \u2500\u2500 Painterly luma + medium scalar accessors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst W_LUMA: vec3<f32> = vec3<f32>(0.2126, 0.7152, 0.0722);\n\nfn mStrokeAmount() -> f32 { return u.scalars4.x; }\nfn mStrokeScale() -> f32 { return u.scalars4.y; }\nfn mStrokeAnisotropy() -> f32 { return u.scalars4.z; }\nfn mCanvasGrain() -> f32 { return u.scalars4.w; }\nfn mWetEdge() -> f32 { return u.scalars5.x; }\nfn mGranulation() -> f32 { return u.scalars5.y; }\nfn mBrokenColor() -> f32 { return u.scalars5.z; }\nfn mKuwaharaQ() -> f32 { return u.scalars5.w; }\nfn mKuwaharaRadius() -> f32 { return u.kuwahara.x; }\n// BG.W-AUR-METAL-FINISH \u2014 the metal-medium knobs ride the FREE cursor.z/.w pad lanes\n// (uniformBridgeWGPU packs them; written 0 on a non-metal config \u2192 no-op). These read\n// the IN-STRUCT cursor \u2014 the metal light is cursor-synthesized so it crosses to WGSL\n// (a phantom uLightDir read would be flat on the primary \u2014 uLightDir is .frag-only).\nfn mMetalPolish() -> f32 { return u.cursor.z; }\nfn mMetalHeightScale() -> f32 { return u.cursor.w; }\n\n// \u2500\u2500 Gradient pack (BG.W-AUR-METAL-FINISH; the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// structureTensorField re-plumbs its already-computed luma gradient (Gx,Gy) out\n// through the return's .w lane so the metal medium pays ZERO extra taps. 12 bits per\n// bounded component ([-4,4]) into one f32; the crayon/kuwahara callers read only .xy/.z.\nfn packGrad(gx: f32, gy: f32) -> f32 {\n let qx = floor(clamp(gx * 0.125 + 0.5, 0.0, 1.0) * 4095.0);\n let qy = floor(clamp(gy * 0.125 + 0.5, 0.0, 1.0) * 4095.0);\n return qx + qy * 4096.0;\n}\nfn unpackGrad(packed: f32) -> vec2<f32> {\n let qy = floor(packed * (1.0 / 4096.0));\n let qx = packed - qy * 4096.0;\n return (vec2<f32>(qx, qy) * (1.0 / 4095.0) - 0.5) * 8.0;\n}\n\n// \u2500\u2500 Base color re-sample (the edge-mask operator the mediums Sobel/sector-sample) \u2500\u2500\n// The WGSL twin of mediums.glsl.ts sampleBase: warp -> nuclei field -> palette -> value.\nfn sampleBase(p: vec2<f32>, t: f32) -> vec3<f32> {\n let pw = domainWarp(p, t);\n let nf = nucleiField(pw, t);\n var c = samplePalette(nf.paletteId);\n c = c * (1.0 + u.scalars0.z * nf.valueMod);\n return c;\n}\n\n// \u2500\u2500 Broken color (hue + chroma jitter at constant OKLCh L) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn brokenColorJitter(c: vec3<f32>, hueSeed: f32, valueSeed: f32, strength: f32) -> vec3<f32> {\n let amt = clamp(mBrokenColor() * strength, 0.0, 1.0);\n if (amt <= 0.001) { return c; }\n var lch = oklabToOklch(linOklab(c));\n lch.z = lch.z + (hueSeed - 0.5) * (32.0 * PI / 180.0) * amt;\n lch.y = max(lch.y * (1.0 + (valueSeed - 0.5) * 0.28 * amt), 0.0);\n return max(oklabToLinearSrgb(oklchToOklab(lch)), vec3<f32>(0.0));\n}\n\n// \u2500\u2500 Structure-tensor / edge-tangent-flow (AW.W4.1; the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns vec4(tangent.x, tangent.y, A, packGrad(Gx,Gy)) \u2014 the minor-eigenvector\n// edge-tangent + coherence + the metal medium's packed gradient (BG.W-AUR-METAL-FINISH;\n// the .xy/.z crayon/kuwahara callers are byte-unchanged).\nfn structureTensorField(p: vec2<f32>, t: f32, fallbackDir: vec2<f32>) -> vec4<f32> {\n let e = 0.0035;\n let l00 = dot(sampleBase(p + vec2<f32>(-e, -e), t), W_LUMA);\n let l10 = dot(sampleBase(p + vec2<f32>(0.0, -e), t), W_LUMA);\n let l20 = dot(sampleBase(p + vec2<f32>( e, -e), t), W_LUMA);\n let l01 = dot(sampleBase(p + vec2<f32>(-e, 0.0), t), W_LUMA);\n let l21 = dot(sampleBase(p + vec2<f32>( e, 0.0), t), W_LUMA);\n let l02 = dot(sampleBase(p + vec2<f32>(-e, e), t), W_LUMA);\n let l12 = dot(sampleBase(p + vec2<f32>(0.0, e), t), W_LUMA);\n let l22 = dot(sampleBase(p + vec2<f32>( e, e), t), W_LUMA);\n let Gx = (l20 + 2.0 * l21 + l22) - (l00 + 2.0 * l01 + l02);\n let Gy = (l02 + 2.0 * l12 + l22) - (l00 + 2.0 * l10 + l20);\n let Jxx = Gx * Gx;\n let Jyy = Gy * Gy;\n let Jxy = Gx * Gy;\n let tr = Jxx + Jyy;\n let disc = sqrt(max((Jxx - Jyy) * (Jxx - Jyy) + 4.0 * Jxy * Jxy, 0.0));\n let lambdaMaj = 0.5 * (tr + disc);\n let lambdaMin = 0.5 * (tr - disc);\n var tangent: vec2<f32>;\n if (disc < 1e-7) {\n tangent = fallbackDir;\n } else {\n let theta = 0.5 * atan2(2.0 * Jxy, Jxx - Jyy);\n tangent = vec2<f32>(-sin(theta), cos(theta));\n }\n var A = (lambdaMaj - lambdaMin) / (lambdaMaj + lambdaMin + 1e-6);\n A = clamp(A, 0.0, 1.0);\n if (dot(tangent, fallbackDir) < 0.0) { tangent = -tangent; }\n let blendW = pow(A, 0.28);\n let dir = normalize(mix(fallbackDir, tangent, blendW) + vec2<f32>(1e-6, 1e-6));\n return vec4<f32>(dir, A, packGrad(Gx, Gy));\n}\n\n// \u2500\u2500 Flow field (the WGSL twin \u2014 the simple flow seed the medium fallback dirs use) \u2500\u2500\nfn flowField(p: vec2<f32>, t: f32) -> vec2<f32> {\n // Curl-noise-driven swirl (the medium-default dir; the full radial/swirl/diagonal\n // dispatch rides uniforms the WGSL struct does not carry \u2014 the procedural mediums\n // use this multi/curl seed as the fallback the structure tensor relaxes toward).\n let n = fbm(p * 2.0 + vec2<f32>(t * 0.02, t * 0.02));\n let a = n * 6.2831853;\n var dir = vec2<f32>(cos(a), sin(a));\n // Cursor swirl bias (matches the GLSL flow cursor term \u2014 the steady attraction).\n let cursorStrength = u.scalars3.y;\n let cursorRadius = u.scalars3.z;\n let cursor = u.cursor.xy;\n if (cursorStrength > 0.001) {\n let toCur = cursor - p;\n let d = length(toCur);\n let r = max(cursorRadius, 0.01);\n let w = exp(-(d * d) / (r * r * 0.5));\n let tangent = vec2<f32>(-toCur.y, toCur.x) / max(d, 1e-4);\n let a0 = atan2(dir.y, dir.x);\n let a1 = atan2(tangent.y, tangent.x);\n var da = a1 - a0;\n da = atan2(sin(da), cos(da));\n let aa = a0 + da * w * cursorStrength;\n dir = vec2<f32>(cos(aa), sin(aa));\n }\n return dir;\n}\n\n// \u2500\u2500 Watercolor \u2014 wet-edge cauliflowers + granulation + wash banding \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn mediumWatercolor(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n var col = col0;\n let eps = 0.004;\n let cx1 = sampleBase(p + vec2<f32>(eps, 0.0), t);\n let cx2 = sampleBase(p - vec2<f32>(eps, 0.0), t);\n let cy1 = sampleBase(p + vec2<f32>(0.0, eps), t);\n let cy2 = sampleBase(p - vec2<f32>(0.0, eps), t);\n let gx = dot(cx1 - cx2, W_LUMA);\n let gy = dot(cy1 - cy2, W_LUMA);\n let edge = sqrt(gx * gx + gy * gy) / (2.0 * eps);\n let mask = smoothstep(0.0, 2.5, edge);\n col = col * mix(1.0, 0.78, mask * mWetEdge());\n\n let paper = 0.5 * vnoise(p * 160.0) + 0.5 * vnoise(p * 360.0);\n let pigLoad = 1.0 - dot(col, W_LUMA);\n col = col * (1.0 - mGranulation() * pigLoad * (paper - 0.5));\n\n let band = fbm(vec2<f32>(p.x * 1.5, p.y * 0.4));\n col = col * (1.0 + 0.04 * (band - 0.5));\n return col;\n}\n\n// \u2500\u2500 Pastel \u2014 anisotropic stroke noise along the flow + tooth grain \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn mediumPastel(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n var col = col0;\n let flow = flowField(p, t);\n let perp = vec2<f32>(-flow.y, flow.x);\n let strokeScale = mStrokeScale();\n let along = dot(p, flow) * strokeScale;\n var across = dot(p, perp) * strokeScale;\n across = across + 0.03 * (vnoise(p * 260.0) - 0.5);\n\n let aniso = mix(1.0, 0.18, mStrokeAnisotropy());\n let stroke = fbm(vec2<f32>(along * aniso, across));\n col = col * mix(1.0, 0.82 + 0.32 * stroke, mStrokeAmount());\n\n let tooth = vnoise(p * 800.0);\n col = col * (1.0 - 0.08 * mStrokeAmount() * (tooth - 0.5));\n return col;\n}\n\n// \u2500\u2500 Crayon \u2014 DRY wax pigment on paper tooth (the tooth-multiply + scumble) \u2500\u2500\nfn mediumCrayon(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let flow = structureTensorField(p, t, flowField(p, t)).xy;\n let ang = atan2(flow.y, flow.x);\n let ca = cos(-ang);\n let sa = sin(-ang);\n let pr = vec2<f32>(p.x * ca - p.y * sa, p.x * sa + p.y * ca);\n\n let aniso = mix(0.45, 0.95, mStrokeAnisotropy());\n let scale = max(mStrokeScale() * 1.6, 180.0);\n\n let t1 = vnoise(vec2<f32>(pr.x * scale * aniso, pr.y * scale));\n let t2 = vnoise(vec2<f32>(pr.x * scale * aniso * 0.4, pr.y * scale * 0.4) + vec2<f32>(11.0, 11.0));\n let t3 = vnoise(vec2<f32>(pr.x * scale * aniso * 2.1, pr.y * scale * 2.1) + vec2<f32>(23.0, 23.0));\n let tooth = 0.55 * t1 + 0.30 * t2 + 0.15 * t3;\n\n let pressure = clamp(mStrokeAmount(), 0.0, 1.0);\n let bite = mix(0.18, 0.46, pressure);\n var result = col0 * (1.0 - bite * (0.5 - tooth));\n\n let scumbleMask = smoothstep(0.42, 0.78, vnoise(vec2<f32>(pr.x * scale * 0.55, pr.y * scale * 0.22) + vec2<f32>(7.0, 7.0)));\n let scumbleCoverage = scumbleMask * pressure * 0.7;\n let paper = col0 * mix(0.80, 0.94, pressure);\n result = mix(paper, result, scumbleCoverage);\n\n let pigmentCell = floor(pr * max(scale * 0.18, 32.0));\n let pigmentMask = smoothstep(0.28, 0.82, vnoise(pr * scale * 0.21 + vec2<f32>(19.0, 19.0)));\n result = brokenColorJitter(\n result,\n hash21(pigmentCell + vec2<f32>(17.0, 17.0)),\n hash21(pigmentCell * 2.1 + vec2<f32>(31.0, 31.0)),\n 0.45 + 0.55 * pigmentMask\n );\n\n result = saturate3(result, 1.08);\n return result;\n}\n\n// \u2500\u2500 Kuwahara \u2014 the SOFT anisotropic generalized Kuwahara painterly finish \u2500\u2500\u2500\u2500\n// THE KEYSTONE (Kyprianidis 2010). Aurora is a PROCEDURAL field (no input texture) so the\n// operator runs over sampleBase directly: an elliptical kernel oriented along the structure\n// tensor (elongated along the edge-tangent, narrowed across by the anisotropy), 8 OVERLAPPING\n// sectors via SMOOTH gaussian-angular weights, blended by 1/(1+var^q) (the SOFT criterion \u2192\n// no 8-spoke pinwheel by construction). 4 rings \u00D7 8 angular taps = 32 procedural samples.\nfn mediumKuwahara(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n let tangent = stf.xy;\n let A = stf.z;\n // The studio knob drives the patch radius; clamp into the procedural patch band.\n let radius = clamp(mKuwaharaRadius() + mStrokeScale() * 0.00018, 0.006, 0.024);\n let aniso = mix(1.0, 0.34, clamp(A, 0.0, 1.0));\n let ax = tangent;\n let ay = vec2<f32>(-tangent.y, tangent.x);\n\n // Per-sector weighted sums (8 sectors). WGSL has no runtime-indexed local arrays of\n // vectors as cleanly as GLSL, so unroll the sector accumulators explicitly.\n var mSum: array<vec3<f32>, 8>;\n var sSum: array<vec3<f32>, 8>;\n var wSum: array<f32, 8>;\n for (var i = 0; i < 8; i = i + 1) {\n mSum[i] = vec3<f32>(0.0);\n sSum[i] = vec3<f32>(0.0);\n wSum[i] = 0.0;\n }\n\n let RINGS = 4;\n let TAPS = 8;\n for (var r = 1; r <= RINGS; r = r + 1) {\n let rr = f32(r) / f32(RINGS);\n let radial = 1.0 - 0.6 * rr;\n for (var a = 0; a < TAPS; a = a + 1) {\n let ang = 6.2831853 * f32(a) / f32(TAPS);\n let dirE = ax * cos(ang) + ay * (sin(ang) * aniso);\n let off = dirE * (radius * rr);\n let c = sampleBase(p + off, t);\n for (var k = 0; k < 8; k = k + 1) {\n let sectorAng = 6.2831853 * f32(k) / 8.0;\n var d = ang - sectorAng;\n d = atan2(sin(d), cos(d));\n let sw = exp(-d * d * 2.2) * radial;\n mSum[k] = mSum[k] + c * sw;\n sSum[k] = sSum[k] + c * c * sw;\n wSum[k] = wSum[k] + sw;\n }\n }\n }\n\n let q = max(mKuwaharaQ(), 1.0);\n var accum = vec3<f32>(0.0);\n var accumW = 0.0;\n for (var k = 0; k < 8; k = k + 1) {\n let wk = max(wSum[k], 1e-4);\n let mean = mSum[k] / wk;\n let var3 = max(sSum[k] / wk - mean * mean, vec3<f32>(0.0));\n let variance = dot(var3, W_LUMA);\n let sectorW = 1.0 / (1.0 + pow(variance * 320.0, q));\n accum = accum + mean * sectorW;\n accumW = accumW + sectorW;\n }\n var result = accum / max(accumW, 1e-4);\n\n // Anchor in near-flat zones so the smoothing only bites at edges.\n let center = sampleBase(p, t);\n result = mix(center, result, clamp(0.35 + 0.65 * A, 0.0, 1.0));\n\n // Faint canvas tooth + pigment-saturation so the flattened patches read as oil paint.\n let tooth = vnoise(p * 300.0) - 0.5;\n result = result * (1.0 + tooth * 0.06 * mCanvasGrain());\n result = saturate3(result, 1.04);\n\n return mix(col0, result, clamp(mStrokeAmount(), 0.0, 1.0));\n}\n\n// \u2500\u2500 Metal \u2014 the two-term anisotropic BRDF (uMedium==8/9; the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\n// The field re-lights as warm folded metal: the luma HEIGHT field (the packed\n// structure-tensor gradient \u2192 the surface normal) catches an anisotropic Blinn streak\n// (brushed metal, running ALONG the coherent edge-tangent) plus a sharp crest, both\n// raked by the IN-STRUCT cursor-synth light (crosses to WGSL \u2014 never uLightDir). The\n// catch is the achromatic-warm anchor (never a cold chrome-blue). ZERO extra taps \u2014\n// the gradient is unpacked from the tensor's .w lane the caller already computed.\nconst METAL_CATCH_WARM: vec3<f32> = vec3<f32>(1.0, 0.97, 0.90);\nconst METAL_HEIGHT_SCALE: f32 = 2.2;\nconst METAL_LIGHT_Z: f32 = 0.55;\nconst METAL_IDLE_RAKE: vec2<f32> = vec2<f32>(0.32, 0.34);\nconst METAL_SHININESS_ANISO: f32 = 6.0;\nconst METAL_SHININESS_CREST: f32 = 40.0;\nconst METAL_COHERENCE_FLOOR: f32 = 0.22;\nconst METAL_BODY_FLOOR: f32 = 0.42;\nconst METAL_GRADIENT_FLATTEN: f32 = 0.55;\nconst METAL_SPARKLE_DENSITY: f32 = 240.0;\nconst METAL_SPARKLE_THRESH: f32 = 0.72;\nconst METAL_SPARKLE_AMP: f32 = 0.6;\n\nfn metalShade(baseCol: vec3<f32>, p: vec2<f32>, stf: vec4<f32>) -> vec3<f32> {\n let tangent = stf.xy;\n let A = stf.z;\n let grad = unpackGrad(stf.w);\n let N = normalize(vec3<f32>(grad * (METAL_HEIGHT_SCALE * mMetalHeightScale()), 1.0));\n let V = vec3<f32>(0.0, 0.0, 1.0);\n // Cursor-synth rake light (u.cursor is in-struct \u2014 crosses to WGSL).\n let L = normalize(vec3<f32>((u.cursor.xy - p) + METAL_IDLE_RAKE, METAL_LIGHT_Z));\n let H = normalize(L + V);\n // Anisotropic streak \u2014 brushed metal along the edge-tangent.\n let tH = dot(normalize(tangent), H.xy);\n let sinTH = sqrt(clamp(1.0 - tH * tH, 0.0, 1.0));\n let streak = pow(clamp(sinTH, 0.0, 1.0), METAL_SHININESS_ANISO);\n let crest = pow(clamp(dot(N, H), 0.0, 1.0), METAL_SHININESS_CREST);\n var spec = streak * crest;\n spec = spec * smoothstep(0.0, METAL_COHERENCE_FLOOR, A);\n // Technicolor valley base \u2014 the body keeps the FIELD hue; luma rides the relief.\n let diff = clamp(dot(N, L), 0.0, 1.0);\n let body = baseCol * (METAL_BODY_FLOOR + (1.0 - METAL_BODY_FLOOR) * diff);\n return body + METAL_CATCH_WARM * (spec * clamp(mMetalPolish(), 0.0, 4.0));\n}\n\nfn mediumMetal(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n return metalShade(col, p, stf);\n}\n\n// metal-gradient (uMedium==9) \u2014 the SAME BRDF over a pre-flattened base + the\n// twinkle-in-place flake sparkle (position FIXED per cell, phase-animated, facing-gated).\nfn mediumMetalGradient(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n let flat = mix(col, vec3<f32>(dot(col, W_LUMA)), METAL_GRADIENT_FLATTEN);\n var metal = metalShade(flat, p, stf);\n let grad = unpackGrad(stf.w);\n let facing = normalize(vec3<f32>(grad * (METAL_HEIGHT_SCALE * mMetalHeightScale()), 1.0)).z;\n let cell = floor(p * METAL_SPARKLE_DENSITY);\n let seed = hash21(cell);\n let tw = pow(clamp(sin(t + seed * 6.2831853), 0.0, 1.0), 40.0);\n let flakeGate = step(METAL_SPARKLE_THRESH, seed);\n metal = metal + METAL_CATCH_WARM * (tw * flakeGate * clamp(facing, 0.0, 1.0) * METAL_SPARKLE_AMP);\n return metal;\n}\n\n// \u2500\u2500 Medium dispatch (the WGSL twin of the GLSL main() if-ladder) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// uMedium: 0 smooth \u00B7 1 pastel \u00B7 2 watercolor \u00B7 3 oil \u00B7 4 crayon \u00B7 5 vangogh \u00B7\n// 6 oil-pastel \u00B7 7 kuwahara \u00B7 8 metal \u00B7 9 metal-gradient. The cheap peer mediums\n// (pastel/watercolor/crayon) + kuwahara + metal port their own bodies; the\n// oil/vangogh/oil-pastel STROKE cascade renders the anisotropic-Kuwahara PAINTERLY\n// finish here (a real oil-paint read, never the smooth core \u2014 the \"NO FALLBACKS on\n// Safari\" mandate; the full per-dab Starry-Night stroke WGSL is the booked\n// W-AURORA-WGPU-MEDIUMS-STROKES tail).\nfn applyMedium(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let medium = u.ints1.x;\n if (medium == 1) { return mediumPastel(col, p, t); }\n if (medium == 2) { return mediumWatercolor(col, p, t); }\n if (medium == 4) { return mediumCrayon(col, p, t); }\n // BG.W-AUR-METAL-FINISH \u2014 metal DUAL-PORTS (a .frag-only metal is invisible on the\n // WGSL primary of both browsers); 8 metal, 9 metal-gradient.\n if (medium == 8) { return mediumMetal(col, p, t); }\n if (medium == 9) { return mediumMetalGradient(col, p, t); }\n // oil(3) / vangogh(5) / oil-pastel(6) / kuwahara(7) all render the painterly\n // anisotropic-Kuwahara finish on the WGSL primary (the WebGL2 fallback carries the\n // full per-dab stroke cascade for oil/vangogh/oil-pastel).\n if (medium == 3 || medium == 5 || medium == 6 || medium == 7) {\n return mediumKuwahara(col, p, t);\n }\n return col;\n}\n";
1
+ export declare const AURORA_MEDIUMS_WGSL = "\n// \u2500\u2500 Painterly luma + medium scalar accessors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst W_LUMA: vec3<f32> = vec3<f32>(0.2126, 0.7152, 0.0722);\n\nfn mStrokeAmount() -> f32 { return u.scalars4.x; }\nfn mStrokeScale() -> f32 { return u.scalars4.y; }\nfn mStrokeAnisotropy() -> f32 { return u.scalars4.z; }\nfn mCanvasGrain() -> f32 { return u.scalars4.w; }\nfn mWetEdge() -> f32 { return u.scalars5.x; }\nfn mGranulation() -> f32 { return u.scalars5.y; }\nfn mBrokenColor() -> f32 { return u.scalars5.z; }\nfn mKuwaharaQ() -> f32 { return u.scalars5.w; }\nfn mKuwaharaRadius() -> f32 { return u.kuwahara.x; }\n// The metal-medium knobs ride the free cursor.z/.w pad lanes\n// (uniformBridgeWGPU packs them; written 0 on a non-metal config \u2192 no-op). These read\n// the IN-STRUCT cursor \u2014 the metal light is cursor-synthesized so it crosses to WGSL\n// (a phantom uLightDir read would be flat on the primary; uLightDir is fragment-only).\nfn mMetalPolish() -> f32 { return u.cursor.z; }\nfn mMetalHeightScale() -> f32 { return u.cursor.w; }\n\n// \u2500\u2500 Gradient pack (the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// structureTensorField re-plumbs its already-computed luma gradient (Gx,Gy) out\n// through the return value's .w lane so the metal medium pays ZERO extra taps. 12 bits per\n// bounded component ([-4,4]) fit into one f32; the crayon/kuwahara callers read only .xy/.z.\nfn packGrad(gx: f32, gy: f32) -> f32 {\n let qx = floor(clamp(gx * 0.125 + 0.5, 0.0, 1.0) * 4095.0);\n let qy = floor(clamp(gy * 0.125 + 0.5, 0.0, 1.0) * 4095.0);\n return qx + qy * 4096.0;\n}\nfn unpackGrad(packed: f32) -> vec2<f32> {\n let qy = floor(packed * (1.0 / 4096.0));\n let qx = packed - qy * 4096.0;\n return (vec2<f32>(qx, qy) * (1.0 / 4095.0) - 0.5) * 8.0;\n}\n\n// \u2500\u2500 Base color re-sample (the edge-mask operator the mediums Sobel/sector-sample) \u2500\u2500\n// The WGSL twin of mediums.glsl.ts sampleBase: warp -> nuclei field -> palette -> value.\nfn sampleBase(p: vec2<f32>, t: f32) -> vec3<f32> {\n let pw = domainWarp(p, t);\n let nf = nucleiField(pw, t);\n var c = samplePalette(nf.paletteId);\n c = c * (1.0 + u.scalars0.z * nf.valueMod);\n return c;\n}\n\n// \u2500\u2500 Broken color (hue + chroma jitter at constant OKLCh L) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn brokenColorJitter(c: vec3<f32>, hueSeed: f32, valueSeed: f32, strength: f32) -> vec3<f32> {\n let amt = clamp(mBrokenColor() * strength, 0.0, 1.0);\n if (amt <= 0.001) { return c; }\n var lch = oklabToOklch(linOklab(c));\n lch.z = lch.z + (hueSeed - 0.5) * (32.0 * PI / 180.0) * amt;\n lch.y = max(lch.y * (1.0 + (valueSeed - 0.5) * 0.28 * amt), 0.0);\n return max(oklabToLinearSrgb(oklchToOklab(lch)), vec3<f32>(0.0));\n}\n\n// \u2500\u2500 Structure tensor / edge-tangent flow (the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns vec4(tangent.x, tangent.y, A, packGrad(Gx,Gy)) \u2014 the minor-eigenvector\n// edge-tangent + coherence + the metal medium's packed gradient. The .xy/.z\n// crayon/kuwahara callers are byte-unchanged.\nfn structureTensorField(p: vec2<f32>, t: f32, fallbackDir: vec2<f32>) -> vec4<f32> {\n let e = 0.0035;\n let l00 = dot(sampleBase(p + vec2<f32>(-e, -e), t), W_LUMA);\n let l10 = dot(sampleBase(p + vec2<f32>(0.0, -e), t), W_LUMA);\n let l20 = dot(sampleBase(p + vec2<f32>( e, -e), t), W_LUMA);\n let l01 = dot(sampleBase(p + vec2<f32>(-e, 0.0), t), W_LUMA);\n let l21 = dot(sampleBase(p + vec2<f32>( e, 0.0), t), W_LUMA);\n let l02 = dot(sampleBase(p + vec2<f32>(-e, e), t), W_LUMA);\n let l12 = dot(sampleBase(p + vec2<f32>(0.0, e), t), W_LUMA);\n let l22 = dot(sampleBase(p + vec2<f32>( e, e), t), W_LUMA);\n let Gx = (l20 + 2.0 * l21 + l22) - (l00 + 2.0 * l01 + l02);\n let Gy = (l02 + 2.0 * l12 + l22) - (l00 + 2.0 * l10 + l20);\n let Jxx = Gx * Gx;\n let Jyy = Gy * Gy;\n let Jxy = Gx * Gy;\n let tr = Jxx + Jyy;\n let disc = sqrt(max((Jxx - Jyy) * (Jxx - Jyy) + 4.0 * Jxy * Jxy, 0.0));\n let lambdaMaj = 0.5 * (tr + disc);\n let lambdaMin = 0.5 * (tr - disc);\n var tangent: vec2<f32>;\n if (disc < 1e-7) {\n tangent = fallbackDir;\n } else {\n let theta = 0.5 * atan2(2.0 * Jxy, Jxx - Jyy);\n tangent = vec2<f32>(-sin(theta), cos(theta));\n }\n var A = (lambdaMaj - lambdaMin) / (lambdaMaj + lambdaMin + 1e-6);\n A = clamp(A, 0.0, 1.0);\n if (dot(tangent, fallbackDir) < 0.0) { tangent = -tangent; }\n let blendW = pow(A, 0.28);\n let dir = normalize(mix(fallbackDir, tangent, blendW) + vec2<f32>(1e-6, 1e-6));\n return vec4<f32>(dir, A, packGrad(Gx, Gy));\n}\n\n// \u2500\u2500 Flow field (the WGSL twin \u2014 the simple flow seed the medium fallback dirs use) \u2500\u2500\nfn flowField(p: vec2<f32>, t: f32) -> vec2<f32> {\n // Curl-noise-driven swirl (the medium-default dir; the full radial/swirl/diagonal\n // dispatch rides uniforms the WGSL struct does not carry \u2014 the procedural mediums\n // use this multi/curl seed as the fallback the structure tensor relaxes toward).\n let n = fbm(p * 2.0 + vec2<f32>(t * 0.02, t * 0.02));\n let a = n * 6.2831853;\n var dir = vec2<f32>(cos(a), sin(a));\n // Cursor swirl bias (matches the GLSL flow cursor term \u2014 the steady attraction).\n let cursorStrength = u.scalars3.y;\n let cursorRadius = u.scalars3.z;\n let cursor = u.cursor.xy;\n if (cursorStrength > 0.001) {\n let toCur = cursor - p;\n let d = length(toCur);\n let r = max(cursorRadius, 0.01);\n let w = exp(-(d * d) / (r * r * 0.5));\n let tangent = vec2<f32>(-toCur.y, toCur.x) / max(d, 1e-4);\n let a0 = atan2(dir.y, dir.x);\n let a1 = atan2(tangent.y, tangent.x);\n var da = a1 - a0;\n da = atan2(sin(da), cos(da));\n let aa = a0 + da * w * cursorStrength;\n dir = vec2<f32>(cos(aa), sin(aa));\n }\n return dir;\n}\n\n// \u2500\u2500 Watercolor \u2014 wet-edge cauliflowers + granulation + wash banding \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn mediumWatercolor(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n var col = col0;\n let eps = 0.004;\n let cx1 = sampleBase(p + vec2<f32>(eps, 0.0), t);\n let cx2 = sampleBase(p - vec2<f32>(eps, 0.0), t);\n let cy1 = sampleBase(p + vec2<f32>(0.0, eps), t);\n let cy2 = sampleBase(p - vec2<f32>(0.0, eps), t);\n let gx = dot(cx1 - cx2, W_LUMA);\n let gy = dot(cy1 - cy2, W_LUMA);\n let edge = sqrt(gx * gx + gy * gy) / (2.0 * eps);\n let mask = smoothstep(0.0, 2.5, edge);\n col = col * mix(1.0, 0.78, mask * mWetEdge());\n\n let paper = 0.5 * vnoise(p * 160.0) + 0.5 * vnoise(p * 360.0);\n let pigLoad = 1.0 - dot(col, W_LUMA);\n col = col * (1.0 - mGranulation() * pigLoad * (paper - 0.5));\n\n let band = fbm(vec2<f32>(p.x * 1.5, p.y * 0.4));\n col = col * (1.0 + 0.04 * (band - 0.5));\n return col;\n}\n\n// \u2500\u2500 Pastel \u2014 anisotropic stroke noise along the flow + tooth grain \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfn mediumPastel(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n var col = col0;\n let flow = flowField(p, t);\n let perp = vec2<f32>(-flow.y, flow.x);\n let strokeScale = mStrokeScale();\n let along = dot(p, flow) * strokeScale;\n var across = dot(p, perp) * strokeScale;\n across = across + 0.03 * (vnoise(p * 260.0) - 0.5);\n\n let aniso = mix(1.0, 0.18, mStrokeAnisotropy());\n let stroke = fbm(vec2<f32>(along * aniso, across));\n col = col * mix(1.0, 0.82 + 0.32 * stroke, mStrokeAmount());\n\n let tooth = vnoise(p * 800.0);\n col = col * (1.0 - 0.08 * mStrokeAmount() * (tooth - 0.5));\n return col;\n}\n\n// \u2500\u2500 Crayon \u2014 DRY wax pigment on paper tooth (the tooth-multiply + scumble) \u2500\u2500\nfn mediumCrayon(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let flow = structureTensorField(p, t, flowField(p, t)).xy;\n let ang = atan2(flow.y, flow.x);\n let ca = cos(-ang);\n let sa = sin(-ang);\n let pr = vec2<f32>(p.x * ca - p.y * sa, p.x * sa + p.y * ca);\n\n let aniso = mix(0.45, 0.95, mStrokeAnisotropy());\n let scale = max(mStrokeScale() * 1.6, 180.0);\n\n let t1 = vnoise(vec2<f32>(pr.x * scale * aniso, pr.y * scale));\n let t2 = vnoise(vec2<f32>(pr.x * scale * aniso * 0.4, pr.y * scale * 0.4) + vec2<f32>(11.0, 11.0));\n let t3 = vnoise(vec2<f32>(pr.x * scale * aniso * 2.1, pr.y * scale * 2.1) + vec2<f32>(23.0, 23.0));\n let tooth = 0.55 * t1 + 0.30 * t2 + 0.15 * t3;\n\n let pressure = clamp(mStrokeAmount(), 0.0, 1.0);\n let bite = mix(0.18, 0.46, pressure);\n var result = col0 * (1.0 - bite * (0.5 - tooth));\n\n let scumbleMask = smoothstep(0.42, 0.78, vnoise(vec2<f32>(pr.x * scale * 0.55, pr.y * scale * 0.22) + vec2<f32>(7.0, 7.0)));\n let scumbleCoverage = scumbleMask * pressure * 0.7;\n let paper = col0 * mix(0.80, 0.94, pressure);\n result = mix(paper, result, scumbleCoverage);\n\n let pigmentCell = floor(pr * max(scale * 0.18, 32.0));\n let pigmentMask = smoothstep(0.28, 0.82, vnoise(pr * scale * 0.21 + vec2<f32>(19.0, 19.0)));\n result = brokenColorJitter(\n result,\n hash21(pigmentCell + vec2<f32>(17.0, 17.0)),\n hash21(pigmentCell * 2.1 + vec2<f32>(31.0, 31.0)),\n 0.45 + 0.55 * pigmentMask\n );\n\n result = saturate3(result, 1.08);\n return result;\n}\n\n// \u2500\u2500 Kuwahara \u2014 the SOFT anisotropic generalized Kuwahara painterly finish \u2500\u2500\u2500\u2500\n// THE KEYSTONE (Kyprianidis 2010). Aurora is a PROCEDURAL field (no input texture) so the\n// operator runs over sampleBase directly: an elliptical kernel oriented along the structure\n// tensor (elongated along the edge-tangent, narrowed across by the anisotropy), 8 OVERLAPPING\n// sectors via SMOOTH gaussian-angular weights, blended by 1/(1+var^q) (the SOFT criterion \u2192\n// no 8-spoke pinwheel by construction). 4 rings \u00D7 8 angular taps = 32 procedural samples.\nfn mediumKuwahara(col0: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n let tangent = stf.xy;\n let A = stf.z;\n // The studio knob drives the patch radius; clamp into the procedural patch band.\n let radius = clamp(mKuwaharaRadius() + mStrokeScale() * 0.00018, 0.006, 0.024);\n let aniso = mix(1.0, 0.34, clamp(A, 0.0, 1.0));\n let ax = tangent;\n let ay = vec2<f32>(-tangent.y, tangent.x);\n\n // Per-sector weighted sums (8 sectors). WGSL has no runtime-indexed local arrays of\n // vectors as cleanly as GLSL, so unroll the sector accumulators explicitly.\n var mSum: array<vec3<f32>, 8>;\n var sSum: array<vec3<f32>, 8>;\n var wSum: array<f32, 8>;\n for (var i = 0; i < 8; i = i + 1) {\n mSum[i] = vec3<f32>(0.0);\n sSum[i] = vec3<f32>(0.0);\n wSum[i] = 0.0;\n }\n\n let RINGS = 4;\n let TAPS = 8;\n for (var r = 1; r <= RINGS; r = r + 1) {\n let rr = f32(r) / f32(RINGS);\n let radial = 1.0 - 0.6 * rr;\n for (var a = 0; a < TAPS; a = a + 1) {\n let ang = 6.2831853 * f32(a) / f32(TAPS);\n let dirE = ax * cos(ang) + ay * (sin(ang) * aniso);\n let off = dirE * (radius * rr);\n let c = sampleBase(p + off, t);\n for (var k = 0; k < 8; k = k + 1) {\n let sectorAng = 6.2831853 * f32(k) / 8.0;\n var d = ang - sectorAng;\n d = atan2(sin(d), cos(d));\n let sw = exp(-d * d * 2.2) * radial;\n mSum[k] = mSum[k] + c * sw;\n sSum[k] = sSum[k] + c * c * sw;\n wSum[k] = wSum[k] + sw;\n }\n }\n }\n\n let q = max(mKuwaharaQ(), 1.0);\n var accum = vec3<f32>(0.0);\n var accumW = 0.0;\n for (var k = 0; k < 8; k = k + 1) {\n let wk = max(wSum[k], 1e-4);\n let mean = mSum[k] / wk;\n let var3 = max(sSum[k] / wk - mean * mean, vec3<f32>(0.0));\n let variance = dot(var3, W_LUMA);\n let sectorW = 1.0 / (1.0 + pow(variance * 320.0, q));\n accum = accum + mean * sectorW;\n accumW = accumW + sectorW;\n }\n var result = accum / max(accumW, 1e-4);\n\n // Anchor in near-flat zones so the smoothing only bites at edges.\n let center = sampleBase(p, t);\n result = mix(center, result, clamp(0.35 + 0.65 * A, 0.0, 1.0));\n\n // Faint canvas tooth + pigment-saturation so the flattened patches read as oil paint.\n let tooth = vnoise(p * 300.0) - 0.5;\n result = result * (1.0 + tooth * 0.06 * mCanvasGrain());\n result = saturate3(result, 1.04);\n\n return mix(col0, result, clamp(mStrokeAmount(), 0.0, 1.0));\n}\n\n// \u2500\u2500 Metal \u2014 the two-term anisotropic BRDF (uMedium==8/9; the WGSL twin) \u2500\u2500\u2500\u2500\u2500\u2500\n// The field re-lights as warm folded metal: the luma HEIGHT field (the packed\n// structure-tensor gradient \u2192 the surface normal) catches an anisotropic Blinn streak\n// (brushed metal, running ALONG the coherent edge-tangent) plus a sharp crest, both\n// raked by the IN-STRUCT cursor-synth light (crosses to WGSL \u2014 never uLightDir). The\n// catch is the achromatic-warm anchor (never a cold chrome-blue). ZERO extra taps \u2014\n// the gradient is unpacked from the tensor's .w lane the caller already computed.\nconst METAL_CATCH_WARM: vec3<f32> = vec3<f32>(1.0, 0.97, 0.90);\nconst METAL_HEIGHT_SCALE: f32 = 2.2;\nconst METAL_LIGHT_Z: f32 = 0.55;\nconst METAL_IDLE_RAKE: vec2<f32> = vec2<f32>(0.32, 0.34);\nconst METAL_SHININESS_ANISO: f32 = 6.0;\nconst METAL_SHININESS_CREST: f32 = 40.0;\nconst METAL_COHERENCE_FLOOR: f32 = 0.22;\nconst METAL_BODY_FLOOR: f32 = 0.42;\nconst METAL_GRADIENT_FLATTEN: f32 = 0.55;\nconst METAL_SPARKLE_DENSITY: f32 = 240.0;\nconst METAL_SPARKLE_THRESH: f32 = 0.72;\nconst METAL_SPARKLE_AMP: f32 = 0.6;\n\nfn metalShade(baseCol: vec3<f32>, p: vec2<f32>, stf: vec4<f32>) -> vec3<f32> {\n let tangent = stf.xy;\n let A = stf.z;\n let grad = unpackGrad(stf.w);\n let N = normalize(vec3<f32>(grad * (METAL_HEIGHT_SCALE * mMetalHeightScale()), 1.0));\n let V = vec3<f32>(0.0, 0.0, 1.0);\n // Cursor-synth rake light (u.cursor is in-struct \u2014 crosses to WGSL).\n let L = normalize(vec3<f32>((u.cursor.xy - p) + METAL_IDLE_RAKE, METAL_LIGHT_Z));\n let H = normalize(L + V);\n // Anisotropic streak \u2014 brushed metal along the edge-tangent.\n let tH = dot(normalize(tangent), H.xy);\n let sinTH = sqrt(clamp(1.0 - tH * tH, 0.0, 1.0));\n let streak = pow(clamp(sinTH, 0.0, 1.0), METAL_SHININESS_ANISO);\n let crest = pow(clamp(dot(N, H), 0.0, 1.0), METAL_SHININESS_CREST);\n var spec = streak * crest;\n spec = spec * smoothstep(0.0, METAL_COHERENCE_FLOOR, A);\n // Technicolor valley base \u2014 the body keeps the FIELD hue; luma rides the relief.\n let diff = clamp(dot(N, L), 0.0, 1.0);\n let body = baseCol * (METAL_BODY_FLOOR + (1.0 - METAL_BODY_FLOOR) * diff);\n return body + METAL_CATCH_WARM * (spec * clamp(mMetalPolish(), 0.0, 4.0));\n}\n\nfn mediumMetal(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n return metalShade(col, p, stf);\n}\n\n// metal-gradient (uMedium==9) \u2014 the SAME BRDF over a pre-flattened base + the\n// twinkle-in-place flake sparkle (position FIXED per cell, phase-animated, facing-gated).\nfn mediumMetalGradient(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let stf = structureTensorField(p, t, flowField(p, t));\n let flat = mix(col, vec3<f32>(dot(col, W_LUMA)), METAL_GRADIENT_FLATTEN);\n var metal = metalShade(flat, p, stf);\n let grad = unpackGrad(stf.w);\n let facing = normalize(vec3<f32>(grad * (METAL_HEIGHT_SCALE * mMetalHeightScale()), 1.0)).z;\n let cell = floor(p * METAL_SPARKLE_DENSITY);\n let seed = hash21(cell);\n let tw = pow(clamp(sin(t + seed * 6.2831853), 0.0, 1.0), 40.0);\n let flakeGate = step(METAL_SPARKLE_THRESH, seed);\n metal = metal + METAL_CATCH_WARM * (tw * flakeGate * clamp(facing, 0.0, 1.0) * METAL_SPARKLE_AMP);\n return metal;\n}\n\n// \u2500\u2500 Medium dispatch (the WGSL twin of the GLSL main() if-ladder) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// uMedium: 0 smooth \u00B7 1 pastel \u00B7 2 watercolor \u00B7 3 oil \u00B7 4 crayon \u00B7 5 vangogh \u00B7\n// 6 oil-pastel \u00B7 7 kuwahara \u00B7 8 metal \u00B7 9 metal-gradient. The cheap peer mediums\n// (pastel/watercolor/crayon) + kuwahara + metal port their own bodies; the\n// oil/vangogh/oil-pastel STROKE cascade renders the anisotropic-Kuwahara PAINTERLY\n// finish here (a real oil-paint read, never the smooth core \u2014 the \"NO FALLBACKS on\n// Safari\" mandate; the full per-dab Starry-Night stroke WGSL remains a separate\n// full-fidelity port).\nfn applyMedium(col: vec3<f32>, p: vec2<f32>, t: f32) -> vec3<f32> {\n let medium = u.ints1.x;\n if (medium == 1) { return mediumPastel(col, p, t); }\n if (medium == 2) { return mediumWatercolor(col, p, t); }\n if (medium == 4) { return mediumCrayon(col, p, t); }\n // Metal uses both renderer paths; a fragment-only implementation is invisible on the\n // WGSL primary. IDs 8 and 9 select metal and metal-gradient respectively.\n if (medium == 8) { return mediumMetal(col, p, t); }\n if (medium == 9) { return mediumMetalGradient(col, p, t); }\n // oil(3), vangogh(5), oil-pastel(6), kuwahara(7) all render the painterly\n // anisotropic-Kuwahara finish on the WGSL primary (the WebGL2 fallback carries the\n // full per-dab stroke cascade for oil/vangogh/oil-pastel).\n if (medium == 3 || medium == 5 || medium == 6 || medium == 7) {\n return mediumKuwahara(col, p, t);\n }\n return col;\n}\n";