@3driseai/3drise-viewer 0.1.26 → 0.1.28

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 (476) 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/ApollonianGrid.d.ts +25 -0
  25. package/dist/components/ApollonianGrid.d.ts.map +1 -0
  26. package/dist/components/ApollonianGrid.js +80 -0
  27. package/dist/components/Bubbles.d.ts +7 -1
  28. package/dist/components/Bubbles.d.ts.map +1 -1
  29. package/dist/components/Bubbles.js +42 -22
  30. package/dist/components/ChladniGrid.d.ts +8 -4
  31. package/dist/components/ChladniGrid.d.ts.map +1 -1
  32. package/dist/components/ChladniGrid.js +31 -13
  33. package/dist/components/CircuitGrid.d.ts +8 -11
  34. package/dist/components/CircuitGrid.d.ts.map +1 -1
  35. package/dist/components/CircuitGrid.js +31 -13
  36. package/dist/components/CloudsGenerator.d.ts +1 -1
  37. package/dist/components/CloudsGenerator.js +1 -1
  38. package/dist/components/ConformalGrid.d.ts +25 -0
  39. package/dist/components/ConformalGrid.d.ts.map +1 -0
  40. package/dist/components/ConformalGrid.js +97 -0
  41. package/dist/components/ContourGrid.d.ts +8 -14
  42. package/dist/components/ContourGrid.d.ts.map +1 -1
  43. package/dist/components/ContourGrid.js +31 -13
  44. package/dist/components/EffectsGenerator.d.ts +7 -1
  45. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  46. package/dist/components/EffectsGenerator.js +39 -38
  47. package/dist/components/EnvironmentManager.d.ts +4 -4
  48. package/dist/components/EnvironmentManager.d.ts.map +1 -1
  49. package/dist/components/FlowNetGrid.d.ts +8 -4
  50. package/dist/components/FlowNetGrid.d.ts.map +1 -1
  51. package/dist/components/FlowNetGrid.js +31 -13
  52. package/dist/components/FractalGrid.d.ts +8 -12
  53. package/dist/components/FractalGrid.d.ts.map +1 -1
  54. package/dist/components/FractalGrid.js +31 -13
  55. package/dist/components/GirihGrid.d.ts +8 -1
  56. package/dist/components/GirihGrid.d.ts.map +1 -1
  57. package/dist/components/GirihGrid.js +31 -13
  58. package/dist/components/Glyphs.d.ts +7 -1
  59. package/dist/components/Glyphs.d.ts.map +1 -1
  60. package/dist/components/Glyphs.js +40 -34
  61. package/dist/components/GravWaveGrid.d.ts +8 -1
  62. package/dist/components/GravWaveGrid.d.ts.map +1 -1
  63. package/dist/components/GravWaveGrid.js +31 -13
  64. package/dist/components/GridsGenerator.d.ts +9 -3
  65. package/dist/components/GridsGenerator.d.ts.map +1 -1
  66. package/dist/components/GridsGenerator.js +41 -18
  67. package/dist/components/HexGrid.d.ts +8 -10
  68. package/dist/components/HexGrid.d.ts.map +1 -1
  69. package/dist/components/HexGrid.js +31 -13
  70. package/dist/components/HilbertGrid.d.ts +25 -0
  71. package/dist/components/HilbertGrid.d.ts.map +1 -0
  72. package/dist/components/HilbertGrid.js +93 -0
  73. package/dist/components/HyperbolicGrid.d.ts +8 -4
  74. package/dist/components/HyperbolicGrid.d.ts.map +1 -1
  75. package/dist/components/HyperbolicGrid.js +31 -13
  76. package/dist/components/LandscapeBuilder.d.ts +1 -1
  77. package/dist/components/LandscapeBuilder.d.ts.map +1 -1
  78. package/dist/components/LandscapeBuilder.js +1 -1
  79. package/dist/components/LandscapeObject.d.ts +1 -1
  80. package/dist/components/LandscapeObject.d.ts.map +1 -1
  81. package/dist/components/LandscapeObject.js +1 -1
  82. package/dist/components/LensingGrid.d.ts +25 -0
  83. package/dist/components/LensingGrid.d.ts.map +1 -0
  84. package/dist/components/LensingGrid.js +81 -0
  85. package/dist/components/MoireGrid.d.ts +8 -12
  86. package/dist/components/MoireGrid.d.ts.map +1 -1
  87. package/dist/components/MoireGrid.js +31 -13
  88. package/dist/components/ObjectNode.d.ts.map +1 -1
  89. package/dist/components/ObjectNode.js +2 -2
  90. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  91. package/dist/components/ObjectsRenderer.js +37 -3
  92. package/dist/components/OceanBuilder.d.ts +1 -1
  93. package/dist/components/OceanBuilder.js +1 -1
  94. package/dist/components/ParastichyGrid.d.ts +25 -0
  95. package/dist/components/ParastichyGrid.d.ts.map +1 -0
  96. package/dist/components/ParastichyGrid.js +82 -0
  97. package/dist/components/ParticlesGenerator.d.ts.map +1 -1
  98. package/dist/components/ParticlesGenerator.js +6 -0
  99. package/dist/components/PhyllotaxisGrid.d.ts +25 -0
  100. package/dist/components/PhyllotaxisGrid.d.ts.map +1 -0
  101. package/dist/components/PhyllotaxisGrid.js +95 -0
  102. package/dist/components/QuasiGrid.d.ts +8 -11
  103. package/dist/components/QuasiGrid.d.ts.map +1 -1
  104. package/dist/components/QuasiGrid.js +31 -13
  105. package/dist/components/RadarGrid.d.ts +8 -13
  106. package/dist/components/RadarGrid.d.ts.map +1 -1
  107. package/dist/components/RadarGrid.js +31 -13
  108. package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
  109. package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
  110. package/dist/components/ReactionDiffusionGrid.js +33 -139
  111. package/dist/components/SceneBuilder.js +1 -1
  112. package/dist/components/SkySystem.d.ts +1 -1
  113. package/dist/components/SparklesBurst.d.ts +7 -1
  114. package/dist/components/SparklesBurst.d.ts.map +1 -1
  115. package/dist/components/SparklesBurst.js +31 -28
  116. package/dist/components/TerrainBuilder.d.ts +1 -1
  117. package/dist/components/TerrainBuilder.d.ts.map +1 -1
  118. package/dist/components/TerrainBuilder.js +1 -1
  119. package/dist/components/TruchetGrid.d.ts +25 -0
  120. package/dist/components/TruchetGrid.d.ts.map +1 -0
  121. package/dist/components/TruchetGrid.js +82 -0
  122. package/dist/components/VoronoiGrid.d.ts +8 -10
  123. package/dist/components/VoronoiGrid.d.ts.map +1 -1
  124. package/dist/components/VoronoiGrid.js +31 -13
  125. package/dist/components/WallpaperGrid.d.ts +8 -1
  126. package/dist/components/WallpaperGrid.d.ts.map +1 -1
  127. package/dist/components/WallpaperGrid.js +33 -210
  128. package/dist/components/effects/AuraEffect.d.ts +8 -3
  129. package/dist/components/effects/AuraEffect.d.ts.map +1 -1
  130. package/dist/components/effects/AuraEffect.js +49 -24
  131. package/dist/components/effects/AuroraEffect.d.ts +8 -3
  132. package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
  133. package/dist/components/effects/AuroraEffect.js +45 -25
  134. package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
  135. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
  136. package/dist/components/effects/BlackHoleEffect.js +42 -21
  137. package/dist/components/effects/ConstellationEffect.d.ts +8 -3
  138. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
  139. package/dist/components/effects/ConstellationEffect.js +49 -23
  140. package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
  141. package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
  142. package/dist/components/effects/DandelionSeedsEffect.js +19 -9
  143. package/dist/components/effects/DataStreamEffect.d.ts +8 -3
  144. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
  145. package/dist/components/effects/DataStreamEffect.js +54 -26
  146. package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
  147. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
  148. package/dist/components/effects/DnaHelixEffect.js +62 -30
  149. package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
  150. package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
  151. package/dist/components/effects/FallingLeavesEffect.js +19 -9
  152. package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
  153. package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
  154. package/dist/components/effects/FieldLinesEffect.js +30 -20
  155. package/dist/components/effects/Fire.d.ts +8 -3
  156. package/dist/components/effects/Fire.d.ts.map +1 -1
  157. package/dist/components/effects/Fire.js +47 -10
  158. package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
  159. package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
  160. package/dist/components/effects/FireflySwarmEffect.js +19 -9
  161. package/dist/components/effects/Flares.d.ts +10 -3
  162. package/dist/components/effects/Flares.d.ts.map +1 -1
  163. package/dist/components/effects/Flares.js +53 -56
  164. package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
  165. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
  166. package/dist/components/effects/ForcefieldEffect.js +52 -33
  167. package/dist/components/effects/GalaxyEffect.d.ts +7 -2
  168. package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
  169. package/dist/components/effects/GalaxyEffect.js +19 -9
  170. package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
  171. package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
  172. package/dist/components/effects/HarmonicShellEffect.js +30 -22
  173. package/dist/components/effects/HologramEffect.d.ts +8 -3
  174. package/dist/components/effects/HologramEffect.d.ts.map +1 -1
  175. package/dist/components/effects/HologramEffect.js +52 -23
  176. package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
  177. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
  178. package/dist/components/effects/IceCrystalsEffect.js +36 -21
  179. package/dist/components/effects/IceHaloEffect.d.ts +7 -2
  180. package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
  181. package/dist/components/effects/IceHaloEffect.js +19 -9
  182. package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
  183. package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
  184. package/dist/components/effects/LichtenbergEffect.js +19 -9
  185. package/dist/components/effects/LightningEffect.d.ts +8 -3
  186. package/dist/components/effects/LightningEffect.d.ts.map +1 -1
  187. package/dist/components/effects/LightningEffect.js +54 -32
  188. package/dist/components/effects/MoleculesEffect.d.ts +8 -3
  189. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
  190. package/dist/components/effects/MoleculesEffect.js +31 -21
  191. package/dist/components/effects/MurmurationEffect.d.ts +7 -2
  192. package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
  193. package/dist/components/effects/MurmurationEffect.js +19 -9
  194. package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
  195. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
  196. package/dist/components/effects/NeuralNetworkEffect.js +66 -33
  197. package/dist/components/effects/OrbEffect.d.ts +8 -3
  198. package/dist/components/effects/OrbEffect.d.ts.map +1 -1
  199. package/dist/components/effects/OrbEffect.js +89 -42
  200. package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
  201. package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
  202. package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
  203. package/dist/components/effects/PortalEffect.d.ts +8 -3
  204. package/dist/components/effects/PortalEffect.d.ts.map +1 -1
  205. package/dist/components/effects/PortalEffect.js +41 -25
  206. package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
  207. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  208. package/dist/components/effects/ShockwaveEffect.js +19 -9
  209. package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
  210. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
  211. package/dist/components/effects/SmokePlumeEffect.js +30 -20
  212. package/dist/components/effects/SmokeRibbon.d.ts +8 -2
  213. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  214. package/dist/components/effects/SmokeRibbon.js +34 -24
  215. package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
  216. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
  217. package/dist/components/effects/SmokeRingEffect.js +33 -21
  218. package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
  219. package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
  220. package/dist/components/effects/StrangeAttractorEffect.js +30 -20
  221. package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
  222. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
  223. package/dist/components/effects/VolumetricFogEffect.js +38 -20
  224. package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
  225. package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
  226. package/dist/components/effects/WaterCausticsEffect.js +19 -9
  227. package/dist/components/effects/index.d.ts +0 -1
  228. package/dist/components/effects/index.d.ts.map +1 -1
  229. package/dist/components/effects/index.js +0 -1
  230. package/dist/components/index.d.ts +14 -1
  231. package/dist/components/index.d.ts.map +1 -1
  232. package/dist/components/index.js +7 -1
  233. package/dist/components/landscape/LandscapeMesh.js +1 -1
  234. package/dist/components/landscape/types.d.ts +1 -1
  235. package/dist/components/landscape/types.d.ts.map +1 -1
  236. package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
  237. package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
  238. package/dist/components/particles/MagneticBottleParticles.js +618 -0
  239. package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
  240. package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
  241. package/dist/components/particles/ShapeBurstParticles.js +588 -0
  242. package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
  243. package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
  244. package/dist/components/particles/ShapeFlowParticles.js +755 -0
  245. package/dist/components/particles/index.d.ts +6 -0
  246. package/dist/components/particles/index.d.ts.map +1 -1
  247. package/dist/components/particles/index.js +3 -0
  248. package/dist/components/terrain/types.d.ts +1 -1
  249. package/dist/components/terrain/types.d.ts.map +1 -1
  250. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
  251. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  252. package/dist/components/volumetricClouds/types.d.ts +1 -1
  253. package/dist/components/volumetricClouds/types.d.ts.map +1 -1
  254. package/dist/components/water/types.d.ts +1 -1
  255. package/dist/components/water/types.d.ts.map +1 -1
  256. package/dist/hooks/index.d.ts +2 -0
  257. package/dist/hooks/index.d.ts.map +1 -1
  258. package/dist/hooks/index.js +1 -0
  259. package/dist/hooks/useConfigDriver.d.ts +22 -0
  260. package/dist/hooks/useConfigDriver.d.ts.map +1 -0
  261. package/dist/hooks/useConfigDriver.js +43 -0
  262. package/dist/hooks/useConfigLive.d.ts +1 -1
  263. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  264. package/dist/hooks/useLandscapeMaps.d.ts +1 -1
  265. package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
  266. package/dist/hooks/useOceanMaterial.d.ts +1 -1
  267. package/dist/hooks/useThunder.d.ts +1 -1
  268. package/dist/index.d.ts +1 -2
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +1 -2
  271. package/dist/interactions/index.d.ts +2 -1
  272. package/dist/interactions/index.d.ts.map +1 -1
  273. package/dist/interactions/index.js +1 -1
  274. package/dist/interactions/runner.d.ts +18 -3
  275. package/dist/interactions/runner.d.ts.map +1 -1
  276. package/dist/interactions/runner.js +25 -2
  277. package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
  278. package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
  279. package/dist/operations/catalogue/curlSmoke.js +178 -0
  280. package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
  281. package/dist/operations/catalogue/displayImage.js +1 -0
  282. package/dist/operations/catalogue/dissolve.d.ts +3 -0
  283. package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
  284. package/dist/operations/catalogue/dissolve.js +57 -0
  285. package/dist/operations/catalogue/emberAsh.d.ts +3 -0
  286. package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
  287. package/dist/operations/catalogue/emberAsh.js +171 -0
  288. package/dist/operations/catalogue/fade.d.ts.map +1 -1
  289. package/dist/operations/catalogue/fade.js +1 -0
  290. package/dist/operations/catalogue/flip.d.ts +3 -0
  291. package/dist/operations/catalogue/flip.d.ts.map +1 -0
  292. package/dist/operations/catalogue/flip.js +69 -0
  293. package/dist/operations/catalogue/flock.d.ts +3 -0
  294. package/dist/operations/catalogue/flock.d.ts.map +1 -0
  295. package/dist/operations/catalogue/flock.js +163 -0
  296. package/dist/operations/catalogue/focus.d.ts.map +1 -1
  297. package/dist/operations/catalogue/focus.js +1 -0
  298. package/dist/operations/catalogue/frame.d.ts +3 -0
  299. package/dist/operations/catalogue/frame.d.ts.map +1 -0
  300. package/dist/operations/catalogue/frame.js +44 -0
  301. package/dist/operations/catalogue/frost.d.ts +3 -0
  302. package/dist/operations/catalogue/frost.d.ts.map +1 -0
  303. package/dist/operations/catalogue/frost.js +111 -0
  304. package/dist/operations/catalogue/fxInstances.d.ts +21 -0
  305. package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
  306. package/dist/operations/catalogue/fxInstances.js +47 -0
  307. package/dist/operations/catalogue/fxPoints.d.ts +22 -0
  308. package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
  309. package/dist/operations/catalogue/fxPoints.js +70 -0
  310. package/dist/operations/catalogue/glow.d.ts.map +1 -1
  311. package/dist/operations/catalogue/glow.js +2 -1
  312. package/dist/operations/catalogue/heatCracks.d.ts +3 -0
  313. package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
  314. package/dist/operations/catalogue/heatCracks.js +134 -0
  315. package/dist/operations/catalogue/hologram.d.ts +3 -0
  316. package/dist/operations/catalogue/hologram.d.ts.map +1 -0
  317. package/dist/operations/catalogue/hologram.js +118 -0
  318. package/dist/operations/catalogue/inkBloom.d.ts +3 -0
  319. package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
  320. package/dist/operations/catalogue/inkBloom.js +156 -0
  321. package/dist/operations/catalogue/ivy.d.ts +13 -0
  322. package/dist/operations/catalogue/ivy.d.ts.map +1 -0
  323. package/dist/operations/catalogue/ivy.js +469 -0
  324. package/dist/operations/catalogue/jelly.d.ts +3 -0
  325. package/dist/operations/catalogue/jelly.d.ts.map +1 -0
  326. package/dist/operations/catalogue/jelly.js +50 -0
  327. package/dist/operations/catalogue/kintsugi.d.ts +3 -0
  328. package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
  329. package/dist/operations/catalogue/kintsugi.js +173 -0
  330. package/dist/operations/catalogue/lidarScan.d.ts +3 -0
  331. package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
  332. package/dist/operations/catalogue/lidarScan.js +240 -0
  333. package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
  334. package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
  335. package/dist/operations/catalogue/liquidMetal.js +122 -0
  336. package/dist/operations/catalogue/metalize.d.ts +3 -0
  337. package/dist/operations/catalogue/metalize.d.ts.map +1 -0
  338. package/dist/operations/catalogue/metalize.js +135 -0
  339. package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
  340. package/dist/operations/catalogue/moveToFront.js +1 -0
  341. package/dist/operations/catalogue/orbit.d.ts +3 -0
  342. package/dist/operations/catalogue/orbit.d.ts.map +1 -0
  343. package/dist/operations/catalogue/orbit.js +29 -0
  344. package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
  345. package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
  346. package/dist/operations/catalogue/particleSwarm.js +138 -0
  347. package/dist/operations/catalogue/petalPeel.d.ts +3 -0
  348. package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
  349. package/dist/operations/catalogue/petalPeel.js +137 -0
  350. package/dist/operations/catalogue/petrify.d.ts +3 -0
  351. package/dist/operations/catalogue/petrify.d.ts.map +1 -0
  352. package/dist/operations/catalogue/petrify.js +94 -0
  353. package/dist/operations/catalogue/portal.d.ts +3 -0
  354. package/dist/operations/catalogue/portal.d.ts.map +1 -0
  355. package/dist/operations/catalogue/portal.js +224 -0
  356. package/dist/operations/catalogue/print3d.d.ts +3 -0
  357. package/dist/operations/catalogue/print3d.d.ts.map +1 -0
  358. package/dist/operations/catalogue/print3d.js +275 -0
  359. package/dist/operations/catalogue/rainBeads.d.ts +3 -0
  360. package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
  361. package/dist/operations/catalogue/rainBeads.js +223 -0
  362. package/dist/operations/catalogue/restPose.d.ts +21 -0
  363. package/dist/operations/catalogue/restPose.d.ts.map +1 -0
  364. package/dist/operations/catalogue/restPose.js +55 -0
  365. package/dist/operations/catalogue/rimLight.d.ts +3 -0
  366. package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
  367. package/dist/operations/catalogue/rimLight.js +72 -0
  368. package/dist/operations/catalogue/sandErosion.d.ts +3 -0
  369. package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
  370. package/dist/operations/catalogue/sandErosion.js +167 -0
  371. package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
  372. package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
  373. package/dist/operations/catalogue/shaderLayers.js +322 -0
  374. package/dist/operations/catalogue/shatter.d.ts +3 -0
  375. package/dist/operations/catalogue/shatter.d.ts.map +1 -0
  376. package/dist/operations/catalogue/shatter.js +267 -0
  377. package/dist/operations/catalogue/silkDrape.d.ts +3 -0
  378. package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
  379. package/dist/operations/catalogue/silkDrape.js +340 -0
  380. package/dist/operations/catalogue/spin.d.ts +3 -0
  381. package/dist/operations/catalogue/spin.d.ts.map +1 -0
  382. package/dist/operations/catalogue/spin.js +42 -0
  383. package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
  384. package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
  385. package/dist/operations/catalogue/surfaceSample.js +187 -0
  386. package/dist/operations/catalogue/swirl.d.ts +3 -0
  387. package/dist/operations/catalogue/swirl.d.ts.map +1 -0
  388. package/dist/operations/catalogue/swirl.js +69 -0
  389. package/dist/operations/catalogue/teleport.d.ts +3 -0
  390. package/dist/operations/catalogue/teleport.d.ts.map +1 -0
  391. package/dist/operations/catalogue/teleport.js +213 -0
  392. package/dist/operations/catalogue/transitionField.d.ts +124 -0
  393. package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
  394. package/dist/operations/catalogue/transitionField.js +278 -0
  395. package/dist/operations/catalogue/unweave.d.ts +3 -0
  396. package/dist/operations/catalogue/unweave.d.ts.map +1 -0
  397. package/dist/operations/catalogue/unweave.js +233 -0
  398. package/dist/operations/catalogue/visibility.d.ts.map +1 -1
  399. package/dist/operations/catalogue/visibility.js +1 -0
  400. package/dist/operations/catalogue/voxelize.d.ts +3 -0
  401. package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
  402. package/dist/operations/catalogue/voxelize.js +148 -0
  403. package/dist/operations/catalogue/warmup.d.ts +22 -0
  404. package/dist/operations/catalogue/warmup.d.ts.map +1 -0
  405. package/dist/operations/catalogue/warmup.js +106 -0
  406. package/dist/operations/catalogue/zoom.d.ts.map +1 -1
  407. package/dist/operations/catalogue/zoom.js +1 -0
  408. package/dist/operations/index.d.ts +4 -2
  409. package/dist/operations/index.d.ts.map +1 -1
  410. package/dist/operations/index.js +4 -2
  411. package/dist/operations/objectEffects.d.ts +46 -0
  412. package/dist/operations/objectEffects.d.ts.map +1 -0
  413. package/dist/operations/objectEffects.js +136 -0
  414. package/dist/operations/registry.d.ts +7 -2
  415. package/dist/operations/registry.d.ts.map +1 -1
  416. package/dist/operations/registry.js +45 -3
  417. package/dist/operations/runtime.d.ts +40 -2
  418. package/dist/operations/runtime.d.ts.map +1 -1
  419. package/dist/operations/runtime.js +164 -8
  420. package/dist/operations/types.d.ts +29 -3
  421. package/dist/operations/types.d.ts.map +1 -1
  422. package/dist/operations/types.js +6 -0
  423. package/dist/operations/useObjectEffectLayers.d.ts +4 -0
  424. package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
  425. package/dist/operations/useObjectEffectLayers.js +42 -0
  426. package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
  427. package/dist/operations/useOperationsRuntime.js +42 -4
  428. package/dist/presets/landscapePresets.d.ts +1 -1
  429. package/dist/presets/landscapePresets.d.ts.map +1 -1
  430. package/dist/presets/landscapePresets.js +1 -1
  431. package/dist/presets/landscapeTypes.d.ts +1 -1
  432. package/dist/presets/landscapeTypes.d.ts.map +1 -1
  433. package/dist/presets/landscapeTypes.js +1 -1
  434. package/dist/presets/oceanSurfacePresets.d.ts +1 -1
  435. package/dist/presets/terrainPresets.d.ts +1 -1
  436. package/dist/presets/terrainPresets.d.ts.map +1 -1
  437. package/dist/presets/volumetricCloudPresets.d.ts +1 -1
  438. package/dist/types/cloudConfigs.d.ts +2 -309
  439. package/dist/types/cloudConfigs.d.ts.map +1 -1
  440. package/dist/types/cloudConfigs.js +2 -339
  441. package/dist/types/gridConfigs.d.ts +103 -0
  442. package/dist/types/gridConfigs.d.ts.map +1 -1
  443. package/dist/types/index.d.ts +9 -9
  444. package/dist/types/index.d.ts.map +1 -1
  445. package/dist/types/index.js +4 -4
  446. package/dist/types/landscapeConfigs.d.ts +2 -217
  447. package/dist/types/landscapeConfigs.d.ts.map +1 -1
  448. package/dist/types/landscapeConfigs.js +2 -256
  449. package/dist/types/oceanConfigs.d.ts +2 -289
  450. package/dist/types/oceanConfigs.d.ts.map +1 -1
  451. package/dist/types/oceanConfigs.js +2 -380
  452. package/dist/types/terrainConfigs.d.ts +2 -250
  453. package/dist/types/terrainConfigs.d.ts.map +1 -1
  454. package/dist/types/terrainConfigs.js +2 -292
  455. package/dist/utils/cloudUniforms.d.ts +1 -1
  456. package/dist/utils/configAnimations.d.ts +6 -0
  457. package/dist/utils/configAnimations.d.ts.map +1 -1
  458. package/dist/utils/configAnimations.js +14 -0
  459. package/dist/utils/gridConfig.d.ts +19 -0
  460. package/dist/utils/gridConfig.d.ts.map +1 -0
  461. package/dist/utils/gridConfig.js +52 -0
  462. package/dist/utils/handleCloudsAnimations.d.ts +1 -1
  463. package/dist/utils/handleCloudsAnimations.js +1 -1
  464. package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
  465. package/dist/utils/hasHoverAnimation.js +0 -2
  466. package/dist/utils/landscapeUniforms.d.ts +1 -1
  467. package/dist/utils/landscapeUniforms.d.ts.map +1 -1
  468. package/dist/utils/oceanUniforms.d.ts +1 -1
  469. package/dist/utils/particleShape.d.ts +33 -0
  470. package/dist/utils/particleShape.d.ts.map +1 -0
  471. package/dist/utils/particleShape.js +207 -0
  472. package/dist/utils/particleTrails.d.ts.map +1 -1
  473. package/dist/utils/particleTrails.js +29 -14
  474. package/dist/utils/terrainUniforms.d.ts +1 -1
  475. package/dist/utils/terrainUniforms.d.ts.map +1 -1
  476. package/package.json +2 -2
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
- import * as THREE from 'three';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
3
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
4
+ import * as THREE from 'three';
5
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
+ import { DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from "@3driseai/3drise-core";
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * A buoyant smoke plume rising from the top of the host.
9
11
  *
@@ -153,10 +155,27 @@ const plumeFrag = /* glsl */ `
153
155
  gl_FragColor = vec4(col * a, a);
154
156
  }
155
157
  `;
156
- const SmokePlumeEffect = ({ boundingRadius, config, animations, onObjectReady, onObjectDispose }) => {
157
- const { intensity = 1, speed = 1, opacity = 0.6, particleCount = 180, height = 2, spread = 0.5, smokeColor = '#b4b4b8', turbulence = 0.5, heat = 0, wind = 0, } = config;
158
+ /** Knobs that rebuild the particle set: commit only, never live. */
159
+ const STRUCTURAL = ['particleCount'];
160
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyConfig pushes. */
161
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.smokePlume.map((p) => p.value));
162
+ /** The single push point: every config knob reaches its uniform here. */
163
+ function applyConfig(u, c, bound) {
164
+ u.uSpeed.value = c.speed;
165
+ u.uBound.value = bound;
166
+ u.uIntensity.value = c.intensity;
167
+ u.uOpacity.value = c.opacity;
168
+ u.uHeight.value = c.height;
169
+ u.uSpread.value = c.spread;
170
+ u.uTurbulence.value = c.turbulence;
171
+ u.uWind.value = c.wind;
172
+ u.uHeat.value = c.heat;
173
+ u.uSmokeColor.value.set(c.smokeColor);
174
+ }
175
+ const SmokePlumeEffect = ({ boundingRadius, config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
176
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.smokePlume, config), [config]);
177
+ const { particleCount } = cfg;
158
178
  const rootRef = useRef(null);
159
- const animCache = useRef({});
160
179
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
161
180
  // a standalone effect gets boundingRadius 1; guard against an empty host
162
181
  const b = boundingRadius > 0 ? boundingRadius : 1;
@@ -186,22 +205,13 @@ const SmokePlumeEffect = ({ boundingRadius, config, animations, onObjectReady, o
186
205
  return g;
187
206
  }, [particleCount]);
188
207
  useEffect(() => () => geometry.dispose(), [geometry]);
189
- useLayoutEffect(() => {
190
- uniforms.uSpeed.value = speed;
191
- uniforms.uBound.value = b;
192
- uniforms.uIntensity.value = intensity;
193
- uniforms.uOpacity.value = opacity;
194
- uniforms.uHeight.value = height;
195
- uniforms.uSpread.value = spread;
196
- uniforms.uTurbulence.value = turbulence;
197
- uniforms.uWind.value = wind;
198
- uniforms.uHeat.value = heat;
199
- uniforms.uSmokeColor.value.set(smokeColor);
200
- }, [uniforms, speed, b, intensity, opacity, height, spread, turbulence, wind, heat, smokeColor]);
208
+ const push = useCallback((merged) => {
209
+ applyConfig(uniforms, merged, b);
210
+ }, [uniforms, b]);
211
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
212
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
201
213
  useFrame((_, delta) => {
202
214
  uniforms.uTime.value += delta * uniforms.uSpeed.value;
203
- if (animations?.length)
204
- applyGenerativeAnimations(materials, animations, animCache.current, Date.now(), false);
205
215
  });
206
216
  return (_jsx("group", { ref: rootRef, children: _jsx("points", { geometry: geometry, material: materials[0], frustumCulled: false }) }));
207
217
  };
@@ -1,14 +1,20 @@
1
- import type { SmokeRibbonConfig } from '@3driseai/3drise-core';
1
+ import type { AnimationOptions, MouseMoveDomain, SmokeRibbonConfig } from '@3driseai/3drise-core';
2
2
  import type { ObjectReadyProps } from '../../types/objectReady';
3
3
  export interface SmokeRibbonProps extends ObjectReadyProps {
4
4
  config?: SmokeRibbonConfig;
5
5
  boundingRadius?: number;
6
+ /** Scene object id of a standalone effect: the live-edit handle is found by it. */
7
+ id?: string;
8
+ /** Keyframes on this effect's config knobs (animations.effect.animations). */
9
+ keyframes?: AnimationOptions[];
10
+ /** Pointer bindings on this effect's config knobs (mouseMove.effect). */
11
+ mouseMove?: MouseMoveDomain;
6
12
  }
7
13
  /**
8
14
  * Place where you want the smoke to rise from — it climbs the parent's local +Y:
9
15
  *
10
16
  * <SmokeRibbon position={[0, 0, 0]} config={{ planes: 2, twistStart: 0.2 }} />
11
17
  */
12
- declare const SmokeRibbon: ({ config, boundingRadius, onObjectReady, onObjectDispose, ...groupProps }: SmokeRibbonProps) => import("react").JSX.Element;
18
+ declare const SmokeRibbon: ({ config, boundingRadius, id, keyframes, mouseMove, onObjectReady, onObjectDispose, ...groupProps }: SmokeRibbonProps) => import("react").JSX.Element;
13
19
  export default SmokeRibbon;
14
20
  //# sourceMappingURL=SmokeRibbon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SmokeRibbon.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokeRibbon.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,QAAA,MAAM,WAAW,GAAI,2EAAoF,gBAAgB,gCA0DxH,CAAC;AACF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"SmokeRibbon.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokeRibbon.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAIlG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AA2BD;;;;GAIG;AACH,QAAA,MAAM,WAAW,GAAI,qGAA8G,gBAAgB,gCA6ClJ,CAAC;AACF,eAAe,WAAW,CAAC"}
@@ -1,16 +1,40 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { PlaneGeometry } from 'three';
3
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
4
  import { useFrame, useThree } from '@react-three/fiber';
5
- import { SmokeRibbonMaterial } from '@3driseai/3drise-core';
5
+ import { SmokeRibbonMaterial, DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
6
6
  import { useObjectReady } from '../../hooks/useObjectReady.js';
7
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
8
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
9
+ /** Knobs that rebuild the ribbon planes: commit only, never live. */
10
+ const STRUCTURAL = ['width', 'height', 'segmentsPerLength', 'planes'];
11
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyConfig pushes. */
12
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.smokeRibbon.map((p) => p.value));
13
+ /** The single push point: every config knob reaches its uniform here. */
14
+ function applyConfig(material, c) {
15
+ material.u_color.set(c.color);
16
+ material.u_colorTop.set(c.colorTop);
17
+ material.u_speed = c.speed;
18
+ material.u_detail = c.detail;
19
+ material.u_remapLow = c.remapLow;
20
+ material.u_remapHigh = c.remapHigh;
21
+ material.u_edgeX = c.edgeX;
22
+ material.u_edgeY = c.edgeY;
23
+ material.u_density = c.density;
24
+ material.u_twistStrength = c.twistStrength;
25
+ material.u_twistSpeed = c.twistSpeed;
26
+ material.u_twistScale = c.twistScale;
27
+ material.u_twistStart = c.twistStart;
28
+ material.u_windDir.set(c.wind[0], c.wind[1]);
29
+ }
7
30
  /**
8
31
  * Place where you want the smoke to rise from — it climbs the parent's local +Y:
9
32
  *
10
33
  * <SmokeRibbon position={[0, 0, 0]} config={{ planes: 2, twistStart: 0.2 }} />
11
34
  */
12
- const SmokeRibbon = ({ config = {}, boundingRadius = 1, onObjectReady, onObjectDispose, ...groupProps }) => {
13
- const { width = 1.5, height = 5, segmentsPerLength = 12, planes = 2, color = '#f2f2f7', colorTop = '#b3b8c7', speed = 0.18, detail = 1.4, remapLow = 0.38, remapHigh = 1.0, edgeX = 0.4, edgeY = 0.32, density = 1.0, twistStrength = 9, twistSpeed = 0.4, twistScale = 0.9, twistStart = 0.18, wind = [0.15, 0], animate = true, interactive = false, } = config;
35
+ const SmokeRibbon = ({ config = {}, boundingRadius = 1, id, keyframes, mouseMove, onObjectReady, onObjectDispose, ...groupProps }) => {
36
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.smokeRibbon, config), [config]);
37
+ const { width, height, segmentsPerLength, planes, animate, interactive } = cfg;
14
38
  // One material instance shared across the crossed planes -> one set of uniforms.
15
39
  const material = useMemo(() => new SmokeRibbonMaterial(), []);
16
40
  // One subdivided plane, bottom at the origin; reused per crossed copy.
@@ -29,30 +53,16 @@ const SmokeRibbon = ({ config = {}, boundingRadius = 1, onObjectReady, onObjectD
29
53
  return [0, Math.PI / 2];
30
54
  return [0, Math.PI / 3, (2 * Math.PI) / 3];
31
55
  }, [planes]);
32
- // Push the look config onto the shared uniforms whenever it changes.
33
- useLayoutEffect(() => {
34
- material.u_color.set(color);
35
- material.u_colorTop.set(colorTop);
36
- material.u_speed = speed;
37
- material.u_detail = detail;
38
- material.u_remapLow = remapLow;
39
- material.u_remapHigh = remapHigh;
40
- material.u_edgeX = edgeX;
41
- material.u_edgeY = edgeY;
42
- material.u_density = density;
43
- material.u_twistStrength = twistStrength;
44
- material.u_twistSpeed = twistSpeed;
45
- material.u_twistScale = twistScale;
46
- material.u_twistStart = twistStart;
47
- material.u_windDir.set(wind[0], wind[1]);
48
- }, [
49
- material, color, colorTop, speed, detail, remapLow, remapHigh, edgeX, edgeY,
50
- density, twistStrength, twistSpeed, twistScale, twistStart, wind,
51
- ]);
52
56
  const { pointer } = useThree();
53
57
  const hovering = useRef(false);
54
58
  const rootRef = useRef(null);
55
59
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
60
+ // Committed config + live drag + keyframes + pointer, merged into the one push point.
61
+ const push = useCallback((merged) => {
62
+ applyConfig(material, merged);
63
+ }, [material]);
64
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
65
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
56
66
  useFrame(({ clock }) => {
57
67
  if (animate)
58
68
  material.u_time = clock.getElapsedTime();
@@ -1,10 +1,15 @@
1
- import React from 'react';
2
- import type { AnimationOptions, SmokeRingConfig } from '@3driseai/3drise-core';
1
+ import React from "react";
2
+ import type { SmokeRingConfig, AnimationOptions, MouseMoveDomain } from "@3driseai/3drise-core";
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface SmokeRingEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: SmokeRingConfig;
7
- animations?: AnimationOptions[];
7
+ /** Scene object id of a standalone effect: the live-edit handle is found by it. */
8
+ id?: string;
9
+ /** Keyframes on this effect's config knobs (animations.effect.animations). */
10
+ keyframes?: AnimationOptions[];
11
+ /** Pointer bindings on this effect's config knobs (mouseMove.effect). */
12
+ mouseMove?: MouseMoveDomain;
8
13
  }
9
14
  declare const SmokeRingEffect: React.FC<SmokeRingEffectProps>;
10
15
  export default SmokeRingEffect;
@@ -1 +1 @@
1
- {"version":3,"file":"SmokeRingEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokeRingEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAoND,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA+EnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"SmokeRingEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokeRingEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGhG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAwOD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAsEnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
- import * as THREE from 'three';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
3
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
4
+ import * as THREE from 'three';
5
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
+ import { DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from "@3driseai/3drise-core";
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * Physically simulated vortex rings.
9
11
  *
@@ -216,11 +218,29 @@ const ringFrag = /* glsl */ `
216
218
  gl_FragColor = vec4(uSmokeColor * (0.55 + 0.6 * vShade) * a, a);
217
219
  }
218
220
  `;
219
- const SmokeRingEffect = ({ boundingRadius, config, animations, onObjectReady, onObjectDispose }) => {
220
- const { intensity = 1, speed = 1, opacity = 0.65, ringCount = 2, expansionRadius = 3, riseSpeed = 0.5, intervalSeconds = 2.5, smokeColor = '#c4c4c8', thickness = 0.18, leapfrog = true, wobble = 0.5, } = config;
221
+ /** Nothing rebuilds the rings: the particle pool is fixed, and the ring count only gates slots. */
222
+ const STRUCTURAL = [];
223
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
224
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.smokeRing.map((p) => p.value));
225
+ /** The single push point: every config knob reaches its uniform (shader or simulation) here. */
226
+ function applyConfig(u, c) {
227
+ u.uSpeed.value = c.speed;
228
+ u.uIntensity.value = c.intensity;
229
+ u.uOpacity.value = c.opacity;
230
+ u.uSmokeColor.value.set(c.smokeColor);
231
+ u.uWobble.value = c.wobble;
232
+ u.uRingCount.value = c.ringCount;
233
+ u.uExpansionRadius.value = c.expansionRadius;
234
+ u.uRiseSpeed.value = c.riseSpeed;
235
+ u.uIntervalSeconds.value = c.intervalSeconds;
236
+ u.uThickness.value = c.thickness;
237
+ }
238
+ const SmokeRingEffect = ({ boundingRadius, config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
239
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.smokeRing, config), [config]);
221
240
  const rootRef = useRef(null);
222
- const animCache = useRef({});
223
241
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
242
+ // the knobs read per frame (leapfrog), from the last merged config
243
+ const cur = useRef(cfg);
224
244
  // a standalone effect gets boundingRadius 1; guard against an empty host
225
245
  const b = boundingRadius > 0 ? boundingRadius : 1;
226
246
  const uniforms = useMemo(() => ({
@@ -252,21 +272,13 @@ const SmokeRingEffect = ({ boundingRadius, config, animations, onObjectReady, on
252
272
  }, []);
253
273
  useEffect(() => () => geometry.dispose(), [geometry]);
254
274
  const sim = useMemo(() => ({ state: createRingSim(), A: new Float32Array(16), B: new Float32Array(16), params: {} }), []);
255
- useLayoutEffect(() => {
256
- uniforms.uSpeed.value = speed;
257
- uniforms.uIntensity.value = intensity;
258
- uniforms.uOpacity.value = opacity;
259
- uniforms.uSmokeColor.value.set(smokeColor);
260
- uniforms.uWobble.value = wobble;
261
- uniforms.uRingCount.value = ringCount;
262
- uniforms.uExpansionRadius.value = expansionRadius;
263
- uniforms.uRiseSpeed.value = riseSpeed;
264
- uniforms.uIntervalSeconds.value = intervalSeconds;
265
- uniforms.uThickness.value = thickness;
266
- }, [uniforms, speed, intensity, opacity, smokeColor, wobble, ringCount, expansionRadius, riseSpeed, intervalSeconds, thickness]);
275
+ const push = useCallback((merged) => {
276
+ cur.current = merged;
277
+ applyConfig(uniforms, merged);
278
+ }, [uniforms]);
279
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
280
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
267
281
  useFrame((_, delta) => {
268
- if (animations?.length)
269
- applyGenerativeAnimations(materials, animations, animCache.current, Date.now(), false);
270
282
  const p = sim.params;
271
283
  p.bound = b;
272
284
  p.ringCount = uniforms.uRingCount.value;
@@ -274,7 +286,7 @@ const SmokeRingEffect = ({ boundingRadius, config, animations, onObjectReady, on
274
286
  p.riseSpeed = uniforms.uRiseSpeed.value;
275
287
  p.intervalSeconds = uniforms.uIntervalSeconds.value;
276
288
  p.thickness = uniforms.uThickness.value;
277
- p.leapfrog = leapfrog;
289
+ p.leapfrog = !!cur.current.leapfrog;
278
290
  stepRingSim(sim.state, Math.min(delta, 0.05) * uniforms.uSpeed.value, p, sim.A, sim.B);
279
291
  for (let i = 0; i < RING_SLOTS; i++) {
280
292
  uniforms.uRingA.value[i].fromArray(sim.A, i * 4);
@@ -1,10 +1,15 @@
1
- import React from 'react';
2
- import type { AnimationOptions, StrangeAttractorConfig } from '@3driseai/3drise-core';
1
+ import React from "react";
2
+ import type { StrangeAttractorConfig, AnimationOptions, MouseMoveDomain } from "@3driseai/3drise-core";
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface StrangeAttractorEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: StrangeAttractorConfig;
7
- animations?: AnimationOptions[];
7
+ /** Scene object id of a standalone effect: the live-edit handle is found by it. */
8
+ id?: string;
9
+ /** Keyframes on this effect's config knobs (animations.effect.animations). */
10
+ keyframes?: AnimationOptions[];
11
+ /** Pointer bindings on this effect's config knobs (mouseMove.effect). */
12
+ mouseMove?: MouseMoveDomain;
8
13
  }
9
14
  declare const StrangeAttractorEffect: React.FC<StrangeAttractorEffectProps>;
10
15
  export default StrangeAttractorEffect;
@@ -1 +1 @@
1
- {"version":3,"file":"StrangeAttractorEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/StrangeAttractorEffect.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,2BAA4B,SAAQ,gBAAgB;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AA0KD,QAAA,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA8DjE,CAAC;AACF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"StrangeAttractorEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/StrangeAttractorEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,2BAA4B,SAAQ,gBAAgB;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AA8LD,QAAA,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAkDjE,CAAC;AACF,eAAe,sBAAsB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
- import * as THREE from 'three';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
3
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
4
+ import * as THREE from 'three';
5
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
+ import { DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from "@3driseai/3drise-core";
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * Glowing trails of a strange attractor (Lorenz, Aizawa or Thomas), integrated
9
11
  * once on the CPU with RK4. The strands start 0.001 apart and visibly part
@@ -177,11 +179,28 @@ const pointFrag = /* glsl */ `
177
179
  gl_FragColor = vec4(uHeadColor, core * core * vTrail * uOpacity);
178
180
  }
179
181
  `;
180
- const StrangeAttractorEffect = ({ boundingRadius, config, animations, onObjectReady, onObjectDispose }) => {
181
- const { intensity, speed, color, opacity, system = 0, strands = 6, chaos = 0.5, trailLength = 0.18, scale = 1.4, ghostOpacity = 0.07, particleSize = 2.5, headColor = '#fff1c9', } = config;
182
+ /** Knobs that re-integrate the trajectory (system, strand count, chaos): commit only, never live. */
183
+ const STRUCTURAL = ['system', 'strands', 'chaos'];
184
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyConfig pushes. */
185
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.strangeAttractor.map((p) => p.value));
186
+ /** The single push point: every config knob reaches its uniform here. */
187
+ function applyConfig(u, c, bound) {
188
+ u.uSpeed.value = c.speed;
189
+ u.uIntensity.value = c.intensity;
190
+ u.uOpacity.value = c.opacity;
191
+ u.uColor.value.set(c.color);
192
+ u.uHeadColor.value.set(c.headColor);
193
+ u.uTrailLength.value = c.trailLength;
194
+ u.uScale.value = c.scale;
195
+ u.uBound.value = bound;
196
+ u.uGhostOpacity.value = c.ghostOpacity;
197
+ u.uParticleSize.value = c.particleSize;
198
+ }
199
+ const StrangeAttractorEffect = ({ boundingRadius, config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
200
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.strangeAttractor, config), [config]);
201
+ const { system, strands, chaos } = cfg;
182
202
  const rootRef = useRef(null);
183
203
  const spinRef = useRef(null);
184
- const animCache = useRef({});
185
204
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
186
205
  // one uniform set, shared by the trails and the head beads
187
206
  const uniforms = useMemo(() => ({
@@ -205,24 +224,15 @@ const StrangeAttractorEffect = ({ boundingRadius, config, animations, onObjectRe
205
224
  // integration only reruns when the trajectory itself changes
206
225
  const geometry = useMemo(() => buildAttractor(system, strands, chaos), [system, strands, chaos]);
207
226
  useEffect(() => () => { geometry.points.dispose(); geometry.lines.dispose(); }, [geometry]);
208
- useLayoutEffect(() => {
209
- uniforms.uSpeed.value = speed;
210
- uniforms.uIntensity.value = intensity;
211
- uniforms.uOpacity.value = opacity;
212
- uniforms.uColor.value.set(color);
213
- uniforms.uHeadColor.value.set(headColor);
214
- uniforms.uTrailLength.value = trailLength;
215
- uniforms.uScale.value = scale;
216
- uniforms.uBound.value = boundingRadius;
217
- uniforms.uGhostOpacity.value = ghostOpacity;
218
- uniforms.uParticleSize.value = particleSize;
219
- }, [uniforms, speed, intensity, opacity, color, headColor, trailLength, scale, boundingRadius, ghostOpacity, particleSize]);
227
+ const push = useCallback((merged) => {
228
+ applyConfig(uniforms, merged, boundingRadius);
229
+ }, [uniforms, boundingRadius]);
230
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
231
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
220
232
  useFrame((_, delta) => {
221
233
  uniforms.uTime.value += delta * uniforms.uSpeed.value;
222
234
  if (spinRef.current)
223
235
  spinRef.current.rotation.y += delta * 0.1 * uniforms.uSpeed.value;
224
- if (animations?.length)
225
- applyGenerativeAnimations(materials, animations, animCache.current, Date.now(), false);
226
236
  });
227
237
  return (_jsx("group", { ref: rootRef, children: _jsxs("group", { ref: spinRef, children: [_jsx("lineSegments", { geometry: geometry.lines, material: materials[0], frustumCulled: false }), _jsx("points", { geometry: geometry.points, material: materials[1], frustumCulled: false })] }) }));
228
238
  };
@@ -1,10 +1,15 @@
1
- import React from 'react';
2
- import type { AnimationOptions, VolumetricFogConfig } from '@3driseai/3drise-core';
1
+ import React from "react";
2
+ import type { VolumetricFogConfig, AnimationOptions, MouseMoveDomain } from "@3driseai/3drise-core";
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface VolumetricFogEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: VolumetricFogConfig;
7
- animations?: AnimationOptions[];
7
+ /** Scene object id of a standalone effect: the live-edit handle is found by it. */
8
+ id?: string;
9
+ /** Keyframes on this effect's config knobs (animations.effect.animations). */
10
+ keyframes?: AnimationOptions[];
11
+ /** Pointer bindings on this effect's config knobs (mouseMove.effect). */
12
+ mouseMove?: MouseMoveDomain;
8
13
  /** True when the fog surrounds a host object; the host's bounding sphere then blocks the fog behind it. */
9
14
  hasHost?: boolean;
10
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VolumetricFogEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/VolumetricFogEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,2GAA2G;IAC3G,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAgKD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAmF3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"VolumetricFogEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/VolumetricFogEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,2GAA2G;IAC3G,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAoLD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAiF3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
- import * as THREE from 'three';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
3
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
4
+ import * as THREE from 'three';
5
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
+ import { DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from "@3driseai/3drise-core";
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * Ray-marched ground fog around the host.
9
11
  *
@@ -34,6 +36,7 @@ const fogFrag = /* glsl */ `
34
36
  uniform float uSteps;
35
37
  uniform float uDensity;
36
38
  uniform float uDriftSpeed;
39
+ uniform float uDrift; // integrated on the CPU: drift speed changes never jump
37
40
  uniform float uNoiseScale;
38
41
  uniform float uAnisotropy;
39
42
  uniform vec3 uFogColor;
@@ -87,7 +90,7 @@ const fogFrag = /* glsl */ `
87
90
  vec2 qc = (p.xz - 0.5 * (uBoxMin.xz + uBoxMax.xz)) / (0.5 * size.xz);
88
91
  float radial = 1.0 - smoothstep(0.5, 1.0, length(qc));
89
92
  if (layer * radial < 0.001) return 0.0;
90
- float t = uTime * uDriftSpeed;
93
+ float t = uDrift;
91
94
  vec3 q = vec3(qc.x, h * size.y / (0.5 * size.x), qc.y) * uNoiseScale;
92
95
  // domain warp gives rolling, folded banks instead of blobs
93
96
  vec3 w = vec3(fbm3(q * 0.6 + vec3(t * 0.07, 0.0, 0.0), 2), fbm3(q * 0.6 + vec3(5.2, t * 0.05, 1.3), 2), 0.0);
@@ -157,12 +160,28 @@ const fogFrag = /* glsl */ `
157
160
  `;
158
161
  const _inv = new THREE.Matrix4();
159
162
  const _cam = new THREE.Vector3();
160
- const VolumetricFogEffect = ({ boundingRadius, config, animations, hasHost = false, onObjectReady, onObjectDispose }) => {
161
- const { intensity = 1, speed = 0.4, color = '#fff1dc', opacity = 0.9, particleCount = 60, fogRadius = 1.8, driftSpeed = 0.3, fogColor = '#c9d2dc', density = 1, layerHeight = 1.2, anisotropy = 0.55, noiseScale = 1.5, } = config;
163
+ /** Knobs that resize the fog box or set the march step count: commit only, never live. */
164
+ const STRUCTURAL = ['fogRadius', 'layerHeight', 'particleCount'];
165
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyConfig pushes. */
166
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.volumetricFog.map((p) => p.value));
167
+ /** The single push point: every config knob reaches its uniform here. */
168
+ function applyConfig(u, c) {
169
+ u.uSpeed.value = c.speed;
170
+ u.uIntensity.value = c.intensity;
171
+ u.uOpacity.value = c.opacity;
172
+ u.uColor.value.set(c.color);
173
+ u.uFogColor.value.set(c.fogColor);
174
+ u.uDensity.value = c.density;
175
+ u.uDriftSpeed.value = c.driftSpeed;
176
+ u.uNoiseScale.value = c.noiseScale;
177
+ u.uAnisotropy.value = c.anisotropy;
178
+ }
179
+ const VolumetricFogEffect = ({ boundingRadius, config, id, keyframes, mouseMove, hasHost = false, onObjectReady, onObjectDispose }) => {
180
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.volumetricFog, config), [config]);
181
+ const { particleCount, fogRadius, layerHeight } = cfg;
162
182
  const rootRef = useRef(null);
163
183
  const meshRef = useRef(null);
164
184
  const insideRef = useRef(false);
165
- const animCache = useRef({});
166
185
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
167
186
  // a standalone effect gets boundingRadius 1; guard against an empty host
168
187
  const b = boundingRadius > 0 ? boundingRadius : 1;
@@ -171,6 +190,7 @@ const VolumetricFogEffect = ({ boundingRadius, config, animations, hasHost = fal
171
190
  const y0 = -b;
172
191
  const uniforms = useMemo(() => ({
173
192
  uTime: { value: 0 },
193
+ uDrift: { value: 0 },
174
194
  uSpeed: { value: 1 },
175
195
  uIntensity: { value: 1 },
176
196
  uOpacity: { value: 1 },
@@ -196,23 +216,23 @@ const VolumetricFogEffect = ({ boundingRadius, config, animations, hasHost = fal
196
216
  }, [R, H, y0]);
197
217
  useEffect(() => () => geometry.dispose(), [geometry]);
198
218
  const box = useMemo(() => new THREE.Box3(new THREE.Vector3(-R, y0, -R), new THREE.Vector3(R, y0 + H, R)), [R, H, y0]);
219
+ // the box and the march budget follow the committed (structural) knobs
199
220
  useLayoutEffect(() => {
200
- uniforms.uSpeed.value = speed;
201
- uniforms.uIntensity.value = intensity;
202
- uniforms.uOpacity.value = opacity;
203
- uniforms.uColor.value.set(color);
204
- uniforms.uFogColor.value.set(fogColor);
205
- uniforms.uDensity.value = density;
206
- uniforms.uDriftSpeed.value = driftSpeed;
207
- uniforms.uNoiseScale.value = noiseScale;
208
- uniforms.uAnisotropy.value = anisotropy;
209
221
  uniforms.uSteps.value = Math.round(Math.min(Math.max(particleCount, 24), 128) * 0.5);
210
222
  uniforms.uBoxMin.value.copy(box.min);
211
223
  uniforms.uBoxMax.value.copy(box.max);
212
224
  uniforms.uHostRadius.value = hasHost ? b * 0.97 : 0;
213
- }, [uniforms, speed, intensity, opacity, color, fogColor, density, driftSpeed, noiseScale, anisotropy, particleCount, box, hasHost, b]);
225
+ }, [uniforms, particleCount, box, hasHost, b]);
226
+ const push = useCallback((merged) => {
227
+ applyConfig(uniforms, merged);
228
+ }, [uniforms]);
229
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
230
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
214
231
  useFrame((state, delta) => {
215
- uniforms.uTime.value += delta * uniforms.uSpeed.value * 2.5;
232
+ const dt = delta * uniforms.uSpeed.value * 2.5;
233
+ uniforms.uTime.value += dt;
234
+ // integrated, so changing the drift speed never makes the fog jump
235
+ uniforms.uDrift.value += dt * uniforms.uDriftSpeed.value;
216
236
  const mesh = meshRef.current;
217
237
  if (mesh) {
218
238
  mesh.updateWorldMatrix(true, false);
@@ -224,8 +244,6 @@ const VolumetricFogEffect = ({ boundingRadius, config, animations, hasHost = fal
224
244
  materials[0].needsUpdate = true;
225
245
  }
226
246
  }
227
- if (animations?.length)
228
- applyGenerativeAnimations(materials, animations, animCache.current, Date.now(), false);
229
247
  });
230
248
  return (_jsx("group", { ref: rootRef, children: _jsx("mesh", { ref: meshRef, geometry: geometry, material: materials[0] }) }));
231
249
  };
@@ -1,10 +1,15 @@
1
1
  import React from 'react';
2
- import type { AnimationOptions, WaterCausticsConfig } from '@3driseai/3drise-core';
2
+ import type { AnimationOptions, WaterCausticsConfig, MouseMoveDomain } from '@3driseai/3drise-core';
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface WaterCausticsEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: WaterCausticsConfig;
7
- animations?: AnimationOptions[];
7
+ /** Scene object id of a standalone effect: the live-edit handle is found by it. */
8
+ id?: string;
9
+ /** Keyframes on this effect's config knobs (animations.effect.animations). */
10
+ keyframes?: AnimationOptions[];
11
+ /** Pointer bindings on this effect's config knobs (mouseMove.effect). */
12
+ mouseMove?: MouseMoveDomain;
8
13
  /** True when the effect is attached to an object, so it can react to the host. */
9
14
  hasHost?: boolean;
10
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WaterCausticsEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/WaterCausticsEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAkSD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA+B3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"WaterCausticsEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/WaterCausticsEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAIxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAwSD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAqC3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}