shaders 2.5.116 → 2.5.118

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 (381) hide show
  1. package/dist/core/BarShift-2XBhva1A.js +141 -0
  2. package/dist/core/{Blur-DG7lJKPo.js → Blur-5_t3tR_g.js} +1 -1
  3. package/dist/core/BrickPattern-BfTsjp4I.js +175 -0
  4. package/dist/core/{ChannelBlur-BhcCkwcO.js → ChannelBlur-DWgS3nhn.js} +1 -1
  5. package/dist/core/Chevron-BKZjAXR_.js +142 -0
  6. package/dist/core/ColorWheel-BQUKQPM-.js +140 -0
  7. package/dist/core/{Crescent-DiioCL2k.js → Crescent-ppz7W7eM.js} +1 -1
  8. package/dist/core/{Cross-CxQTHuxC.js → Cross-BfNOtQ6s.js} +1 -1
  9. package/dist/core/{Crystal-B3iO7o_n.js → Crystal-QsQoy8fZ.js} +1 -1
  10. package/dist/core/{Ellipse-iwH-zEvD.js → Ellipse-sWhNvW9-.js} +1 -1
  11. package/dist/core/{Emboss-B4i61QDT.js → Emboss-DGaubb9x.js} +1 -1
  12. package/dist/core/{Flower-CdHVKJKu.js → Flower-BbRNrXIa.js} +1 -1
  13. package/dist/core/FractalNoise-Ccufnbw6.js +184 -0
  14. package/dist/core/{Glass-B19xsZLn.js → Glass-CXT1jdLw.js} +2 -2
  15. package/dist/core/{Glow-CsTZA75y.js → Glow-5PP4-rM9.js} +1 -1
  16. package/dist/core/Marble-DkHLcqFD.js +124 -0
  17. package/dist/core/{Neon-BeGABHrs.js → Neon-DQDB7hAE.js} +1 -1
  18. package/dist/core/{Polygon-_3DSqSBg.js → Polygon-C6_siOs0.js} +1 -1
  19. package/dist/core/{ProgressiveBlur-Dh8W2bZ3.js → ProgressiveBlur-BJwJ5mE0.js} +1 -1
  20. package/dist/core/{Ring-4J6h5Iof.js → Ring-CtnDtTY8.js} +1 -1
  21. package/dist/core/{RoundedRect-Dj-gqOc0.js → RoundedRect-tnt7Jr5b.js} +1 -1
  22. package/dist/core/{SmokeFill-rM9vUIm4.js → SmokeFill-DzEtYeKN.js} +1 -1
  23. package/dist/core/{Star-CJ4mkBZg.js → Star-0Flymgm9.js} +1 -1
  24. package/dist/core/SunBurst-D9X1-buZ.js +127 -0
  25. package/dist/core/{TiltShift-DSQ-CsXz.js → TiltShift-r4qzPb2k.js} +1 -1
  26. package/dist/core/{Trapezoid-P9gXhH9a.js → Trapezoid-JmybJMUr.js} +1 -1
  27. package/dist/core/{Vesica-DYov_i53.js → Vesica-D7iqgpJg.js} +1 -1
  28. package/dist/core/{VideoTexture-Cr1f0IOE.js → VideoTexture-D9XxE1Hw.js} +1 -1
  29. package/dist/core/{WebcamTexture-BQJpZvC5.js → WebcamTexture-9Td8qQWm.js} +1 -1
  30. package/dist/core/WorleyNoise-CWytDfGH.js +323 -0
  31. package/dist/core/index.js +117 -109
  32. package/dist/core/registry.js +117 -109
  33. package/dist/core/shaderRegistry-CO5SCxc6.js +270 -0
  34. package/dist/core/shaderRegistry.d.ts.map +1 -1
  35. package/dist/core/shaders/BarShift/index.d.ts +47 -0
  36. package/dist/core/shaders/BarShift/index.d.ts.map +1 -0
  37. package/dist/core/shaders/BarShift/index.js +6 -0
  38. package/dist/core/shaders/Beam/index.js +1 -1
  39. package/dist/core/shaders/Blob/index.js +1 -1
  40. package/dist/core/shaders/Blur/index.js +2 -2
  41. package/dist/core/shaders/BrickPattern/index.d.ts +79 -0
  42. package/dist/core/shaders/BrickPattern/index.d.ts.map +1 -0
  43. package/dist/core/shaders/BrickPattern/index.js +5 -0
  44. package/dist/core/shaders/BrightnessContrast/index.js +1 -1
  45. package/dist/core/shaders/Bulge/index.js +1 -1
  46. package/dist/core/shaders/CRTScreen/index.js +1 -1
  47. package/dist/core/shaders/ChannelBlur/index.js +2 -2
  48. package/dist/core/shaders/Checkerboard/index.js +1 -1
  49. package/dist/core/shaders/Chevron/index.d.ts +66 -0
  50. package/dist/core/shaders/Chevron/index.d.ts.map +1 -0
  51. package/dist/core/shaders/Chevron/index.js +5 -0
  52. package/dist/core/shaders/ChromaFlow/index.js +1 -1
  53. package/dist/core/shaders/ChromaticAberration/index.js +1 -1
  54. package/dist/core/shaders/Circle/index.js +1 -1
  55. package/dist/core/shaders/ColorWheel/index.d.ts +62 -0
  56. package/dist/core/shaders/ColorWheel/index.d.ts.map +1 -0
  57. package/dist/core/shaders/ColorWheel/index.js +5 -0
  58. package/dist/core/shaders/ConcentricSpin/index.js +1 -1
  59. package/dist/core/shaders/ConicGradient/index.js +1 -1
  60. package/dist/core/shaders/ContourLines/index.js +1 -1
  61. package/dist/core/shaders/Crescent/index.js +2 -2
  62. package/dist/core/shaders/Cross/index.js +2 -2
  63. package/dist/core/shaders/Crystal/index.js +2 -2
  64. package/dist/core/shaders/CursorRipples/index.js +1 -1
  65. package/dist/core/shaders/CursorTrail/index.js +1 -1
  66. package/dist/core/shaders/DOMTexture/index.js +1 -1
  67. package/dist/core/shaders/DiamondGradient/index.js +1 -1
  68. package/dist/core/shaders/DiffuseBlur/index.js +1 -1
  69. package/dist/core/shaders/Dither/index.js +1 -1
  70. package/dist/core/shaders/DotGrid/index.js +1 -1
  71. package/dist/core/shaders/DropShadow/index.js +1 -1
  72. package/dist/core/shaders/Duotone/index.js +1 -1
  73. package/dist/core/shaders/Ellipse/index.js +2 -2
  74. package/dist/core/shaders/Emboss/index.js +2 -2
  75. package/dist/core/shaders/FallingLines/index.js +1 -1
  76. package/dist/core/shaders/FilmGrain/index.js +1 -1
  77. package/dist/core/shaders/FloatingParticles/index.js +1 -1
  78. package/dist/core/shaders/FlowField/index.js +1 -1
  79. package/dist/core/shaders/Flower/index.js +2 -2
  80. package/dist/core/shaders/FlowingGradient/index.js +1 -1
  81. package/dist/core/shaders/FlutedGlass/index.js +1 -1
  82. package/dist/core/shaders/Fog/index.js +1 -1
  83. package/dist/core/shaders/Form3D/index.js +1 -1
  84. package/dist/core/shaders/FractalNoise/index.d.ts +67 -0
  85. package/dist/core/shaders/FractalNoise/index.d.ts.map +1 -0
  86. package/dist/core/shaders/FractalNoise/index.js +5 -0
  87. package/dist/core/shaders/Glass/index.js +3 -3
  88. package/dist/core/shaders/GlassTiles/index.js +1 -1
  89. package/dist/core/shaders/Glitch/index.js +1 -1
  90. package/dist/core/shaders/Glow/index.js +2 -2
  91. package/dist/core/shaders/Godrays/index.js +1 -1
  92. package/dist/core/shaders/Grayscale/index.js +1 -1
  93. package/dist/core/shaders/Grid/index.js +1 -1
  94. package/dist/core/shaders/GridDistortion/index.js +1 -1
  95. package/dist/core/shaders/Group/index.js +1 -1
  96. package/dist/core/shaders/Halftone/index.js +1 -1
  97. package/dist/core/shaders/HexGrid/index.js +1 -1
  98. package/dist/core/shaders/HueShift/index.js +1 -1
  99. package/dist/core/shaders/ImageTexture/index.js +1 -1
  100. package/dist/core/shaders/Invert/index.js +1 -1
  101. package/dist/core/shaders/Kaleidoscope/index.js +1 -1
  102. package/dist/core/shaders/LensFlare/index.js +1 -1
  103. package/dist/core/shaders/LinearBlur/index.js +1 -1
  104. package/dist/core/shaders/LinearGradient/index.js +1 -1
  105. package/dist/core/shaders/Liquify/index.js +1 -1
  106. package/dist/core/shaders/Marble/index.d.ts +61 -0
  107. package/dist/core/shaders/Marble/index.d.ts.map +1 -0
  108. package/dist/core/shaders/Marble/index.js +5 -0
  109. package/dist/core/shaders/Mirror/index.js +1 -1
  110. package/dist/core/shaders/MultiPointGradient/index.js +1 -1
  111. package/dist/core/shaders/Neon/index.js +2 -2
  112. package/dist/core/shaders/Paper/index.js +1 -1
  113. package/dist/core/shaders/Perspective/index.js +1 -1
  114. package/dist/core/shaders/Pixelate/index.js +1 -1
  115. package/dist/core/shaders/Plasma/index.js +1 -1
  116. package/dist/core/shaders/PolarCoordinates/index.js +1 -1
  117. package/dist/core/shaders/Polygon/index.js +2 -2
  118. package/dist/core/shaders/Posterize/index.js +1 -1
  119. package/dist/core/shaders/ProgressiveBlur/index.js +2 -2
  120. package/dist/core/shaders/RadialGradient/index.js +1 -1
  121. package/dist/core/shaders/RectangularCoordinates/index.js +1 -1
  122. package/dist/core/shaders/Ring/index.js +2 -2
  123. package/dist/core/shaders/Ripples/index.js +1 -1
  124. package/dist/core/shaders/RoundedRect/index.js +2 -2
  125. package/dist/core/shaders/Saturation/index.js +1 -1
  126. package/dist/core/shaders/Sharpness/index.js +1 -1
  127. package/dist/core/shaders/Shatter/index.js +1 -1
  128. package/dist/core/shaders/SimplexNoise/index.js +1 -1
  129. package/dist/core/shaders/SineWave/index.js +1 -1
  130. package/dist/core/shaders/Smoke/index.js +1 -1
  131. package/dist/core/shaders/SmokeFill/index.js +2 -2
  132. package/dist/core/shaders/Solarize/index.js +1 -1
  133. package/dist/core/shaders/SolidColor/index.js +1 -1
  134. package/dist/core/shaders/Spherize/index.js +1 -1
  135. package/dist/core/shaders/Spiral/index.js +1 -1
  136. package/dist/core/shaders/Star/index.js +2 -2
  137. package/dist/core/shaders/Strands/index.js +1 -1
  138. package/dist/core/shaders/Stretch/index.js +1 -1
  139. package/dist/core/shaders/Stripes/index.js +1 -1
  140. package/dist/core/shaders/StudioBackground/index.js +1 -1
  141. package/dist/core/shaders/SunBurst/index.d.ts +61 -0
  142. package/dist/core/shaders/SunBurst/index.d.ts.map +1 -0
  143. package/dist/core/shaders/SunBurst/index.js +4 -0
  144. package/dist/core/shaders/Swirl/index.js +1 -1
  145. package/dist/core/shaders/TiltShift/index.js +2 -2
  146. package/dist/core/shaders/Tint/index.js +1 -1
  147. package/dist/core/shaders/Trapezoid/index.js +2 -2
  148. package/dist/core/shaders/Tritone/index.js +1 -1
  149. package/dist/core/shaders/Truchet/index.js +1 -1
  150. package/dist/core/shaders/Twirl/index.js +1 -1
  151. package/dist/core/shaders/VHS/index.js +1 -1
  152. package/dist/core/shaders/Vesica/index.js +2 -2
  153. package/dist/core/shaders/Vibrance/index.js +1 -1
  154. package/dist/core/shaders/VideoTexture/index.js +2 -2
  155. package/dist/core/shaders/Vignette/index.js +1 -1
  156. package/dist/core/shaders/Voronoi/index.js +1 -1
  157. package/dist/core/shaders/WaveDistortion/index.js +1 -1
  158. package/dist/core/shaders/Weave/index.js +1 -1
  159. package/dist/core/shaders/WebcamTexture/index.js +2 -2
  160. package/dist/core/shaders/WorleyNoise/index.d.ts +99 -0
  161. package/dist/core/shaders/WorleyNoise/index.d.ts.map +1 -0
  162. package/dist/core/shaders/WorleyNoise/index.js +5 -0
  163. package/dist/core/shaders/ZoomBlur/index.js +1 -1
  164. package/dist/js/createShader.js +1 -1
  165. package/dist/js/utils/generatePresetCode.d.ts.map +1 -1
  166. package/dist/js/utils/generatePresetCode.js +116 -0
  167. package/dist/react/BarShift.js +217 -0
  168. package/dist/react/BrickPattern.js +217 -0
  169. package/dist/react/Chevron.js +217 -0
  170. package/dist/react/ColorWheel.js +217 -0
  171. package/dist/react/FractalNoise.js +217 -0
  172. package/dist/react/Marble.js +217 -0
  173. package/dist/react/Preview.js +8 -0
  174. package/dist/react/Shader.js +1 -1
  175. package/dist/react/SunBurst.js +217 -0
  176. package/dist/react/WorleyNoise.js +217 -0
  177. package/dist/react/bundle.js +268 -268
  178. package/dist/react/components/BarShift.d.ts +35 -0
  179. package/dist/react/components/BarShift.d.ts.map +1 -0
  180. package/dist/react/components/BrickPattern.d.ts +38 -0
  181. package/dist/react/components/BrickPattern.d.ts.map +1 -0
  182. package/dist/react/components/Chevron.d.ts +37 -0
  183. package/dist/react/components/Chevron.d.ts.map +1 -0
  184. package/dist/react/components/ColorWheel.d.ts +34 -0
  185. package/dist/react/components/ColorWheel.d.ts.map +1 -0
  186. package/dist/react/components/FractalNoise.d.ts +36 -0
  187. package/dist/react/components/FractalNoise.d.ts.map +1 -0
  188. package/dist/react/components/Marble.d.ts +35 -0
  189. package/dist/react/components/Marble.d.ts.map +1 -0
  190. package/dist/react/components/SunBurst.d.ts +36 -0
  191. package/dist/react/components/SunBurst.d.ts.map +1 -0
  192. package/dist/react/components/WorleyNoise.d.ts +39 -0
  193. package/dist/react/components/WorleyNoise.d.ts.map +1 -0
  194. package/dist/react/engine/Preview.d.ts.map +1 -1
  195. package/dist/react/index.d.ts +8 -0
  196. package/dist/react/index.d.ts.map +1 -1
  197. package/dist/react/index.js +9 -1
  198. package/dist/react/utils/generatePresetCode.d.ts.map +1 -1
  199. package/dist/react/utils/generatePresetCode.js +116 -0
  200. package/dist/registry.js +10924 -8503
  201. package/dist/solid/components/BarShift.d.ts +32 -0
  202. package/dist/solid/components/BarShift.d.ts.map +1 -0
  203. package/dist/solid/components/BarShift.js +228 -0
  204. package/dist/solid/components/BrickPattern.d.ts +35 -0
  205. package/dist/solid/components/BrickPattern.d.ts.map +1 -0
  206. package/dist/solid/components/BrickPattern.js +228 -0
  207. package/dist/solid/components/Chevron.d.ts +34 -0
  208. package/dist/solid/components/Chevron.d.ts.map +1 -0
  209. package/dist/solid/components/Chevron.js +228 -0
  210. package/dist/solid/components/ColorWheel.d.ts +31 -0
  211. package/dist/solid/components/ColorWheel.d.ts.map +1 -0
  212. package/dist/solid/components/ColorWheel.js +228 -0
  213. package/dist/solid/components/FractalNoise.d.ts +33 -0
  214. package/dist/solid/components/FractalNoise.d.ts.map +1 -0
  215. package/dist/solid/components/FractalNoise.js +228 -0
  216. package/dist/solid/components/Marble.d.ts +32 -0
  217. package/dist/solid/components/Marble.d.ts.map +1 -0
  218. package/dist/solid/components/Marble.js +228 -0
  219. package/dist/solid/components/SunBurst.d.ts +33 -0
  220. package/dist/solid/components/SunBurst.d.ts.map +1 -0
  221. package/dist/solid/components/SunBurst.js +228 -0
  222. package/dist/solid/components/WorleyNoise.d.ts +36 -0
  223. package/dist/solid/components/WorleyNoise.d.ts.map +1 -0
  224. package/dist/solid/components/WorleyNoise.js +228 -0
  225. package/dist/solid/engine/Preview.d.ts.map +1 -1
  226. package/dist/solid/engine/Preview.js +230 -214
  227. package/dist/solid/engine/Shader.js +1 -1
  228. package/dist/solid/index.d.ts +8 -0
  229. package/dist/solid/index.d.ts.map +1 -1
  230. package/dist/solid/index.js +230 -214
  231. package/dist/solid/utils/generatePresetCode.d.ts.map +1 -1
  232. package/dist/solid/utils/generatePresetCode.js +116 -0
  233. package/dist/svelte/components/BarShift.svelte.d.ts +22 -0
  234. package/dist/svelte/components/BrickPattern.svelte.d.ts +25 -0
  235. package/dist/svelte/components/Chevron.svelte.d.ts +24 -0
  236. package/dist/svelte/components/ColorWheel.svelte.d.ts +21 -0
  237. package/dist/svelte/components/FractalNoise.svelte.d.ts +23 -0
  238. package/dist/svelte/components/Marble.svelte.d.ts +22 -0
  239. package/dist/svelte/components/SunBurst.svelte.d.ts +23 -0
  240. package/dist/svelte/components/WorleyNoise.svelte.d.ts +26 -0
  241. package/dist/svelte/index.d.ts +8 -0
  242. package/dist/svelte/index.js +2246 -646
  243. package/dist/svelte/source/components/BarShift.svelte +328 -0
  244. package/dist/svelte/source/components/BrickPattern.svelte +331 -0
  245. package/dist/svelte/source/components/Chevron.svelte +330 -0
  246. package/dist/svelte/source/components/ColorWheel.svelte +327 -0
  247. package/dist/svelte/source/components/FractalNoise.svelte +329 -0
  248. package/dist/svelte/source/components/Marble.svelte +328 -0
  249. package/dist/svelte/source/components/SunBurst.svelte +329 -0
  250. package/dist/svelte/source/components/WorleyNoise.svelte +332 -0
  251. package/dist/svelte/source/engine/Preview.svelte +16 -0
  252. package/dist/svelte/source/index.js +8 -0
  253. package/dist/svelte/utils/generatePresetCode.js +116 -0
  254. package/dist/vue/BarShift.js +3 -0
  255. package/dist/vue/BarShift.vue_vue_type_script_setup_true_lang.js +218 -0
  256. package/dist/vue/BrickPattern.js +3 -0
  257. package/dist/vue/BrickPattern.vue_vue_type_script_setup_true_lang.js +223 -0
  258. package/dist/vue/Chevron.js +3 -0
  259. package/dist/vue/Chevron.vue_vue_type_script_setup_true_lang.js +221 -0
  260. package/dist/vue/ColorWheel.js +3 -0
  261. package/dist/vue/ColorWheel.vue_vue_type_script_setup_true_lang.js +220 -0
  262. package/dist/vue/FractalNoise.js +3 -0
  263. package/dist/vue/FractalNoise.vue_vue_type_script_setup_true_lang.js +221 -0
  264. package/dist/vue/Marble.js +3 -0
  265. package/dist/vue/Marble.vue_vue_type_script_setup_true_lang.js +220 -0
  266. package/dist/vue/Preview.vue_vue_type_script_setup_true_lang.js +16 -0
  267. package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +28 -18
  268. package/dist/vue/SunBurst.js +3 -0
  269. package/dist/vue/SunBurst.vue_vue_type_script_setup_true_lang.js +220 -0
  270. package/dist/vue/WorleyNoise.js +3 -0
  271. package/dist/vue/WorleyNoise.vue_vue_type_script_setup_true_lang.js +226 -0
  272. package/dist/vue/components/BarShift.vue.d.ts +57 -0
  273. package/dist/vue/components/BarShift.vue.d.ts.map +1 -0
  274. package/dist/vue/components/BrickPattern.vue.d.ts +60 -0
  275. package/dist/vue/components/BrickPattern.vue.d.ts.map +1 -0
  276. package/dist/vue/components/Chevron.vue.d.ts +59 -0
  277. package/dist/vue/components/Chevron.vue.d.ts.map +1 -0
  278. package/dist/vue/components/ColorWheel.vue.d.ts +56 -0
  279. package/dist/vue/components/ColorWheel.vue.d.ts.map +1 -0
  280. package/dist/vue/components/FractalNoise.vue.d.ts +58 -0
  281. package/dist/vue/components/FractalNoise.vue.d.ts.map +1 -0
  282. package/dist/vue/components/Marble.vue.d.ts +57 -0
  283. package/dist/vue/components/Marble.vue.d.ts.map +1 -0
  284. package/dist/vue/components/SunBurst.vue.d.ts +58 -0
  285. package/dist/vue/components/SunBurst.vue.d.ts.map +1 -0
  286. package/dist/vue/components/WorleyNoise.vue.d.ts +61 -0
  287. package/dist/vue/components/WorleyNoise.vue.d.ts.map +1 -0
  288. package/dist/vue/engine/Shader.vue.d.ts.map +1 -1
  289. package/dist/vue/index.d.ts +8 -0
  290. package/dist/vue/index.d.ts.map +1 -1
  291. package/dist/vue/index.js +9 -1
  292. package/dist/vue/utils/generatePresetCode.d.ts.map +1 -1
  293. package/dist/vue/utils/generatePresetCode.js +116 -0
  294. package/package.json +150 -1
  295. package/dist/core/shaderRegistry-BPtUQU-N.js +0 -254
  296. /package/dist/core/{Beam-mvF5Ri7_.js → Beam-B3BX08lR.js} +0 -0
  297. /package/dist/core/{Blob-CLHx5s6k.js → Blob-B7IFHhVB.js} +0 -0
  298. /package/dist/core/{BrightnessContrast-CJTOpQCn.js → BrightnessContrast-GppIqtkO.js} +0 -0
  299. /package/dist/core/{Bulge-wflTcWfI.js → Bulge-DMOATSEs.js} +0 -0
  300. /package/dist/core/{CRTScreen-CTwXU-NX.js → CRTScreen-corekL_R.js} +0 -0
  301. /package/dist/core/{Checkerboard-Db7Rb57F.js → Checkerboard-BVBGTvd-.js} +0 -0
  302. /package/dist/core/{ChromaFlow-DbiVz3hF.js → ChromaFlow-C0guw_LP.js} +0 -0
  303. /package/dist/core/{ChromaticAberration-Bg_I4XF-.js → ChromaticAberration-vygkvgz-.js} +0 -0
  304. /package/dist/core/{Circle-Bfi2e0Vm.js → Circle-BycqVCMt.js} +0 -0
  305. /package/dist/core/{ConcentricSpin-bAFd5_WI.js → ConcentricSpin-CO3Kx1I1.js} +0 -0
  306. /package/dist/core/{ConicGradient-Bcw4_25S.js → ConicGradient-DRvVwiSj.js} +0 -0
  307. /package/dist/core/{ContourLines-CcQWPKLx.js → ContourLines-s4waN3uU.js} +0 -0
  308. /package/dist/core/{CursorRipples-CsYAXG2E.js → CursorRipples-CLP7Sinv.js} +0 -0
  309. /package/dist/core/{CursorTrail-CUtEP_-P.js → CursorTrail-CshoSM5Y.js} +0 -0
  310. /package/dist/core/{DOMTexture-D-RkeyMs.js → DOMTexture-Ec0k6AnK.js} +0 -0
  311. /package/dist/core/{DiamondGradient-3b93bdrv.js → DiamondGradient-D6eyjZOn.js} +0 -0
  312. /package/dist/core/{DiffuseBlur-61Vuq571.js → DiffuseBlur-BjvXHmJx.js} +0 -0
  313. /package/dist/core/{Dither-Cv0Uci60.js → Dither-z6s-TFg7.js} +0 -0
  314. /package/dist/core/{DotGrid-C88Sux6D.js → DotGrid-BxAAGO4F.js} +0 -0
  315. /package/dist/core/{DropShadow-EZyCC_97.js → DropShadow-CR3cecIQ.js} +0 -0
  316. /package/dist/core/{Duotone-D4ads1T9.js → Duotone-PwTfBBtM.js} +0 -0
  317. /package/dist/core/{FallingLines-CQBvwLqn.js → FallingLines-DqIZ8wTH.js} +0 -0
  318. /package/dist/core/{FilmGrain-DSJiMtEp.js → FilmGrain-Dbw02Jz9.js} +0 -0
  319. /package/dist/core/{FloatingParticles-BAvsQDhF.js → FloatingParticles-C4sLwGyT.js} +0 -0
  320. /package/dist/core/{FlowField-D2xJ0Xr4.js → FlowField-D3CAHBBG.js} +0 -0
  321. /package/dist/core/{FlowingGradient-DVDnNpGd.js → FlowingGradient-BRQ_K-k3.js} +0 -0
  322. /package/dist/core/{FlutedGlass-trmBFfQr.js → FlutedGlass-CyFWN_SM.js} +0 -0
  323. /package/dist/core/{Fog-DrsxPyih.js → Fog-CLGVVVeo.js} +0 -0
  324. /package/dist/core/{Form3D-D1TtCjk8.js → Form3D-8tPyUgh4.js} +0 -0
  325. /package/dist/core/{GlassTiles-CMx4NyO-.js → GlassTiles-CXJHjEBe.js} +0 -0
  326. /package/dist/core/{Glitch-BdygvJKe.js → Glitch-Bg9W-KNm.js} +0 -0
  327. /package/dist/core/{Godrays-Mvz7ha2E.js → Godrays-DHXKsw5B.js} +0 -0
  328. /package/dist/core/{Grayscale-ChaVI3AW.js → Grayscale-DgXoUcmg.js} +0 -0
  329. /package/dist/core/{Grid-CsD21Eqg.js → Grid-DwyhjFAT.js} +0 -0
  330. /package/dist/core/{GridDistortion-BcDqBh9i.js → GridDistortion-DJ8S-96Y.js} +0 -0
  331. /package/dist/core/{Group-BqVJ4S7i.js → Group-DmgNNlDd.js} +0 -0
  332. /package/dist/core/{Halftone-3ImN5uQi.js → Halftone-x9boWkFW.js} +0 -0
  333. /package/dist/core/{HexGrid-BWwIHYEg.js → HexGrid-BUsgyF8P.js} +0 -0
  334. /package/dist/core/{HueShift-C1RxETwN.js → HueShift-D3_5D7jx.js} +0 -0
  335. /package/dist/core/{ImageTexture-DXhgMEOT.js → ImageTexture-6ZzBt79u.js} +0 -0
  336. /package/dist/core/{Invert-D3tc2UGp.js → Invert-kXxY97QJ.js} +0 -0
  337. /package/dist/core/{Kaleidoscope-D1HmcoOv.js → Kaleidoscope-D4jRcZCt.js} +0 -0
  338. /package/dist/core/{LensFlare-Be-Z9whi.js → LensFlare-D7vypE2Q.js} +0 -0
  339. /package/dist/core/{LinearBlur-xrHtMmWp.js → LinearBlur-2hspd2YP.js} +0 -0
  340. /package/dist/core/{LinearGradient-BiIad_hA.js → LinearGradient-glCc9IaB.js} +0 -0
  341. /package/dist/core/{Liquify-DkTxZZFW.js → Liquify-uZjs0wcu.js} +0 -0
  342. /package/dist/core/{Mirror-BDTE51kP.js → Mirror-Dv5fOEp6.js} +0 -0
  343. /package/dist/core/{MultiPointGradient-Bd-EGOI8.js → MultiPointGradient-Dvt1GUiv.js} +0 -0
  344. /package/dist/core/{Paper-BmeUPAFe.js → Paper-DNP2-hPM.js} +0 -0
  345. /package/dist/core/{Perspective-CqweSeFv.js → Perspective-CAIchX9p.js} +0 -0
  346. /package/dist/core/{Pixelate-DqZcUKFK.js → Pixelate-BbT3Rrf2.js} +0 -0
  347. /package/dist/core/{Plasma-DqKLBDYd.js → Plasma-D9rhkH2y.js} +0 -0
  348. /package/dist/core/{PolarCoordinates-CKT4CLT7.js → PolarCoordinates-2RBCk-fo.js} +0 -0
  349. /package/dist/core/{Posterize-CxYemXTn.js → Posterize-DNxTRgvF.js} +0 -0
  350. /package/dist/core/{RadialGradient-Dj3-DdO7.js → RadialGradient-CQIctl__.js} +0 -0
  351. /package/dist/core/{RectangularCoordinates-DxeLJ2nt.js → RectangularCoordinates-F2VzXmal.js} +0 -0
  352. /package/dist/core/{Ripples-CXeVzwUd.js → Ripples-B4H0VoZb.js} +0 -0
  353. /package/dist/core/{Saturation-n-aXJS81.js → Saturation-6FlxHXSi.js} +0 -0
  354. /package/dist/core/{Sharpness-7tm7b-Bu.js → Sharpness-C4cJlBuh.js} +0 -0
  355. /package/dist/core/{Shatter-CDza7dSw.js → Shatter-CnkycTRD.js} +0 -0
  356. /package/dist/core/{SimplexNoise-HQTocBLm.js → SimplexNoise-BnRaoxON.js} +0 -0
  357. /package/dist/core/{SineWave-S6nK8ZHR.js → SineWave-CZ4Fanvr.js} +0 -0
  358. /package/dist/core/{Smoke-DjlArYQW.js → Smoke-CXPjGG-b.js} +0 -0
  359. /package/dist/core/{Solarize-gNMmd47z.js → Solarize-CynVlxjT.js} +0 -0
  360. /package/dist/core/{SolidColor-a8bCIksn.js → SolidColor-dCAOGC_P.js} +0 -0
  361. /package/dist/core/{Spherize-BHmD2ajL.js → Spherize-C77QGVWj.js} +0 -0
  362. /package/dist/core/{Spiral-Bjsi8BMH.js → Spiral-eN65wa6O.js} +0 -0
  363. /package/dist/core/{Strands-C9fEwaiR.js → Strands-DnWJDGiO.js} +0 -0
  364. /package/dist/core/{Stretch-Cvht8B0L.js → Stretch-B5XGF1bF.js} +0 -0
  365. /package/dist/core/{Stripes-ChVSAeCO.js → Stripes-CNXJpFyr.js} +0 -0
  366. /package/dist/core/{StudioBackground-B8hilROB.js → StudioBackground-DtiE2mCf.js} +0 -0
  367. /package/dist/core/{Swirl-DZTPLx-W.js → Swirl-BV6pN94G.js} +0 -0
  368. /package/dist/core/{Tint-P7KwJAU5.js → Tint-CJ8FQdzA.js} +0 -0
  369. /package/dist/core/{Tritone-_9VR2bhu.js → Tritone-D_QvxjGc.js} +0 -0
  370. /package/dist/core/{Truchet-CbL5nYMj.js → Truchet-BJeZS_JQ.js} +0 -0
  371. /package/dist/core/{Twirl-C_97m32v.js → Twirl-8ayqS0n8.js} +0 -0
  372. /package/dist/core/{VHS-DbNjgUEX.js → VHS-Gbec95K_.js} +0 -0
  373. /package/dist/core/{Vibrance-IDvmP1Xw.js → Vibrance-COKHmh8r.js} +0 -0
  374. /package/dist/core/{Vignette-DmYVHciL.js → Vignette-Y_2yono-.js} +0 -0
  375. /package/dist/core/{Voronoi-kngFpTNB.js → Voronoi-DQ_f6k5D.js} +0 -0
  376. /package/dist/core/{WaveDistortion-DM-f_XCw.js → WaveDistortion-R5FfwKQN.js} +0 -0
  377. /package/dist/core/{Weave-DO0m0Dsh.js → Weave-DJ4s3Gwc.js} +0 -0
  378. /package/dist/core/{ZoomBlur-DLaH226M.js → ZoomBlur-DWFQVFMK.js} +0 -0
  379. /package/dist/core/{browser-CsOpQ0L_.js → browser-BamVDhaZ.js} +0 -0
  380. /package/dist/core/{computeBlur-DCRhuYEi.js → computeBlur-CprKe0xa.js} +0 -0
  381. /package/dist/core/{sdf-DyC2H_qS.js → sdf-D_EAGXhN.js} +0 -0
@@ -0,0 +1,330 @@
1
+ <script lang="ts">
2
+ import { getContext, setContext, onMount, onDestroy } from 'svelte';
3
+ import {
4
+ createUniformsMap,
5
+ type UniformsMap,
6
+ type BlendMode,
7
+ type NodeMetadata,
8
+ type PropConfig,
9
+ type MaskConfig,
10
+ type PropDriver,
11
+ type TransformConfig
12
+ } from '../../../core/index.js';
13
+ import {setColorSpaceMode} from '../../../core/utilities/transformations/index.js';
14
+
15
+ // @ts-ignore - this import is replaced at build time
16
+ import { componentDefinition, type ComponentProps } from '../../../core/shaders/Chevron/index.js';
17
+
18
+ // Warn once per page load if this is an experimental component
19
+ let _experimentalWarnedOnce = false;
20
+ if ((componentDefinition as any).experimental && !_experimentalWarnedOnce) {
21
+ _experimentalWarnedOnce = true;
22
+ const _e = (componentDefinition as any).experimental;
23
+ console.info(`%c⚠ [Shaders] ${componentDefinition.name} is experimental: ${_e.message}`, 'color: #f59e0b; font-weight: bold');
24
+ }
25
+
26
+ /**
27
+ * Define component props including blend mode, opacity, visibility, masking, and transformation
28
+ */
29
+ interface ExtendedComponentProps extends Partial<ComponentProps> {
30
+ count?: ComponentProps['count'] | PropDriver;
31
+ angle?: ComponentProps['angle'] | PropDriver;
32
+ balance?: ComponentProps['balance'] | PropDriver;
33
+ softness?: ComponentProps['softness'] | PropDriver;
34
+ offset?: ComponentProps['offset'] | PropDriver;
35
+ blendMode?: BlendMode;
36
+ opacity?: number;
37
+ visible?: boolean;
38
+ id?: string;
39
+ maskSource?: string;
40
+ maskType?: string;
41
+ renderOrder?: number;
42
+ transform?: Partial<TransformConfig>;
43
+ children?: import('svelte').Snippet;
44
+ }
45
+
46
+ function isPropDriver(value: unknown): value is PropDriver {
47
+ return typeof value === 'object' && value !== null && 'type' in value &&
48
+ ((value as any).type === 'map' || (value as any).type === 'mouse' || (value as any).type === 'mouse-position' || (value as any).type === 'auto-animate');
49
+ }
50
+
51
+ /**
52
+ * Default transform configuration (optimized for zero overhead)
53
+ */
54
+ const DEFAULT_TRANSFORM: TransformConfig = {
55
+ offsetX: 0,
56
+ offsetY: 0,
57
+ rotation: 0,
58
+ scale: 1,
59
+ anchorX: 0.5,
60
+ anchorY: 0.5,
61
+ edges: 'transparent'
62
+ };
63
+
64
+ // Define the component props and their default values from the shader definition
65
+ const componentDefaults = {
66
+ blendMode: 'normal' as BlendMode,
67
+ visible: true,
68
+ // opacity intentionally has no default - handled by renderer
69
+ // transform intentionally has no default - handled by effectiveTransform
70
+ ...Object.entries(componentDefinition.props).reduce(
71
+ (acc, [key, config]) => {
72
+ acc[key] = (config as unknown as PropConfig<typeof config>).default;
73
+ return acc;
74
+ },
75
+ {} as Record<string, any>
76
+ )
77
+ };
78
+
79
+ // Declare props using Svelte 5's syntax
80
+ const props: ExtendedComponentProps = $props();
81
+
82
+ // Apply defaults manually since Svelte 5 doesn't have withDefaults equivalent
83
+ // Use $derived so the metadata $effect re-runs when any of these change at runtime
84
+ const blendMode = $derived(props.blendMode ?? componentDefaults.blendMode);
85
+ const opacity = $derived(props.opacity); // No default - handled by renderer
86
+ const visible = $derived(props.visible ?? componentDefaults.visible); // Default to true
87
+ const id = $derived(props.id);
88
+ const maskSource = $derived(props.maskSource);
89
+ const maskType = $derived(props.maskType);
90
+ const renderOrder = $derived(props.renderOrder);
91
+ const { children } = props;
92
+
93
+ // Collect PropDriver values from shader props into the maps metadata structure
94
+ const mapsFromProps = $derived.by(() => {
95
+ const maps: Record<string, PropDriver> = {};
96
+ for (const key of Object.keys(componentDefinition.props)) {
97
+ const val = (props as any)[key];
98
+ if (isPropDriver(val)) maps[key] = val as PropDriver;
99
+ }
100
+ return Object.keys(maps).length > 0 ? maps : undefined;
101
+ });
102
+
103
+ /**
104
+ * Computed transform that merges user-provided values with defaults
105
+ */
106
+ const effectiveTransform = $derived({
107
+ ...DEFAULT_TRANSFORM,
108
+ ...props.transform
109
+ });
110
+
111
+ /**
112
+ * FIRST: Get the parent ID from context BEFORE setting our own context
113
+ */
114
+ const parentId = getContext<string>('shaderParentId');
115
+ if (parentId === undefined) {
116
+ throw new Error('Shader components must be used inside an <Shader> component or another shader component');
117
+ }
118
+
119
+ /**
120
+ * Use the provided ID or generate a unique identifier for this component instance
121
+ */
122
+ const instanceId = (id ? id.replace(/[^a-zA-Z0-9_]/g, '_') : null) || Math.random().toString(36).substring(2, 10);
123
+
124
+ /**
125
+ * THEN: Provide our unique identifier to child components
126
+ */
127
+ setContext('shaderParentId', instanceId);
128
+
129
+ /**
130
+ * Creates a non-reactive object containing only props that differ from defaults
131
+ * This optimization prevents unnecessary GPU uniform updates for unchanged values
132
+ * Special props like blendMode and opacity are handled separately
133
+ */
134
+ const shaderReadyProps = $derived.by(() => {
135
+ let baseProps = { ...componentDefaults };
136
+
137
+ // Only include props that differ from defaults (excluding special props and PropDrivers)
138
+ for (const key in props) {
139
+ if (key !== 'blendMode' && key !== 'opacity' && key !== 'visible' &&
140
+ key !== 'id' && key !== 'maskSource' && key !== 'maskType' && key !== 'renderOrder' &&
141
+ key !== 'transform' && key !== 'children') {
142
+ const propValue = (props as any)[key];
143
+ if (isPropDriver(propValue)) continue; // PropDrivers go to metadata.maps, not uniforms
144
+ const defaultValue = (componentDefaults as any)[key];
145
+ if (propValue !== undefined && propValue !== defaultValue) {
146
+ (baseProps as any)[key] = propValue;
147
+ }
148
+ }
149
+ }
150
+ return baseProps;
151
+ });
152
+
153
+ /**
154
+ * Get the color space from the root Shader component.
155
+ * Used to set the global color space mode before creating uniforms.
156
+ */
157
+ const shaderColorSpace = getContext<() => 'p3-linear' | 'srgb'>('shaderColorSpace');
158
+
159
+ /**
160
+ * Creates the GPU uniform values map using only the changed props
161
+ * Set the global color space mode before creating uniforms so colors are transformed correctly
162
+ * Note: Intentionally captures initial value - props are immutable after initialization
163
+ */
164
+ if (shaderColorSpace) {
165
+ setColorSpaceMode(shaderColorSpace());
166
+ }
167
+ // svelte-ignore state_referenced_locally
168
+ const uniforms: UniformsMap = createUniformsMap(componentDefinition, shaderReadyProps, instanceId);
169
+
170
+ /**
171
+ * Get the node registration function from parent context
172
+ */
173
+ const parentRegister = getContext<(id: string, fragmentNodeFunc: any, parentId: string | null, metadata: NodeMetadata | null, uniforms: UniformsMap | null, componentDefinition: any, domCanvas?: HTMLCanvasElement) => void>('shaderNodeRegister');
174
+ if (parentRegister === undefined) {
175
+ throw new Error('Shader components must be used inside an <Shader> component or another shader component');
176
+ }
177
+
178
+ /**
179
+ * Get the uniform update function from parent context
180
+ */
181
+ const parentUniformUpdate = getContext<(nodeId: string, uniformName: string, value: any) => void>('shaderUniformUpdate');
182
+ if (parentUniformUpdate === undefined) {
183
+ throw new Error('Shader components require shaderUniformUpdate from parent');
184
+ }
185
+
186
+ /**
187
+ * Get the metadata update function from parent context
188
+ */
189
+ const parentMetadataUpdate = getContext<(nodeId: string, metadata: NodeMetadata) => void>('shaderMetadataUpdate');
190
+ if (parentMetadataUpdate === undefined) {
191
+ throw new Error('Shader components require shaderMetadataUpdate from parent');
192
+ }
193
+
194
+ // capturesDOM — canvas layoutsubtree portal for DOMTexture-style shaders
195
+ const isCapturesDOM = !!(componentDefinition as any).capturesDOM;
196
+ let captureCanvas: HTMLCanvasElement | undefined;
197
+ let captureW = $state(typeof window !== 'undefined' ? Math.round(window.innerWidth * Math.min(window.devicePixelRatio, 2)) : 0);
198
+ let captureH = $state(typeof window !== 'undefined' ? Math.round(window.innerHeight * Math.min(window.devicePixelRatio, 2)) : 0);
199
+
200
+ function teleportToBody(node: HTMLElement) {
201
+ document.body.appendChild(node);
202
+ return { destroy() { node.remove(); } };
203
+ }
204
+
205
+ if (isCapturesDOM) {
206
+ const onWinResize = () => {
207
+ const d = Math.min(window.devicePixelRatio, 2);
208
+ captureW = Math.round(window.innerWidth * d);
209
+ captureH = Math.round(window.innerHeight * d);
210
+ };
211
+ onMount(() => { window.addEventListener('resize', onWinResize); });
212
+ onDestroy(() => { window.removeEventListener('resize', onWinResize); });
213
+ }
214
+
215
+ // DOM marker ref for determining render order from template position
216
+ let orderMarker: HTMLSpanElement;
217
+
218
+ // Stores the DOM-detected render order
219
+ let detectedRenderOrder: number | undefined = undefined;
220
+
221
+ // Flag to track when component is registered
222
+ let isRegistered = $state(false);
223
+
224
+ // Setup uniform watchers with registration guard
225
+ Object.entries(uniforms).forEach(([propName, { uniform, transform }]) => {
226
+ $effect(() => {
227
+ // Only run after component is registered
228
+ if (!isRegistered) return;
229
+
230
+ if (uniform && uniform.value !== undefined) {
231
+ const newValue = (props as any)[propName];
232
+ if (newValue !== undefined && !isPropDriver(newValue)) {
233
+ // Send raw value - renderer will handle transformation
234
+ // PropDriver values go to metadata.maps, not uniforms
235
+ parentUniformUpdate(instanceId, propName, newValue);
236
+ }
237
+ }
238
+ });
239
+ });
240
+
241
+ // Watch blend mode, opacity, visibility, masking, transformations, and prop maps changes
242
+ $effect(() => {
243
+ // Only run after component is registered
244
+ if (!isRegistered) return;
245
+
246
+ const metadata: NodeMetadata = {
247
+ blendMode,
248
+ opacity,
249
+ visible: visible === false ? false : true,
250
+ id,
251
+ mask: maskSource ? {
252
+ source: maskSource,
253
+ type: (maskType || 'alpha') as MaskConfig['type']
254
+ } : undefined,
255
+ maps: mapsFromProps,
256
+ renderOrder: renderOrder ?? detectedRenderOrder,
257
+ transform: effectiveTransform
258
+ };
259
+ parentMetadataUpdate(instanceId, metadata);
260
+ });
261
+
262
+ // Register this component after mount to ensure parent is ready
263
+ onMount(() => {
264
+ // Register this component with safety check
265
+ if (componentDefinition && typeof componentDefinition.fragmentNode === 'function') {
266
+ parentRegister(
267
+ instanceId,
268
+ componentDefinition.fragmentNode,
269
+ parentId,
270
+ {
271
+ blendMode,
272
+ opacity,
273
+ visible: visible !== false ? true : false,
274
+ id,
275
+ mask: maskSource ? {
276
+ source: maskSource,
277
+ type: (maskType || 'alpha') as MaskConfig['type']
278
+ } as MaskConfig : undefined,
279
+ maps: mapsFromProps,
280
+ renderOrder: renderOrder ?? detectedRenderOrder,
281
+ transform: effectiveTransform
282
+ },
283
+ uniforms,
284
+ componentDefinition,
285
+ isCapturesDOM ? captureCanvas : undefined
286
+ );
287
+
288
+ // Set flag to enable effects after successful registration
289
+ isRegistered = true;
290
+
291
+ // Detect DOM position for correct render ordering
292
+ if (renderOrder === undefined && orderMarker) {
293
+ const parent = orderMarker.parentElement;
294
+ if (parent) {
295
+ const siblings = parent.querySelectorAll(':scope > [data-shader-id]');
296
+ const position = Array.from(siblings).indexOf(orderMarker);
297
+ if (position >= 0) {
298
+ detectedRenderOrder = position;
299
+ parentMetadataUpdate(instanceId, { renderOrder: position } as NodeMetadata);
300
+ }
301
+ }
302
+ }
303
+ } else {
304
+ console.error('componentDefinition.fragmentNode is not a function:', {
305
+ componentDefinition,
306
+ fragmentNode: componentDefinition?.fragmentNode,
307
+ type: typeof componentDefinition?.fragmentNode
308
+ });
309
+ }
310
+ });
311
+
312
+ // Clean up node from registry when component is unmounted
313
+ onDestroy(() => {
314
+ isRegistered = false;
315
+ parentRegister(instanceId, null, null, null, null);
316
+ });
317
+ </script>
318
+
319
+ <span bind:this={orderMarker} style="display:contents" data-shader-id={instanceId}>
320
+ {#if !isCapturesDOM}
321
+ {@render children?.()}
322
+ {/if}
323
+ </span>
324
+ {#if isCapturesDOM}
325
+ <canvas use:teleportToBody bind:this={captureCanvas} layoutsubtree
326
+ width={captureW} height={captureH}
327
+ style="position:fixed;inset:0;width:100vw;height:100vh;z-index:-9999">
328
+ {@render children?.()}
329
+ </canvas>
330
+ {/if}
@@ -0,0 +1,327 @@
1
+ <script lang="ts">
2
+ import { getContext, setContext, onMount, onDestroy } from 'svelte';
3
+ import {
4
+ createUniformsMap,
5
+ type UniformsMap,
6
+ type BlendMode,
7
+ type NodeMetadata,
8
+ type PropConfig,
9
+ type MaskConfig,
10
+ type PropDriver,
11
+ type TransformConfig
12
+ } from '../../../core/index.js';
13
+ import {setColorSpaceMode} from '../../../core/utilities/transformations/index.js';
14
+
15
+ // @ts-ignore - this import is replaced at build time
16
+ import { componentDefinition, type ComponentProps } from '../../../core/shaders/ColorWheel/index.js';
17
+
18
+ // Warn once per page load if this is an experimental component
19
+ let _experimentalWarnedOnce = false;
20
+ if ((componentDefinition as any).experimental && !_experimentalWarnedOnce) {
21
+ _experimentalWarnedOnce = true;
22
+ const _e = (componentDefinition as any).experimental;
23
+ console.info(`%c⚠ [Shaders] ${componentDefinition.name} is experimental: ${_e.message}`, 'color: #f59e0b; font-weight: bold');
24
+ }
25
+
26
+ /**
27
+ * Define component props including blend mode, opacity, visibility, masking, and transformation
28
+ */
29
+ interface ExtendedComponentProps extends Partial<ComponentProps> {
30
+ scale?: ComponentProps['scale'] | PropDriver;
31
+ angle?: ComponentProps['angle'] | PropDriver;
32
+ blendMode?: BlendMode;
33
+ opacity?: number;
34
+ visible?: boolean;
35
+ id?: string;
36
+ maskSource?: string;
37
+ maskType?: string;
38
+ renderOrder?: number;
39
+ transform?: Partial<TransformConfig>;
40
+ children?: import('svelte').Snippet;
41
+ }
42
+
43
+ function isPropDriver(value: unknown): value is PropDriver {
44
+ return typeof value === 'object' && value !== null && 'type' in value &&
45
+ ((value as any).type === 'map' || (value as any).type === 'mouse' || (value as any).type === 'mouse-position' || (value as any).type === 'auto-animate');
46
+ }
47
+
48
+ /**
49
+ * Default transform configuration (optimized for zero overhead)
50
+ */
51
+ const DEFAULT_TRANSFORM: TransformConfig = {
52
+ offsetX: 0,
53
+ offsetY: 0,
54
+ rotation: 0,
55
+ scale: 1,
56
+ anchorX: 0.5,
57
+ anchorY: 0.5,
58
+ edges: 'transparent'
59
+ };
60
+
61
+ // Define the component props and their default values from the shader definition
62
+ const componentDefaults = {
63
+ blendMode: 'normal' as BlendMode,
64
+ visible: true,
65
+ // opacity intentionally has no default - handled by renderer
66
+ // transform intentionally has no default - handled by effectiveTransform
67
+ ...Object.entries(componentDefinition.props).reduce(
68
+ (acc, [key, config]) => {
69
+ acc[key] = (config as unknown as PropConfig<typeof config>).default;
70
+ return acc;
71
+ },
72
+ {} as Record<string, any>
73
+ )
74
+ };
75
+
76
+ // Declare props using Svelte 5's syntax
77
+ const props: ExtendedComponentProps = $props();
78
+
79
+ // Apply defaults manually since Svelte 5 doesn't have withDefaults equivalent
80
+ // Use $derived so the metadata $effect re-runs when any of these change at runtime
81
+ const blendMode = $derived(props.blendMode ?? componentDefaults.blendMode);
82
+ const opacity = $derived(props.opacity); // No default - handled by renderer
83
+ const visible = $derived(props.visible ?? componentDefaults.visible); // Default to true
84
+ const id = $derived(props.id);
85
+ const maskSource = $derived(props.maskSource);
86
+ const maskType = $derived(props.maskType);
87
+ const renderOrder = $derived(props.renderOrder);
88
+ const { children } = props;
89
+
90
+ // Collect PropDriver values from shader props into the maps metadata structure
91
+ const mapsFromProps = $derived.by(() => {
92
+ const maps: Record<string, PropDriver> = {};
93
+ for (const key of Object.keys(componentDefinition.props)) {
94
+ const val = (props as any)[key];
95
+ if (isPropDriver(val)) maps[key] = val as PropDriver;
96
+ }
97
+ return Object.keys(maps).length > 0 ? maps : undefined;
98
+ });
99
+
100
+ /**
101
+ * Computed transform that merges user-provided values with defaults
102
+ */
103
+ const effectiveTransform = $derived({
104
+ ...DEFAULT_TRANSFORM,
105
+ ...props.transform
106
+ });
107
+
108
+ /**
109
+ * FIRST: Get the parent ID from context BEFORE setting our own context
110
+ */
111
+ const parentId = getContext<string>('shaderParentId');
112
+ if (parentId === undefined) {
113
+ throw new Error('Shader components must be used inside an <Shader> component or another shader component');
114
+ }
115
+
116
+ /**
117
+ * Use the provided ID or generate a unique identifier for this component instance
118
+ */
119
+ const instanceId = (id ? id.replace(/[^a-zA-Z0-9_]/g, '_') : null) || Math.random().toString(36).substring(2, 10);
120
+
121
+ /**
122
+ * THEN: Provide our unique identifier to child components
123
+ */
124
+ setContext('shaderParentId', instanceId);
125
+
126
+ /**
127
+ * Creates a non-reactive object containing only props that differ from defaults
128
+ * This optimization prevents unnecessary GPU uniform updates for unchanged values
129
+ * Special props like blendMode and opacity are handled separately
130
+ */
131
+ const shaderReadyProps = $derived.by(() => {
132
+ let baseProps = { ...componentDefaults };
133
+
134
+ // Only include props that differ from defaults (excluding special props and PropDrivers)
135
+ for (const key in props) {
136
+ if (key !== 'blendMode' && key !== 'opacity' && key !== 'visible' &&
137
+ key !== 'id' && key !== 'maskSource' && key !== 'maskType' && key !== 'renderOrder' &&
138
+ key !== 'transform' && key !== 'children') {
139
+ const propValue = (props as any)[key];
140
+ if (isPropDriver(propValue)) continue; // PropDrivers go to metadata.maps, not uniforms
141
+ const defaultValue = (componentDefaults as any)[key];
142
+ if (propValue !== undefined && propValue !== defaultValue) {
143
+ (baseProps as any)[key] = propValue;
144
+ }
145
+ }
146
+ }
147
+ return baseProps;
148
+ });
149
+
150
+ /**
151
+ * Get the color space from the root Shader component.
152
+ * Used to set the global color space mode before creating uniforms.
153
+ */
154
+ const shaderColorSpace = getContext<() => 'p3-linear' | 'srgb'>('shaderColorSpace');
155
+
156
+ /**
157
+ * Creates the GPU uniform values map using only the changed props
158
+ * Set the global color space mode before creating uniforms so colors are transformed correctly
159
+ * Note: Intentionally captures initial value - props are immutable after initialization
160
+ */
161
+ if (shaderColorSpace) {
162
+ setColorSpaceMode(shaderColorSpace());
163
+ }
164
+ // svelte-ignore state_referenced_locally
165
+ const uniforms: UniformsMap = createUniformsMap(componentDefinition, shaderReadyProps, instanceId);
166
+
167
+ /**
168
+ * Get the node registration function from parent context
169
+ */
170
+ const parentRegister = getContext<(id: string, fragmentNodeFunc: any, parentId: string | null, metadata: NodeMetadata | null, uniforms: UniformsMap | null, componentDefinition: any, domCanvas?: HTMLCanvasElement) => void>('shaderNodeRegister');
171
+ if (parentRegister === undefined) {
172
+ throw new Error('Shader components must be used inside an <Shader> component or another shader component');
173
+ }
174
+
175
+ /**
176
+ * Get the uniform update function from parent context
177
+ */
178
+ const parentUniformUpdate = getContext<(nodeId: string, uniformName: string, value: any) => void>('shaderUniformUpdate');
179
+ if (parentUniformUpdate === undefined) {
180
+ throw new Error('Shader components require shaderUniformUpdate from parent');
181
+ }
182
+
183
+ /**
184
+ * Get the metadata update function from parent context
185
+ */
186
+ const parentMetadataUpdate = getContext<(nodeId: string, metadata: NodeMetadata) => void>('shaderMetadataUpdate');
187
+ if (parentMetadataUpdate === undefined) {
188
+ throw new Error('Shader components require shaderMetadataUpdate from parent');
189
+ }
190
+
191
+ // capturesDOM — canvas layoutsubtree portal for DOMTexture-style shaders
192
+ const isCapturesDOM = !!(componentDefinition as any).capturesDOM;
193
+ let captureCanvas: HTMLCanvasElement | undefined;
194
+ let captureW = $state(typeof window !== 'undefined' ? Math.round(window.innerWidth * Math.min(window.devicePixelRatio, 2)) : 0);
195
+ let captureH = $state(typeof window !== 'undefined' ? Math.round(window.innerHeight * Math.min(window.devicePixelRatio, 2)) : 0);
196
+
197
+ function teleportToBody(node: HTMLElement) {
198
+ document.body.appendChild(node);
199
+ return { destroy() { node.remove(); } };
200
+ }
201
+
202
+ if (isCapturesDOM) {
203
+ const onWinResize = () => {
204
+ const d = Math.min(window.devicePixelRatio, 2);
205
+ captureW = Math.round(window.innerWidth * d);
206
+ captureH = Math.round(window.innerHeight * d);
207
+ };
208
+ onMount(() => { window.addEventListener('resize', onWinResize); });
209
+ onDestroy(() => { window.removeEventListener('resize', onWinResize); });
210
+ }
211
+
212
+ // DOM marker ref for determining render order from template position
213
+ let orderMarker: HTMLSpanElement;
214
+
215
+ // Stores the DOM-detected render order
216
+ let detectedRenderOrder: number | undefined = undefined;
217
+
218
+ // Flag to track when component is registered
219
+ let isRegistered = $state(false);
220
+
221
+ // Setup uniform watchers with registration guard
222
+ Object.entries(uniforms).forEach(([propName, { uniform, transform }]) => {
223
+ $effect(() => {
224
+ // Only run after component is registered
225
+ if (!isRegistered) return;
226
+
227
+ if (uniform && uniform.value !== undefined) {
228
+ const newValue = (props as any)[propName];
229
+ if (newValue !== undefined && !isPropDriver(newValue)) {
230
+ // Send raw value - renderer will handle transformation
231
+ // PropDriver values go to metadata.maps, not uniforms
232
+ parentUniformUpdate(instanceId, propName, newValue);
233
+ }
234
+ }
235
+ });
236
+ });
237
+
238
+ // Watch blend mode, opacity, visibility, masking, transformations, and prop maps changes
239
+ $effect(() => {
240
+ // Only run after component is registered
241
+ if (!isRegistered) return;
242
+
243
+ const metadata: NodeMetadata = {
244
+ blendMode,
245
+ opacity,
246
+ visible: visible === false ? false : true,
247
+ id,
248
+ mask: maskSource ? {
249
+ source: maskSource,
250
+ type: (maskType || 'alpha') as MaskConfig['type']
251
+ } : undefined,
252
+ maps: mapsFromProps,
253
+ renderOrder: renderOrder ?? detectedRenderOrder,
254
+ transform: effectiveTransform
255
+ };
256
+ parentMetadataUpdate(instanceId, metadata);
257
+ });
258
+
259
+ // Register this component after mount to ensure parent is ready
260
+ onMount(() => {
261
+ // Register this component with safety check
262
+ if (componentDefinition && typeof componentDefinition.fragmentNode === 'function') {
263
+ parentRegister(
264
+ instanceId,
265
+ componentDefinition.fragmentNode,
266
+ parentId,
267
+ {
268
+ blendMode,
269
+ opacity,
270
+ visible: visible !== false ? true : false,
271
+ id,
272
+ mask: maskSource ? {
273
+ source: maskSource,
274
+ type: (maskType || 'alpha') as MaskConfig['type']
275
+ } as MaskConfig : undefined,
276
+ maps: mapsFromProps,
277
+ renderOrder: renderOrder ?? detectedRenderOrder,
278
+ transform: effectiveTransform
279
+ },
280
+ uniforms,
281
+ componentDefinition,
282
+ isCapturesDOM ? captureCanvas : undefined
283
+ );
284
+
285
+ // Set flag to enable effects after successful registration
286
+ isRegistered = true;
287
+
288
+ // Detect DOM position for correct render ordering
289
+ if (renderOrder === undefined && orderMarker) {
290
+ const parent = orderMarker.parentElement;
291
+ if (parent) {
292
+ const siblings = parent.querySelectorAll(':scope > [data-shader-id]');
293
+ const position = Array.from(siblings).indexOf(orderMarker);
294
+ if (position >= 0) {
295
+ detectedRenderOrder = position;
296
+ parentMetadataUpdate(instanceId, { renderOrder: position } as NodeMetadata);
297
+ }
298
+ }
299
+ }
300
+ } else {
301
+ console.error('componentDefinition.fragmentNode is not a function:', {
302
+ componentDefinition,
303
+ fragmentNode: componentDefinition?.fragmentNode,
304
+ type: typeof componentDefinition?.fragmentNode
305
+ });
306
+ }
307
+ });
308
+
309
+ // Clean up node from registry when component is unmounted
310
+ onDestroy(() => {
311
+ isRegistered = false;
312
+ parentRegister(instanceId, null, null, null, null);
313
+ });
314
+ </script>
315
+
316
+ <span bind:this={orderMarker} style="display:contents" data-shader-id={instanceId}>
317
+ {#if !isCapturesDOM}
318
+ {@render children?.()}
319
+ {/if}
320
+ </span>
321
+ {#if isCapturesDOM}
322
+ <canvas use:teleportToBody bind:this={captureCanvas} layoutsubtree
323
+ width={captureW} height={captureH}
324
+ style="position:fixed;inset:0;width:100vw;height:100vh;z-index:-9999">
325
+ {@render children?.()}
326
+ </canvas>
327
+ {/if}