@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
@@ -1 +1 @@
1
- {"version":3,"file":"OrbEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/OrbEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,UAAU,cAAe,SAAQ,gBAAgB;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAqLD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4GvC,CAAC;AACF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"OrbEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/OrbEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,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;AAqND,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA8HvC,CAAC;AACF,eAAe,SAAS,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef, useMemo } from 'react';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import { useFrame } from '@react-three/fiber';
4
4
  import * as THREE from 'three';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
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
  // ── Shared vert (normal + viewDir) ────────────────────────────────────────────
8
10
  const sharedVert = /* glsl */ `
9
11
  varying vec3 vNormal;
@@ -26,6 +28,7 @@ const coreFrag = /* glsl */ `
26
28
  uniform float uNoiseAmount;
27
29
  uniform float uIntensity;
28
30
  uniform float uPulseSpeed;
31
+ uniform float uPulsePhase; // integrated on the CPU: pulse speed changes never jump
29
32
 
30
33
  varying vec3 vNormal;
31
34
  varying vec3 vViewDir;
@@ -56,7 +59,7 @@ const coreFrag = /* glsl */ `
56
59
  // Solar flares: ultra-sharp spikes where FBM peaks
57
60
  float flares = smoothstep(0.70, 0.85, f) * 6.0;
58
61
 
59
- float pulse = 0.85 + 0.15 * sin(u_time * uPulseSpeed * 2.3);
62
+ float pulse = 0.85 + 0.15 * sin(uPulsePhase * 2.3);
60
63
  float limb = 1.0 - abs(dot(vNormal, vViewDir)) * 0.4; // limb darkening
61
64
 
62
65
  // Color: white-hot core cells, outer-color cool lanes
@@ -78,6 +81,7 @@ const plasmaFrag = /* glsl */ `
78
81
  uniform float uOpacity;
79
82
  uniform float uNoiseAmount;
80
83
  uniform float uPulseSpeed;
84
+ uniform float uPulsePhase; // integrated on the CPU: pulse speed changes never jump
81
85
  uniform float uIntensity;
82
86
 
83
87
  varying vec3 vNormal;
@@ -116,7 +120,7 @@ const plasmaFrag = /* glsl */ `
116
120
  // Plasma cells: lower threshold dimmer glow
117
121
  float plasma = smoothstep(0.50, 0.65, f) * 0.5;
118
122
 
119
- float pulse = 0.6 + 0.4 * sin(u_time * uPulseSpeed + uLayerIndex * 2.4);
123
+ float pulse = 0.6 + 0.4 * sin(uPulsePhase + uLayerIndex * 2.4);
120
124
 
121
125
  vec3 col = iriCol + iriCol * (tendril * 2.0 + plasma);
122
126
  col = mix(col, uInnerColor, tendril * 0.3); // brightest tendrils go white
@@ -135,6 +139,7 @@ const glowFrag = /* glsl */ `
135
139
  uniform vec3 uOuterColor;
136
140
  uniform float uOpacity;
137
141
  uniform float uPulseSpeed;
142
+ uniform float uPulsePhase; // integrated on the CPU: pulse speed changes never jump
138
143
 
139
144
  varying vec3 vNormal;
140
145
  varying vec3 vViewDir;
@@ -142,7 +147,7 @@ const glowFrag = /* glsl */ `
142
147
  void main() {
143
148
  float ndv = abs(dot(normalize(vNormal), normalize(vViewDir)));
144
149
  float fresnel = pow(1.0 - ndv, 1.2);
145
- float pulse = 0.55 + 0.45 * sin(u_time * uPulseSpeed * 0.7 + 1.2);
150
+ float pulse = 0.55 + 0.45 * sin(uPulsePhase * 0.7 + 1.2);
146
151
  float alpha = fresnel * uOpacity * pulse * 0.5;
147
152
  if (alpha < 0.003) discard;
148
153
  // Slowly cycle hue of the outer glow
@@ -182,72 +187,102 @@ const coronaFrag = /* glsl */ `
182
187
  gl_FragColor = vec4(col * (1.0 + pulse), alpha);
183
188
  }
184
189
  `;
185
- const OrbEffect = ({ boundingRadius, config, animations, onObjectReady, onObjectDispose }) => {
186
- const { coreSize, glowLayers, innerColor, outerColor, coronaEnabled, coronaColor, noiseAmount, pulseSpeed, opacity, speed, intensity } = config;
187
- const startValuesCacheRef = useRef({});
190
+ /** Knobs that rebuild the orb (layer count, radii, the corona mount): commit only, never live. */
191
+ const STRUCTURAL = ['glowLayers', 'coreSize', 'coronaEnabled'];
192
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
193
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.orb.map((p) => p.value));
194
+ const _color = new THREE.Color();
195
+ /** The single push point: every config knob reaches its uniform here. */
196
+ function applyConfig(colors, core, shells, glow, corona, c) {
197
+ _color.set(c.innerColor);
198
+ colors.inner.set(_color.r, _color.g, _color.b);
199
+ _color.set(c.outerColor);
200
+ colors.outer.set(_color.r, _color.g, _color.b);
201
+ _color.set(c.coronaColor);
202
+ colors.corona.set(_color.r, _color.g, _color.b);
203
+ const pulse = c.pulseSpeed * c.speed;
204
+ for (const m of [core, ...shells]) {
205
+ const u = m.uniforms;
206
+ u.uOpacity.value = c.opacity;
207
+ u.uNoiseAmount.value = c.noiseAmount;
208
+ u.uIntensity.value = c.intensity;
209
+ u.uPulseSpeed.value = pulse;
210
+ }
211
+ glow.uniforms.uOpacity.value = c.opacity * 0.6;
212
+ glow.uniforms.uPulseSpeed.value = pulse;
213
+ corona.uniforms.uOpacity.value = c.opacity * 0.85;
214
+ corona.uniforms.uIntensity.value = c.intensity;
215
+ }
216
+ const OrbEffect = ({ boundingRadius, config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
217
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.orb, config), [config]);
218
+ const { coreSize, glowLayers, coronaEnabled } = cfg;
188
219
  const rootRef = useRef(null);
189
220
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
190
- const innerColorVec = useMemo(() => { const c = new THREE.Color(innerColor); return new THREE.Vector3(c.r, c.g, c.b); }, [innerColor]);
191
- const outerColorVec = useMemo(() => { const c = new THREE.Color(outerColor); return new THREE.Vector3(c.r, c.g, c.b); }, [outerColor]);
192
- const coronaColorVec = useMemo(() => { const c = new THREE.Color(coronaColor); return new THREE.Vector3(c.r, c.g, c.b); }, [coronaColor]);
221
+ // the knobs read per frame (speed), from the last merged config
222
+ const cur = useRef(cfg);
223
+ // shared by every material, so one write recolours the whole orb
224
+ const colors = useMemo(() => ({ inner: new THREE.Vector3(), outer: new THREE.Vector3(), corona: new THREE.Vector3() }), []);
193
225
  const coreR = boundingRadius * coreSize;
194
- // Core material — boiling solar surface
226
+ // Core material - boiling solar surface
195
227
  const coreMat = useMemo(() => new THREE.ShaderMaterial({
196
228
  vertexShader: sharedVert,
197
229
  fragmentShader: coreFrag,
198
230
  uniforms: {
199
231
  u_time: { value: 0 },
200
- uInnerColor: { value: innerColorVec },
201
- uOuterColor: { value: outerColorVec },
202
- uOpacity: { value: opacity },
203
- uNoiseAmount: { value: noiseAmount },
204
- uIntensity: { value: intensity },
205
- uPulseSpeed: { value: pulseSpeed * speed },
232
+ uPulsePhase: { value: 0 },
233
+ uInnerColor: { value: colors.inner },
234
+ uOuterColor: { value: colors.outer },
235
+ uOpacity: { value: 1 },
236
+ uNoiseAmount: { value: 0.45 },
237
+ uIntensity: { value: 1 },
238
+ uPulseSpeed: { value: 1 },
206
239
  },
207
240
  transparent: true,
208
241
  depthWrite: false,
209
242
  blending: THREE.AdditiveBlending,
210
- }), [innerColorVec, outerColorVec, opacity, noiseAmount, intensity, pulseSpeed, speed]);
211
- // Plasma shell materials — one per layer
243
+ }), [colors]);
244
+ // Plasma shell materials - one per layer
212
245
  const shellMats = useMemo(() => Array.from({ length: glowLayers }, (_, i) => new THREE.ShaderMaterial({
213
246
  vertexShader: sharedVert,
214
247
  fragmentShader: plasmaFrag,
215
248
  uniforms: {
216
249
  u_time: { value: 0 },
250
+ uPulsePhase: { value: 0 },
217
251
  uLayerIndex: { value: glowLayers > 1 ? i / (glowLayers - 1) : 0 },
218
- uInnerColor: { value: innerColorVec },
219
- uOuterColor: { value: outerColorVec },
220
- uOpacity: { value: opacity },
221
- uNoiseAmount: { value: noiseAmount },
222
- uPulseSpeed: { value: pulseSpeed * speed },
223
- uIntensity: { value: intensity },
252
+ uInnerColor: { value: colors.inner },
253
+ uOuterColor: { value: colors.outer },
254
+ uOpacity: { value: 1 },
255
+ uNoiseAmount: { value: 0.45 },
256
+ uPulseSpeed: { value: 1 },
257
+ uIntensity: { value: 1 },
224
258
  },
225
259
  transparent: true,
226
260
  depthWrite: false,
227
261
  blending: THREE.AdditiveBlending,
228
262
  side: THREE.BackSide,
229
- })), [glowLayers, innerColorVec, outerColorVec, opacity, noiseAmount, pulseSpeed, speed, intensity]);
263
+ })), [glowLayers, colors]);
230
264
  // Outer diffuse glow
231
265
  const glowMat = useMemo(() => new THREE.ShaderMaterial({
232
266
  vertexShader: sharedVert,
233
267
  fragmentShader: glowFrag,
234
268
  uniforms: {
235
269
  u_time: { value: 0 },
236
- uOuterColor: { value: outerColorVec },
237
- uOpacity: { value: opacity * 0.6 },
238
- uPulseSpeed: { value: pulseSpeed * speed },
270
+ uPulsePhase: { value: 0 },
271
+ uOuterColor: { value: colors.outer },
272
+ uOpacity: { value: 0.6 },
273
+ uPulseSpeed: { value: 1 },
239
274
  },
240
275
  transparent: true,
241
276
  depthWrite: false,
242
277
  blending: THREE.AdditiveBlending,
243
278
  side: THREE.BackSide,
244
- }), [outerColorVec, opacity, pulseSpeed, speed]);
245
- // Corona ring geometry — torus with per-vertex angle attribute for color flow
279
+ }), [colors]);
280
+ // Corona ring geometry - torus with per-vertex angle attribute for color flow
246
281
  const { coronaGeo, coronaMat } = useMemo(() => {
247
282
  const tubeSegs = 80;
248
283
  const geo = new THREE.TorusGeometry(coreR * 2.8, coreR * 0.12, 8, tubeSegs);
249
284
  const count = geo.attributes.position.count;
250
- // Per-vertex angle around the ring (0 → 2π)
285
+ // Per-vertex angle around the ring (0 -> 2pi)
251
286
  const angles = new Float32Array(count);
252
287
  // TorusGeometry vertices go around the major circle; approximate angle from XZ
253
288
  const pos = geo.attributes.position;
@@ -260,28 +295,40 @@ const OrbEffect = ({ boundingRadius, config, animations, onObjectReady, onObject
260
295
  fragmentShader: coronaFrag,
261
296
  uniforms: {
262
297
  u_time: { value: 0 },
263
- uCoronaColor: { value: coronaColorVec },
264
- uOpacity: { value: opacity * 0.85 },
265
- uIntensity: { value: intensity },
298
+ uCoronaColor: { value: colors.corona },
299
+ uOpacity: { value: 0.85 },
300
+ uIntensity: { value: 1 },
266
301
  },
267
302
  transparent: true,
268
303
  depthWrite: false,
269
304
  blending: THREE.AdditiveBlending,
270
305
  });
271
306
  return { coronaGeo: geo, coronaMat: mat };
272
- }, [coreR, coronaColorVec, opacity, intensity]);
307
+ }, [coreR, colors]);
308
+ useEffect(() => () => coreMat.dispose(), [coreMat]);
309
+ useEffect(() => () => shellMats.forEach((m) => m.dispose()), [shellMats]);
310
+ useEffect(() => () => glowMat.dispose(), [glowMat]);
311
+ useEffect(() => () => { coronaGeo.dispose(); coronaMat.dispose(); }, [coronaGeo, coronaMat]);
312
+ const push = useCallback((merged) => {
313
+ cur.current = merged;
314
+ applyConfig(colors, coreMat, shellMats, glowMat, coronaMat, merged);
315
+ }, [colors, coreMat, shellMats, glowMat, coronaMat]);
316
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
317
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
273
318
  const coronaGroupRef = useRef(null);
274
319
  const allMats = useMemo(() => [coreMat, ...shellMats, glowMat, coronaMat], [coreMat, shellMats, glowMat, coronaMat]);
275
320
  useFrame((state, delta) => {
276
321
  const t = state.clock.getElapsedTime();
277
- for (const mat of allMats)
322
+ const dt = Math.min(delta, 0.1);
323
+ for (const mat of allMats) {
278
324
  mat.uniforms.u_time.value = t;
325
+ // integrated, so changing the pulse speed never makes the pulse jump
326
+ if (mat.uniforms.uPulsePhase)
327
+ mat.uniforms.uPulsePhase.value += dt * mat.uniforms.uPulseSpeed.value;
328
+ }
279
329
  // Tilt the corona ring and rotate slowly
280
330
  if (coronaGroupRef.current) {
281
- coronaGroupRef.current.rotation.z += delta * speed * 0.4;
282
- }
283
- if (animations?.length) {
284
- applyGenerativeAnimations(allMats, animations, startValuesCacheRef.current, Date.now(), false);
331
+ coronaGroupRef.current.rotation.z += delta * cur.current.speed * 0.4;
285
332
  }
286
333
  });
287
334
  const glowR = coreR * (3.5 + glowLayers * 0.6);
@@ -1,10 +1,15 @@
1
1
  import React from 'react';
2
- import type { AnimationOptions, PlanetaryRingsConfig } from '@3driseai/3drise-core';
2
+ import type { AnimationOptions, PlanetaryRingsConfig, MouseMoveDomain } from '@3driseai/3drise-core';
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface PlanetaryRingsEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: PlanetaryRingsConfig;
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":"PlanetaryRingsEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/PlanetaryRingsEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAqbD,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA+B7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PlanetaryRingsEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/PlanetaryRingsEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAIxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIrG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,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;AA2bD,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAqC7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
5
+ import { EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
6
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * A Saturn-like ring system: Keplerian shear shapes icy clumps, resonant moons open gaps and spiral density waves, and the planet casts a soft shadow. Use for planets, sci-fi, space scenes.
9
11
  *
@@ -414,7 +416,7 @@ function build(u, c, bound, env) {
414
416
  },
415
417
  };
416
418
  }
417
- /** Defaults for every knob, so an older saved config still renders. */
419
+ /** A value for every knob: the base the renderer draws and keyframes interpolate from. */
418
420
  const DEFAULTS = {
419
421
  intensity: 1,
420
422
  speed: 1,
@@ -431,27 +433,35 @@ const DEFAULTS = {
431
433
  gapColor: '#8fa2b6',
432
434
  dustColor: '#ffd3a1',
433
435
  };
434
- const PlanetaryRingsEffect = ({ boundingRadius, config, animations, hasHost = false, onObjectReady, onObjectDispose }) => {
436
+ /** Knobs that rebuild the object: they change on commit, never through the live path. */
437
+ const STRUCTURAL = [];
438
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
439
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.planetaryRings.map((p) => p.value));
440
+ const PlanetaryRingsEffect = ({ boundingRadius, config, id, keyframes, mouseMove, hasHost = false, onObjectReady, onObjectDispose }) => {
435
441
  const rootRef = useRef(null);
436
- const animCache = useRef({});
437
442
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
438
443
  // a standalone effect gets boundingRadius 1
439
444
  const b = boundingRadius > 0 ? boundingRadius : 1;
440
- const cfg = useMemo(() => ({ ...DEFAULTS, ...config }), [config]);
445
+ const cfg = useMemo(() => withConfigDefaults(DEFAULTS, config), [config]);
441
446
  const env = useMemo(() => ({ hasHost: hasHost }), [hasHost]);
442
447
  // uniforms outlive the objects, so keyframe animations survive a rebuild
443
448
  const uniforms = useMemo(() => createUniforms(), []);
444
449
  // rebuilt only when the host size or a structural knob changes
445
- const instance = useMemo(() => build(uniforms, { ...DEFAULTS, ...config }, b, env), [uniforms, b, env]);
450
+ const instance = useMemo(() => build(uniforms, cfg, b, env), [uniforms, b, env]);
446
451
  useEffect(() => () => instance.dispose(), [instance]);
447
452
  useLayoutEffect(() => {
448
453
  applyConfig(uniforms, cfg, b, env);
449
454
  instance.apply(cfg);
450
455
  }, [instance, uniforms, cfg, b, env]);
456
+ // Committed config + live drag + keyframes + pointer, merged into the one push point
457
+ // (the uniforms, then the instance's own cheap per-config step).
458
+ const push = useCallback((merged) => {
459
+ applyConfig(uniforms, merged, b, env);
460
+ instance.apply(merged);
461
+ }, [instance, uniforms, b, env]);
462
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
451
463
  useFrame((state, delta) => {
452
464
  instance.update(Math.min(delta, 0.1), state.camera);
453
- if (animations?.length)
454
- applyGenerativeAnimations(instance.materials, animations, animCache.current, Date.now(), false);
455
465
  });
456
466
  return (_jsx("group", { ref: rootRef, children: _jsx("primitive", { object: instance.object }) }));
457
467
  };
@@ -1,10 +1,15 @@
1
- import React from 'react';
2
- import type { AnimationOptions, PortalConfig } from '@3driseai/3drise-core';
1
+ import React from "react";
2
+ import type { PortalConfig, AnimationOptions, MouseMoveDomain } from "@3driseai/3drise-core";
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface PortalEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: PortalConfig;
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 PortalEffect: React.FC<PortalEffectProps>;
10
15
  export default PortalEffect;
@@ -1 +1 @@
1
- {"version":3,"file":"PortalEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/PortalEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAsND,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyE7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"PortalEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/PortalEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,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;AAgPD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgE7C,CAAC;AAEF,eAAe,YAAY,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
  * A wormhole portal lying under the host.
9
11
  *
@@ -58,6 +60,7 @@ const portalVert = /* glsl */ `
58
60
  const portalFrag = /* glsl */ `
59
61
  uniform float uTime;
60
62
  uniform float uRotationSpeed;
63
+ uniform float uSpin; // integrated on the CPU: rotation speed changes never jump
61
64
  uniform float uSpiralTurns;
62
65
  uniform float uThroatSize;
63
66
  uniform vec3 uInnerGlowColor;
@@ -125,7 +128,7 @@ const portalFrag = /* glsl */ `
125
128
  if (r > 1.0) discard;
126
129
  float theta = atan(vP.y, vP.x);
127
130
  float rt = uThroatSize;
128
- float t = uTime * uRotationSpeed;
131
+ float t = uSpin;
129
132
  float aa = fwidth(r) * 1.5;
130
133
 
131
134
  // ---- throat: the other side, compressed toward the rim like a fisheye.
@@ -166,6 +169,7 @@ const infallVert = /* glsl */ `
166
169
  attribute vec3 aSeed; // x: start angle, y: phase, z: random
167
170
  uniform float uTime;
168
171
  uniform float uRotationSpeed;
172
+ uniform float uSpin; // integrated on the CPU: rotation speed changes never jump
169
173
  uniform float uThroatSize;
170
174
  uniform float uFunnelDepth;
171
175
  uniform float uRadius;
@@ -176,7 +180,7 @@ const infallVert = /* glsl */ `
176
180
  void main(){
177
181
  // Matter spirals in on r = r0 exp(-k tau) with Keplerian angular speed;
178
182
  // the angle is the closed-form integral of Omega = Omega0 r^-1.5.
179
- float life = fract(aSeed.y + uTime * uRotationSpeed * 0.05 * (0.7 + 0.6 * aSeed.z));
183
+ float life = fract(aSeed.y + uSpin * 0.05 * (0.7 + 0.6 * aSeed.z));
180
184
  float r0 = 0.95;
181
185
  float rt = uThroatSize;
182
186
  float k = log(r0 / rt);
@@ -209,15 +213,35 @@ const infallFrag = /* glsl */ `
209
213
  gl_FragColor = vec4(col * a, a);
210
214
  }
211
215
  `;
212
- const PortalEffect = ({ boundingRadius, config, animations, onObjectReady, onObjectDispose }) => {
213
- const { intensity = 1, speed = 1, opacity = 0.95, radius = 1.5, spiralTurns = 6, innerGlowColor = '#e9e4ff', outerGlowColor = '#8800ff', rotationSpeed = 1.2, particleRingEnabled = true, particleCount = 160, throatSize = 0.38, funnelDepth = 0.6, otherSideColor = '#2a6bff', } = config;
216
+ /** Knobs that rebuild the object: commit only, never live. */
217
+ const STRUCTURAL = ['particleCount'];
218
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
219
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.portal.map((p) => p.value));
220
+ /** The single push point: every config knob reaches its uniform here. */
221
+ function applyConfig(u, c, bound) {
222
+ u.uSpeed.value = c.speed;
223
+ u.uBound.value = bound;
224
+ u.uIntensity.value = c.intensity;
225
+ u.uOpacity.value = c.opacity;
226
+ u.uRadius.value = c.radius;
227
+ u.uSpiralTurns.value = c.spiralTurns;
228
+ u.uRotationSpeed.value = c.rotationSpeed;
229
+ u.uThroatSize.value = c.throatSize;
230
+ u.uFunnelDepth.value = c.funnelDepth;
231
+ u.uInnerGlowColor.value.set(c.innerGlowColor);
232
+ u.uOuterGlowColor.value.set(c.outerGlowColor);
233
+ u.uOtherSideColor.value.set(c.otherSideColor);
234
+ }
235
+ const PortalEffect = ({ boundingRadius, config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
236
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.portal, config), [config]);
237
+ const { particleRingEnabled, particleCount } = cfg;
214
238
  const rootRef = useRef(null);
215
- const animCache = useRef({});
216
239
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
217
240
  // a standalone effect gets boundingRadius 1; guard against an empty host
218
241
  const b = boundingRadius > 0 ? boundingRadius : 1;
219
242
  const uniforms = useMemo(() => ({
220
243
  uTime: { value: 0 },
244
+ uSpin: { value: 0 },
221
245
  uSpeed: { value: 1 },
222
246
  uBound: { value: 1 },
223
247
  uIntensity: { value: 1 },
@@ -247,24 +271,16 @@ const PortalEffect = ({ boundingRadius, config, animations, onObjectReady, onObj
247
271
  return g;
248
272
  }, [particleCount]);
249
273
  useEffect(() => () => infallGeometry.dispose(), [infallGeometry]);
250
- useLayoutEffect(() => {
251
- uniforms.uSpeed.value = speed;
252
- uniforms.uBound.value = b;
253
- uniforms.uIntensity.value = intensity;
254
- uniforms.uOpacity.value = opacity;
255
- uniforms.uRadius.value = radius;
256
- uniforms.uSpiralTurns.value = spiralTurns;
257
- uniforms.uRotationSpeed.value = rotationSpeed;
258
- uniforms.uThroatSize.value = throatSize;
259
- uniforms.uFunnelDepth.value = funnelDepth;
260
- uniforms.uInnerGlowColor.value.set(innerGlowColor);
261
- uniforms.uOuterGlowColor.value.set(outerGlowColor);
262
- uniforms.uOtherSideColor.value.set(otherSideColor);
263
- }, [uniforms, speed, b, intensity, opacity, radius, spiralTurns, rotationSpeed, throatSize, funnelDepth, innerGlowColor, outerGlowColor, otherSideColor]);
274
+ const push = useCallback((merged) => {
275
+ applyConfig(uniforms, merged, b);
276
+ }, [uniforms, b]);
277
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
278
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
264
279
  useFrame((_, delta) => {
265
- uniforms.uTime.value += delta * uniforms.uSpeed.value;
266
- if (animations?.length)
267
- applyGenerativeAnimations(materials, animations, animCache.current, Date.now(), false);
280
+ const dt = delta * uniforms.uSpeed.value;
281
+ uniforms.uTime.value += dt;
282
+ // the swirl angle is integrated, so changing the rotation speed never makes it jump
283
+ uniforms.uSpin.value += dt * uniforms.uRotationSpeed.value;
268
284
  });
269
285
  return (_jsx("group", { ref: rootRef, children: _jsxs("group", { rotation: [-Math.PI / 2, 0, 0], position: [0, -b * 0.75, 0], children: [_jsx("mesh", { geometry: discGeometry, material: materials[0], frustumCulled: false }), _jsx("points", { geometry: infallGeometry, material: materials[1], visible: particleRingEnabled, frustumCulled: false })] }) }));
270
286
  };
@@ -1,10 +1,15 @@
1
1
  import React from 'react';
2
- import type { AnimationOptions, ShockwaveConfig } from '@3driseai/3drise-core';
2
+ import type { AnimationOptions, ShockwaveConfig, MouseMoveDomain } from '@3driseai/3drise-core';
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface ShockwaveEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: ShockwaveConfig;
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":"ShockwaveEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/ShockwaveEffect.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;IAChC,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AA4hBD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA+BnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ShockwaveEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/ShockwaveEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAIxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIhG,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,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;AAkiBD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAqCnD,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';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useFrame } from '@react-three/fiber';
5
- import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations.js';
5
+ import { EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
6
+ import { withConfigDefaults } from '../../utils/configAnimations.js';
6
7
  import { useObjectReady } from '../../hooks/useObjectReady.js';
8
+ import { useConfigDriver } from '../../hooks/useConfigDriver.js';
7
9
  /**
8
10
  * A Sedov–Taylor blast wave: a razor-bright front over a compressed shell that bursts out, slows and cools, raising dust and a brief condensation dome. Use for explosions, impacts, sci-fi pulses.
9
11
  *
@@ -514,7 +516,7 @@ function build(u, c, bound, env) {
514
516
  },
515
517
  };
516
518
  }
517
- /** Defaults for every knob, so an older saved config still renders. */
519
+ /** A value for every knob: the base the renderer draws and keyframes interpolate from. */
518
520
  const DEFAULTS = {
519
521
  intensity: 1,
520
522
  speed: 1,
@@ -531,27 +533,35 @@ const DEFAULTS = {
531
533
  dust: 0.5,
532
534
  condensation: 0.3,
533
535
  };
534
- const ShockwaveEffect = ({ boundingRadius, config, animations, hasHost = false, onObjectReady, onObjectDispose }) => {
536
+ /** Knobs that rebuild the object: they change on commit, never through the live path. */
537
+ const STRUCTURAL = [];
538
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
539
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.shockwave.map((p) => p.value));
540
+ const ShockwaveEffect = ({ boundingRadius, config, id, keyframes, mouseMove, hasHost = false, onObjectReady, onObjectDispose }) => {
535
541
  const rootRef = useRef(null);
536
- const animCache = useRef({});
537
542
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
538
543
  // a standalone effect gets boundingRadius 1
539
544
  const b = boundingRadius > 0 ? boundingRadius : 1;
540
- const cfg = useMemo(() => ({ ...DEFAULTS, ...config }), [config]);
545
+ const cfg = useMemo(() => withConfigDefaults(DEFAULTS, config), [config]);
541
546
  const env = useMemo(() => ({ hasHost: hasHost }), [hasHost]);
542
547
  // uniforms outlive the objects, so keyframe animations survive a rebuild
543
548
  const uniforms = useMemo(() => createUniforms(), []);
544
549
  // rebuilt only when the host size or a structural knob changes
545
- const instance = useMemo(() => build(uniforms, { ...DEFAULTS, ...config }, b, env), [uniforms, b, env]);
550
+ const instance = useMemo(() => build(uniforms, cfg, b, env), [uniforms, b, env]);
546
551
  useEffect(() => () => instance.dispose(), [instance]);
547
552
  useLayoutEffect(() => {
548
553
  applyConfig(uniforms, cfg, b, env);
549
554
  instance.apply(cfg);
550
555
  }, [instance, uniforms, cfg, b, env]);
556
+ // Committed config + live drag + keyframes + pointer, merged into the one push point
557
+ // (the uniforms, then the instance's own cheap per-config step).
558
+ const push = useCallback((merged) => {
559
+ applyConfig(uniforms, merged, b, env);
560
+ instance.apply(merged);
561
+ }, [instance, uniforms, b, env]);
562
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
551
563
  useFrame((state, delta) => {
552
564
  instance.update(Math.min(delta, 0.1), state.camera);
553
- if (animations?.length)
554
- applyGenerativeAnimations(instance.materials, animations, animCache.current, Date.now(), false);
555
565
  });
556
566
  return (_jsx("group", { ref: rootRef, children: _jsx("primitive", { object: instance.object }) }));
557
567
  };
@@ -1,10 +1,15 @@
1
- import React from 'react';
2
- import type { AnimationOptions, SmokePlumeConfig } from '@3driseai/3drise-core';
1
+ import React from "react";
2
+ import type { SmokePlumeConfig, AnimationOptions, MouseMoveDomain } from "@3driseai/3drise-core";
3
3
  import type { ObjectReadyProps } from '../../types/objectReady';
4
4
  export interface SmokePlumeEffectProps extends ObjectReadyProps {
5
5
  boundingRadius: number;
6
6
  config: SmokePlumeConfig;
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 SmokePlumeEffect: React.FC<SmokePlumeEffectProps>;
10
15
  export default SmokePlumeEffect;
@@ -1 +1 @@
1
- {"version":3,"file":"SmokePlumeEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokePlumeEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AA4JD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+DrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"SmokePlumeEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/SmokePlumeEffect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,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;AAgLD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAoDrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}