shaders 2.5.87 → 2.5.89
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.
- package/dist/core/ConicGradient-BXXizzIs.js +92 -0
- package/dist/core/{Crescent-DnFexzlT.js → Crescent-DPxGWdPH.js} +1 -1
- package/dist/core/{Cross-rsVMygBv.js → Cross-CDyzf8TT.js} +1 -1
- package/dist/core/{Crystal-z-2qqfhQ.js → Crystal-DSuN8TNY.js} +1 -1
- package/dist/core/DiamondGradient-TsOxHjg_.js +123 -0
- package/dist/core/DropShadow-_VJqd8du.js +131 -0
- package/dist/core/{Ellipse-CJFK20Xl.js → Ellipse-BvlGDQyZ.js} +1 -1
- package/dist/core/{Emboss-DWXpvlZO.js → Emboss-CF-BN_CQ.js} +1 -1
- package/dist/core/{Flower-BST3LQVi.js → Flower-ByQNUJyZ.js} +1 -1
- package/dist/core/{Glass-BDHs6Enu.js → Glass-BGy9jsiS.js} +1 -1
- package/dist/core/{Grid-CV2iJqlk.js → Grid-Dweeo8b2.js} +32 -6
- package/dist/core/HexGrid-KxwCqF1D.js +85 -0
- package/dist/core/MultiPointGradient-BcjurHeM.js +181 -0
- package/dist/core/{Neon-gsfaMvGq.js → Neon-CRC16G0F.js} +1 -1
- package/dist/core/{Plasma-LpGeN0eG.js → Plasma-Cuv1eJhl.js} +2 -2
- package/dist/core/{Polygon-BeqB8MSz.js → Polygon-2V8po0Ba.js} +1 -1
- package/dist/core/RadialGradient-niSnNlOF.js +123 -0
- package/dist/core/{Ring-DJl9JUMR.js → Ring-BiKv_lr2.js} +1 -1
- package/dist/core/{RoundedRect--rHP7xW4.js → RoundedRect-BjOTRXb0.js} +1 -1
- package/dist/core/Solarize-B0aT_8tE.js +47 -0
- package/dist/core/{Star-CxI_taxd.js → Star-DJnks6B5.js} +1 -1
- package/dist/core/{Trapezoid-D7qg9Gc5.js → Trapezoid-CoK8i1IS.js} +1 -1
- package/dist/core/Truchet-Bz6ETvSS.js +100 -0
- package/dist/core/{Vesica-p8oNtcOH.js → Vesica-BELYZ5M8.js} +1 -1
- package/dist/core/{VideoTexture-ChFw0jKS.js → VideoTexture-C90aUnt4.js} +1 -1
- package/dist/core/Vignette-B94FMFBz.js +84 -0
- package/dist/core/Voronoi-DPWvdZ05.js +152 -0
- package/dist/core/Weave-DzZv1-19.js +95 -0
- package/dist/core/{WebcamTexture-CF1nwkNG.js → WebcamTexture-7SK_C_Xf.js} +1 -1
- package/dist/core/index.js +91 -81
- package/dist/core/registry.js +91 -81
- package/dist/core/shaderRegistry-DICjiu4V.js +242 -0
- package/dist/core/shaderRegistry.d.ts.map +1 -1
- package/dist/core/shaders/CRTScreen/index.js +1 -1
- package/dist/core/shaders/ConicGradient/index.d.ts +48 -0
- package/dist/core/shaders/ConicGradient/index.d.ts.map +1 -0
- package/dist/core/shaders/ConicGradient/index.js +4 -0
- package/dist/core/shaders/ContourLines/index.js +1 -1
- package/dist/core/shaders/Crescent/index.js +2 -2
- package/dist/core/shaders/Cross/index.js +2 -2
- package/dist/core/shaders/Crystal/index.js +2 -2
- package/dist/core/shaders/CursorRipples/index.js +1 -1
- package/dist/core/shaders/CursorTrail/index.js +1 -1
- package/dist/core/shaders/DiamondGradient/index.d.ts +60 -0
- package/dist/core/shaders/DiamondGradient/index.d.ts.map +1 -0
- package/dist/core/shaders/DiamondGradient/index.js +4 -0
- package/dist/core/shaders/DiffuseBlur/index.js +1 -1
- package/dist/core/shaders/Dither/index.js +1 -1
- package/dist/core/shaders/DotGrid/index.js +1 -1
- package/dist/core/shaders/DropShadow/index.d.ts +39 -0
- package/dist/core/shaders/DropShadow/index.d.ts.map +1 -0
- package/dist/core/shaders/DropShadow/index.js +4 -0
- package/dist/core/shaders/Duotone/index.js +1 -1
- package/dist/core/shaders/Ellipse/index.js +2 -2
- package/dist/core/shaders/Emboss/index.js +2 -2
- package/dist/core/shaders/FallingLines/index.js +1 -1
- package/dist/core/shaders/FilmGrain/index.js +1 -1
- package/dist/core/shaders/FloatingParticles/index.js +1 -1
- package/dist/core/shaders/FlowField/index.js +1 -1
- package/dist/core/shaders/Flower/index.js +2 -2
- package/dist/core/shaders/FlowingGradient/index.js +1 -1
- package/dist/core/shaders/Form3D/index.js +1 -1
- package/dist/core/shaders/Glass/index.js +2 -2
- package/dist/core/shaders/GlassTiles/index.js +1 -1
- package/dist/core/shaders/Glitch/index.js +1 -1
- package/dist/core/shaders/Glow/index.js +1 -1
- package/dist/core/shaders/Godrays/index.js +1 -1
- package/dist/core/shaders/Grayscale/index.js +1 -1
- package/dist/core/shaders/Grid/index.d.ts +6 -0
- package/dist/core/shaders/Grid/index.d.ts.map +1 -1
- package/dist/core/shaders/Grid/index.js +1 -1
- package/dist/core/shaders/GridDistortion/index.js +1 -1
- package/dist/core/shaders/Group/index.js +1 -1
- package/dist/core/shaders/Halftone/index.js +1 -1
- package/dist/core/shaders/HexGrid/index.d.ts +41 -0
- package/dist/core/shaders/HexGrid/index.d.ts.map +1 -0
- package/dist/core/shaders/HexGrid/index.js +4 -0
- package/dist/core/shaders/HueShift/index.js +1 -1
- package/dist/core/shaders/ImageTexture/index.js +1 -1
- package/dist/core/shaders/Invert/index.js +1 -1
- package/dist/core/shaders/Kaleidoscope/index.js +1 -1
- package/dist/core/shaders/LensFlare/index.js +1 -1
- package/dist/core/shaders/LinearBlur/index.js +1 -1
- package/dist/core/shaders/LinearGradient/index.js +1 -1
- package/dist/core/shaders/Liquify/index.js +1 -1
- package/dist/core/shaders/Mirror/index.js +1 -1
- package/dist/core/shaders/MultiPointGradient/index.d.ts +84 -0
- package/dist/core/shaders/MultiPointGradient/index.d.ts.map +1 -0
- package/dist/core/shaders/MultiPointGradient/index.js +3 -0
- package/dist/core/shaders/Neon/index.js +2 -2
- package/dist/core/shaders/Paper/index.js +1 -1
- package/dist/core/shaders/Perspective/index.js +1 -1
- package/dist/core/shaders/Pixelate/index.js +1 -1
- package/dist/core/shaders/Plasma/index.js +1 -1
- package/dist/core/shaders/PolarCoordinates/index.js +1 -1
- package/dist/core/shaders/Polygon/index.js +2 -2
- package/dist/core/shaders/Posterize/index.js +1 -1
- package/dist/core/shaders/ProgressiveBlur/index.js +1 -1
- package/dist/core/shaders/RadialGradient/index.d.ts +18 -0
- package/dist/core/shaders/RadialGradient/index.d.ts.map +1 -1
- package/dist/core/shaders/RadialGradient/index.js +1 -1
- package/dist/core/shaders/RectangularCoordinates/index.js +1 -1
- package/dist/core/shaders/Ring/index.js +2 -2
- package/dist/core/shaders/Ripples/index.js +1 -1
- package/dist/core/shaders/RoundedRect/index.js +2 -2
- package/dist/core/shaders/Saturation/index.js +1 -1
- package/dist/core/shaders/Sharpness/index.js +1 -1
- package/dist/core/shaders/Shatter/index.js +1 -1
- package/dist/core/shaders/SimplexNoise/index.js +1 -1
- package/dist/core/shaders/SineWave/index.js +1 -1
- package/dist/core/shaders/Solarize/index.d.ts +19 -0
- package/dist/core/shaders/Solarize/index.d.ts.map +1 -0
- package/dist/core/shaders/Solarize/index.js +2 -0
- package/dist/core/shaders/SolidColor/index.js +1 -1
- package/dist/core/shaders/Spherize/index.js +1 -1
- package/dist/core/shaders/Spiral/index.js +1 -1
- package/dist/core/shaders/Star/index.js +2 -2
- package/dist/core/shaders/Strands/index.js +1 -1
- package/dist/core/shaders/Stretch/index.js +1 -1
- package/dist/core/shaders/Stripes/index.js +1 -1
- package/dist/core/shaders/StudioBackground/index.js +1 -1
- package/dist/core/shaders/Swirl/index.js +1 -1
- package/dist/core/shaders/TiltShift/index.js +1 -1
- package/dist/core/shaders/Tint/index.js +1 -1
- package/dist/core/shaders/Trapezoid/index.js +2 -2
- package/dist/core/shaders/Tritone/index.js +1 -1
- package/dist/core/shaders/Truchet/index.d.ts +47 -0
- package/dist/core/shaders/Truchet/index.d.ts.map +1 -0
- package/dist/core/shaders/Truchet/index.js +4 -0
- package/dist/core/shaders/Twirl/index.js +1 -1
- package/dist/core/shaders/Vesica/index.js +2 -2
- package/dist/core/shaders/Vibrance/index.js +1 -1
- package/dist/core/shaders/VideoTexture/index.js +2 -2
- package/dist/core/shaders/Vignette/index.d.ts +40 -0
- package/dist/core/shaders/Vignette/index.d.ts.map +1 -0
- package/dist/core/shaders/Vignette/index.js +3 -0
- package/dist/core/shaders/Voronoi/index.d.ts +67 -0
- package/dist/core/shaders/Voronoi/index.d.ts.map +1 -0
- package/dist/core/shaders/Voronoi/index.js +5 -0
- package/dist/core/shaders/WaveDistortion/index.js +1 -1
- package/dist/core/shaders/Weave/index.d.ts +40 -0
- package/dist/core/shaders/Weave/index.d.ts.map +1 -0
- package/dist/core/shaders/Weave/index.js +3 -0
- package/dist/core/shaders/WebcamTexture/index.js +2 -2
- package/dist/core/shaders/ZoomBlur/index.js +1 -1
- package/dist/js/createShader.js +1 -1
- package/dist/js/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/js/utils/generatePresetCode.js +141 -1
- package/dist/react/ConicGradient.js +181 -0
- package/dist/react/DiamondGradient.js +181 -0
- package/dist/react/DropShadow.js +181 -0
- package/dist/react/HexGrid.js +181 -0
- package/dist/react/MultiPointGradient.js +181 -0
- package/dist/react/Preview.js +10 -0
- package/dist/react/Shader.js +1 -1
- package/dist/react/Solarize.js +181 -0
- package/dist/react/Truchet.js +181 -0
- package/dist/react/Vignette.js +181 -0
- package/dist/react/Voronoi.js +181 -0
- package/dist/react/Weave.js +181 -0
- package/dist/react/components/ConicGradient.d.ts +35 -0
- package/dist/react/components/ConicGradient.d.ts.map +1 -0
- package/dist/react/components/DiamondGradient.d.ts +37 -0
- package/dist/react/components/DiamondGradient.d.ts.map +1 -0
- package/dist/react/components/DropShadow.d.ts +36 -0
- package/dist/react/components/DropShadow.d.ts.map +1 -0
- package/dist/react/components/Grid.d.ts +2 -1
- package/dist/react/components/Grid.d.ts.map +1 -1
- package/dist/react/components/HexGrid.d.ts +34 -0
- package/dist/react/components/HexGrid.d.ts.map +1 -0
- package/dist/react/components/MultiPointGradient.d.ts +38 -0
- package/dist/react/components/MultiPointGradient.d.ts.map +1 -0
- package/dist/react/components/RadialGradient.d.ts +4 -1
- package/dist/react/components/RadialGradient.d.ts.map +1 -1
- package/dist/react/components/Solarize.d.ts +34 -0
- package/dist/react/components/Solarize.d.ts.map +1 -0
- package/dist/react/components/Truchet.d.ts +35 -0
- package/dist/react/components/Truchet.d.ts.map +1 -0
- package/dist/react/components/Vignette.d.ts +36 -0
- package/dist/react/components/Vignette.d.ts.map +1 -0
- package/dist/react/components/Voronoi.d.ts +36 -0
- package/dist/react/components/Voronoi.d.ts.map +1 -0
- package/dist/react/components/Weave.d.ts +35 -0
- package/dist/react/components/Weave.d.ts.map +1 -0
- package/dist/react/engine/Preview.d.ts.map +1 -1
- package/dist/react/index.d.ts +10 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +11 -1
- package/dist/react/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/react/utils/generatePresetCode.js +141 -1
- package/dist/registry.js +2315 -267
- package/dist/solid/components/ConicGradient.d.ts +32 -0
- package/dist/solid/components/ConicGradient.d.ts.map +1 -0
- package/dist/solid/components/ConicGradient.js +183 -0
- package/dist/solid/components/DiamondGradient.d.ts +34 -0
- package/dist/solid/components/DiamondGradient.d.ts.map +1 -0
- package/dist/solid/components/DiamondGradient.js +183 -0
- package/dist/solid/components/DropShadow.d.ts +33 -0
- package/dist/solid/components/DropShadow.d.ts.map +1 -0
- package/dist/solid/components/DropShadow.js +183 -0
- package/dist/solid/components/Grid.d.ts +2 -1
- package/dist/solid/components/Grid.d.ts.map +1 -1
- package/dist/solid/components/HexGrid.d.ts +31 -0
- package/dist/solid/components/HexGrid.d.ts.map +1 -0
- package/dist/solid/components/HexGrid.js +183 -0
- package/dist/solid/components/MultiPointGradient.d.ts +35 -0
- package/dist/solid/components/MultiPointGradient.d.ts.map +1 -0
- package/dist/solid/components/MultiPointGradient.js +183 -0
- package/dist/solid/components/RadialGradient.d.ts +4 -1
- package/dist/solid/components/RadialGradient.d.ts.map +1 -1
- package/dist/solid/components/Solarize.d.ts +31 -0
- package/dist/solid/components/Solarize.d.ts.map +1 -0
- package/dist/solid/components/Solarize.js +183 -0
- package/dist/solid/components/Truchet.d.ts +32 -0
- package/dist/solid/components/Truchet.d.ts.map +1 -0
- package/dist/solid/components/Truchet.js +183 -0
- package/dist/solid/components/Vignette.d.ts +33 -0
- package/dist/solid/components/Vignette.d.ts.map +1 -0
- package/dist/solid/components/Vignette.js +183 -0
- package/dist/solid/components/Voronoi.d.ts +33 -0
- package/dist/solid/components/Voronoi.d.ts.map +1 -0
- package/dist/solid/components/Voronoi.js +183 -0
- package/dist/solid/components/Weave.d.ts +32 -0
- package/dist/solid/components/Weave.d.ts.map +1 -0
- package/dist/solid/components/Weave.js +183 -0
- package/dist/solid/engine/Preview.d.ts.map +1 -1
- package/dist/solid/engine/Preview.js +200 -180
- package/dist/solid/engine/Shader.js +1 -1
- package/dist/solid/index.d.ts +10 -0
- package/dist/solid/index.d.ts.map +1 -1
- package/dist/solid/index.js +178 -158
- package/dist/solid/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/solid/utils/generatePresetCode.js +141 -1
- package/dist/svelte/components/ConicGradient.svelte.d.ts +22 -0
- package/dist/svelte/components/DiamondGradient.svelte.d.ts +24 -0
- package/dist/svelte/components/DropShadow.svelte.d.ts +23 -0
- package/dist/svelte/components/Grid.svelte.d.ts +1 -0
- package/dist/svelte/components/HexGrid.svelte.d.ts +21 -0
- package/dist/svelte/components/MultiPointGradient.svelte.d.ts +25 -0
- package/dist/svelte/components/RadialGradient.svelte.d.ts +3 -0
- package/dist/svelte/components/Solarize.svelte.d.ts +21 -0
- package/dist/svelte/components/Truchet.svelte.d.ts +22 -0
- package/dist/svelte/components/Vignette.svelte.d.ts +23 -0
- package/dist/svelte/components/Voronoi.svelte.d.ts +23 -0
- package/dist/svelte/components/Weave.svelte.d.ts +22 -0
- package/dist/svelte/{generatePresetCode-BzFhasGi.js → generatePresetCode-C7KnCLnD.js} +141 -1
- package/dist/svelte/index.d.ts +10 -0
- package/dist/svelte/index.js +1810 -340
- package/dist/svelte/source/components/ConicGradient.svelte +289 -0
- package/dist/svelte/source/components/DiamondGradient.svelte +291 -0
- package/dist/svelte/source/components/DropShadow.svelte +290 -0
- package/dist/svelte/source/components/Grid.svelte +1 -0
- package/dist/svelte/source/components/HexGrid.svelte +288 -0
- package/dist/svelte/source/components/MultiPointGradient.svelte +292 -0
- package/dist/svelte/source/components/RadialGradient.svelte +3 -0
- package/dist/svelte/source/components/Solarize.svelte +288 -0
- package/dist/svelte/source/components/Truchet.svelte +289 -0
- package/dist/svelte/source/components/Vignette.svelte +290 -0
- package/dist/svelte/source/components/Voronoi.svelte +290 -0
- package/dist/svelte/source/components/Weave.svelte +289 -0
- package/dist/svelte/source/engine/Preview.svelte +20 -0
- package/dist/svelte/source/index.js +10 -0
- package/dist/svelte/utils/generatePresetCode.js +1 -1
- package/dist/vue/ConicGradient.js +3 -0
- package/dist/vue/ConicGradient.vue_vue_type_script_setup_true_lang.js +171 -0
- package/dist/vue/DiamondGradient.js +3 -0
- package/dist/vue/DiamondGradient.vue_vue_type_script_setup_true_lang.js +173 -0
- package/dist/vue/DropShadow.js +3 -0
- package/dist/vue/DropShadow.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/vue/Grid.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/vue/HexGrid.js +3 -0
- package/dist/vue/HexGrid.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/vue/MultiPointGradient.js +3 -0
- package/dist/vue/MultiPointGradient.vue_vue_type_script_setup_true_lang.js +176 -0
- package/dist/vue/Preview.vue_vue_type_script_setup_true_lang.js +20 -0
- package/dist/vue/RadialGradient.vue_vue_type_script_setup_true_lang.js +3 -0
- package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/vue/Solarize.js +3 -0
- package/dist/vue/Solarize.vue_vue_type_script_setup_true_lang.js +167 -0
- package/dist/vue/Truchet.js +3 -0
- package/dist/vue/Truchet.vue_vue_type_script_setup_true_lang.js +171 -0
- package/dist/vue/Vignette.js +3 -0
- package/dist/vue/Vignette.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/vue/Voronoi.js +3 -0
- package/dist/vue/Voronoi.vue_vue_type_script_setup_true_lang.js +174 -0
- package/dist/vue/Weave.js +3 -0
- package/dist/vue/Weave.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/vue/components/ConicGradient.vue.d.ts +57 -0
- package/dist/vue/components/ConicGradient.vue.d.ts.map +1 -0
- package/dist/vue/components/DiamondGradient.vue.d.ts +59 -0
- package/dist/vue/components/DiamondGradient.vue.d.ts.map +1 -0
- package/dist/vue/components/DropShadow.vue.d.ts +58 -0
- package/dist/vue/components/DropShadow.vue.d.ts.map +1 -0
- package/dist/vue/components/Grid.vue.d.ts +1 -0
- package/dist/vue/components/Grid.vue.d.ts.map +1 -1
- package/dist/vue/components/HexGrid.vue.d.ts +56 -0
- package/dist/vue/components/HexGrid.vue.d.ts.map +1 -0
- package/dist/vue/components/MultiPointGradient.vue.d.ts +60 -0
- package/dist/vue/components/MultiPointGradient.vue.d.ts.map +1 -0
- package/dist/vue/components/RadialGradient.vue.d.ts +3 -0
- package/dist/vue/components/RadialGradient.vue.d.ts.map +1 -1
- package/dist/vue/components/Solarize.vue.d.ts +56 -0
- package/dist/vue/components/Solarize.vue.d.ts.map +1 -0
- package/dist/vue/components/Truchet.vue.d.ts +57 -0
- package/dist/vue/components/Truchet.vue.d.ts.map +1 -0
- package/dist/vue/components/Vignette.vue.d.ts +58 -0
- package/dist/vue/components/Vignette.vue.d.ts.map +1 -0
- package/dist/vue/components/Voronoi.vue.d.ts +58 -0
- package/dist/vue/components/Voronoi.vue.d.ts.map +1 -0
- package/dist/vue/components/Weave.vue.d.ts +57 -0
- package/dist/vue/components/Weave.vue.d.ts.map +1 -0
- package/dist/vue/index.d.ts +10 -0
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +11 -1
- package/dist/vue/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/vue/utils/generatePresetCode.js +141 -1
- package/package.json +106 -1
- package/dist/core/RadialGradient-BMmhr2qB.js +0 -75
- package/dist/core/shaderRegistry-O96t1zA9.js +0 -222
- /package/dist/core/{CRTScreen-BZ-sAmPZ.js → CRTScreen-DolQEkb1.js} +0 -0
- /package/dist/core/{ContourLines-yEb5IJ1Y.js → ContourLines-C0XSJEkE.js} +0 -0
- /package/dist/core/{CursorRipples-CkVMs3DF.js → CursorRipples-n_xEDr10.js} +0 -0
- /package/dist/core/{CursorTrail-1D7ymT9O.js → CursorTrail-Dm2pOh9x.js} +0 -0
- /package/dist/core/{DiffuseBlur-BAq1jHVB.js → DiffuseBlur-BqIV4JLM.js} +0 -0
- /package/dist/core/{Dither-U_UFB8oZ.js → Dither-D_YF6z03.js} +0 -0
- /package/dist/core/{DotGrid-BzAsAVrt.js → DotGrid-Cv_aCN_c.js} +0 -0
- /package/dist/core/{Duotone-CuIRHH_k.js → Duotone-Db9kfzCs.js} +0 -0
- /package/dist/core/{FallingLines-BQzBwOy0.js → FallingLines-CTa8zuvs.js} +0 -0
- /package/dist/core/{FilmGrain-Birzz05_.js → FilmGrain-SrB3ZXIg.js} +0 -0
- /package/dist/core/{FloatingParticles-shoqY6fm.js → FloatingParticles-BVUK6GlL.js} +0 -0
- /package/dist/core/{FlowField-CJdtd3Za.js → FlowField-CF95xOBc.js} +0 -0
- /package/dist/core/{FlowingGradient-Dsuqf7Yn.js → FlowingGradient-DhOce4wJ.js} +0 -0
- /package/dist/core/{Form3D-Czd8VBcU.js → Form3D-CcBdpCQr.js} +0 -0
- /package/dist/core/{GlassTiles-CQFngHS9.js → GlassTiles-LsfUL0JT.js} +0 -0
- /package/dist/core/{Glitch-q3H4XH_K.js → Glitch-DuQ-dtyM.js} +0 -0
- /package/dist/core/{Glow-BltxRvyM.js → Glow-CsiZkj9_.js} +0 -0
- /package/dist/core/{Godrays-YxezlRHu.js → Godrays-CoSL15CM.js} +0 -0
- /package/dist/core/{Grayscale-D_RwmAV3.js → Grayscale-BrwJ4_uW.js} +0 -0
- /package/dist/core/{GridDistortion-JCuvWcoV.js → GridDistortion-DIarsmKa.js} +0 -0
- /package/dist/core/{Group-CeA8FtS3.js → Group-Cc3_0QdC.js} +0 -0
- /package/dist/core/{Halftone-4oL_AA-D.js → Halftone-nfr7eNaT.js} +0 -0
- /package/dist/core/{HueShift-7Gv8BV4v.js → HueShift-kNK2rEVM.js} +0 -0
- /package/dist/core/{ImageTexture-BaVcRld1.js → ImageTexture-acllbA1z.js} +0 -0
- /package/dist/core/{Invert-D_jzp4D9.js → Invert-CMnUhHo2.js} +0 -0
- /package/dist/core/{Kaleidoscope-Baz9Fu8k.js → Kaleidoscope-CgnidMrq.js} +0 -0
- /package/dist/core/{LensFlare-Dyv84bAb.js → LensFlare-CkCTGuKS.js} +0 -0
- /package/dist/core/{LinearBlur-ZGWbzIt4.js → LinearBlur-ByirUCm_.js} +0 -0
- /package/dist/core/{LinearGradient-CZGPiyHq.js → LinearGradient-B2ErQXPL.js} +0 -0
- /package/dist/core/{Liquify-DrWLq2Kz.js → Liquify-BTyJAOmV.js} +0 -0
- /package/dist/core/{Mirror-C5LuGm-w.js → Mirror-CAW37Y13.js} +0 -0
- /package/dist/core/{Paper-BVuYd7u4.js → Paper-Dkh14pIW.js} +0 -0
- /package/dist/core/{Perspective-CqV-lhEE.js → Perspective-CyG4fNaI.js} +0 -0
- /package/dist/core/{Pixelate-DrG7QsBR.js → Pixelate-DkD_q_Ma.js} +0 -0
- /package/dist/core/{PolarCoordinates-CiNUC56M.js → PolarCoordinates-iQB2vg0q.js} +0 -0
- /package/dist/core/{Posterize-CGEUVRt_.js → Posterize-Bnf3EUfk.js} +0 -0
- /package/dist/core/{ProgressiveBlur-jEam9zrU.js → ProgressiveBlur-Bc_dXikb.js} +0 -0
- /package/dist/core/{RectangularCoordinates-Cj-d2ol3.js → RectangularCoordinates-DbQ25OTz.js} +0 -0
- /package/dist/core/{Ripples-r12S7WG7.js → Ripples-Daco0GPY.js} +0 -0
- /package/dist/core/{Saturation-BAORnZso.js → Saturation-BNWZN-nJ.js} +0 -0
- /package/dist/core/{Sharpness-CFzYBYlL.js → Sharpness-tRNM2arG.js} +0 -0
- /package/dist/core/{Shatter-avsezFDy.js → Shatter-Cyq_lBjn.js} +0 -0
- /package/dist/core/{SimplexNoise-BjoeAe6H.js → SimplexNoise-DSvDs4b7.js} +0 -0
- /package/dist/core/{SineWave-B-2YxAht.js → SineWave-Beim8Xoe.js} +0 -0
- /package/dist/core/{SolidColor-2o0vQu86.js → SolidColor-kt6ayyXz.js} +0 -0
- /package/dist/core/{Spherize-DKJKva6y.js → Spherize-u6gO2hh2.js} +0 -0
- /package/dist/core/{Spiral-Dzsm_AJG.js → Spiral-DRpE_jsz.js} +0 -0
- /package/dist/core/{Strands-42wUIQMv.js → Strands-BqCaitMb.js} +0 -0
- /package/dist/core/{Stretch-BVPICFxU.js → Stretch-TztFP3F2.js} +0 -0
- /package/dist/core/{Stripes-DpWPzhd5.js → Stripes-UYWf5Cmn.js} +0 -0
- /package/dist/core/{StudioBackground-CxOYZ28g.js → StudioBackground-CvKGt77W.js} +0 -0
- /package/dist/core/{Swirl-CaQpQWY2.js → Swirl-YCWu5OJE.js} +0 -0
- /package/dist/core/{TiltShift-yJYvxA1V.js → TiltShift-DKibnYzM.js} +0 -0
- /package/dist/core/{Tint-BR2yMhfB.js → Tint-aVYSCIlD.js} +0 -0
- /package/dist/core/{Tritone-PTTYWr_w.js → Tritone-Cn0ugwld.js} +0 -0
- /package/dist/core/{Twirl-CE2yzv3_.js → Twirl-Dk8y9GcM.js} +0 -0
- /package/dist/core/{Vibrance-CljpZu_J.js → Vibrance-Cdx5A_q2.js} +0 -0
- /package/dist/core/{WaveDistortion-BSt0JJbk.js → WaveDistortion-C7mIgJok.js} +0 -0
- /package/dist/core/{ZoomBlur-CAeswzf5.js → ZoomBlur-DUcqnggc.js} +0 -0
- /package/dist/core/{browser-CWKHEzb9.js → browser-CpS3EEFG.js} +0 -0
- /package/dist/core/{sdf-CZRX0uur.js → sdf-Bux00UoZ.js} +0 -0
|
@@ -0,0 +1,290 @@
|
|
|
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/Voronoi/index.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Define component props including blend mode, opacity, visibility, masking, and transformation
|
|
20
|
+
*/
|
|
21
|
+
interface ExtendedComponentProps extends Partial<ComponentProps> {
|
|
22
|
+
scale?: ComponentProps['scale'] | PropDriver;
|
|
23
|
+
seed?: ComponentProps['seed'] | PropDriver;
|
|
24
|
+
edgeIntensity?: ComponentProps['edgeIntensity'] | PropDriver;
|
|
25
|
+
edgeSoftness?: ComponentProps['edgeSoftness'] | PropDriver;
|
|
26
|
+
blendMode?: BlendMode;
|
|
27
|
+
opacity?: number;
|
|
28
|
+
visible?: boolean;
|
|
29
|
+
id?: string;
|
|
30
|
+
maskSource?: string;
|
|
31
|
+
maskType?: string;
|
|
32
|
+
renderOrder?: number;
|
|
33
|
+
transform?: Partial<TransformConfig>;
|
|
34
|
+
children?: import('svelte').Snippet;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function isPropDriver(value: unknown): value is PropDriver {
|
|
38
|
+
return typeof value === 'object' && value !== null && 'type' in value &&
|
|
39
|
+
((value as any).type === 'map' || (value as any).type === 'mouse' || (value as any).type === 'mouse-position' || (value as any).type === 'auto-animate');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Default transform configuration (optimized for zero overhead)
|
|
44
|
+
*/
|
|
45
|
+
const DEFAULT_TRANSFORM: TransformConfig = {
|
|
46
|
+
offsetX: 0,
|
|
47
|
+
offsetY: 0,
|
|
48
|
+
rotation: 0,
|
|
49
|
+
scale: 1,
|
|
50
|
+
anchorX: 0.5,
|
|
51
|
+
anchorY: 0.5,
|
|
52
|
+
edges: 'transparent'
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// Define the component props and their default values from the shader definition
|
|
56
|
+
const componentDefaults = {
|
|
57
|
+
blendMode: 'normal' as BlendMode,
|
|
58
|
+
visible: true,
|
|
59
|
+
// opacity intentionally has no default - handled by renderer
|
|
60
|
+
// transform intentionally has no default - handled by effectiveTransform
|
|
61
|
+
...Object.entries(componentDefinition.props).reduce(
|
|
62
|
+
(acc, [key, config]) => {
|
|
63
|
+
acc[key] = (config as unknown as PropConfig<typeof config>).default;
|
|
64
|
+
return acc;
|
|
65
|
+
},
|
|
66
|
+
{} as Record<string, any>
|
|
67
|
+
)
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Declare props using Svelte 5's syntax
|
|
71
|
+
const props: ExtendedComponentProps = $props();
|
|
72
|
+
|
|
73
|
+
// Apply defaults manually since Svelte 5 doesn't have withDefaults equivalent
|
|
74
|
+
// Use $derived so the metadata $effect re-runs when any of these change at runtime
|
|
75
|
+
const blendMode = $derived(props.blendMode ?? componentDefaults.blendMode);
|
|
76
|
+
const opacity = $derived(props.opacity); // No default - handled by renderer
|
|
77
|
+
const visible = $derived(props.visible ?? componentDefaults.visible); // Default to true
|
|
78
|
+
const id = $derived(props.id);
|
|
79
|
+
const maskSource = $derived(props.maskSource);
|
|
80
|
+
const maskType = $derived(props.maskType);
|
|
81
|
+
const renderOrder = $derived(props.renderOrder);
|
|
82
|
+
const { children } = props;
|
|
83
|
+
|
|
84
|
+
// Collect PropDriver values from shader props into the maps metadata structure
|
|
85
|
+
const mapsFromProps = $derived.by(() => {
|
|
86
|
+
const maps: Record<string, PropDriver> = {};
|
|
87
|
+
for (const key of Object.keys(componentDefinition.props)) {
|
|
88
|
+
const val = (props as any)[key];
|
|
89
|
+
if (isPropDriver(val)) maps[key] = val as PropDriver;
|
|
90
|
+
}
|
|
91
|
+
return Object.keys(maps).length > 0 ? maps : undefined;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Computed transform that merges user-provided values with defaults
|
|
96
|
+
*/
|
|
97
|
+
const effectiveTransform = $derived({
|
|
98
|
+
...DEFAULT_TRANSFORM,
|
|
99
|
+
...props.transform
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* FIRST: Get the parent ID from context BEFORE setting our own context
|
|
104
|
+
*/
|
|
105
|
+
const parentId = getContext<string>('shaderParentId');
|
|
106
|
+
if (parentId === undefined) {
|
|
107
|
+
throw new Error('Shader components must be used inside an <Shader> component or another shader component');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Use the provided ID or generate a unique identifier for this component instance
|
|
112
|
+
*/
|
|
113
|
+
const instanceId = (id ? id.replace(/[^a-zA-Z0-9_]/g, '_') : null) || Math.random().toString(36).substring(2, 10);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* THEN: Provide our unique identifier to child components
|
|
117
|
+
*/
|
|
118
|
+
setContext('shaderParentId', instanceId);
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Creates a non-reactive object containing only props that differ from defaults
|
|
122
|
+
* This optimization prevents unnecessary GPU uniform updates for unchanged values
|
|
123
|
+
* Special props like blendMode and opacity are handled separately
|
|
124
|
+
*/
|
|
125
|
+
const shaderReadyProps = $derived.by(() => {
|
|
126
|
+
let baseProps = { ...componentDefaults };
|
|
127
|
+
|
|
128
|
+
// Only include props that differ from defaults (excluding special props and PropDrivers)
|
|
129
|
+
for (const key in props) {
|
|
130
|
+
if (key !== 'blendMode' && key !== 'opacity' && key !== 'visible' &&
|
|
131
|
+
key !== 'id' && key !== 'maskSource' && key !== 'maskType' && key !== 'renderOrder' &&
|
|
132
|
+
key !== 'transform' && key !== 'children') {
|
|
133
|
+
const propValue = (props as any)[key];
|
|
134
|
+
if (isPropDriver(propValue)) continue; // PropDrivers go to metadata.maps, not uniforms
|
|
135
|
+
const defaultValue = (componentDefaults as any)[key];
|
|
136
|
+
if (propValue !== undefined && propValue !== defaultValue) {
|
|
137
|
+
(baseProps as any)[key] = propValue;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return baseProps;
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get the color space from the root Shader component.
|
|
146
|
+
* Used to set the global color space mode before creating uniforms.
|
|
147
|
+
*/
|
|
148
|
+
const shaderColorSpace = getContext<() => 'p3-linear' | 'srgb'>('shaderColorSpace');
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Creates the GPU uniform values map using only the changed props
|
|
152
|
+
* Set the global color space mode before creating uniforms so colors are transformed correctly
|
|
153
|
+
* Note: Intentionally captures initial value - props are immutable after initialization
|
|
154
|
+
*/
|
|
155
|
+
if (shaderColorSpace) {
|
|
156
|
+
setColorSpaceMode(shaderColorSpace());
|
|
157
|
+
}
|
|
158
|
+
// svelte-ignore state_referenced_locally
|
|
159
|
+
const uniforms: UniformsMap = createUniformsMap(componentDefinition, shaderReadyProps, instanceId);
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get the node registration function from parent context
|
|
163
|
+
*/
|
|
164
|
+
const parentRegister = getContext<(id: string, fragmentNodeFunc: any, parentId: string | null, metadata: NodeMetadata | null, uniforms: UniformsMap | null, componentDefinition: any) => void>('shaderNodeRegister');
|
|
165
|
+
if (parentRegister === undefined) {
|
|
166
|
+
throw new Error('Shader components must be used inside an <Shader> component or another shader component');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Get the uniform update function from parent context
|
|
171
|
+
*/
|
|
172
|
+
const parentUniformUpdate = getContext<(nodeId: string, uniformName: string, value: any) => void>('shaderUniformUpdate');
|
|
173
|
+
if (parentUniformUpdate === undefined) {
|
|
174
|
+
throw new Error('Shader components require shaderUniformUpdate from parent');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Get the metadata update function from parent context
|
|
179
|
+
*/
|
|
180
|
+
const parentMetadataUpdate = getContext<(nodeId: string, metadata: NodeMetadata) => void>('shaderMetadataUpdate');
|
|
181
|
+
if (parentMetadataUpdate === undefined) {
|
|
182
|
+
throw new Error('Shader components require shaderMetadataUpdate from parent');
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// DOM marker ref for determining render order from template position
|
|
186
|
+
let orderMarker: HTMLSpanElement;
|
|
187
|
+
|
|
188
|
+
// Stores the DOM-detected render order
|
|
189
|
+
let detectedRenderOrder: number | undefined = undefined;
|
|
190
|
+
|
|
191
|
+
// Flag to track when component is registered
|
|
192
|
+
let isRegistered = $state(false);
|
|
193
|
+
|
|
194
|
+
// Setup uniform watchers with registration guard
|
|
195
|
+
Object.entries(uniforms).forEach(([propName, { uniform, transform }]) => {
|
|
196
|
+
$effect(() => {
|
|
197
|
+
// Only run after component is registered
|
|
198
|
+
if (!isRegistered) return;
|
|
199
|
+
|
|
200
|
+
if (uniform && uniform.value !== undefined) {
|
|
201
|
+
const newValue = (props as any)[propName];
|
|
202
|
+
if (newValue !== undefined && !isPropDriver(newValue)) {
|
|
203
|
+
// Send raw value - renderer will handle transformation
|
|
204
|
+
// PropDriver values go to metadata.maps, not uniforms
|
|
205
|
+
parentUniformUpdate(instanceId, propName, newValue);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// Watch blend mode, opacity, visibility, masking, transformations, and prop maps changes
|
|
212
|
+
$effect(() => {
|
|
213
|
+
// Only run after component is registered
|
|
214
|
+
if (!isRegistered) return;
|
|
215
|
+
|
|
216
|
+
const metadata: NodeMetadata = {
|
|
217
|
+
blendMode,
|
|
218
|
+
opacity,
|
|
219
|
+
visible: visible === false ? false : true,
|
|
220
|
+
id,
|
|
221
|
+
mask: maskSource ? {
|
|
222
|
+
source: maskSource,
|
|
223
|
+
type: (maskType || 'alpha') as MaskConfig['type']
|
|
224
|
+
} : undefined,
|
|
225
|
+
maps: mapsFromProps,
|
|
226
|
+
renderOrder: renderOrder ?? detectedRenderOrder,
|
|
227
|
+
transform: effectiveTransform
|
|
228
|
+
};
|
|
229
|
+
parentMetadataUpdate(instanceId, metadata);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Register this component after mount to ensure parent is ready
|
|
233
|
+
onMount(() => {
|
|
234
|
+
// Register this component with safety check
|
|
235
|
+
if (componentDefinition && typeof componentDefinition.fragmentNode === 'function') {
|
|
236
|
+
parentRegister(
|
|
237
|
+
instanceId,
|
|
238
|
+
componentDefinition.fragmentNode,
|
|
239
|
+
parentId,
|
|
240
|
+
{
|
|
241
|
+
blendMode,
|
|
242
|
+
opacity,
|
|
243
|
+
visible: visible !== false ? true : false,
|
|
244
|
+
id,
|
|
245
|
+
mask: maskSource ? {
|
|
246
|
+
source: maskSource,
|
|
247
|
+
type: (maskType || 'alpha') as MaskConfig['type']
|
|
248
|
+
} as MaskConfig : undefined,
|
|
249
|
+
maps: mapsFromProps,
|
|
250
|
+
renderOrder: renderOrder ?? detectedRenderOrder,
|
|
251
|
+
transform: effectiveTransform
|
|
252
|
+
},
|
|
253
|
+
uniforms,
|
|
254
|
+
componentDefinition
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
// Set flag to enable effects after successful registration
|
|
258
|
+
isRegistered = true;
|
|
259
|
+
|
|
260
|
+
// Detect DOM position for correct render ordering
|
|
261
|
+
if (renderOrder === undefined && orderMarker) {
|
|
262
|
+
const parent = orderMarker.parentElement;
|
|
263
|
+
if (parent) {
|
|
264
|
+
const siblings = parent.querySelectorAll(':scope > [data-shader-id]');
|
|
265
|
+
const position = Array.from(siblings).indexOf(orderMarker);
|
|
266
|
+
if (position >= 0) {
|
|
267
|
+
detectedRenderOrder = position;
|
|
268
|
+
parentMetadataUpdate(instanceId, { renderOrder: position } as NodeMetadata);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} else {
|
|
273
|
+
console.error('componentDefinition.fragmentNode is not a function:', {
|
|
274
|
+
componentDefinition,
|
|
275
|
+
fragmentNode: componentDefinition?.fragmentNode,
|
|
276
|
+
type: typeof componentDefinition?.fragmentNode
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Clean up node from registry when component is unmounted
|
|
282
|
+
onDestroy(() => {
|
|
283
|
+
isRegistered = false;
|
|
284
|
+
parentRegister(instanceId, null, null, null, null);
|
|
285
|
+
});
|
|
286
|
+
</script>
|
|
287
|
+
|
|
288
|
+
<span bind:this={orderMarker} style="display:contents" data-shader-id={instanceId}>
|
|
289
|
+
{@render children?.()}
|
|
290
|
+
</span>
|
|
@@ -0,0 +1,289 @@
|
|
|
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/Weave/index.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Define component props including blend mode, opacity, visibility, masking, and transformation
|
|
20
|
+
*/
|
|
21
|
+
interface ExtendedComponentProps extends Partial<ComponentProps> {
|
|
22
|
+
cells?: ComponentProps['cells'] | PropDriver;
|
|
23
|
+
gap?: ComponentProps['gap'] | PropDriver;
|
|
24
|
+
rotation?: ComponentProps['rotation'] | PropDriver;
|
|
25
|
+
blendMode?: BlendMode;
|
|
26
|
+
opacity?: number;
|
|
27
|
+
visible?: boolean;
|
|
28
|
+
id?: string;
|
|
29
|
+
maskSource?: string;
|
|
30
|
+
maskType?: string;
|
|
31
|
+
renderOrder?: number;
|
|
32
|
+
transform?: Partial<TransformConfig>;
|
|
33
|
+
children?: import('svelte').Snippet;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function isPropDriver(value: unknown): value is PropDriver {
|
|
37
|
+
return typeof value === 'object' && value !== null && 'type' in value &&
|
|
38
|
+
((value as any).type === 'map' || (value as any).type === 'mouse' || (value as any).type === 'mouse-position' || (value as any).type === 'auto-animate');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Default transform configuration (optimized for zero overhead)
|
|
43
|
+
*/
|
|
44
|
+
const DEFAULT_TRANSFORM: TransformConfig = {
|
|
45
|
+
offsetX: 0,
|
|
46
|
+
offsetY: 0,
|
|
47
|
+
rotation: 0,
|
|
48
|
+
scale: 1,
|
|
49
|
+
anchorX: 0.5,
|
|
50
|
+
anchorY: 0.5,
|
|
51
|
+
edges: 'transparent'
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Define the component props and their default values from the shader definition
|
|
55
|
+
const componentDefaults = {
|
|
56
|
+
blendMode: 'normal' as BlendMode,
|
|
57
|
+
visible: true,
|
|
58
|
+
// opacity intentionally has no default - handled by renderer
|
|
59
|
+
// transform intentionally has no default - handled by effectiveTransform
|
|
60
|
+
...Object.entries(componentDefinition.props).reduce(
|
|
61
|
+
(acc, [key, config]) => {
|
|
62
|
+
acc[key] = (config as unknown as PropConfig<typeof config>).default;
|
|
63
|
+
return acc;
|
|
64
|
+
},
|
|
65
|
+
{} as Record<string, any>
|
|
66
|
+
)
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Declare props using Svelte 5's syntax
|
|
70
|
+
const props: ExtendedComponentProps = $props();
|
|
71
|
+
|
|
72
|
+
// Apply defaults manually since Svelte 5 doesn't have withDefaults equivalent
|
|
73
|
+
// Use $derived so the metadata $effect re-runs when any of these change at runtime
|
|
74
|
+
const blendMode = $derived(props.blendMode ?? componentDefaults.blendMode);
|
|
75
|
+
const opacity = $derived(props.opacity); // No default - handled by renderer
|
|
76
|
+
const visible = $derived(props.visible ?? componentDefaults.visible); // Default to true
|
|
77
|
+
const id = $derived(props.id);
|
|
78
|
+
const maskSource = $derived(props.maskSource);
|
|
79
|
+
const maskType = $derived(props.maskType);
|
|
80
|
+
const renderOrder = $derived(props.renderOrder);
|
|
81
|
+
const { children } = props;
|
|
82
|
+
|
|
83
|
+
// Collect PropDriver values from shader props into the maps metadata structure
|
|
84
|
+
const mapsFromProps = $derived.by(() => {
|
|
85
|
+
const maps: Record<string, PropDriver> = {};
|
|
86
|
+
for (const key of Object.keys(componentDefinition.props)) {
|
|
87
|
+
const val = (props as any)[key];
|
|
88
|
+
if (isPropDriver(val)) maps[key] = val as PropDriver;
|
|
89
|
+
}
|
|
90
|
+
return Object.keys(maps).length > 0 ? maps : undefined;
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Computed transform that merges user-provided values with defaults
|
|
95
|
+
*/
|
|
96
|
+
const effectiveTransform = $derived({
|
|
97
|
+
...DEFAULT_TRANSFORM,
|
|
98
|
+
...props.transform
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* FIRST: Get the parent ID from context BEFORE setting our own context
|
|
103
|
+
*/
|
|
104
|
+
const parentId = getContext<string>('shaderParentId');
|
|
105
|
+
if (parentId === undefined) {
|
|
106
|
+
throw new Error('Shader components must be used inside an <Shader> component or another shader component');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Use the provided ID or generate a unique identifier for this component instance
|
|
111
|
+
*/
|
|
112
|
+
const instanceId = (id ? id.replace(/[^a-zA-Z0-9_]/g, '_') : null) || Math.random().toString(36).substring(2, 10);
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* THEN: Provide our unique identifier to child components
|
|
116
|
+
*/
|
|
117
|
+
setContext('shaderParentId', instanceId);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Creates a non-reactive object containing only props that differ from defaults
|
|
121
|
+
* This optimization prevents unnecessary GPU uniform updates for unchanged values
|
|
122
|
+
* Special props like blendMode and opacity are handled separately
|
|
123
|
+
*/
|
|
124
|
+
const shaderReadyProps = $derived.by(() => {
|
|
125
|
+
let baseProps = { ...componentDefaults };
|
|
126
|
+
|
|
127
|
+
// Only include props that differ from defaults (excluding special props and PropDrivers)
|
|
128
|
+
for (const key in props) {
|
|
129
|
+
if (key !== 'blendMode' && key !== 'opacity' && key !== 'visible' &&
|
|
130
|
+
key !== 'id' && key !== 'maskSource' && key !== 'maskType' && key !== 'renderOrder' &&
|
|
131
|
+
key !== 'transform' && key !== 'children') {
|
|
132
|
+
const propValue = (props as any)[key];
|
|
133
|
+
if (isPropDriver(propValue)) continue; // PropDrivers go to metadata.maps, not uniforms
|
|
134
|
+
const defaultValue = (componentDefaults as any)[key];
|
|
135
|
+
if (propValue !== undefined && propValue !== defaultValue) {
|
|
136
|
+
(baseProps as any)[key] = propValue;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return baseProps;
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Get the color space from the root Shader component.
|
|
145
|
+
* Used to set the global color space mode before creating uniforms.
|
|
146
|
+
*/
|
|
147
|
+
const shaderColorSpace = getContext<() => 'p3-linear' | 'srgb'>('shaderColorSpace');
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Creates the GPU uniform values map using only the changed props
|
|
151
|
+
* Set the global color space mode before creating uniforms so colors are transformed correctly
|
|
152
|
+
* Note: Intentionally captures initial value - props are immutable after initialization
|
|
153
|
+
*/
|
|
154
|
+
if (shaderColorSpace) {
|
|
155
|
+
setColorSpaceMode(shaderColorSpace());
|
|
156
|
+
}
|
|
157
|
+
// svelte-ignore state_referenced_locally
|
|
158
|
+
const uniforms: UniformsMap = createUniformsMap(componentDefinition, shaderReadyProps, instanceId);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Get the node registration function from parent context
|
|
162
|
+
*/
|
|
163
|
+
const parentRegister = getContext<(id: string, fragmentNodeFunc: any, parentId: string | null, metadata: NodeMetadata | null, uniforms: UniformsMap | null, componentDefinition: any) => void>('shaderNodeRegister');
|
|
164
|
+
if (parentRegister === undefined) {
|
|
165
|
+
throw new Error('Shader components must be used inside an <Shader> component or another shader component');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Get the uniform update function from parent context
|
|
170
|
+
*/
|
|
171
|
+
const parentUniformUpdate = getContext<(nodeId: string, uniformName: string, value: any) => void>('shaderUniformUpdate');
|
|
172
|
+
if (parentUniformUpdate === undefined) {
|
|
173
|
+
throw new Error('Shader components require shaderUniformUpdate from parent');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Get the metadata update function from parent context
|
|
178
|
+
*/
|
|
179
|
+
const parentMetadataUpdate = getContext<(nodeId: string, metadata: NodeMetadata) => void>('shaderMetadataUpdate');
|
|
180
|
+
if (parentMetadataUpdate === undefined) {
|
|
181
|
+
throw new Error('Shader components require shaderMetadataUpdate from parent');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// DOM marker ref for determining render order from template position
|
|
185
|
+
let orderMarker: HTMLSpanElement;
|
|
186
|
+
|
|
187
|
+
// Stores the DOM-detected render order
|
|
188
|
+
let detectedRenderOrder: number | undefined = undefined;
|
|
189
|
+
|
|
190
|
+
// Flag to track when component is registered
|
|
191
|
+
let isRegistered = $state(false);
|
|
192
|
+
|
|
193
|
+
// Setup uniform watchers with registration guard
|
|
194
|
+
Object.entries(uniforms).forEach(([propName, { uniform, transform }]) => {
|
|
195
|
+
$effect(() => {
|
|
196
|
+
// Only run after component is registered
|
|
197
|
+
if (!isRegistered) return;
|
|
198
|
+
|
|
199
|
+
if (uniform && uniform.value !== undefined) {
|
|
200
|
+
const newValue = (props as any)[propName];
|
|
201
|
+
if (newValue !== undefined && !isPropDriver(newValue)) {
|
|
202
|
+
// Send raw value - renderer will handle transformation
|
|
203
|
+
// PropDriver values go to metadata.maps, not uniforms
|
|
204
|
+
parentUniformUpdate(instanceId, propName, newValue);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// Watch blend mode, opacity, visibility, masking, transformations, and prop maps changes
|
|
211
|
+
$effect(() => {
|
|
212
|
+
// Only run after component is registered
|
|
213
|
+
if (!isRegistered) return;
|
|
214
|
+
|
|
215
|
+
const metadata: NodeMetadata = {
|
|
216
|
+
blendMode,
|
|
217
|
+
opacity,
|
|
218
|
+
visible: visible === false ? false : true,
|
|
219
|
+
id,
|
|
220
|
+
mask: maskSource ? {
|
|
221
|
+
source: maskSource,
|
|
222
|
+
type: (maskType || 'alpha') as MaskConfig['type']
|
|
223
|
+
} : undefined,
|
|
224
|
+
maps: mapsFromProps,
|
|
225
|
+
renderOrder: renderOrder ?? detectedRenderOrder,
|
|
226
|
+
transform: effectiveTransform
|
|
227
|
+
};
|
|
228
|
+
parentMetadataUpdate(instanceId, metadata);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
// Register this component after mount to ensure parent is ready
|
|
232
|
+
onMount(() => {
|
|
233
|
+
// Register this component with safety check
|
|
234
|
+
if (componentDefinition && typeof componentDefinition.fragmentNode === 'function') {
|
|
235
|
+
parentRegister(
|
|
236
|
+
instanceId,
|
|
237
|
+
componentDefinition.fragmentNode,
|
|
238
|
+
parentId,
|
|
239
|
+
{
|
|
240
|
+
blendMode,
|
|
241
|
+
opacity,
|
|
242
|
+
visible: visible !== false ? true : false,
|
|
243
|
+
id,
|
|
244
|
+
mask: maskSource ? {
|
|
245
|
+
source: maskSource,
|
|
246
|
+
type: (maskType || 'alpha') as MaskConfig['type']
|
|
247
|
+
} as MaskConfig : undefined,
|
|
248
|
+
maps: mapsFromProps,
|
|
249
|
+
renderOrder: renderOrder ?? detectedRenderOrder,
|
|
250
|
+
transform: effectiveTransform
|
|
251
|
+
},
|
|
252
|
+
uniforms,
|
|
253
|
+
componentDefinition
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
// Set flag to enable effects after successful registration
|
|
257
|
+
isRegistered = true;
|
|
258
|
+
|
|
259
|
+
// Detect DOM position for correct render ordering
|
|
260
|
+
if (renderOrder === undefined && orderMarker) {
|
|
261
|
+
const parent = orderMarker.parentElement;
|
|
262
|
+
if (parent) {
|
|
263
|
+
const siblings = parent.querySelectorAll(':scope > [data-shader-id]');
|
|
264
|
+
const position = Array.from(siblings).indexOf(orderMarker);
|
|
265
|
+
if (position >= 0) {
|
|
266
|
+
detectedRenderOrder = position;
|
|
267
|
+
parentMetadataUpdate(instanceId, { renderOrder: position } as NodeMetadata);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
} else {
|
|
272
|
+
console.error('componentDefinition.fragmentNode is not a function:', {
|
|
273
|
+
componentDefinition,
|
|
274
|
+
fragmentNode: componentDefinition?.fragmentNode,
|
|
275
|
+
type: typeof componentDefinition?.fragmentNode
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Clean up node from registry when component is unmounted
|
|
281
|
+
onDestroy(() => {
|
|
282
|
+
isRegistered = false;
|
|
283
|
+
parentRegister(instanceId, null, null, null, null);
|
|
284
|
+
});
|
|
285
|
+
</script>
|
|
286
|
+
|
|
287
|
+
<span bind:this={orderMarker} style="display:contents" data-shader-id={instanceId}>
|
|
288
|
+
{@render children?.()}
|
|
289
|
+
</span>
|
|
@@ -20,15 +20,18 @@ import ChromaFlow from '../components/ChromaFlow.svelte'
|
|
|
20
20
|
import ChromaticAberration from '../components/ChromaticAberration.svelte'
|
|
21
21
|
import Circle from '../components/Circle.svelte'
|
|
22
22
|
import ConcentricSpin from '../components/ConcentricSpin.svelte'
|
|
23
|
+
import ConicGradient from '../components/ConicGradient.svelte'
|
|
23
24
|
import ContourLines from '../components/ContourLines.svelte'
|
|
24
25
|
import Crescent from '../components/Crescent.svelte'
|
|
25
26
|
import Cross from '../components/Cross.svelte'
|
|
26
27
|
import Crystal from '../components/Crystal.svelte'
|
|
27
28
|
import CursorRipples from '../components/CursorRipples.svelte'
|
|
28
29
|
import CursorTrail from '../components/CursorTrail.svelte'
|
|
30
|
+
import DiamondGradient from '../components/DiamondGradient.svelte'
|
|
29
31
|
import DiffuseBlur from '../components/DiffuseBlur.svelte'
|
|
30
32
|
import Dither from '../components/Dither.svelte'
|
|
31
33
|
import DotGrid from '../components/DotGrid.svelte'
|
|
34
|
+
import DropShadow from '../components/DropShadow.svelte'
|
|
32
35
|
import Duotone from '../components/Duotone.svelte'
|
|
33
36
|
import Ellipse from '../components/Ellipse.svelte'
|
|
34
37
|
import Emboss from '../components/Emboss.svelte'
|
|
@@ -49,6 +52,7 @@ import Grid from '../components/Grid.svelte'
|
|
|
49
52
|
import GridDistortion from '../components/GridDistortion.svelte'
|
|
50
53
|
import Group from '../components/Group.svelte'
|
|
51
54
|
import Halftone from '../components/Halftone.svelte'
|
|
55
|
+
import HexGrid from '../components/HexGrid.svelte'
|
|
52
56
|
import HueShift from '../components/HueShift.svelte'
|
|
53
57
|
import ImageTexture from '../components/ImageTexture.svelte'
|
|
54
58
|
import Invert from '../components/Invert.svelte'
|
|
@@ -58,6 +62,7 @@ import LinearBlur from '../components/LinearBlur.svelte'
|
|
|
58
62
|
import LinearGradient from '../components/LinearGradient.svelte'
|
|
59
63
|
import Liquify from '../components/Liquify.svelte'
|
|
60
64
|
import Mirror from '../components/Mirror.svelte'
|
|
65
|
+
import MultiPointGradient from '../components/MultiPointGradient.svelte'
|
|
61
66
|
import Neon from '../components/Neon.svelte'
|
|
62
67
|
import Paper from '../components/Paper.svelte'
|
|
63
68
|
import Perspective from '../components/Perspective.svelte'
|
|
@@ -77,6 +82,7 @@ import Sharpness from '../components/Sharpness.svelte'
|
|
|
77
82
|
import Shatter from '../components/Shatter.svelte'
|
|
78
83
|
import SimplexNoise from '../components/SimplexNoise.svelte'
|
|
79
84
|
import SineWave from '../components/SineWave.svelte'
|
|
85
|
+
import Solarize from '../components/Solarize.svelte'
|
|
80
86
|
import SolidColor from '../components/SolidColor.svelte'
|
|
81
87
|
import Spherize from '../components/Spherize.svelte'
|
|
82
88
|
import Spiral from '../components/Spiral.svelte'
|
|
@@ -90,11 +96,15 @@ import TiltShift from '../components/TiltShift.svelte'
|
|
|
90
96
|
import Tint from '../components/Tint.svelte'
|
|
91
97
|
import Trapezoid from '../components/Trapezoid.svelte'
|
|
92
98
|
import Tritone from '../components/Tritone.svelte'
|
|
99
|
+
import Truchet from '../components/Truchet.svelte'
|
|
93
100
|
import Twirl from '../components/Twirl.svelte'
|
|
94
101
|
import Vesica from '../components/Vesica.svelte'
|
|
95
102
|
import Vibrance from '../components/Vibrance.svelte'
|
|
96
103
|
import VideoTexture from '../components/VideoTexture.svelte'
|
|
104
|
+
import Vignette from '../components/Vignette.svelte'
|
|
105
|
+
import Voronoi from '../components/Voronoi.svelte'
|
|
97
106
|
import WaveDistortion from '../components/WaveDistortion.svelte'
|
|
107
|
+
import Weave from '../components/Weave.svelte'
|
|
98
108
|
import WebcamTexture from '../components/WebcamTexture.svelte'
|
|
99
109
|
import ZoomBlur from '../components/ZoomBlur.svelte'
|
|
100
110
|
|
|
@@ -116,15 +126,18 @@ const componentMap: Record<string, any> = {
|
|
|
116
126
|
ChromaticAberration,
|
|
117
127
|
Circle,
|
|
118
128
|
ConcentricSpin,
|
|
129
|
+
ConicGradient,
|
|
119
130
|
ContourLines,
|
|
120
131
|
Crescent,
|
|
121
132
|
Cross,
|
|
122
133
|
Crystal,
|
|
123
134
|
CursorRipples,
|
|
124
135
|
CursorTrail,
|
|
136
|
+
DiamondGradient,
|
|
125
137
|
DiffuseBlur,
|
|
126
138
|
Dither,
|
|
127
139
|
DotGrid,
|
|
140
|
+
DropShadow,
|
|
128
141
|
Duotone,
|
|
129
142
|
Ellipse,
|
|
130
143
|
Emboss,
|
|
@@ -145,6 +158,7 @@ const componentMap: Record<string, any> = {
|
|
|
145
158
|
GridDistortion,
|
|
146
159
|
Group,
|
|
147
160
|
Halftone,
|
|
161
|
+
HexGrid,
|
|
148
162
|
HueShift,
|
|
149
163
|
ImageTexture,
|
|
150
164
|
Invert,
|
|
@@ -154,6 +168,7 @@ const componentMap: Record<string, any> = {
|
|
|
154
168
|
LinearGradient,
|
|
155
169
|
Liquify,
|
|
156
170
|
Mirror,
|
|
171
|
+
MultiPointGradient,
|
|
157
172
|
Neon,
|
|
158
173
|
Paper,
|
|
159
174
|
Perspective,
|
|
@@ -173,6 +188,7 @@ const componentMap: Record<string, any> = {
|
|
|
173
188
|
Shatter,
|
|
174
189
|
SimplexNoise,
|
|
175
190
|
SineWave,
|
|
191
|
+
Solarize,
|
|
176
192
|
SolidColor,
|
|
177
193
|
Spherize,
|
|
178
194
|
Spiral,
|
|
@@ -186,11 +202,15 @@ const componentMap: Record<string, any> = {
|
|
|
186
202
|
Tint,
|
|
187
203
|
Trapezoid,
|
|
188
204
|
Tritone,
|
|
205
|
+
Truchet,
|
|
189
206
|
Twirl,
|
|
190
207
|
Vesica,
|
|
191
208
|
Vibrance,
|
|
192
209
|
VideoTexture,
|
|
210
|
+
Vignette,
|
|
211
|
+
Voronoi,
|
|
193
212
|
WaveDistortion,
|
|
213
|
+
Weave,
|
|
194
214
|
WebcamTexture,
|
|
195
215
|
ZoomBlur,
|
|
196
216
|
}
|