shaders 2.5.94 → 2.5.95

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 (233) hide show
  1. package/dist/core/{Blur-DTyNQt1R.js → Blur-CC8fo0C5.js} +28 -3
  2. package/dist/core/{ChannelBlur-CCaPXjka.js → ChannelBlur-CN_Zyiur.js} +37 -2
  3. package/dist/core/{Crescent-DPxGWdPH.js → Crescent-BkRt-XWy.js} +1 -1
  4. package/dist/core/{Cross-CDyzf8TT.js → Cross-kkY7feuC.js} +1 -1
  5. package/dist/core/{Crystal-DSuN8TNY.js → Crystal-xVyUhVD-.js} +1 -1
  6. package/dist/core/CursorRipples-Cgm7N0Bp.js +289 -0
  7. package/dist/core/CursorTrail-CCRbdwHJ.js +263 -0
  8. package/dist/core/{Ellipse-BNmzdnpK.js → Ellipse-CXxGqTYI.js} +1 -1
  9. package/dist/core/{Emboss-nrduRrVs.js → Emboss-ClQV27Mt.js} +1 -1
  10. package/dist/core/{Flower-B4xPp0Qa.js → Flower-MAwlZEv8.js} +1 -1
  11. package/dist/core/{Glass-CRfTkmRy.js → Glass-gQCmJlsQ.js} +46 -8
  12. package/dist/core/{Glow-CKWIRcBt.js → Glow-DvN-WnB4.js} +32 -2
  13. package/dist/core/GridDistortion-DtaRNrTZ.js +278 -0
  14. package/dist/core/Liquify-cE5dxrfh.js +351 -0
  15. package/dist/core/{Neon-CUKnkAK8.js → Neon-Dg8UfC7P.js} +1 -1
  16. package/dist/core/{Polygon-C1y6Nyh4.js → Polygon-DRCs3CYs.js} +1 -1
  17. package/dist/core/{ProgressiveBlur-BcHBSVDo.js → ProgressiveBlur-Dm530r0z.js} +59 -2
  18. package/dist/core/{Ring-Chj1tp_P.js → Ring-QApyKPzE.js} +1 -1
  19. package/dist/core/{RoundedRect-BEj6tE1e.js → RoundedRect-Ca9af9xe.js} +1 -1
  20. package/dist/core/{Shatter-CZMOHj60.js → Shatter-BssZTRYJ.js} +154 -66
  21. package/dist/core/{Star-fPw1j10r.js → Star-DiXwnPGP.js} +1 -1
  22. package/dist/core/{TiltShift-BysRsV8v.js → TiltShift-BqKaU3TM.js} +60 -2
  23. package/dist/core/{Trapezoid-Cr61vRvN.js → Trapezoid-BX_hmeZJ.js} +1 -1
  24. package/dist/core/{Vesica-AXTA8DJU.js → Vesica-DU0f85NG.js} +1 -1
  25. package/dist/core/{VideoTexture-BobyGZGr.js → VideoTexture-DJrkry82.js} +1 -1
  26. package/dist/core/{WebcamTexture-BXj7sqND.js → WebcamTexture-Cf8J7JB1.js} +1 -1
  27. package/dist/core/computeBlur-B0KA4n89.js +141 -0
  28. package/dist/core/effects/glass.d.ts +1 -1
  29. package/dist/core/effects/glass.d.ts.map +1 -1
  30. package/dist/core/index.js +172 -121
  31. package/dist/core/registry.js +102 -101
  32. package/dist/core/renderer.d.ts +14 -0
  33. package/dist/core/renderer.d.ts.map +1 -1
  34. package/dist/core/shaderRegistry-DriE1ikS.js +244 -0
  35. package/dist/core/shaders/Blur/index.d.ts.map +1 -1
  36. package/dist/core/shaders/Blur/index.js +2 -1
  37. package/dist/core/shaders/BrightnessContrast/index.js +1 -1
  38. package/dist/core/shaders/Bulge/index.js +1 -1
  39. package/dist/core/shaders/CRTScreen/index.js +1 -1
  40. package/dist/core/shaders/ChannelBlur/index.d.ts.map +1 -1
  41. package/dist/core/shaders/ChannelBlur/index.js +2 -1
  42. package/dist/core/shaders/Checkerboard/index.js +1 -1
  43. package/dist/core/shaders/ChromaFlow/index.js +1 -1
  44. package/dist/core/shaders/ChromaticAberration/index.js +1 -1
  45. package/dist/core/shaders/Circle/index.js +1 -1
  46. package/dist/core/shaders/ConcentricSpin/index.js +1 -1
  47. package/dist/core/shaders/ConicGradient/index.js +1 -1
  48. package/dist/core/shaders/ContourLines/index.js +1 -1
  49. package/dist/core/shaders/Crescent/index.js +2 -2
  50. package/dist/core/shaders/Cross/index.js +2 -2
  51. package/dist/core/shaders/Crystal/index.js +2 -2
  52. package/dist/core/shaders/CursorRipples/index.d.ts.map +1 -1
  53. package/dist/core/shaders/CursorRipples/index.js +1 -1
  54. package/dist/core/shaders/CursorTrail/index.d.ts.map +1 -1
  55. package/dist/core/shaders/CursorTrail/index.js +1 -1
  56. package/dist/core/shaders/DOMTexture/index.js +1 -1
  57. package/dist/core/shaders/DiamondGradient/index.js +1 -1
  58. package/dist/core/shaders/DiffuseBlur/index.js +1 -1
  59. package/dist/core/shaders/Dither/index.js +1 -1
  60. package/dist/core/shaders/DotGrid/index.js +1 -1
  61. package/dist/core/shaders/DropShadow/index.js +1 -1
  62. package/dist/core/shaders/Duotone/index.js +1 -1
  63. package/dist/core/shaders/Ellipse/index.js +2 -2
  64. package/dist/core/shaders/Emboss/index.js +2 -2
  65. package/dist/core/shaders/FallingLines/index.js +1 -1
  66. package/dist/core/shaders/FilmGrain/index.js +1 -1
  67. package/dist/core/shaders/FloatingParticles/index.js +1 -1
  68. package/dist/core/shaders/FlowField/index.js +1 -1
  69. package/dist/core/shaders/Flower/index.js +2 -2
  70. package/dist/core/shaders/FlowingGradient/index.js +1 -1
  71. package/dist/core/shaders/Form3D/index.js +1 -1
  72. package/dist/core/shaders/Glass/index.d.ts.map +1 -1
  73. package/dist/core/shaders/Glass/index.js +3 -2
  74. package/dist/core/shaders/GlassTiles/index.js +1 -1
  75. package/dist/core/shaders/Glitch/index.js +1 -1
  76. package/dist/core/shaders/Glow/index.d.ts.map +1 -1
  77. package/dist/core/shaders/Glow/index.js +2 -1
  78. package/dist/core/shaders/Godrays/index.js +1 -1
  79. package/dist/core/shaders/Grayscale/index.js +1 -1
  80. package/dist/core/shaders/Grid/index.js +1 -1
  81. package/dist/core/shaders/GridDistortion/index.d.ts.map +1 -1
  82. package/dist/core/shaders/GridDistortion/index.js +1 -1
  83. package/dist/core/shaders/Group/index.js +1 -1
  84. package/dist/core/shaders/Halftone/index.js +1 -1
  85. package/dist/core/shaders/HexGrid/index.js +1 -1
  86. package/dist/core/shaders/HueShift/index.js +1 -1
  87. package/dist/core/shaders/ImageTexture/index.js +1 -1
  88. package/dist/core/shaders/Invert/index.js +1 -1
  89. package/dist/core/shaders/Kaleidoscope/index.js +1 -1
  90. package/dist/core/shaders/LensFlare/index.js +1 -1
  91. package/dist/core/shaders/LinearBlur/index.js +1 -1
  92. package/dist/core/shaders/LinearGradient/index.js +1 -1
  93. package/dist/core/shaders/Liquify/index.d.ts.map +1 -1
  94. package/dist/core/shaders/Liquify/index.js +1 -1
  95. package/dist/core/shaders/Mirror/index.js +1 -1
  96. package/dist/core/shaders/MultiPointGradient/index.js +1 -1
  97. package/dist/core/shaders/Neon/index.js +2 -2
  98. package/dist/core/shaders/Paper/index.js +1 -1
  99. package/dist/core/shaders/Perspective/index.js +1 -1
  100. package/dist/core/shaders/Pixelate/index.js +1 -1
  101. package/dist/core/shaders/Plasma/index.js +1 -1
  102. package/dist/core/shaders/PolarCoordinates/index.js +1 -1
  103. package/dist/core/shaders/Polygon/index.js +2 -2
  104. package/dist/core/shaders/Posterize/index.js +1 -1
  105. package/dist/core/shaders/ProgressiveBlur/index.d.ts.map +1 -1
  106. package/dist/core/shaders/ProgressiveBlur/index.js +2 -1
  107. package/dist/core/shaders/RadialGradient/index.js +1 -1
  108. package/dist/core/shaders/RectangularCoordinates/index.js +1 -1
  109. package/dist/core/shaders/Ring/index.js +2 -2
  110. package/dist/core/shaders/Ripples/index.js +1 -1
  111. package/dist/core/shaders/RoundedRect/index.js +2 -2
  112. package/dist/core/shaders/Saturation/index.js +1 -1
  113. package/dist/core/shaders/Sharpness/index.js +1 -1
  114. package/dist/core/shaders/Shatter/index.d.ts.map +1 -1
  115. package/dist/core/shaders/Shatter/index.js +1 -1
  116. package/dist/core/shaders/SimplexNoise/index.js +1 -1
  117. package/dist/core/shaders/SineWave/index.js +1 -1
  118. package/dist/core/shaders/Solarize/index.js +1 -1
  119. package/dist/core/shaders/SolidColor/index.js +1 -1
  120. package/dist/core/shaders/Spherize/index.js +1 -1
  121. package/dist/core/shaders/Spiral/index.js +1 -1
  122. package/dist/core/shaders/Star/index.js +2 -2
  123. package/dist/core/shaders/Strands/index.js +1 -1
  124. package/dist/core/shaders/Stretch/index.js +1 -1
  125. package/dist/core/shaders/Stripes/index.js +1 -1
  126. package/dist/core/shaders/StudioBackground/index.js +1 -1
  127. package/dist/core/shaders/Swirl/index.js +1 -1
  128. package/dist/core/shaders/TiltShift/index.d.ts.map +1 -1
  129. package/dist/core/shaders/TiltShift/index.js +2 -1
  130. package/dist/core/shaders/Tint/index.js +1 -1
  131. package/dist/core/shaders/Trapezoid/index.js +2 -2
  132. package/dist/core/shaders/Tritone/index.js +1 -1
  133. package/dist/core/shaders/Truchet/index.js +1 -1
  134. package/dist/core/shaders/Twirl/index.js +1 -1
  135. package/dist/core/shaders/Vesica/index.js +2 -2
  136. package/dist/core/shaders/Vibrance/index.js +1 -1
  137. package/dist/core/shaders/VideoTexture/index.js +2 -2
  138. package/dist/core/shaders/Vignette/index.js +1 -1
  139. package/dist/core/shaders/Voronoi/index.js +1 -1
  140. package/dist/core/shaders/WaveDistortion/index.js +1 -1
  141. package/dist/core/shaders/Weave/index.js +1 -1
  142. package/dist/core/shaders/WebcamTexture/index.js +2 -2
  143. package/dist/core/shaders/ZoomBlur/index.js +1 -1
  144. package/dist/core/types.d.ts +29 -0
  145. package/dist/core/types.d.ts.map +1 -1
  146. package/dist/core/utilities/computeBlur.d.ts +50 -0
  147. package/dist/core/utilities/computeBlur.d.ts.map +1 -0
  148. package/dist/js/createShader.js +1 -1
  149. package/dist/react/Shader.js +1 -1
  150. package/dist/registry.js +2 -2
  151. package/dist/solid/engine/Shader.js +1 -1
  152. package/dist/svelte/index.js +1 -1
  153. package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
  154. package/package.json +1 -1
  155. package/dist/core/CursorRipples-Bo-3LZoC.js +0 -186
  156. package/dist/core/CursorTrail-C-0lpOV1.js +0 -160
  157. package/dist/core/GridDistortion-DXM5MgSc.js +0 -183
  158. package/dist/core/Liquify-CqcAWBwZ.js +0 -228
  159. package/dist/core/shaderRegistry-BzOzMO4V.js +0 -244
  160. /package/dist/core/{BrightnessContrast-BoR9bi58.js → BrightnessContrast-CJTOpQCn.js} +0 -0
  161. /package/dist/core/{Bulge-DN2R75Hp.js → Bulge-Chpbxxzj.js} +0 -0
  162. /package/dist/core/{CRTScreen-DolQEkb1.js → CRTScreen-CTwXU-NX.js} +0 -0
  163. /package/dist/core/{Checkerboard-_IUtUrDv.js → Checkerboard-ucave4-a.js} +0 -0
  164. /package/dist/core/{ChromaFlow-Cq6hDVjX.js → ChromaFlow-BZXyVHtK.js} +0 -0
  165. /package/dist/core/{ChromaticAberration-G8_bwQtD.js → ChromaticAberration-DsMj-vBw.js} +0 -0
  166. /package/dist/core/{Circle--0oHzoCi.js → Circle-QgCuVo44.js} +0 -0
  167. /package/dist/core/{ConcentricSpin-BzxzMieZ.js → ConcentricSpin-Crfxti93.js} +0 -0
  168. /package/dist/core/{ConicGradient-BXXizzIs.js → ConicGradient-CQAPYlQg.js} +0 -0
  169. /package/dist/core/{ContourLines-C0XSJEkE.js → ContourLines-KTHC32hd.js} +0 -0
  170. /package/dist/core/{DOMTexture-Dw3Qakny.js → DOMTexture-D-RkeyMs.js} +0 -0
  171. /package/dist/core/{DiamondGradient-TsOxHjg_.js → DiamondGradient-BC3ugP8a.js} +0 -0
  172. /package/dist/core/{DiffuseBlur-BqIV4JLM.js → DiffuseBlur-eyM1v3ad.js} +0 -0
  173. /package/dist/core/{Dither-D_YF6z03.js → Dither-CDfDotR6.js} +0 -0
  174. /package/dist/core/{DotGrid-CiDt4NmI.js → DotGrid-T9YbgC3V.js} +0 -0
  175. /package/dist/core/{DropShadow-BRoXryDA.js → DropShadow-jMhnYPXZ.js} +0 -0
  176. /package/dist/core/{Duotone-CGHcHB9f.js → Duotone-Bl02WcA2.js} +0 -0
  177. /package/dist/core/{FallingLines-vdw8KxhV.js → FallingLines-CArEXajJ.js} +0 -0
  178. /package/dist/core/{FilmGrain-BqQeKO6Z.js → FilmGrain-Ph73aoC_.js} +0 -0
  179. /package/dist/core/{FloatingParticles-DR5cv6Eh.js → FloatingParticles-BtwGRl_d.js} +0 -0
  180. /package/dist/core/{FlowField-DpP32B1X.js → FlowField-RyqiRxyI.js} +0 -0
  181. /package/dist/core/{FlowingGradient-lSouJxmq.js → FlowingGradient-C0Zoyfd6.js} +0 -0
  182. /package/dist/core/{Form3D-DQD-0zrd.js → Form3D-rKpxb9t3.js} +0 -0
  183. /package/dist/core/{GlassTiles-B7aAvcTQ.js → GlassTiles-k1C4a4u8.js} +0 -0
  184. /package/dist/core/{Glitch-CgmgjLea.js → Glitch-DzPMkBu4.js} +0 -0
  185. /package/dist/core/{Godrays-o-3Im6H1.js → Godrays-DAYmq-BP.js} +0 -0
  186. /package/dist/core/{Grayscale-Bip62olI.js → Grayscale-lYKBBkGY.js} +0 -0
  187. /package/dist/core/{Grid-hwQnF_hs.js → Grid-BJ-nxN3i.js} +0 -0
  188. /package/dist/core/{Group-BexPm4Fb.js → Group-DpozigtX.js} +0 -0
  189. /package/dist/core/{Halftone-onLYU4dF.js → Halftone-BVL2oy37.js} +0 -0
  190. /package/dist/core/{HexGrid-BkqEEgfh.js → HexGrid-D-EmQ4kI.js} +0 -0
  191. /package/dist/core/{HueShift-BldS-av9.js → HueShift-D9K0ynaS.js} +0 -0
  192. /package/dist/core/{ImageTexture-DLCjc5cM.js → ImageTexture-CArkZMfh.js} +0 -0
  193. /package/dist/core/{Invert-C2LI5GXr.js → Invert-DCnwo_Xq.js} +0 -0
  194. /package/dist/core/{Kaleidoscope-CxWjs5jx.js → Kaleidoscope-BytHro3k.js} +0 -0
  195. /package/dist/core/{LensFlare-BNO7tCXH.js → LensFlare-B0vv4x97.js} +0 -0
  196. /package/dist/core/{LinearBlur-Ds6rm8u-.js → LinearBlur-BFewxPjV.js} +0 -0
  197. /package/dist/core/{LinearGradient-BZjDhnZp.js → LinearGradient-BKUf_u7r.js} +0 -0
  198. /package/dist/core/{Mirror-5W3sul9v.js → Mirror-DIle92J8.js} +0 -0
  199. /package/dist/core/{MultiPointGradient-lpUGnrLq.js → MultiPointGradient-DDwac_mm.js} +0 -0
  200. /package/dist/core/{Paper-14yYPnWW.js → Paper-bMSMCeYK.js} +0 -0
  201. /package/dist/core/{Perspective-POVbIGPc.js → Perspective-BmfvQV6W.js} +0 -0
  202. /package/dist/core/{Pixelate-CxUxBDeN.js → Pixelate-Dl26r6IT.js} +0 -0
  203. /package/dist/core/{Plasma-DM9TU0VN.js → Plasma-CJWS1TvX.js} +0 -0
  204. /package/dist/core/{PolarCoordinates-t4Wa00gQ.js → PolarCoordinates-lq6K4WBm.js} +0 -0
  205. /package/dist/core/{Posterize-Dk4DE8Ee.js → Posterize-BjH7Zscm.js} +0 -0
  206. /package/dist/core/{RadialGradient-CSXQIa5L.js → RadialGradient-DiGFPgrn.js} +0 -0
  207. /package/dist/core/{RectangularCoordinates-YaZ_uRXb.js → RectangularCoordinates-COkNDxi0.js} +0 -0
  208. /package/dist/core/{Ripples-wJx2FwJY.js → Ripples-C8Q17Hvz.js} +0 -0
  209. /package/dist/core/{Saturation-B500nPZH.js → Saturation-CgDaiq6n.js} +0 -0
  210. /package/dist/core/{Sharpness-NqY4_gKZ.js → Sharpness-CRXT0D30.js} +0 -0
  211. /package/dist/core/{SimplexNoise-2-J7EbY9.js → SimplexNoise-KfTCAfpL.js} +0 -0
  212. /package/dist/core/{SineWave-OWJVWsI1.js → SineWave-Ckeap_YM.js} +0 -0
  213. /package/dist/core/{Solarize-CEhQxL9Z.js → Solarize-DhtQYYpW.js} +0 -0
  214. /package/dist/core/{SolidColor-Dlzm61ZG.js → SolidColor-6yUkGybH.js} +0 -0
  215. /package/dist/core/{Spherize-CXf4_Mkm.js → Spherize-8LXrGGG_.js} +0 -0
  216. /package/dist/core/{Spiral-CSXNX92f.js → Spiral-Bs7uZrBr.js} +0 -0
  217. /package/dist/core/{Strands-BPVy1zbt.js → Strands-DsAAVemq.js} +0 -0
  218. /package/dist/core/{Stretch-CFAjfvny.js → Stretch-D7P2R5lV.js} +0 -0
  219. /package/dist/core/{Stripes-BSGzno-I.js → Stripes-DF8agIiJ.js} +0 -0
  220. /package/dist/core/{StudioBackground-81AihXcZ.js → StudioBackground-BFeNfwEu.js} +0 -0
  221. /package/dist/core/{Swirl-D_ZvZtDS.js → Swirl-BwezrSAA.js} +0 -0
  222. /package/dist/core/{Tint-C6xN-Qot.js → Tint-BdXlqlzz.js} +0 -0
  223. /package/dist/core/{Tritone-Dk8GcpYo.js → Tritone-BlJ7cchN.js} +0 -0
  224. /package/dist/core/{Truchet-BFd2XYD3.js → Truchet-Bnn0fwbF.js} +0 -0
  225. /package/dist/core/{Twirl-CA0r8U7e.js → Twirl-C5ijhqz1.js} +0 -0
  226. /package/dist/core/{Vibrance-Dq1jBFJb.js → Vibrance-dqIV6GBe.js} +0 -0
  227. /package/dist/core/{Vignette-DB8x78Up.js → Vignette-DB1wO1dm.js} +0 -0
  228. /package/dist/core/{Voronoi-ALXxxHBo.js → Voronoi-C3WIJFWc.js} +0 -0
  229. /package/dist/core/{WaveDistortion-CHb75HO3.js → WaveDistortion-BKma8-Ju.js} +0 -0
  230. /package/dist/core/{Weave-j4CrCig4.js → Weave-xuu_vQ5e.js} +0 -0
  231. /package/dist/core/{ZoomBlur-Cl75kL8E.js → ZoomBlur-UcS2iFT2.js} +0 -0
  232. /package/dist/core/{browser-DIoaEnIX.js → browser-ClWxLlIB.js} +0 -0
  233. /package/dist/core/{sdf-Bux00UoZ.js → sdf-DyC2H_qS.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { t as unpremultiplyAlpha } from "./alpha-C4ptedXe.js";
2
- import { Fn, convertToTexture, float, screenUV, vec2, vec4, viewportSize } from "three/tsl";
2
+ import { t as createGaussianBlurCompute } from "./computeBlur-B0KA4n89.js";
3
+ import { Fn, convertToTexture, float, screenUV, texture, vec2, vec4, viewportSize } from "three/tsl";
3
4
  const componentDefinition = {
4
5
  name: "Blur",
5
6
  category: "Blurs",
@@ -12,14 +13,38 @@ const componentDefinition = {
12
13
  ui: {
13
14
  type: ["range", "map"],
14
15
  min: 0,
15
- max: 100,
16
+ max: 200,
16
17
  step: 1,
17
18
  label: "Intensity",
18
19
  group: "Effect"
19
20
  }
20
21
  } },
21
- fragmentNode: ({ uniforms, childNode, onCleanup }) => {
22
+ computeNode: ({ childNode, onCleanup, dimensions, renderer, uniforms }) => {
23
+ if (!childNode) return null;
24
+ const childTexture = convertToTexture(childNode);
25
+ onCleanup(() => {
26
+ if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
27
+ });
28
+ const dpr = renderer?.getPixelRatio?.() ?? 1;
29
+ const { computeNodes, outputTexture, updateRadius } = createGaussianBlurCompute(childTexture, Math.round(dimensions.width * dpr), Math.round(dimensions.height * dpr), onCleanup);
30
+ return {
31
+ outputs: {
32
+ childTexture,
33
+ blurredTexture: outputTexture
34
+ },
35
+ getComputeNodes: () => {
36
+ const intensity = uniforms.intensity.uniform.value;
37
+ updateRadius(intensity * .36);
38
+ return computeNodes;
39
+ }
40
+ };
41
+ },
42
+ fragmentNode: ({ uniforms, childNode, onCleanup, computeOutputs }) => {
22
43
  if (!childNode) return vec4(0, 0, 0, 0);
44
+ if (computeOutputs?.blurredTexture) {
45
+ const sharp = computeOutputs.childTexture.sample(screenUV);
46
+ return unpremultiplyAlpha(vec4(texture(computeOutputs.blurredTexture).sample(screenUV).rgb, sharp.a));
47
+ }
23
48
  const childTexture = convertToTexture(childNode);
24
49
  onCleanup(() => {
25
50
  if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
@@ -1,5 +1,6 @@
1
1
  import { t as unpremultiplyAlpha } from "./alpha-C4ptedXe.js";
2
- import { Fn, convertToTexture, float, screenUV, vec2, vec4, viewportSize } from "three/tsl";
2
+ import { t as createGaussianBlurCompute } from "./computeBlur-B0KA4n89.js";
3
+ import { Fn, convertToTexture, float, mix, screenUV, texture, vec2, vec4, viewportSize } from "three/tsl";
3
4
  const componentDefinition = {
4
5
  name: "ChannelBlur",
5
6
  category: "Blurs",
@@ -44,8 +45,42 @@ const componentDefinition = {
44
45
  }
45
46
  }
46
47
  },
47
- fragmentNode: ({ uniforms, childNode, onCleanup }) => {
48
+ computeNode: ({ childNode, onCleanup, dimensions, renderer, uniforms }) => {
49
+ if (!childNode) return null;
50
+ const childTexture = convertToTexture(childNode);
51
+ onCleanup(() => {
52
+ if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
53
+ });
54
+ const dpr = renderer?.getPixelRatio?.() ?? 1;
55
+ const { computeNodes, outputTexture, updateRadius } = createGaussianBlurCompute(childTexture, Math.round(dimensions.width * dpr), Math.round(dimensions.height * dpr), onCleanup);
56
+ return {
57
+ outputs: {
58
+ childTexture,
59
+ blurredTexture: outputTexture
60
+ },
61
+ getComputeNodes: () => {
62
+ const r = uniforms.redIntensity.uniform.value * .1;
63
+ const g = uniforms.greenIntensity.uniform.value * .1;
64
+ const b = uniforms.blueIntensity.uniform.value * .1;
65
+ updateRadius(Math.max(r, g, b, .01));
66
+ return computeNodes;
67
+ }
68
+ };
69
+ },
70
+ fragmentNode: ({ uniforms, childNode, onCleanup, computeOutputs }) => {
48
71
  if (!childNode) return vec4(0, 0, 0, 0);
72
+ if (computeOutputs?.blurredTexture) {
73
+ const sharp = computeOutputs.childTexture.sample(screenUV);
74
+ const blurred = texture(computeOutputs.blurredTexture).sample(screenUV);
75
+ const redRadius$1 = uniforms.redIntensity.uniform.mul(.1);
76
+ const greenRadius$1 = uniforms.greenIntensity.uniform.mul(.1);
77
+ const blueRadius$1 = uniforms.blueIntensity.uniform.mul(.1);
78
+ const maxRadius = redRadius$1.max(greenRadius$1).max(blueRadius$1).max(float(.01));
79
+ const rMix = redRadius$1.div(maxRadius);
80
+ const gMix = greenRadius$1.div(maxRadius);
81
+ const bMix = blueRadius$1.div(maxRadius);
82
+ return unpremultiplyAlpha(vec4(mix(sharp.r, blurred.r, rMix), mix(sharp.g, blurred.g, gMix), mix(sharp.b, blurred.b, bMix), sharp.a));
83
+ }
49
84
  const childTexture = convertToTexture(childNode);
50
85
  onCleanup(() => {
51
86
  if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
@@ -1,6 +1,6 @@
1
1
  import { a as transformColor, l as transformPosition, o as transformColorSpace, t as colorSpaceOptions } from "./transformations-B5lM6fYX.js";
2
2
  import { t as mixColors } from "./colorMixing-BPpDnR5I.js";
3
- import { i as crescentSdf } from "./sdf-Bux00UoZ.js";
3
+ import { i as crescentSdf } from "./sdf-DyC2H_qS.js";
4
4
  import { cos, float, screenUV, sin, smoothstep, vec2, vec4, viewportSize } from "three/tsl";
5
5
  var transformStrokePosition = (value) => {
6
6
  return {
@@ -1,6 +1,6 @@
1
1
  import { a as transformColor, l as transformPosition, o as transformColorSpace, t as colorSpaceOptions } from "./transformations-B5lM6fYX.js";
2
2
  import { t as mixColors } from "./colorMixing-BPpDnR5I.js";
3
- import { a as crossSdf } from "./sdf-Bux00UoZ.js";
3
+ import { a as crossSdf } from "./sdf-DyC2H_qS.js";
4
4
  import { cos, float, screenUV, sin, smoothstep, vec2, vec4, viewportSize } from "three/tsl";
5
5
  var transformStrokePosition = (value) => {
6
6
  return {
@@ -1,5 +1,5 @@
1
1
  import { a as transformColor, l as transformPosition } from "./transformations-B5lM6fYX.js";
2
- import { n as createAnalyticSdfSampler, r as createSvgSdfSampler } from "./sdf-Bux00UoZ.js";
2
+ import { n as createAnalyticSdfSampler, r as createSvgSdfSampler } from "./sdf-DyC2H_qS.js";
3
3
  import { Fn, atan, clamp, convertToTexture, cos, dot, float, fract, max, min, mix, mx_worley_noise_float, pow, screenUV, sin, smoothstep, sqrt, vec2, vec3, vec4, viewportSize } from "three/tsl";
4
4
  var transformBoolean = (value) => value ? 1 : 0;
5
5
  var DEFAULT_SHAPE_CONFIG = JSON.stringify({
@@ -0,0 +1,289 @@
1
+ import { t as applyEdgeHandling } from "./edges-CfGcQniB.js";
2
+ import { c as transformEdges } from "./transformations-B5lM6fYX.js";
3
+ import { t as unpremultiplyAlpha } from "./alpha-C4ptedXe.js";
4
+ import { StorageTexture } from "three/webgpu";
5
+ import { DataTexture, FloatType, LinearFilter as LinearFilter$1, RGFormat } from "three";
6
+ import { Fn, If, attributeArray, convertToTexture, float, instanceIndex, screenUV, storageTexture, texture, textureStore, uint, uniform, uvec2, vec2, vec4 } from "three/tsl";
7
+ var GRID_SIZE = 128;
8
+ const componentDefinition = {
9
+ name: "CursorRipples",
10
+ category: "Interactive",
11
+ description: "Fluid-like ripple distortion",
12
+ requiresRTT: true,
13
+ requiresChild: true,
14
+ props: {
15
+ intensity: {
16
+ default: 10,
17
+ description: "Strength of the ripple distortion",
18
+ ui: {
19
+ type: ["range", "map"],
20
+ min: 0,
21
+ max: 20,
22
+ step: .1,
23
+ label: "Intensity",
24
+ group: "Effect"
25
+ }
26
+ },
27
+ decay: {
28
+ default: 10,
29
+ description: "How quickly ripples fade (higher = faster)",
30
+ ui: {
31
+ type: "range",
32
+ min: 0,
33
+ max: 20,
34
+ step: .1,
35
+ label: "Decay",
36
+ group: "Effect"
37
+ }
38
+ },
39
+ radius: {
40
+ default: .5,
41
+ description: "Radius of cursor influence",
42
+ ui: {
43
+ type: "range",
44
+ min: .1,
45
+ max: 1,
46
+ step: .1,
47
+ label: "Radius",
48
+ group: "Effect"
49
+ }
50
+ },
51
+ chromaticSplit: {
52
+ default: 1,
53
+ description: "RGB channel separation along ripple edges",
54
+ ui: {
55
+ type: ["range", "map"],
56
+ min: 0,
57
+ max: 3,
58
+ step: .1,
59
+ label: "Chromatic Split",
60
+ group: "Effect"
61
+ }
62
+ },
63
+ edges: {
64
+ default: "stretch",
65
+ description: "How to handle edges when distortion pushes content out of bounds",
66
+ transform: transformEdges,
67
+ compileTime: true,
68
+ ui: {
69
+ type: "select",
70
+ options: [
71
+ {
72
+ label: "Stretch",
73
+ value: "stretch"
74
+ },
75
+ {
76
+ label: "Transparent",
77
+ value: "transparent"
78
+ },
79
+ {
80
+ label: "Mirror",
81
+ value: "mirror"
82
+ },
83
+ {
84
+ label: "Wrap",
85
+ value: "wrap"
86
+ }
87
+ ],
88
+ label: "Edges",
89
+ group: "Effect"
90
+ }
91
+ }
92
+ },
93
+ computeNode: ({ uniforms, onCleanup, dimensions }) => {
94
+ const bufferA = attributeArray(GRID_SIZE * GRID_SIZE, "float");
95
+ const bufferB = attributeArray(GRID_SIZE * GRID_SIZE, "float");
96
+ const dispTex = new StorageTexture(GRID_SIZE, GRID_SIZE);
97
+ dispTex.type = FloatType;
98
+ const dispTexNode = storageTexture(dispTex);
99
+ onCleanup(() => {
100
+ dispTex.dispose();
101
+ });
102
+ const cursorXU = uniform(.5);
103
+ const cursorYU = uniform(.5);
104
+ const mouseSpeedU = uniform(0);
105
+ const dtU = uniform(.016);
106
+ const decayU = uniform(10);
107
+ const radiusU = uniform(.025);
108
+ const aspectU = uniform(1);
109
+ const gs = uint(GRID_SIZE);
110
+ const gsm1 = uint(GRID_SIZE - 1);
111
+ const buildPropagateKernel = (readBuf, writeBuf) => Fn(() => {
112
+ const idx = instanceIndex;
113
+ const j = idx.mod(gs);
114
+ const i = idx.div(gs);
115
+ If(i.greaterThan(uint(0)).and(i.lessThan(gsm1)).and(j.greaterThan(uint(0))).and(j.lessThan(gsm1)), () => {
116
+ const left = readBuf.element(idx.sub(uint(1)));
117
+ const right = readBuf.element(idx.add(uint(1)));
118
+ const up = readBuf.element(idx.sub(gs));
119
+ const down = readBuf.element(idx.add(gs));
120
+ const avg = left.add(right).add(up).add(down).mul(float(.5));
121
+ const prev = writeBuf.element(idx);
122
+ const dampFactor = float(1).sub(decayU.mul(float(.004)));
123
+ const next = avg.sub(prev).mul(dampFactor).toVar();
124
+ const cellX = j.toFloat().add(float(.5)).div(float(GRID_SIZE));
125
+ const cellY = i.toFloat().add(float(.5)).div(float(GRID_SIZE));
126
+ const ddx = aspectU.greaterThanEqual(float(1)).select(cellX.sub(cursorXU).mul(aspectU), cellX.sub(cursorXU));
127
+ const ddy = aspectU.greaterThanEqual(float(1)).select(cellY.sub(cursorYU), cellY.sub(cursorYU).div(aspectU));
128
+ const distSq = ddx.mul(ddx).add(ddy.mul(ddy));
129
+ const influenceRadius = radiusU.mul(float(3));
130
+ If(distSq.lessThan(influenceRadius.mul(influenceRadius)).and(mouseSpeedU.greaterThan(float(.01))), () => {
131
+ const influence = distSq.negate().div(radiusU.mul(radiusU)).exp();
132
+ next.assign(next.sub(influence.mul(mouseSpeedU).mul(dtU).mul(float(3))));
133
+ });
134
+ writeBuf.element(idx).assign(next);
135
+ });
136
+ })().compute(GRID_SIZE * GRID_SIZE, [256]);
137
+ const buildGradientKernel = (srcBuf) => Fn(() => {
138
+ const idx = instanceIndex;
139
+ const j = idx.mod(gs);
140
+ const i = idx.div(gs);
141
+ If(i.greaterThan(uint(0)).and(i.lessThan(gsm1)).and(j.greaterThan(uint(0))).and(j.lessThan(gsm1)), () => {
142
+ const right = srcBuf.element(idx.add(uint(1)));
143
+ const left = srcBuf.element(idx.sub(uint(1)));
144
+ const down = srcBuf.element(idx.add(gs));
145
+ const up = srcBuf.element(idx.sub(gs));
146
+ const dx = right.sub(left).mul(float(.5));
147
+ const dy = down.sub(up).mul(float(.5));
148
+ textureStore(dispTexNode, uvec2(j, i), vec4(dx, dy, float(0), float(1))).toWriteOnly();
149
+ });
150
+ })().compute(GRID_SIZE * GRID_SIZE, [256]);
151
+ const propagateAtoB = buildPropagateKernel(bufferA, bufferB);
152
+ const gradientB = buildGradientKernel(bufferB);
153
+ const propagateBtoA = buildPropagateKernel(bufferB, bufferA);
154
+ const gradientA = buildGradientKernel(bufferA);
155
+ let direction = 0;
156
+ let prevX = .5;
157
+ let prevY = .5;
158
+ let lastTime = Date.now();
159
+ let lastActiveTime = Date.now();
160
+ return {
161
+ outputs: { displacement: dispTex },
162
+ getComputeNodes: (params) => {
163
+ const currentTime = Date.now();
164
+ const dt = Math.min((currentTime - lastTime) / 1e3, .016);
165
+ lastTime = currentTime;
166
+ const aspect = dimensions.width / dimensions.height;
167
+ const decay = uniforms.decay.uniform.value;
168
+ const radius = uniforms.radius.uniform.value * .05;
169
+ const rawVelX = dt > 0 ? (params.pointer.x - prevX) / dt : 0;
170
+ const rawVelY = dt > 0 ? (params.pointer.y - prevY) / dt : 0;
171
+ const mouseSpeed = Math.min(Math.sqrt(rawVelX * rawVelX + rawVelY * rawVelY), 2);
172
+ prevX = params.pointer.x;
173
+ prevY = params.pointer.y;
174
+ if (mouseSpeed > .01) lastActiveTime = currentTime;
175
+ const dampFactor = 1 - decay * .004;
176
+ const settleTime = dampFactor >= 1 ? Infinity : Math.min(3e4, Math.log(1e-6) / Math.log(Math.max(dampFactor, .001)) * 16.67);
177
+ if (currentTime - lastActiveTime > settleTime) return null;
178
+ cursorXU.value = params.pointer.x;
179
+ cursorYU.value = params.pointer.y;
180
+ mouseSpeedU.value = mouseSpeed;
181
+ dtU.value = dt;
182
+ decayU.value = decay;
183
+ radiusU.value = radius;
184
+ aspectU.value = aspect;
185
+ const nodes = direction === 0 ? [propagateAtoB, gradientB] : [propagateBtoA, gradientA];
186
+ direction = 1 - direction;
187
+ return nodes;
188
+ }
189
+ };
190
+ },
191
+ fragmentNode: ({ uniforms, onBeforeRender, childNode, onCleanup, dimensions, computeOutputs }) => {
192
+ if (!childNode) return vec4(0, 0, 0, 0);
193
+ const childTexture = convertToTexture(childNode);
194
+ onCleanup(() => {
195
+ if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
196
+ });
197
+ let displacement;
198
+ if (computeOutputs?.displacement) displacement = texture(computeOutputs.displacement).sample(screenUV).xy;
199
+ else {
200
+ const buffers = [new Float32Array(GRID_SIZE * GRID_SIZE), new Float32Array(GRID_SIZE * GRID_SIZE)];
201
+ let currentBuffer = 0;
202
+ const displacementData = new Float32Array(GRID_SIZE * GRID_SIZE * 2);
203
+ const displacementTexture = new DataTexture(displacementData, GRID_SIZE, GRID_SIZE, RGFormat, FloatType);
204
+ displacementTexture.magFilter = LinearFilter$1;
205
+ displacementTexture.minFilter = LinearFilter$1;
206
+ displacementTexture.needsUpdate = true;
207
+ const displacementField = texture(displacementTexture);
208
+ let prevX = .5;
209
+ let prevY = .5;
210
+ let lastTime = Date.now();
211
+ let prevMaxAbsVal = 1;
212
+ onBeforeRender(({ pointer }) => {
213
+ const currentTime = Date.now();
214
+ const dt = Math.min((currentTime - lastTime) / 1e3, .016);
215
+ lastTime = currentTime;
216
+ const aspect = dimensions.width / dimensions.height;
217
+ const substeps = 1;
218
+ const decay = uniforms.decay.uniform.value;
219
+ const radius = uniforms.radius.uniform.value * .05;
220
+ const rawVelX = dt > 0 ? (pointer.x - prevX) / dt : 0;
221
+ const rawVelY = dt > 0 ? (pointer.y - prevY) / dt : 0;
222
+ const mouseSpeed = Math.min(Math.sqrt(rawVelX * rawVelX + rawVelY * rawVelY), 2);
223
+ prevX = pointer.x;
224
+ prevY = pointer.y;
225
+ if (mouseSpeed <= .01 && prevMaxAbsVal < 1e-6) return;
226
+ const dampFactor = 1 - decay * .004;
227
+ let maxAbsVal = 0;
228
+ for (let s = 0; s < substeps; s++) {
229
+ const curr$1 = buffers[currentBuffer];
230
+ const prev = buffers[1 - currentBuffer];
231
+ if (s === 0 && mouseSpeed > .01) {
232
+ const influenceRadius = radius * 3;
233
+ const minJ = Math.max(1, Math.floor((pointer.x - influenceRadius) * GRID_SIZE));
234
+ const maxJ = Math.min(GRID_SIZE - 2, Math.ceil((pointer.x + influenceRadius) * GRID_SIZE));
235
+ const minI = Math.max(1, Math.floor((pointer.y - influenceRadius) * GRID_SIZE));
236
+ const maxI = Math.min(GRID_SIZE - 2, Math.ceil((pointer.y + influenceRadius) * GRID_SIZE));
237
+ for (let i = minI; i <= maxI; i++) for (let j = minJ; j <= maxJ; j++) {
238
+ const idx = i * GRID_SIZE + j;
239
+ const cellX = (j + .5) / GRID_SIZE;
240
+ const cellY = (i + .5) / GRID_SIZE;
241
+ const ddx = aspect >= 1 ? (cellX - pointer.x) * aspect : cellX - pointer.x;
242
+ const ddy = aspect >= 1 ? cellY - pointer.y : (cellY - pointer.y) / aspect;
243
+ const dist = Math.sqrt(ddx * ddx + ddy * ddy);
244
+ if (dist < influenceRadius) {
245
+ const influence = Math.exp(-dist * dist / (radius * radius));
246
+ curr$1[idx] -= influence * mouseSpeed * dt * 3;
247
+ }
248
+ }
249
+ }
250
+ for (let i = 1; i < GRID_SIZE - 1; i++) for (let j = 1; j < GRID_SIZE - 1; j++) {
251
+ const idx = i * GRID_SIZE + j;
252
+ const next = ((curr$1[idx - 1] + curr$1[idx + 1] + curr$1[idx - GRID_SIZE] + curr$1[idx + GRID_SIZE]) * .5 - prev[idx]) * dampFactor;
253
+ prev[idx] = next;
254
+ const absNext = next < 0 ? -next : next;
255
+ if (absNext > maxAbsVal) maxAbsVal = absNext;
256
+ }
257
+ currentBuffer = 1 - currentBuffer;
258
+ }
259
+ prevMaxAbsVal = maxAbsVal;
260
+ const curr = buffers[currentBuffer];
261
+ for (let i = 1; i < GRID_SIZE - 1; i++) for (let j = 1; j < GRID_SIZE - 1; j++) {
262
+ const idx = i * GRID_SIZE + j;
263
+ const dIdx = idx * 2;
264
+ displacementData[dIdx] = (curr[idx + 1] - curr[idx - 1]) * .5;
265
+ displacementData[dIdx + 1] = (curr[idx + GRID_SIZE] - curr[idx - GRID_SIZE]) * .5;
266
+ }
267
+ displacementTexture.needsUpdate = true;
268
+ });
269
+ onCleanup(() => {
270
+ displacementTexture.dispose();
271
+ });
272
+ displacement = displacementField.sample(screenUV).xy;
273
+ }
274
+ const intensityScale = uniforms.intensity.uniform.mul(.1);
275
+ const scaledDisplacement = displacement.mul(intensityScale);
276
+ const maxDisp = float(.15);
277
+ const clampedDisplacement = scaledDisplacement.clamp(vec2(maxDisp.negate(), maxDisp.negate()), vec2(maxDisp, maxDisp));
278
+ const chromaticScale = uniforms.chromaticSplit.uniform.mul(.1);
279
+ const rUV = screenUV.sub(clampedDisplacement.mul(float(1).add(chromaticScale)));
280
+ const gUV = screenUV.sub(clampedDisplacement);
281
+ const bUV = screenUV.sub(clampedDisplacement.mul(float(1).sub(chromaticScale)));
282
+ const rSample = applyEdgeHandling(rUV, childTexture.sample(rUV), childTexture, uniforms.edges.uniform.value);
283
+ const gSample = applyEdgeHandling(gUV, childTexture.sample(gUV), childTexture, uniforms.edges.uniform.value);
284
+ const bSample = applyEdgeHandling(bUV, childTexture.sample(bUV), childTexture, uniforms.edges.uniform.value);
285
+ return unpremultiplyAlpha(vec4(rSample.r, gSample.g, bSample.b, gSample.a));
286
+ }
287
+ };
288
+ var CursorRipples_default = componentDefinition;
289
+ export { componentDefinition as n, CursorRipples_default as t };
@@ -0,0 +1,263 @@
1
+ import { a as transformColor, o as transformColorSpace, t as colorSpaceOptions } from "./transformations-B5lM6fYX.js";
2
+ import { t as mixColors } from "./colorMixing-BPpDnR5I.js";
3
+ import { StorageTexture } from "three/webgpu";
4
+ import { DataTexture, FloatType, LinearFilter as LinearFilter$1, RGBAFormat } from "three";
5
+ import { Fn, If, attributeArray, float, instanceIndex, screenUV, step, storageTexture, texture, textureStore, uint, uniform, uvec2, vec2, vec4 } from "three/tsl";
6
+ var GRID_SIZE = 128;
7
+ const componentDefinition = {
8
+ name: "CursorTrail",
9
+ category: "Interactive",
10
+ description: "Animated trail effect that tracks cursor movement",
11
+ props: {
12
+ colorA: {
13
+ default: "#00aaff",
14
+ transform: transformColor,
15
+ description: "Color of fresh trails",
16
+ ui: {
17
+ type: "color",
18
+ label: "Start Color",
19
+ group: "Colors"
20
+ }
21
+ },
22
+ colorB: {
23
+ default: "#ff00aa",
24
+ transform: transformColor,
25
+ description: "Color trails transition to as they fade",
26
+ ui: {
27
+ type: "color",
28
+ label: "End Color",
29
+ group: "Colors"
30
+ }
31
+ },
32
+ radius: {
33
+ default: .5,
34
+ description: "Base radius of trail circles",
35
+ ui: {
36
+ type: "range",
37
+ min: .5,
38
+ max: 2,
39
+ step: .1,
40
+ label: "Radius",
41
+ group: "Effect"
42
+ }
43
+ },
44
+ length: {
45
+ default: .5,
46
+ description: "How long trail circles persist (in seconds)",
47
+ ui: {
48
+ type: "range",
49
+ min: .1,
50
+ max: 2,
51
+ step: .1,
52
+ label: "Trail Length",
53
+ group: "Animation"
54
+ }
55
+ },
56
+ shrink: {
57
+ default: 1,
58
+ description: "How much circles shrink as they fade out (0 = no shrink, 1 = full shrink)",
59
+ ui: {
60
+ type: "range",
61
+ min: 0,
62
+ max: 1,
63
+ step: .1,
64
+ label: "Shrink Amount",
65
+ group: "Effect"
66
+ }
67
+ },
68
+ colorSpace: {
69
+ default: "linear",
70
+ transform: transformColorSpace,
71
+ compileTime: true,
72
+ description: "Color space for color interpolation",
73
+ ui: {
74
+ type: "select",
75
+ options: colorSpaceOptions,
76
+ label: "Color Space",
77
+ group: "Colors"
78
+ }
79
+ }
80
+ },
81
+ computeNode: ({ uniforms, onCleanup, dimensions, renderer }) => {
82
+ const trailBuffer = attributeArray(GRID_SIZE * GRID_SIZE, "vec4");
83
+ const trailTex = new StorageTexture(GRID_SIZE, GRID_SIZE);
84
+ trailTex.type = FloatType;
85
+ const trailTexNode = storageTexture(trailTex);
86
+ onCleanup(() => {
87
+ trailTex.dispose();
88
+ });
89
+ const fadeRateU = uniform(.97);
90
+ const ageRateU = uniform(.03);
91
+ const shrinkU = uniform(1);
92
+ const cursorXU = uniform(.5);
93
+ const cursorYU = uniform(.5);
94
+ const radiusU = uniform(.05);
95
+ const amountU = uniform(0);
96
+ const aspectU = uniform(1);
97
+ const mouseActiveU = uniform(0);
98
+ const gs = uint(GRID_SIZE);
99
+ const decayPass = Fn(() => {
100
+ const idx = instanceIndex;
101
+ const cell = trailBuffer.element(idx);
102
+ const intensity = cell.x.mul(fadeRateU);
103
+ const size = float(1).sub(float(1).sub(intensity).mul(shrinkU));
104
+ const age = cell.z.add(ageRateU).min(float(1));
105
+ trailBuffer.element(idx).assign(vec4(intensity, size, age, float(0)));
106
+ })().compute(GRID_SIZE * GRID_SIZE, [256]);
107
+ const stampPass = Fn(() => {
108
+ const idx = instanceIndex;
109
+ const j = idx.mod(gs);
110
+ const i = idx.div(gs);
111
+ If(mouseActiveU.greaterThan(float(.5)), () => {
112
+ const cellX = j.toFloat().add(float(.5)).div(float(GRID_SIZE));
113
+ const cellY = i.toFloat().add(float(.5)).div(float(GRID_SIZE));
114
+ const ddx = aspectU.greaterThanEqual(float(1)).select(cellX.sub(cursorXU).mul(aspectU), cellX.sub(cursorXU));
115
+ const ddy = aspectU.greaterThanEqual(float(1)).select(cellY.sub(cursorYU), cellY.sub(cursorYU).div(aspectU));
116
+ const distSq = ddx.mul(ddx).add(ddy.mul(ddy));
117
+ const influenceRadius = radiusU.mul(float(3));
118
+ If(distSq.lessThan(influenceRadius.mul(influenceRadius)), () => {
119
+ const influence = distSq.negate().div(radiusU.mul(radiusU)).exp();
120
+ const newIntensity = trailBuffer.element(idx).x.add(influence.mul(amountU)).min(float(1));
121
+ trailBuffer.element(idx).assign(vec4(newIntensity, float(1), float(0), float(0)));
122
+ });
123
+ });
124
+ })().compute(GRID_SIZE * GRID_SIZE, [256]);
125
+ const outputPass = Fn(() => {
126
+ const idx = instanceIndex;
127
+ const j = idx.mod(gs);
128
+ const i = idx.div(gs);
129
+ const cell = trailBuffer.element(idx);
130
+ textureStore(trailTexNode, uvec2(j, i), cell).toWriteOnly();
131
+ })().compute(GRID_SIZE * GRID_SIZE, [256]);
132
+ let prevX = .5;
133
+ let prevY = .5;
134
+ let lastTime = Date.now();
135
+ let lastActiveTime = Date.now();
136
+ return {
137
+ outputs: { trailTexture: trailTex },
138
+ getComputeNodes: (params) => {
139
+ const currentTime = Date.now();
140
+ const dt = Math.min((currentTime - lastTime) / 1e3, .016);
141
+ lastTime = currentTime;
142
+ const aspect = dimensions.width / dimensions.height;
143
+ const radius = uniforms.radius.uniform.value * .1;
144
+ const length$1 = uniforms.length.uniform.value;
145
+ const shrink = uniforms.shrink.uniform.value;
146
+ const dx = params.pointer.x - prevX;
147
+ const dy = params.pointer.y - prevY;
148
+ const speed = Math.sqrt(dx * dx + dy * dy);
149
+ const oldX = prevX;
150
+ const oldY = prevY;
151
+ prevX = params.pointer.x;
152
+ prevY = params.pointer.y;
153
+ if (speed > .001) lastActiveTime = currentTime;
154
+ const settleMs = Math.min(3e4, Math.max(3e3, length$1 * 5e3));
155
+ if (currentTime - lastActiveTime > settleMs) return null;
156
+ fadeRateU.value = 1 - dt / Math.max(.1, length$1);
157
+ ageRateU.value = dt / Math.max(.1, length$1);
158
+ shrinkU.value = shrink;
159
+ radiusU.value = radius;
160
+ aspectU.value = aspect;
161
+ renderer.compute(decayPass);
162
+ if (speed > .001) {
163
+ const stepSize = Math.max(.005, radius * .5);
164
+ const numSteps = Math.min(20, Math.max(1, Math.ceil(speed / stepSize)));
165
+ const amountPerStep = speed / numSteps * 50 * dt;
166
+ mouseActiveU.value = 1;
167
+ amountU.value = amountPerStep;
168
+ for (let s = 0; s < numSteps; s++) {
169
+ const t = (s + .5) / numSteps;
170
+ cursorXU.value = oldX + dx * t;
171
+ cursorYU.value = oldY + dy * t;
172
+ renderer.compute(stampPass);
173
+ }
174
+ }
175
+ return [outputPass];
176
+ }
177
+ };
178
+ },
179
+ fragmentNode: ({ uniforms, onBeforeRender, onCleanup, dimensions, computeOutputs }) => {
180
+ let trailField;
181
+ if (computeOutputs?.trailTexture) trailField = texture(computeOutputs.trailTexture);
182
+ else {
183
+ const trailData = new Float32Array(GRID_SIZE * GRID_SIZE * 4);
184
+ const trailTexture = new DataTexture(trailData, GRID_SIZE, GRID_SIZE, RGBAFormat, FloatType);
185
+ trailTexture.magFilter = LinearFilter$1;
186
+ trailTexture.minFilter = LinearFilter$1;
187
+ trailTexture.needsUpdate = true;
188
+ trailField = texture(trailTexture);
189
+ let prevX = .5;
190
+ let prevY = .5;
191
+ let lastTime = Date.now();
192
+ onBeforeRender(({ pointer }) => {
193
+ const currentTime = Date.now();
194
+ const dt = Math.min((currentTime - lastTime) / 1e3, .016);
195
+ lastTime = currentTime;
196
+ const aspect = dimensions.width / dimensions.height;
197
+ const radius = uniforms.radius.uniform.value * .1;
198
+ const length$1 = uniforms.length.uniform.value;
199
+ const shrink = uniforms.shrink.uniform.value;
200
+ const dx = pointer.x - prevX;
201
+ const dy = pointer.y - prevY;
202
+ const speed = Math.sqrt(dx * dx + dy * dy);
203
+ const fadeRate = 1 - dt / Math.max(.1, length$1);
204
+ const ageRate = dt / Math.max(.1, length$1);
205
+ for (let i = 0; i < GRID_SIZE * GRID_SIZE * 4; i += 4) {
206
+ trailData[i] *= fadeRate;
207
+ trailData[i + 1] = 1 - (1 - trailData[i]) * shrink;
208
+ trailData[i + 2] = Math.min(1, trailData[i + 2] + ageRate);
209
+ }
210
+ if (speed > .001) {
211
+ const influenceRadius = radius * 3;
212
+ const stepSize = Math.max(.005, radius * .5);
213
+ const numSteps = Math.min(20, Math.max(1, Math.ceil(speed / stepSize)));
214
+ const amountPerStep = speed / numSteps * 50 * dt;
215
+ for (let s = 0; s < numSteps; s++) {
216
+ const t = (s + .5) / numSteps;
217
+ const px = prevX + dx * t;
218
+ const py = prevY + dy * t;
219
+ const minJ = Math.max(0, Math.floor((px - influenceRadius) * GRID_SIZE));
220
+ const maxJ = Math.min(GRID_SIZE - 1, Math.ceil((px + influenceRadius) * GRID_SIZE));
221
+ const minI = Math.max(0, Math.floor((py - influenceRadius) * GRID_SIZE));
222
+ const maxI = Math.min(GRID_SIZE - 1, Math.ceil((py + influenceRadius) * GRID_SIZE));
223
+ for (let i = minI; i <= maxI; i++) for (let j = minJ; j <= maxJ; j++) {
224
+ const idx = (i * GRID_SIZE + j) * 4;
225
+ const cellX = (j + .5) / GRID_SIZE;
226
+ const cellY = (i + .5) / GRID_SIZE;
227
+ const cellDx = aspect >= 1 ? (cellX - px) * aspect : cellX - px;
228
+ const cellDy = aspect >= 1 ? cellY - py : (cellY - py) / aspect;
229
+ const dist = Math.sqrt(cellDx * cellDx + cellDy * cellDy);
230
+ if (dist < influenceRadius) {
231
+ const influence = Math.exp(-dist * dist / (radius * radius));
232
+ trailData[idx] = Math.min(1, trailData[idx] + influence * amountPerStep);
233
+ trailData[idx + 1] = 1;
234
+ trailData[idx + 2] = 0;
235
+ }
236
+ }
237
+ }
238
+ }
239
+ trailTexture.needsUpdate = true;
240
+ prevX = pointer.x;
241
+ prevY = pointer.y;
242
+ });
243
+ onCleanup(() => {
244
+ trailTexture.dispose();
245
+ });
246
+ }
247
+ const pixelSize = float(1 / GRID_SIZE);
248
+ const centerSample = trailField.sample(screenUV);
249
+ const sample1 = trailField.sample(screenUV.add(vec2(pixelSize, float(0))));
250
+ const sample2 = trailField.sample(screenUV.add(vec2(float(0), pixelSize)));
251
+ const sample3 = trailField.sample(screenUV.add(vec2(pixelSize.negate(), float(0))));
252
+ const sample4 = trailField.sample(screenUV.add(vec2(float(0), pixelSize.negate())));
253
+ const trailIntensity = centerSample.x.mul(float(.5)).add(sample1.x.mul(float(.125))).add(sample2.x.mul(float(.125))).add(sample3.x.mul(float(.125))).add(sample4.x.mul(float(.125)));
254
+ const trailAge = centerSample.z.mul(float(.5)).add(sample1.z.mul(float(.125))).add(sample2.z.mul(float(.125))).add(sample3.z.mul(float(.125))).add(sample4.z.mul(float(.125)));
255
+ const circleMask = step(float(.01), trailIntensity);
256
+ const colorA = uniforms.colorA.uniform;
257
+ const colorB = uniforms.colorB.uniform;
258
+ const trailColor = mixColors(colorA, colorB, trailAge, uniforms.colorSpace.uniform.value);
259
+ return vec4(trailColor.rgb, trailColor.a.mul(circleMask));
260
+ }
261
+ };
262
+ var CursorTrail_default = componentDefinition;
263
+ export { componentDefinition as n, CursorTrail_default as t };
@@ -1,6 +1,6 @@
1
1
  import { a as transformColor, l as transformPosition, o as transformColorSpace, t as colorSpaceOptions } from "./transformations-B5lM6fYX.js";
2
2
  import { t as mixColors } from "./colorMixing-BPpDnR5I.js";
3
- import { o as ellipseSdf } from "./sdf-Bux00UoZ.js";
3
+ import { o as ellipseSdf } from "./sdf-DyC2H_qS.js";
4
4
  import { cos, float, screenUV, sin, smoothstep, vec2, vec4, viewportSize } from "three/tsl";
5
5
  var transformStrokePosition = (value) => {
6
6
  return {