@3driseai/3drise-viewer 0.1.26 → 0.1.27

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 (456) hide show
  1. package/dist/animationsV2/ClipPlayer.d.ts +3 -0
  2. package/dist/animationsV2/ClipPlayer.d.ts.map +1 -1
  3. package/dist/animationsV2/ClipPlayer.js +67 -8
  4. package/dist/animationsV2/ClipsRuntime.d.ts +39 -0
  5. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
  6. package/dist/animationsV2/ClipsRuntime.js +245 -14
  7. package/dist/animationsV2/appliers.d.ts +5 -0
  8. package/dist/animationsV2/appliers.d.ts.map +1 -1
  9. package/dist/animationsV2/appliers.js +25 -7
  10. package/dist/animationsV2/index.d.ts +1 -1
  11. package/dist/animationsV2/index.d.ts.map +1 -1
  12. package/dist/animationsV2/normalize.d.ts.map +1 -1
  13. package/dist/animationsV2/normalize.js +18 -7
  14. package/dist/animationsV2/sequenceUtils.d.ts +42 -1
  15. package/dist/animationsV2/sequenceUtils.d.ts.map +1 -1
  16. package/dist/animationsV2/sequenceUtils.js +103 -3
  17. package/dist/animationsV2/types.d.ts +20 -0
  18. package/dist/animationsV2/types.d.ts.map +1 -1
  19. package/dist/components/AdvancedGrid.d.ts +8 -2
  20. package/dist/components/AdvancedGrid.d.ts.map +1 -1
  21. package/dist/components/AdvancedGrid.js +31 -14
  22. package/dist/components/AnimatedObject.d.ts.map +1 -1
  23. package/dist/components/AnimatedObject.js +7 -5
  24. package/dist/components/Bubbles.d.ts +7 -1
  25. package/dist/components/Bubbles.d.ts.map +1 -1
  26. package/dist/components/Bubbles.js +42 -22
  27. package/dist/components/ChladniGrid.d.ts +8 -4
  28. package/dist/components/ChladniGrid.d.ts.map +1 -1
  29. package/dist/components/ChladniGrid.js +31 -13
  30. package/dist/components/CircuitGrid.d.ts +8 -11
  31. package/dist/components/CircuitGrid.d.ts.map +1 -1
  32. package/dist/components/CircuitGrid.js +31 -13
  33. package/dist/components/CloudsGenerator.d.ts +1 -1
  34. package/dist/components/CloudsGenerator.js +1 -1
  35. package/dist/components/ContourGrid.d.ts +8 -14
  36. package/dist/components/ContourGrid.d.ts.map +1 -1
  37. package/dist/components/ContourGrid.js +31 -13
  38. package/dist/components/EffectsGenerator.d.ts +7 -1
  39. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  40. package/dist/components/EffectsGenerator.js +39 -38
  41. package/dist/components/EnvironmentManager.d.ts +4 -4
  42. package/dist/components/EnvironmentManager.d.ts.map +1 -1
  43. package/dist/components/FlowNetGrid.d.ts +8 -4
  44. package/dist/components/FlowNetGrid.d.ts.map +1 -1
  45. package/dist/components/FlowNetGrid.js +31 -13
  46. package/dist/components/FractalGrid.d.ts +8 -12
  47. package/dist/components/FractalGrid.d.ts.map +1 -1
  48. package/dist/components/FractalGrid.js +31 -13
  49. package/dist/components/GirihGrid.d.ts +8 -1
  50. package/dist/components/GirihGrid.d.ts.map +1 -1
  51. package/dist/components/GirihGrid.js +31 -13
  52. package/dist/components/Glyphs.d.ts +7 -1
  53. package/dist/components/Glyphs.d.ts.map +1 -1
  54. package/dist/components/Glyphs.js +40 -34
  55. package/dist/components/GravWaveGrid.d.ts +8 -1
  56. package/dist/components/GravWaveGrid.d.ts.map +1 -1
  57. package/dist/components/GravWaveGrid.js +31 -13
  58. package/dist/components/GridsGenerator.d.ts +7 -1
  59. package/dist/components/GridsGenerator.d.ts.map +1 -1
  60. package/dist/components/GridsGenerator.js +20 -18
  61. package/dist/components/HexGrid.d.ts +8 -10
  62. package/dist/components/HexGrid.d.ts.map +1 -1
  63. package/dist/components/HexGrid.js +31 -13
  64. package/dist/components/HyperbolicGrid.d.ts +8 -4
  65. package/dist/components/HyperbolicGrid.d.ts.map +1 -1
  66. package/dist/components/HyperbolicGrid.js +31 -13
  67. package/dist/components/LandscapeBuilder.d.ts +1 -1
  68. package/dist/components/LandscapeBuilder.d.ts.map +1 -1
  69. package/dist/components/LandscapeBuilder.js +1 -1
  70. package/dist/components/LandscapeObject.d.ts +1 -1
  71. package/dist/components/LandscapeObject.d.ts.map +1 -1
  72. package/dist/components/LandscapeObject.js +1 -1
  73. package/dist/components/MoireGrid.d.ts +8 -12
  74. package/dist/components/MoireGrid.d.ts.map +1 -1
  75. package/dist/components/MoireGrid.js +31 -13
  76. package/dist/components/ObjectNode.d.ts.map +1 -1
  77. package/dist/components/ObjectNode.js +2 -2
  78. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  79. package/dist/components/ObjectsRenderer.js +37 -3
  80. package/dist/components/OceanBuilder.d.ts +1 -1
  81. package/dist/components/OceanBuilder.js +1 -1
  82. package/dist/components/ParticlesGenerator.d.ts.map +1 -1
  83. package/dist/components/ParticlesGenerator.js +6 -0
  84. package/dist/components/QuasiGrid.d.ts +8 -11
  85. package/dist/components/QuasiGrid.d.ts.map +1 -1
  86. package/dist/components/QuasiGrid.js +31 -13
  87. package/dist/components/RadarGrid.d.ts +8 -13
  88. package/dist/components/RadarGrid.d.ts.map +1 -1
  89. package/dist/components/RadarGrid.js +31 -13
  90. package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
  91. package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
  92. package/dist/components/ReactionDiffusionGrid.js +33 -139
  93. package/dist/components/SceneBuilder.js +1 -1
  94. package/dist/components/SkySystem.d.ts +1 -1
  95. package/dist/components/SparklesBurst.d.ts +7 -1
  96. package/dist/components/SparklesBurst.d.ts.map +1 -1
  97. package/dist/components/SparklesBurst.js +31 -28
  98. package/dist/components/TerrainBuilder.d.ts +1 -1
  99. package/dist/components/TerrainBuilder.d.ts.map +1 -1
  100. package/dist/components/TerrainBuilder.js +1 -1
  101. package/dist/components/VoronoiGrid.d.ts +8 -10
  102. package/dist/components/VoronoiGrid.d.ts.map +1 -1
  103. package/dist/components/VoronoiGrid.js +31 -13
  104. package/dist/components/WallpaperGrid.d.ts +8 -1
  105. package/dist/components/WallpaperGrid.d.ts.map +1 -1
  106. package/dist/components/WallpaperGrid.js +33 -210
  107. package/dist/components/effects/AuraEffect.d.ts +8 -3
  108. package/dist/components/effects/AuraEffect.d.ts.map +1 -1
  109. package/dist/components/effects/AuraEffect.js +49 -24
  110. package/dist/components/effects/AuroraEffect.d.ts +8 -3
  111. package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
  112. package/dist/components/effects/AuroraEffect.js +45 -25
  113. package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
  114. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
  115. package/dist/components/effects/BlackHoleEffect.js +42 -21
  116. package/dist/components/effects/ConstellationEffect.d.ts +8 -3
  117. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
  118. package/dist/components/effects/ConstellationEffect.js +49 -23
  119. package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
  120. package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
  121. package/dist/components/effects/DandelionSeedsEffect.js +19 -9
  122. package/dist/components/effects/DataStreamEffect.d.ts +8 -3
  123. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
  124. package/dist/components/effects/DataStreamEffect.js +54 -26
  125. package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
  126. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
  127. package/dist/components/effects/DnaHelixEffect.js +62 -30
  128. package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
  129. package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
  130. package/dist/components/effects/FallingLeavesEffect.js +19 -9
  131. package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
  132. package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
  133. package/dist/components/effects/FieldLinesEffect.js +30 -20
  134. package/dist/components/effects/Fire.d.ts +8 -3
  135. package/dist/components/effects/Fire.d.ts.map +1 -1
  136. package/dist/components/effects/Fire.js +47 -10
  137. package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
  138. package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
  139. package/dist/components/effects/FireflySwarmEffect.js +19 -9
  140. package/dist/components/effects/Flares.d.ts +10 -3
  141. package/dist/components/effects/Flares.d.ts.map +1 -1
  142. package/dist/components/effects/Flares.js +53 -56
  143. package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
  144. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
  145. package/dist/components/effects/ForcefieldEffect.js +52 -33
  146. package/dist/components/effects/GalaxyEffect.d.ts +7 -2
  147. package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
  148. package/dist/components/effects/GalaxyEffect.js +19 -9
  149. package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
  150. package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
  151. package/dist/components/effects/HarmonicShellEffect.js +30 -22
  152. package/dist/components/effects/HologramEffect.d.ts +8 -3
  153. package/dist/components/effects/HologramEffect.d.ts.map +1 -1
  154. package/dist/components/effects/HologramEffect.js +52 -23
  155. package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
  156. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
  157. package/dist/components/effects/IceCrystalsEffect.js +36 -21
  158. package/dist/components/effects/IceHaloEffect.d.ts +7 -2
  159. package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
  160. package/dist/components/effects/IceHaloEffect.js +19 -9
  161. package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
  162. package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
  163. package/dist/components/effects/LichtenbergEffect.js +19 -9
  164. package/dist/components/effects/LightningEffect.d.ts +8 -3
  165. package/dist/components/effects/LightningEffect.d.ts.map +1 -1
  166. package/dist/components/effects/LightningEffect.js +54 -32
  167. package/dist/components/effects/MoleculesEffect.d.ts +8 -3
  168. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
  169. package/dist/components/effects/MoleculesEffect.js +31 -21
  170. package/dist/components/effects/MurmurationEffect.d.ts +7 -2
  171. package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
  172. package/dist/components/effects/MurmurationEffect.js +19 -9
  173. package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
  174. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
  175. package/dist/components/effects/NeuralNetworkEffect.js +66 -33
  176. package/dist/components/effects/OrbEffect.d.ts +8 -3
  177. package/dist/components/effects/OrbEffect.d.ts.map +1 -1
  178. package/dist/components/effects/OrbEffect.js +89 -42
  179. package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
  180. package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
  181. package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
  182. package/dist/components/effects/PortalEffect.d.ts +8 -3
  183. package/dist/components/effects/PortalEffect.d.ts.map +1 -1
  184. package/dist/components/effects/PortalEffect.js +41 -25
  185. package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
  186. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  187. package/dist/components/effects/ShockwaveEffect.js +19 -9
  188. package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
  189. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
  190. package/dist/components/effects/SmokePlumeEffect.js +30 -20
  191. package/dist/components/effects/SmokeRibbon.d.ts +8 -2
  192. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  193. package/dist/components/effects/SmokeRibbon.js +34 -24
  194. package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
  195. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
  196. package/dist/components/effects/SmokeRingEffect.js +33 -21
  197. package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
  198. package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
  199. package/dist/components/effects/StrangeAttractorEffect.js +30 -20
  200. package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
  201. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
  202. package/dist/components/effects/VolumetricFogEffect.js +38 -20
  203. package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
  204. package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
  205. package/dist/components/effects/WaterCausticsEffect.js +19 -9
  206. package/dist/components/effects/index.d.ts +0 -1
  207. package/dist/components/effects/index.d.ts.map +1 -1
  208. package/dist/components/effects/index.js +0 -1
  209. package/dist/components/index.d.ts +0 -1
  210. package/dist/components/index.d.ts.map +1 -1
  211. package/dist/components/index.js +0 -1
  212. package/dist/components/landscape/LandscapeMesh.js +1 -1
  213. package/dist/components/landscape/types.d.ts +1 -1
  214. package/dist/components/landscape/types.d.ts.map +1 -1
  215. package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
  216. package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
  217. package/dist/components/particles/MagneticBottleParticles.js +618 -0
  218. package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
  219. package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
  220. package/dist/components/particles/ShapeBurstParticles.js +588 -0
  221. package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
  222. package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
  223. package/dist/components/particles/ShapeFlowParticles.js +755 -0
  224. package/dist/components/particles/index.d.ts +6 -0
  225. package/dist/components/particles/index.d.ts.map +1 -1
  226. package/dist/components/particles/index.js +3 -0
  227. package/dist/components/terrain/types.d.ts +1 -1
  228. package/dist/components/terrain/types.d.ts.map +1 -1
  229. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
  230. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  231. package/dist/components/volumetricClouds/types.d.ts +1 -1
  232. package/dist/components/volumetricClouds/types.d.ts.map +1 -1
  233. package/dist/components/water/types.d.ts +1 -1
  234. package/dist/components/water/types.d.ts.map +1 -1
  235. package/dist/constants.d.ts +1 -1
  236. package/dist/constants.d.ts.map +1 -1
  237. package/dist/constants.js +1 -1
  238. package/dist/hooks/index.d.ts +2 -0
  239. package/dist/hooks/index.d.ts.map +1 -1
  240. package/dist/hooks/index.js +1 -0
  241. package/dist/hooks/useConfigDriver.d.ts +22 -0
  242. package/dist/hooks/useConfigDriver.d.ts.map +1 -0
  243. package/dist/hooks/useConfigDriver.js +43 -0
  244. package/dist/hooks/useConfigLive.d.ts +1 -1
  245. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  246. package/dist/hooks/useLandscapeMaps.d.ts +1 -1
  247. package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
  248. package/dist/hooks/useOceanMaterial.d.ts +1 -1
  249. package/dist/hooks/useThunder.d.ts +1 -1
  250. package/dist/index.d.ts +1 -2
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +1 -2
  253. package/dist/interactions/index.d.ts +2 -1
  254. package/dist/interactions/index.d.ts.map +1 -1
  255. package/dist/interactions/index.js +1 -1
  256. package/dist/interactions/runner.d.ts +18 -3
  257. package/dist/interactions/runner.d.ts.map +1 -1
  258. package/dist/interactions/runner.js +25 -2
  259. package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
  260. package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
  261. package/dist/operations/catalogue/curlSmoke.js +178 -0
  262. package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
  263. package/dist/operations/catalogue/displayImage.js +1 -0
  264. package/dist/operations/catalogue/dissolve.d.ts +3 -0
  265. package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
  266. package/dist/operations/catalogue/dissolve.js +57 -0
  267. package/dist/operations/catalogue/emberAsh.d.ts +3 -0
  268. package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
  269. package/dist/operations/catalogue/emberAsh.js +171 -0
  270. package/dist/operations/catalogue/fade.d.ts.map +1 -1
  271. package/dist/operations/catalogue/fade.js +1 -0
  272. package/dist/operations/catalogue/flip.d.ts +3 -0
  273. package/dist/operations/catalogue/flip.d.ts.map +1 -0
  274. package/dist/operations/catalogue/flip.js +69 -0
  275. package/dist/operations/catalogue/flock.d.ts +3 -0
  276. package/dist/operations/catalogue/flock.d.ts.map +1 -0
  277. package/dist/operations/catalogue/flock.js +163 -0
  278. package/dist/operations/catalogue/focus.d.ts.map +1 -1
  279. package/dist/operations/catalogue/focus.js +1 -0
  280. package/dist/operations/catalogue/frame.d.ts +3 -0
  281. package/dist/operations/catalogue/frame.d.ts.map +1 -0
  282. package/dist/operations/catalogue/frame.js +44 -0
  283. package/dist/operations/catalogue/frost.d.ts +3 -0
  284. package/dist/operations/catalogue/frost.d.ts.map +1 -0
  285. package/dist/operations/catalogue/frost.js +111 -0
  286. package/dist/operations/catalogue/fxInstances.d.ts +21 -0
  287. package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
  288. package/dist/operations/catalogue/fxInstances.js +47 -0
  289. package/dist/operations/catalogue/fxPoints.d.ts +22 -0
  290. package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
  291. package/dist/operations/catalogue/fxPoints.js +70 -0
  292. package/dist/operations/catalogue/glow.d.ts.map +1 -1
  293. package/dist/operations/catalogue/glow.js +2 -1
  294. package/dist/operations/catalogue/heatCracks.d.ts +3 -0
  295. package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
  296. package/dist/operations/catalogue/heatCracks.js +134 -0
  297. package/dist/operations/catalogue/hologram.d.ts +3 -0
  298. package/dist/operations/catalogue/hologram.d.ts.map +1 -0
  299. package/dist/operations/catalogue/hologram.js +118 -0
  300. package/dist/operations/catalogue/inkBloom.d.ts +3 -0
  301. package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
  302. package/dist/operations/catalogue/inkBloom.js +156 -0
  303. package/dist/operations/catalogue/ivy.d.ts +13 -0
  304. package/dist/operations/catalogue/ivy.d.ts.map +1 -0
  305. package/dist/operations/catalogue/ivy.js +469 -0
  306. package/dist/operations/catalogue/jelly.d.ts +3 -0
  307. package/dist/operations/catalogue/jelly.d.ts.map +1 -0
  308. package/dist/operations/catalogue/jelly.js +50 -0
  309. package/dist/operations/catalogue/kintsugi.d.ts +3 -0
  310. package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
  311. package/dist/operations/catalogue/kintsugi.js +173 -0
  312. package/dist/operations/catalogue/lidarScan.d.ts +3 -0
  313. package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
  314. package/dist/operations/catalogue/lidarScan.js +240 -0
  315. package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
  316. package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
  317. package/dist/operations/catalogue/liquidMetal.js +122 -0
  318. package/dist/operations/catalogue/metalize.d.ts +3 -0
  319. package/dist/operations/catalogue/metalize.d.ts.map +1 -0
  320. package/dist/operations/catalogue/metalize.js +135 -0
  321. package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
  322. package/dist/operations/catalogue/moveToFront.js +1 -0
  323. package/dist/operations/catalogue/orbit.d.ts +3 -0
  324. package/dist/operations/catalogue/orbit.d.ts.map +1 -0
  325. package/dist/operations/catalogue/orbit.js +29 -0
  326. package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
  327. package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
  328. package/dist/operations/catalogue/particleSwarm.js +138 -0
  329. package/dist/operations/catalogue/petalPeel.d.ts +3 -0
  330. package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
  331. package/dist/operations/catalogue/petalPeel.js +137 -0
  332. package/dist/operations/catalogue/petrify.d.ts +3 -0
  333. package/dist/operations/catalogue/petrify.d.ts.map +1 -0
  334. package/dist/operations/catalogue/petrify.js +94 -0
  335. package/dist/operations/catalogue/portal.d.ts +3 -0
  336. package/dist/operations/catalogue/portal.d.ts.map +1 -0
  337. package/dist/operations/catalogue/portal.js +224 -0
  338. package/dist/operations/catalogue/print3d.d.ts +3 -0
  339. package/dist/operations/catalogue/print3d.d.ts.map +1 -0
  340. package/dist/operations/catalogue/print3d.js +275 -0
  341. package/dist/operations/catalogue/rainBeads.d.ts +3 -0
  342. package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
  343. package/dist/operations/catalogue/rainBeads.js +223 -0
  344. package/dist/operations/catalogue/restPose.d.ts +21 -0
  345. package/dist/operations/catalogue/restPose.d.ts.map +1 -0
  346. package/dist/operations/catalogue/restPose.js +55 -0
  347. package/dist/operations/catalogue/rimLight.d.ts +3 -0
  348. package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
  349. package/dist/operations/catalogue/rimLight.js +72 -0
  350. package/dist/operations/catalogue/sandErosion.d.ts +3 -0
  351. package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
  352. package/dist/operations/catalogue/sandErosion.js +167 -0
  353. package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
  354. package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
  355. package/dist/operations/catalogue/shaderLayers.js +322 -0
  356. package/dist/operations/catalogue/shatter.d.ts +3 -0
  357. package/dist/operations/catalogue/shatter.d.ts.map +1 -0
  358. package/dist/operations/catalogue/shatter.js +267 -0
  359. package/dist/operations/catalogue/silkDrape.d.ts +3 -0
  360. package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
  361. package/dist/operations/catalogue/silkDrape.js +340 -0
  362. package/dist/operations/catalogue/spin.d.ts +3 -0
  363. package/dist/operations/catalogue/spin.d.ts.map +1 -0
  364. package/dist/operations/catalogue/spin.js +42 -0
  365. package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
  366. package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
  367. package/dist/operations/catalogue/surfaceSample.js +187 -0
  368. package/dist/operations/catalogue/swirl.d.ts +3 -0
  369. package/dist/operations/catalogue/swirl.d.ts.map +1 -0
  370. package/dist/operations/catalogue/swirl.js +69 -0
  371. package/dist/operations/catalogue/teleport.d.ts +3 -0
  372. package/dist/operations/catalogue/teleport.d.ts.map +1 -0
  373. package/dist/operations/catalogue/teleport.js +213 -0
  374. package/dist/operations/catalogue/transitionField.d.ts +124 -0
  375. package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
  376. package/dist/operations/catalogue/transitionField.js +278 -0
  377. package/dist/operations/catalogue/unweave.d.ts +3 -0
  378. package/dist/operations/catalogue/unweave.d.ts.map +1 -0
  379. package/dist/operations/catalogue/unweave.js +233 -0
  380. package/dist/operations/catalogue/visibility.d.ts.map +1 -1
  381. package/dist/operations/catalogue/visibility.js +1 -0
  382. package/dist/operations/catalogue/voxelize.d.ts +3 -0
  383. package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
  384. package/dist/operations/catalogue/voxelize.js +148 -0
  385. package/dist/operations/catalogue/warmup.d.ts +22 -0
  386. package/dist/operations/catalogue/warmup.d.ts.map +1 -0
  387. package/dist/operations/catalogue/warmup.js +106 -0
  388. package/dist/operations/catalogue/zoom.d.ts.map +1 -1
  389. package/dist/operations/catalogue/zoom.js +1 -0
  390. package/dist/operations/index.d.ts +4 -2
  391. package/dist/operations/index.d.ts.map +1 -1
  392. package/dist/operations/index.js +4 -2
  393. package/dist/operations/objectEffects.d.ts +46 -0
  394. package/dist/operations/objectEffects.d.ts.map +1 -0
  395. package/dist/operations/objectEffects.js +136 -0
  396. package/dist/operations/registry.d.ts +7 -2
  397. package/dist/operations/registry.d.ts.map +1 -1
  398. package/dist/operations/registry.js +45 -3
  399. package/dist/operations/runtime.d.ts +40 -2
  400. package/dist/operations/runtime.d.ts.map +1 -1
  401. package/dist/operations/runtime.js +164 -8
  402. package/dist/operations/types.d.ts +29 -3
  403. package/dist/operations/types.d.ts.map +1 -1
  404. package/dist/operations/types.js +6 -0
  405. package/dist/operations/useObjectEffectLayers.d.ts +4 -0
  406. package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
  407. package/dist/operations/useObjectEffectLayers.js +42 -0
  408. package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
  409. package/dist/operations/useOperationsRuntime.js +42 -4
  410. package/dist/presets/landscapePresets.d.ts +1 -1
  411. package/dist/presets/landscapePresets.d.ts.map +1 -1
  412. package/dist/presets/landscapePresets.js +1 -1
  413. package/dist/presets/landscapeTypes.d.ts +1 -1
  414. package/dist/presets/landscapeTypes.d.ts.map +1 -1
  415. package/dist/presets/landscapeTypes.js +1 -1
  416. package/dist/presets/oceanSurfacePresets.d.ts +1 -1
  417. package/dist/presets/terrainPresets.d.ts +1 -1
  418. package/dist/presets/terrainPresets.d.ts.map +1 -1
  419. package/dist/presets/volumetricCloudPresets.d.ts +1 -1
  420. package/dist/types/cloudConfigs.d.ts +2 -309
  421. package/dist/types/cloudConfigs.d.ts.map +1 -1
  422. package/dist/types/cloudConfigs.js +2 -339
  423. package/dist/types/index.d.ts +8 -8
  424. package/dist/types/index.d.ts.map +1 -1
  425. package/dist/types/index.js +4 -4
  426. package/dist/types/landscapeConfigs.d.ts +2 -217
  427. package/dist/types/landscapeConfigs.d.ts.map +1 -1
  428. package/dist/types/landscapeConfigs.js +2 -256
  429. package/dist/types/oceanConfigs.d.ts +2 -289
  430. package/dist/types/oceanConfigs.d.ts.map +1 -1
  431. package/dist/types/oceanConfigs.js +2 -380
  432. package/dist/types/terrainConfigs.d.ts +2 -250
  433. package/dist/types/terrainConfigs.d.ts.map +1 -1
  434. package/dist/types/terrainConfigs.js +2 -292
  435. package/dist/utils/cloudUniforms.d.ts +1 -1
  436. package/dist/utils/configAnimations.d.ts +6 -0
  437. package/dist/utils/configAnimations.d.ts.map +1 -1
  438. package/dist/utils/configAnimations.js +14 -0
  439. package/dist/utils/gridConfig.d.ts +19 -0
  440. package/dist/utils/gridConfig.d.ts.map +1 -0
  441. package/dist/utils/gridConfig.js +52 -0
  442. package/dist/utils/handleCloudsAnimations.d.ts +1 -1
  443. package/dist/utils/handleCloudsAnimations.js +1 -1
  444. package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
  445. package/dist/utils/hasHoverAnimation.js +0 -2
  446. package/dist/utils/landscapeUniforms.d.ts +1 -1
  447. package/dist/utils/landscapeUniforms.d.ts.map +1 -1
  448. package/dist/utils/oceanUniforms.d.ts +1 -1
  449. package/dist/utils/particleShape.d.ts +33 -0
  450. package/dist/utils/particleShape.d.ts.map +1 -0
  451. package/dist/utils/particleShape.js +207 -0
  452. package/dist/utils/particleTrails.d.ts.map +1 -1
  453. package/dist/utils/particleTrails.js +29 -14
  454. package/dist/utils/terrainUniforms.d.ts +1 -1
  455. package/dist/utils/terrainUniforms.d.ts.map +1 -1
  456. package/package.json +2 -2
@@ -0,0 +1,588 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
+ import * as THREE from 'three';
4
+ import { useFrame } from '@react-three/fiber';
5
+ import { GENERATIVE_PARTICLES_ANIMATABLE } from '@3driseai/3drise-core';
6
+ import { applyConfigKeyframeAnimations, applyConfigMouseMove } from '../../utils/configAnimations.js';
7
+ import { createPointerUniforms, stepPointerField, usePointerField } from '../../utils/pointerField.js';
8
+ import { createTrailUniforms, applyTrailConfig, createCpuTrail } from '../../utils/particleTrails.js';
9
+ import { sampleSurface } from '../../utils/particleShape.js';
10
+ import { useObjectReady } from '../../hooks/useObjectReady.js';
11
+ import { useConfigLiveHandle } from '../../hooks/useConfigLive.js';
12
+ /**
13
+ * Shape Burst — Bursts of charged particles that spiral out in a magnetic field and land exactly on a mesh shape, white-hot cooling to two family colours, then dissolve; the cursor detonates, curls or pulls them. Use for reveals, logos and impact moments.
14
+ */
15
+ // Shape Burst — a burst of charged particles that curls out and lands exactly on a mesh shape.
16
+ // Movement: every burst fires N particles from one point. Each has a target on the shape's surface
17
+ // (area-weighted, stratified, so the shape fills evenly). In a vertical magnetic field with
18
+ // linear drag the velocity obeys v' = (-k + i q w) v in the horizontal plane (complex form),
19
+ // so it spirals and decays: x(t) = v0 / (k - i q w) (1 - e^{(-k + i q w) t}). Launching with
20
+ // v0 = (k - i q w) T makes every particle land exactly on its target T, whatever its charge:
21
+ // positives and negatives curl out in opposite spirals and settle into the same shape. It
22
+ // holds, then dissolves (a slow outward drift while it fades), and the next burst fires.
23
+ // Colour: exact: heat = |v| / |v0| (1 at launch, 0 at rest) takes a particle from heatColor (white-hot)
24
+ // to its family colour (positive = color, negative = counterColor) as it slows and lands.
25
+ // Mouse (pointerMode, cursor on the camera-facing plane through the object):
26
+ // detonate — moving the cursor fires bursts at the cursor (rate limited), sized by pointerRadius.
27
+ // magnet — a strong local field under the cursor: particles flying through curl tighter.
28
+ // gravity — a pull toward the cursor; landed particles are held on their shape by a spring, so the
29
+ // shape stretches toward the cursor and snaps back when it leaves.
30
+ // Trails (trailMode): streak = motion blur, comet = spiral tails, echo = embers.
31
+ //
32
+ // Generated from the approved lab module (particle lab, shapes batch). Sim units = object-local / size.
33
+ // config.shape is a mesh-builder geometry config ({ type, ...params }); utils/particleShape builds it with
34
+ // the core mesh builders (createMeshByType) and reads it as a surface.
35
+ // ---------------------------------------------------------------------------------------------
36
+ // Engine features
37
+ // ---------------------------------------------------------------------------------------------
38
+ const QUALITY_SCALE = { low: 0.5, medium: 1, high: 1.6 };
39
+ /** mulberry32 — seeded PRNG, returns a function giving floats in [0,1). */
40
+ function mulberry32(seed) {
41
+ let a = seed >>> 0;
42
+ return function () {
43
+ a = (a + 0x6d2b79f5) >>> 0;
44
+ let t = a;
45
+ t = Math.imul(t ^ (t >>> 15), t | 1);
46
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
47
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
48
+ };
49
+ }
50
+ /** Viewport-height hook so point sizes are pixel-correct at any canvas size. */
51
+ function attachViewH(obj, u) {
52
+ const scratch = new THREE.Vector2();
53
+ obj.onBeforeRender = (renderer) => {
54
+ renderer.getDrawingBufferSize(scratch);
55
+ u.uViewH.value = scratch.y;
56
+ };
57
+ }
58
+ function colorUniform(hex) {
59
+ return { value: new THREE.Color(hex) };
60
+ }
61
+ function qualityScale(q) { return QUALITY_SCALE[q] || 1; }
62
+ function seedMix(base, seed) {
63
+ let h = (base ^ Math.imul((Math.round(seed) | 0) + 0x9e37, 0x85ebca6b)) >>> 0;
64
+ h = Math.imul(h ^ (h >>> 13), 0xc2b2ae35) >>> 0;
65
+ return (h ^ (h >>> 16)) >>> 0;
66
+ }
67
+ function createFixedStep(H, maxSteps) {
68
+ let acc = 0;
69
+ return {
70
+ H,
71
+ run(d, step) {
72
+ acc += Math.max(d, 0);
73
+ let k = 0;
74
+ while (acc >= H && k < maxSteps) {
75
+ step(H);
76
+ acc -= H;
77
+ k++;
78
+ }
79
+ if (k === maxSteps)
80
+ acc = Math.min(acc, H);
81
+ return acc / H;
82
+ },
83
+ reset() { acc = 0; },
84
+ };
85
+ }
86
+ function createPickProxy(center, radius) {
87
+ const geo = new THREE.SphereGeometry(1, 16, 10);
88
+ const mat = new THREE.MeshBasicMaterial({ visible: false });
89
+ const mesh = new THREE.Mesh(geo, mat);
90
+ mesh.name = 'pickProxy';
91
+ mesh.position.set(center[0], center[1], center[2]);
92
+ mesh.scale.setScalar(radius);
93
+ return { mesh, dispose() { geo.dispose(); mat.dispose(); } };
94
+ }
95
+ const _frustum = new THREE.Frustum();
96
+ const _pm = new THREE.Matrix4();
97
+ const _sphere = new THREE.Sphere();
98
+ function inView(object, camera, center, radius, size) {
99
+ if (!camera || !camera.projectionMatrix)
100
+ return true;
101
+ object.updateWorldMatrix(true, false);
102
+ _sphere.center.set(center[0], center[1], center[2]).multiplyScalar(size).applyMatrix4(object.matrixWorld);
103
+ _sphere.radius = radius * size * object.matrixWorld.getMaxScaleOnAxis();
104
+ _pm.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
105
+ _frustum.setFromProjectionMatrix(_pm);
106
+ return _frustum.intersectsSphere(_sphere);
107
+ }
108
+ /** Shared GLSL for heads (a white-hot core in a coloured glow). */
109
+ const HEAD_FRAG = /* glsl */ `
110
+ varying vec3 vCol;
111
+ varying float vA;
112
+ void main() {
113
+ vec2 d = gl_PointCoord * 2.0 - 1.0;
114
+ float r2 = dot(d, d);
115
+ if (r2 > 1.0) discard;
116
+ float core = exp(-r2 * 40.0);
117
+ float glow = exp(-r2 * 8.0) * 0.5 + exp(-r2 * 2.5) * 0.1;
118
+ float a = clamp((core + glow) * (1.0 - r2) * vA, 0.0, 1.0);
119
+ if (a < 0.003) discard;
120
+ vec3 c = vCol / max(max(vCol.r, max(vCol.g, vCol.b)), 1.0);
121
+ gl_FragColor = vec4(mix(c, vec3(1.0), core * 0.9), a);
122
+ }
123
+ `;
124
+ const POINTER_MODES = ['detonate', 'magnet', 'gravity'];
125
+ const H_STEP = 1 / 120;
126
+ const W_PER_FIELD = 4.2; // cyclotron rate (rad / s) per unit field
127
+ const TRAIL_LOOK = { streak: 0.12, comet: 1, echo: 1 };
128
+ const TRAIL_ALPHA = { streak: 1.4, comet: 1.6, echo: 2.4 };
129
+ const BOUNDS = { center: [0, 0, 0], radius: 1.3 };
130
+ const FADE = 1.2; // seconds of dissolve
131
+ const INK_EVERY = 1; // particles that draw lines (1 = all)
132
+ const INK_SPACING = 0.006;
133
+ function createUniforms() {
134
+ return {
135
+ uTime: { value: 0 },
136
+ uSize: { value: 1 },
137
+ uViewH: { value: 800 },
138
+ uIntensity: { value: 1 },
139
+ uSpeed: { value: 1 },
140
+ uOpacity: { value: 0.9 },
141
+ uColor: colorUniform('#ffffff'),
142
+ uParticleCount: { value: 0 },
143
+ uInterval: { value: 2.8 },
144
+ uFormSpeed: { value: 2.4 },
145
+ uFieldStrength: { value: 1 },
146
+ uHoldTime: { value: 1.2 },
147
+ uDissolve: { value: 0.3 },
148
+ uCounterColor: colorUniform('#ffffff'),
149
+ uHeatColor: colorUniform('#ffffff'),
150
+ uHeadSize: { value: 1 },
151
+ uInkTime: { value: 0 },
152
+ uPointerMode: { value: 0 },
153
+ uPointerStrength: { value: 1 },
154
+ uPointerRadius: { value: 1 },
155
+ uPointerColor: colorUniform('#ffffff'),
156
+ ...createPointerUniforms(),
157
+ ...createTrailUniforms(),
158
+ };
159
+ }
160
+ function applyConfig(u, c, size) {
161
+ u.uSize.value = size;
162
+ u.uIntensity.value = c.intensity;
163
+ u.uSpeed.value = c.speed;
164
+ u.uOpacity.value = c.opacity;
165
+ u.uColor.value.set(c.color);
166
+ u.uParticleCount.value = c.particleCount;
167
+ u.uInterval.value = c.interval;
168
+ u.uFormSpeed.value = c.formSpeed;
169
+ u.uFieldStrength.value = c.fieldStrength;
170
+ u.uHoldTime.value = c.holdTime;
171
+ u.uDissolve.value = c.dissolve;
172
+ u.uCounterColor.value.set(c.counterColor);
173
+ u.uHeatColor.value.set(c.heatColor);
174
+ u.uHeadSize.value = c.headSize;
175
+ u.uPointerMode.value = POINTER_MODES.indexOf(c.pointerMode); // -1 = 'none' (off)
176
+ u.uPointerStrength.value = c.pointerStrength;
177
+ u.uPointerRadius.value = c.pointerRadius;
178
+ u.uPointerColor.value.set(c.pointerColor);
179
+ applyTrailConfig(u, c);
180
+ }
181
+ // code = family (0/1) + 2 x heat (0..63) + 128 x brightness (0..31) + 4096 x cursor glow (0..7)
182
+ const HEAT_GLSL = /* glsl */ `
183
+ uniform vec3 uColor, uCounterColor, uHeatColor, uPointerColor;
184
+ vec3 burstLight(float code, out float bri) {
185
+ float gl = floor(code / 4096.0); code -= gl * 4096.0;
186
+ float b = floor(code / 128.0); code -= b * 128.0;
187
+ float ht = floor(code / 2.0);
188
+ float fam = code - ht * 2.0;
189
+ bri = b / 31.0;
190
+ float heat = ht / 63.0;
191
+ vec3 c = mix(fam < 0.5 ? uColor : uCounterColor, uHeatColor, smoothstep(0.55, 1.0, heat));
192
+ return mix(c, uPointerColor, 0.6 * gl / 7.0) * (0.9 + 0.8 * heat);
193
+ }
194
+ `;
195
+ const headVertex = /* glsl */ `
196
+ uniform float uSize, uViewH, uIntensity, uOpacity, uHeadSize;
197
+ ${HEAT_GLSL}
198
+ attribute float aCode;
199
+ varying vec3 vCol;
200
+ varying float vA;
201
+ void main() {
202
+ vec4 mv = modelViewMatrix * vec4(position * uSize, 1.0);
203
+ float bri;
204
+ vCol = burstLight(aCode, bri) * uIntensity;
205
+ vA = uOpacity * bri;
206
+ gl_PointSize = clamp(uHeadSize * uSize * uViewH * 0.016 / -mv.z, 1.5, 28.0) * step(0.01, bri);
207
+ gl_Position = projectionMatrix * mv;
208
+ }
209
+ `;
210
+ const inkVertex = /* glsl */ `
211
+ uniform float uSize, uViewH, uIntensity, uOpacity, uInkTime;
212
+ ${HEAT_GLSL}
213
+ attribute vec2 aI; // colour code at deposit, time the line dies
214
+ varying vec3 vCol;
215
+ varying float vA;
216
+ void main() {
217
+ vec4 mv = modelViewMatrix * vec4(position * uSize, 1.0);
218
+ float bri;
219
+ vCol = burstLight(aI.x, bri) * uIntensity;
220
+ float left = aI.y - uInkTime;
221
+ vA = aI.y < 0.0 ? 0.0 : uOpacity * 0.8 * clamp(left / ${FADE.toFixed(2)}, 0.0, 1.0);
222
+ gl_PointSize = clamp(uSize * uViewH * 0.0055 / -mv.z, 1.0, 8.0) * step(0.004, vA);
223
+ gl_Position = projectionMatrix * mv;
224
+ }
225
+ `;
226
+ const inkFragment = /* glsl */ `
227
+ varying vec3 vCol;
228
+ varying float vA;
229
+ void main() {
230
+ vec2 d = gl_PointCoord * 2.0 - 1.0;
231
+ float r2 = dot(d, d);
232
+ if (r2 > 1.0) discard;
233
+ float a = exp(-r2 * 4.0) * (1.0 - r2) * vA;
234
+ if (a < 0.002) discard;
235
+ gl_FragColor = vec4(vCol, a);
236
+ }
237
+ `;
238
+ function build(u, c, size) {
239
+ const q = qualityScale(c.quality);
240
+ const nb = Math.max(20, Math.round(c.particleCount * q));
241
+ const SLOTS = 3; // bursts that can be alive at once
242
+ const N = nb * SLOTS;
243
+ const rng = mulberry32(seedMix(0xb125, c.seed));
244
+ // targets: several stratified sets over the surface, a fresh one for each burst
245
+ const SETS = 4;
246
+ const targets = [];
247
+ for (let s = 0; s < SETS; s++)
248
+ targets.push(sampleSurface(c.shape, nb, rng));
249
+ let ext = 0;
250
+ for (let k = 0; k < targets[0].length; k += 3)
251
+ ext = Math.max(ext, Math.hypot(targets[0][k], targets[0][k + 1], targets[0][k + 2]));
252
+ const bR = Math.max(BOUNDS.radius, ext * 1.35); // bounds grow with the shape (and its dissolve)
253
+ const x = new Float32Array(N * 3), v = new Float32Array(N * 3), T = new Float32Array(N * 3), O = new Float32Array(N * 3);
254
+ const v0 = new Float32Array(N), age = new Float32Array(N), sc = new Float32Array(N);
255
+ const fam = new Uint8Array(N), alive = new Uint8Array(N);
256
+ const code = new Float32Array(N), glow = new Float32Array(N);
257
+ // ink: the spiral path every particle draws, living as long as its burst
258
+ const NI = Math.max(20000, Math.round(nb * SLOTS * 90));
259
+ const ip = new Float32Array(NI * 3), ia = new Float32Array(NI * 2); // code at deposit, time of death
260
+ for (let k = 0; k < NI; k++)
261
+ ia[k * 2 + 1] = -1;
262
+ let iHead = 0, simTime = 0;
263
+ const inkAcc = new Float32Array(N);
264
+ let trail = null;
265
+ let burstNo = 0, clock = 0, detClock = 0;
266
+ const last = new THREE.Vector3(1e9, 0, 0), P = new THREE.Vector3(), axis = new THREE.Vector3(0, 0, 1);
267
+ function fire(ox, oy, oz, scale) {
268
+ const set = targets[burstNo % SETS];
269
+ const base = (burstNo % SLOTS) * nb;
270
+ burstNo++;
271
+ const k = Math.max(u.uFormSpeed.value, 0.2), w = W_PER_FIELD * u.uFieldStrength.value;
272
+ for (let i = 0; i < nb; i++) {
273
+ const p = base + i, j = p * 3;
274
+ const f = i % 2, qs = f ? -1 : 1;
275
+ const tx = set[i * 3] * scale, ty = set[i * 3 + 1] * scale, tz = set[i * 3 + 2] * scale;
276
+ T[j] = ox + tx;
277
+ T[j + 1] = oy + ty;
278
+ T[j + 2] = oz + tz;
279
+ O[j] = ox;
280
+ O[j + 1] = oy;
281
+ O[j + 2] = oz;
282
+ x[j] = ox;
283
+ x[j + 1] = oy;
284
+ x[j + 2] = oz;
285
+ // v0 = (k - i q w) T (complex in x + i z), so the drag-and-field spiral ends exactly at T
286
+ v[j] = k * tx + qs * w * tz;
287
+ v[j + 1] = k * ty;
288
+ v[j + 2] = k * tz - qs * w * tx;
289
+ v0[p] = Math.hypot(v[j], v[j + 1], v[j + 2]) + 1e-6;
290
+ age[p] = 0;
291
+ fam[p] = f;
292
+ alive[p] = 1;
293
+ sc[p] = scale;
294
+ inkAcc[p] = 0;
295
+ if (trail)
296
+ trail.reset(p);
297
+ }
298
+ }
299
+ function step(dt) {
300
+ simTime += dt;
301
+ const k = Math.max(u.uFormSpeed.value, 0.2), w0 = W_PER_FIELD * u.uFieldStrength.value;
302
+ const hold = u.uHoldTime.value, dis = u.uDissolve.value;
303
+ const formT = 3.2 / k;
304
+ const life = formT + hold + FADE;
305
+ const mode = u.uPointerMode.value;
306
+ const S = u.uPointerStrength.value * u.uPointerActive.value;
307
+ const Rp = 0.35 * u.uPointerRadius.value;
308
+ P.copy(u.uPointer.value);
309
+ // the burst clock
310
+ clock += dt;
311
+ if (clock >= Math.max(u.uInterval.value, life * 0.34)) {
312
+ clock = 0;
313
+ fire(0, 0, 0, 1);
314
+ }
315
+ // detonations at the cursor
316
+ detClock += dt;
317
+ if (mode === 0 && S > 0.3 && detClock > 0.45 && P.distanceTo(last) > 0.15) {
318
+ detClock = 0;
319
+ last.copy(P);
320
+ fire(P.x, P.y, P.z, 0.35 * u.uPointerRadius.value * Math.min(u.uPointerStrength.value, 2));
321
+ clock = Math.min(clock, u.uInterval.value * 0.5);
322
+ }
323
+ const decay = Math.exp(-k * dt);
324
+ for (let p = 0; p < N; p++) {
325
+ if (!alive[p])
326
+ continue;
327
+ const j = p * 3, i2 = p;
328
+ const a = (age[p] += dt);
329
+ if (a > life) {
330
+ alive[p] = 0;
331
+ code[p] = 0;
332
+ v[j] = v[j + 1] = v[j + 2] = 0;
333
+ continue;
334
+ }
335
+ let w = w0 * (fam[p] ? -1 : 1);
336
+ let gx = 0, gy = 0, gz = 0, gl = 0;
337
+ if (S > 0.001 && mode > 0) {
338
+ let ex = x[j] - P.x, ey = x[j + 1] - P.y, ez = x[j + 2] - P.z;
339
+ const al = ex * axis.x + ey * axis.y + ez * axis.z;
340
+ ex -= axis.x * al;
341
+ ey -= axis.y * al;
342
+ ez -= axis.z * al;
343
+ const d2 = ex * ex + ey * ey + ez * ez;
344
+ if (d2 < 9 * Rp * Rp) {
345
+ const g = Math.exp(-d2 / (Rp * Rp));
346
+ gl = g;
347
+ if (mode === 1)
348
+ w += (fam[p] ? -1 : 1) * 14 * S * g; // local field
349
+ else {
350
+ const f = 6 * S * g;
351
+ gx = -ex * f;
352
+ gy = -ey * f;
353
+ gz = -ez * f;
354
+ } // pull
355
+ }
356
+ }
357
+ glow[p] += (gl - glow[p]) * Math.min(1, dt * 8);
358
+ // exact drag + field step: rotate the horizontal velocity by w dt, decay by e^{-k dt}
359
+ const ca = Math.cos(w * dt), sa = Math.sin(w * dt);
360
+ const vx = v[j] * ca + v[j + 2] * sa, vz = -v[j] * sa + v[j + 2] * ca;
361
+ v[j] = vx * decay;
362
+ v[j + 1] *= decay;
363
+ v[j + 2] = vz * decay;
364
+ // after landing a spring holds the shape (so a pulled shape snaps back); the dissolve drifts it out
365
+ if (a > formT) { // critically damped: no wobble
366
+ const ks = 36, kd = 2 * Math.sqrt(ks);
367
+ v[j] += (-(x[j] - T[j]) * ks - v[j] * kd) * dt;
368
+ v[j + 1] += (-(x[j + 1] - T[j + 1]) * ks - v[j + 1] * kd) * dt;
369
+ v[j + 2] += (-(x[j + 2] - T[j + 2]) * ks - v[j + 2] * kd) * dt;
370
+ }
371
+ if (a > formT + hold && dis > 0) {
372
+ const o = dis * 0.6 * dt; // the shape swells out from its origin as it fades
373
+ T[j] += (T[j] - O[j]) * o;
374
+ T[j + 1] += (T[j + 1] - O[j + 1]) * o;
375
+ T[j + 2] += (T[j + 2] - O[j + 2]) * o;
376
+ }
377
+ v[j] += gx * dt;
378
+ v[j + 1] += gy * dt;
379
+ v[j + 2] += gz * dt;
380
+ const px = x[j], py = x[j + 1], pz = x[j + 2];
381
+ x[j] += v[j] * dt;
382
+ x[j + 1] += v[j + 1] * dt;
383
+ x[j + 2] += v[j + 2] * dt;
384
+ // light: heat from speed, brightness from the life cycle (quick flash in, fade out in the dissolve)
385
+ const heat = Math.min(Math.hypot(v[j], v[j + 1], v[j + 2]) / v0[p], 1);
386
+ const fin = Math.min(a / 0.06, 1), fout = a > formT + hold ? Math.max(1 - (a - formT - hold) / FADE, 0) : 1;
387
+ const bri = fin * fout * fout;
388
+ code[p] = fam[p] + 2 * Math.round(heat * 63) + 128 * Math.round(bri * 31) + 4096 * Math.round(Math.min(glow[p], 1) * 7);
389
+ // lay ink along the flight (a line that lives until the burst has faded)
390
+ if (i2 % INK_EVERY === 0) {
391
+ const seg = Math.hypot(x[j] - px, x[j + 1] - py, x[j + 2] - pz);
392
+ inkAcc[p] += seg;
393
+ const sp = INK_SPACING;
394
+ while (inkAcc[p] >= sp) {
395
+ inkAcc[p] -= sp;
396
+ const t = seg > 1e-6 ? 1 - inkAcc[p] / seg : 1;
397
+ const q2 = iHead;
398
+ iHead = (iHead + 1) % NI;
399
+ ip[q2 * 3] = px + (x[j] - px) * t;
400
+ ip[q2 * 3 + 1] = py + (x[j + 1] - py) * t;
401
+ ip[q2 * 3 + 2] = pz + (x[j + 2] - pz) * t;
402
+ ia[q2 * 2] = fam[p] + 2 * Math.round(heat * 63) + 128 * 31;
403
+ ia[q2 * 2 + 1] = simTime + (life - a);
404
+ }
405
+ }
406
+ }
407
+ }
408
+ const hgeo = new THREE.BufferGeometry();
409
+ const xAttr = new THREE.BufferAttribute(x, 3).setUsage(THREE.DynamicDrawUsage);
410
+ const cAttr = new THREE.BufferAttribute(code, 1).setUsage(THREE.DynamicDrawUsage);
411
+ hgeo.setAttribute('position', xAttr);
412
+ hgeo.setAttribute('aCode', cAttr);
413
+ const hmat = new THREE.ShaderMaterial({
414
+ uniforms: u, vertexShader: headVertex, fragmentShader: HEAD_FRAG,
415
+ transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
416
+ });
417
+ const pts = new THREE.Points(hgeo, hmat);
418
+ pts.frustumCulled = false;
419
+ pts.renderOrder = 3;
420
+ attachViewH(pts, u);
421
+ const igeo = new THREE.BufferGeometry();
422
+ const ipAttr = new THREE.BufferAttribute(ip, 3).setUsage(THREE.DynamicDrawUsage);
423
+ const iaAttr = new THREE.BufferAttribute(ia, 2).setUsage(THREE.DynamicDrawUsage);
424
+ igeo.setAttribute('position', ipAttr);
425
+ igeo.setAttribute('aI', iaAttr);
426
+ const imat = new THREE.ShaderMaterial({
427
+ uniforms: u, vertexShader: inkVertex, fragmentShader: inkFragment,
428
+ transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
429
+ });
430
+ const ink = new THREE.Points(igeo, imat);
431
+ ink.frustumCulled = false;
432
+ ink.renderOrder = 1;
433
+ const object = new THREE.Group();
434
+ const proxy = createPickProxy(BOUNDS.center, bR);
435
+ object.add(ink, pts, proxy.mesh);
436
+ const trailGLSL = /* glsl */ `
437
+ ${HEAT_GLSL}
438
+ vec3 trailShade(vec3 p, float f) {
439
+ float bri;
440
+ vec3 c = burstLight(TRAIL_K, bri);
441
+ c /= max(max(c.r, max(c.g, c.b)), 1.0); // keep <= 1 so the tail colour shows
442
+ return mix(c, uTrailColor, smoothstep(0.0, 0.6, f)) * bri;
443
+ }
444
+ vec3 trailView(vec3 mv, out float mag) { mag = 1.0; return mv; }
445
+ `;
446
+ let trailKey = '', look = 1;
447
+ const materials = [hmat, imat];
448
+ function buildTrails(mode, share) {
449
+ look = TRAIL_LOOK[mode] || 1;
450
+ const key = mode + ':' + share;
451
+ if (key === trailKey)
452
+ return;
453
+ trailKey = key;
454
+ if (trail) {
455
+ object.remove(trail.object);
456
+ trail.dispose();
457
+ trail = null;
458
+ }
459
+ materials.length = 2;
460
+ trail = createCpuTrail(mode, { u, n: N, pos: x, vel: v, k: code, glsl: trailGLSL, sizePx: 0.008, spacing: 0.0015, sub: 10, alpha: TRAIL_ALPHA[mode] });
461
+ if (!trail)
462
+ return;
463
+ trail.object.renderOrder = 2;
464
+ object.add(trail.object);
465
+ materials.push(...trail.materials);
466
+ }
467
+ buildTrails(c.trailMode, c.trailShare);
468
+ const stepper = createFixedStep(H_STEP, 8);
469
+ fire(0, 0, 0, 1);
470
+ for (let s = 0; s < 0.5 / H_STEP; s++)
471
+ step(H_STEP); // open mid-burst: the spirals are on screen
472
+ const invWorld = new THREE.Matrix4();
473
+ return {
474
+ object,
475
+ materials,
476
+ apply(cfg) { if (cfg)
477
+ buildTrails(cfg.trailMode, cfg.trailShare); },
478
+ update(dt, camera, pointer) {
479
+ const rdt = Math.min(Math.max(dt, 0), 1 / 20);
480
+ if (camera && !inView(object, camera, BOUNDS.center, bR, u.uSize.value))
481
+ return;
482
+ const d = rdt * u.uSpeed.value;
483
+ u.uTime.value += d;
484
+ if (camera) {
485
+ camera.getWorldDirection(axis);
486
+ axis.transformDirection(invWorld.copy(object.matrixWorld).invert()).normalize();
487
+ if (pointer)
488
+ stepPointerField(u, pointer, camera, object, u.uSize.value, rdt);
489
+ }
490
+ u.uVelScale.value = look;
491
+ let simD = 0;
492
+ stepper.run(d, (hh) => { step(hh); simD += hh; });
493
+ if (simD > 0) {
494
+ xAttr.needsUpdate = true;
495
+ cAttr.needsUpdate = true;
496
+ ipAttr.needsUpdate = true;
497
+ iaAttr.needsUpdate = true;
498
+ u.uInkTime.value = simTime;
499
+ if (trail)
500
+ trail.update(simD / look);
501
+ }
502
+ },
503
+ seek(tt) { for (let s = 0; s < Math.round(tt / H_STEP); s++)
504
+ step(H_STEP); xAttr.needsUpdate = true; cAttr.needsUpdate = true; },
505
+ dispose() { hgeo.dispose(); hmat.dispose(); igeo.dispose(); imat.dispose(); proxy.dispose(); if (trail)
506
+ trail.dispose(); },
507
+ _state: { x, code, alive },
508
+ };
509
+ }
510
+ /** Defaults for every knob, so an older saved config still renders (identical to the catalog entry). */
511
+ const DEFAULTS = {
512
+ intensity: 1,
513
+ speed: 1,
514
+ opacity: 0.9,
515
+ size: 1,
516
+ color: '#45d1ff',
517
+ particleCount: 180,
518
+ shape: { type: 'icosahedron', radius: 0.5, detail: 0 },
519
+ interval: 2.8,
520
+ formSpeed: 2.4,
521
+ fieldStrength: 1,
522
+ holdTime: 1.2,
523
+ dissolve: 0.3,
524
+ counterColor: '#ff5aa8',
525
+ heatColor: '#fff6e0',
526
+ headSize: 1.4,
527
+ seed: 1,
528
+ quality: 'medium',
529
+ pointerMode: 'detonate',
530
+ pointerStrength: 1,
531
+ pointerRadius: 1,
532
+ pointerColor: '#ffffff',
533
+ trailMode: 'comet',
534
+ trailLength: 0.4,
535
+ trailOpacity: 0.8,
536
+ trailColor: '#6a5cff',
537
+ trailShare: 0.5,
538
+ };
539
+ /** Knobs that rebuild the simulation: they change on commit, never through the live path. */
540
+ const STRUCTURAL = ['particleCount', 'shape', 'seed', 'quality'];
541
+ /** Knobs an animation (or mouse move) may drive per frame — generated from applyConfig. */
542
+ const ANIMATABLE = new Set(GENERATIVE_PARTICLES_ANIMATABLE.shapeBurst.map((p) => p.value));
543
+ const ShapeBurstParticles = ({ id, size, config, animations, mouseMove, onObjectReady, onObjectDispose }) => {
544
+ const rootRef = useRef(null);
545
+ useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
546
+ const s = size > 0 ? size : 1;
547
+ const cfg = useMemo(() => ({ ...DEFAULTS, ...config }), [config]);
548
+ // the shape is an object: rebuild on a change of its content, not of its identity
549
+ const shapeKey = JSON.stringify(cfg.shape);
550
+ // uniforms outlive the objects, so keyframe animations survive a rebuild
551
+ const uniforms = useMemo(() => createUniforms(), []);
552
+ // rebuilt only when a structural knob changes (trails rebuild inside apply())
553
+ const instance = useMemo(() => build(uniforms, cfg, s), [uniforms, cfg.particleCount, cfg.seed, cfg.quality, shapeKey]);
554
+ useEffect(() => () => instance.dispose(), [instance]);
555
+ useLayoutEffect(() => {
556
+ applyConfig(uniforms, cfg, s);
557
+ instance.apply(cfg);
558
+ }, [instance, uniforms, cfg, s]);
559
+ // Slider drags and keyframe animations are both overrides on the committed config.
560
+ // This is the one place they are merged and pushed, so they compose instead of
561
+ // overwriting each other; the animation wins, because it is the active driver.
562
+ const keyframes = animations?.particles?.animations;
563
+ const animOverride = useRef({});
564
+ const animFrom = useRef({});
565
+ const animStart = useRef(0);
566
+ // Editing a keyframe restarts its cycle rather than dropping the user mid-way.
567
+ useEffect(() => { animStart.current = performance.now(); animFrom.current = {}; }, [keyframes]);
568
+ const push = useCallback((overrides) => {
569
+ const merged = { ...cfg, ...overrides, ...animOverride.current };
570
+ const z = merged.size;
571
+ applyConfig(uniforms, merged, z && z > 0 ? z : s);
572
+ }, [cfg, uniforms, s]);
573
+ const live = useConfigLiveHandle(rootRef, id, 'particles', cfg, STRUCTURAL, push);
574
+ const pointer = usePointerField();
575
+ useFrame((state, delta) => {
576
+ instance.update(Math.min(delta, 0.1), state.camera, pointer);
577
+ // Keyframes first, pointer on top: a knob bound to both follows the cursor.
578
+ const pointerBound = !!mouseMove?.enabled && !!mouseMove.properties?.length;
579
+ if (keyframes?.length || pointerBound) {
580
+ applyConfigKeyframeAnimations(keyframes, animFrom.current, cfg, animOverride.current, performance.now() - animStart.current, ANIMATABLE);
581
+ if (pointerBound)
582
+ applyConfigMouseMove(mouseMove.properties, cfg, animOverride.current, state.pointer, ANIMATABLE);
583
+ push(live.current);
584
+ }
585
+ });
586
+ return (_jsx("group", { ref: rootRef, children: _jsx("primitive", { object: instance.object }) }));
587
+ };
588
+ export default ShapeBurstParticles;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { ObjectAnimations, ShapeFlowParticlesConfig, MouseMoveDomain } from '@3driseai/3drise-core';
3
+ import type { ObjectReadyProps } from '../../types/objectReady';
4
+ export interface ShapeFlowParticlesProps extends ObjectReadyProps {
5
+ /** Pointer bindings for this object's config knobs (mouseMove.particles). */
6
+ mouseMove?: MouseMoveDomain;
7
+ /** Scene object id: the controller finds the live-edit handle by it. */
8
+ id?: string;
9
+ /** World size of the object (units); the object's transform scales it further. */
10
+ size: number;
11
+ config: ShapeFlowParticlesConfig;
12
+ /** Per-domain keyframes; the `particles` domain drives this object's config knobs. */
13
+ animations?: ObjectAnimations;
14
+ }
15
+ declare const ShapeFlowParticles: React.FC<ShapeFlowParticlesProps>;
16
+ export default ShapeFlowParticles;
17
+ //# sourceMappingURL=ShapeFlowParticles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeFlowParticles.d.ts","sourceRoot":"","sources":["../../../src/components/particles/ShapeFlowParticles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAIxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOzG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,6EAA6E;IAC7E,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,wBAAwB,CAAC;IACjC,sFAAsF;IACtF,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAumBD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAuDzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}