@3driseai/3drise-viewer 0.1.25 → 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 (509) hide show
  1. package/dist/animationsV2/ClipPlayer.d.ts +16 -0
  2. package/dist/animationsV2/ClipPlayer.d.ts.map +1 -0
  3. package/dist/animationsV2/ClipPlayer.js +199 -0
  4. package/dist/animationsV2/ClipsRuntime.d.ts +150 -0
  5. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -0
  6. package/dist/animationsV2/ClipsRuntime.js +707 -0
  7. package/dist/animationsV2/appliers.d.ts +21 -0
  8. package/dist/animationsV2/appliers.d.ts.map +1 -0
  9. package/dist/animationsV2/appliers.js +222 -0
  10. package/dist/animationsV2/clipUtils.d.ts +33 -0
  11. package/dist/animationsV2/clipUtils.d.ts.map +1 -0
  12. package/dist/animationsV2/clipUtils.js +164 -0
  13. package/dist/animationsV2/elementSettings.d.ts +15 -0
  14. package/dist/animationsV2/elementSettings.d.ts.map +1 -0
  15. package/dist/animationsV2/elementSettings.js +16 -0
  16. package/dist/animationsV2/index.d.ts +16 -0
  17. package/dist/animationsV2/index.d.ts.map +1 -0
  18. package/dist/animationsV2/index.js +12 -0
  19. package/dist/animationsV2/nodeTracks.d.ts +13 -0
  20. package/dist/animationsV2/nodeTracks.d.ts.map +1 -0
  21. package/dist/animationsV2/nodeTracks.js +165 -0
  22. package/dist/animationsV2/normalize.d.ts +4 -0
  23. package/dist/animationsV2/normalize.d.ts.map +1 -0
  24. package/dist/animationsV2/normalize.js +60 -0
  25. package/dist/animationsV2/sequenceUtils.d.ts +98 -0
  26. package/dist/animationsV2/sequenceUtils.d.ts.map +1 -0
  27. package/dist/animationsV2/sequenceUtils.js +220 -0
  28. package/dist/animationsV2/types.d.ts +115 -0
  29. package/dist/animationsV2/types.d.ts.map +1 -0
  30. package/dist/animationsV2/types.js +8 -0
  31. package/dist/api/sceneHandle.d.ts +56 -17
  32. package/dist/api/sceneHandle.d.ts.map +1 -1
  33. package/dist/api/sceneHandle.js +154 -77
  34. package/dist/components/AdvancedGrid.d.ts +8 -2
  35. package/dist/components/AdvancedGrid.d.ts.map +1 -1
  36. package/dist/components/AdvancedGrid.js +31 -14
  37. package/dist/components/AnimatedObject.d.ts.map +1 -1
  38. package/dist/components/AnimatedObject.js +7 -5
  39. package/dist/components/Bubbles.d.ts +7 -1
  40. package/dist/components/Bubbles.d.ts.map +1 -1
  41. package/dist/components/Bubbles.js +42 -22
  42. package/dist/components/CameraController.d.ts.map +1 -1
  43. package/dist/components/CameraController.js +0 -44
  44. package/dist/components/ChladniGrid.d.ts +8 -4
  45. package/dist/components/ChladniGrid.d.ts.map +1 -1
  46. package/dist/components/ChladniGrid.js +31 -13
  47. package/dist/components/CircuitGrid.d.ts +8 -11
  48. package/dist/components/CircuitGrid.d.ts.map +1 -1
  49. package/dist/components/CircuitGrid.js +31 -13
  50. package/dist/components/Clouds.d.ts.map +1 -1
  51. package/dist/components/Clouds.js +0 -34
  52. package/dist/components/CloudsGenerator.d.ts +1 -1
  53. package/dist/components/CloudsGenerator.js +1 -1
  54. package/dist/components/ContourGrid.d.ts +8 -14
  55. package/dist/components/ContourGrid.d.ts.map +1 -1
  56. package/dist/components/ContourGrid.js +31 -13
  57. package/dist/components/CreatedObject.d.ts.map +1 -1
  58. package/dist/components/CreatedObject.js +19 -1
  59. package/dist/components/EffectsGenerator.d.ts +7 -1
  60. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  61. package/dist/components/EffectsGenerator.js +39 -38
  62. package/dist/components/EnvironmentManager.d.ts +4 -4
  63. package/dist/components/EnvironmentManager.d.ts.map +1 -1
  64. package/dist/components/EnvironmentManager.js +1 -1
  65. package/dist/components/FlowNetGrid.d.ts +8 -4
  66. package/dist/components/FlowNetGrid.d.ts.map +1 -1
  67. package/dist/components/FlowNetGrid.js +31 -13
  68. package/dist/components/FractalGrid.d.ts +8 -12
  69. package/dist/components/FractalGrid.d.ts.map +1 -1
  70. package/dist/components/FractalGrid.js +31 -13
  71. package/dist/components/GirihGrid.d.ts +8 -1
  72. package/dist/components/GirihGrid.d.ts.map +1 -1
  73. package/dist/components/GirihGrid.js +31 -13
  74. package/dist/components/Glyphs.d.ts +7 -1
  75. package/dist/components/Glyphs.d.ts.map +1 -1
  76. package/dist/components/Glyphs.js +40 -34
  77. package/dist/components/GravWaveGrid.d.ts +8 -1
  78. package/dist/components/GravWaveGrid.d.ts.map +1 -1
  79. package/dist/components/GravWaveGrid.js +31 -13
  80. package/dist/components/GridsGenerator.d.ts +7 -1
  81. package/dist/components/GridsGenerator.d.ts.map +1 -1
  82. package/dist/components/GridsGenerator.js +20 -18
  83. package/dist/components/HexGrid.d.ts +8 -10
  84. package/dist/components/HexGrid.d.ts.map +1 -1
  85. package/dist/components/HexGrid.js +31 -13
  86. package/dist/components/HyperbolicGrid.d.ts +8 -4
  87. package/dist/components/HyperbolicGrid.d.ts.map +1 -1
  88. package/dist/components/HyperbolicGrid.js +31 -13
  89. package/dist/components/LandscapeBuilder.d.ts +1 -1
  90. package/dist/components/LandscapeBuilder.d.ts.map +1 -1
  91. package/dist/components/LandscapeBuilder.js +1 -1
  92. package/dist/components/LandscapeObject.d.ts +1 -1
  93. package/dist/components/LandscapeObject.d.ts.map +1 -1
  94. package/dist/components/LandscapeObject.js +1 -1
  95. package/dist/components/MoireGrid.d.ts +8 -12
  96. package/dist/components/MoireGrid.d.ts.map +1 -1
  97. package/dist/components/MoireGrid.js +31 -13
  98. package/dist/components/ObjectNode.d.ts.map +1 -1
  99. package/dist/components/ObjectNode.js +2 -2
  100. package/dist/components/ObjectsRenderer.d.ts +4 -1
  101. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  102. package/dist/components/ObjectsRenderer.js +57 -3
  103. package/dist/components/Ocean.d.ts.map +1 -1
  104. package/dist/components/Ocean.js +0 -63
  105. package/dist/components/OceanBuilder.d.ts +1 -1
  106. package/dist/components/OceanBuilder.js +1 -1
  107. package/dist/components/ParticlesGenerator.d.ts.map +1 -1
  108. package/dist/components/ParticlesGenerator.js +6 -0
  109. package/dist/components/QuasiGrid.d.ts +8 -11
  110. package/dist/components/QuasiGrid.d.ts.map +1 -1
  111. package/dist/components/QuasiGrid.js +31 -13
  112. package/dist/components/RadarGrid.d.ts +8 -13
  113. package/dist/components/RadarGrid.d.ts.map +1 -1
  114. package/dist/components/RadarGrid.js +31 -13
  115. package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
  116. package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
  117. package/dist/components/ReactionDiffusionGrid.js +33 -139
  118. package/dist/components/SceneBuilder.d.ts.map +1 -1
  119. package/dist/components/SceneBuilder.js +19 -4
  120. package/dist/components/SkyController.d.ts.map +1 -1
  121. package/dist/components/SkyController.js +0 -39
  122. package/dist/components/SkySystem.d.ts +1 -1
  123. package/dist/components/SparklesBurst.d.ts +7 -1
  124. package/dist/components/SparklesBurst.d.ts.map +1 -1
  125. package/dist/components/SparklesBurst.js +31 -28
  126. package/dist/components/Stars.d.ts.map +1 -1
  127. package/dist/components/Stars.js +3 -47
  128. package/dist/components/TerrainBuilder.d.ts +1 -1
  129. package/dist/components/TerrainBuilder.d.ts.map +1 -1
  130. package/dist/components/TerrainBuilder.js +1 -1
  131. package/dist/components/VoronoiGrid.d.ts +8 -10
  132. package/dist/components/VoronoiGrid.d.ts.map +1 -1
  133. package/dist/components/VoronoiGrid.js +31 -13
  134. package/dist/components/WallpaperGrid.d.ts +8 -1
  135. package/dist/components/WallpaperGrid.d.ts.map +1 -1
  136. package/dist/components/WallpaperGrid.js +33 -210
  137. package/dist/components/effects/AuraEffect.d.ts +8 -3
  138. package/dist/components/effects/AuraEffect.d.ts.map +1 -1
  139. package/dist/components/effects/AuraEffect.js +49 -24
  140. package/dist/components/effects/AuroraEffect.d.ts +8 -3
  141. package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
  142. package/dist/components/effects/AuroraEffect.js +45 -25
  143. package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
  144. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
  145. package/dist/components/effects/BlackHoleEffect.js +42 -21
  146. package/dist/components/effects/ConstellationEffect.d.ts +8 -3
  147. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
  148. package/dist/components/effects/ConstellationEffect.js +49 -23
  149. package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
  150. package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
  151. package/dist/components/effects/DandelionSeedsEffect.js +19 -9
  152. package/dist/components/effects/DataStreamEffect.d.ts +8 -3
  153. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
  154. package/dist/components/effects/DataStreamEffect.js +54 -26
  155. package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
  156. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
  157. package/dist/components/effects/DnaHelixEffect.js +62 -30
  158. package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
  159. package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
  160. package/dist/components/effects/FallingLeavesEffect.js +19 -9
  161. package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
  162. package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
  163. package/dist/components/effects/FieldLinesEffect.js +30 -20
  164. package/dist/components/effects/Fire.d.ts +8 -3
  165. package/dist/components/effects/Fire.d.ts.map +1 -1
  166. package/dist/components/effects/Fire.js +47 -10
  167. package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
  168. package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
  169. package/dist/components/effects/FireflySwarmEffect.js +19 -9
  170. package/dist/components/effects/Flares.d.ts +10 -3
  171. package/dist/components/effects/Flares.d.ts.map +1 -1
  172. package/dist/components/effects/Flares.js +53 -56
  173. package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
  174. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
  175. package/dist/components/effects/ForcefieldEffect.js +52 -33
  176. package/dist/components/effects/GalaxyEffect.d.ts +7 -2
  177. package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
  178. package/dist/components/effects/GalaxyEffect.js +19 -9
  179. package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
  180. package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
  181. package/dist/components/effects/HarmonicShellEffect.js +30 -22
  182. package/dist/components/effects/HologramEffect.d.ts +8 -3
  183. package/dist/components/effects/HologramEffect.d.ts.map +1 -1
  184. package/dist/components/effects/HologramEffect.js +52 -23
  185. package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
  186. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
  187. package/dist/components/effects/IceCrystalsEffect.js +36 -21
  188. package/dist/components/effects/IceHaloEffect.d.ts +7 -2
  189. package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
  190. package/dist/components/effects/IceHaloEffect.js +19 -9
  191. package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
  192. package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
  193. package/dist/components/effects/LichtenbergEffect.js +19 -9
  194. package/dist/components/effects/LightningEffect.d.ts +8 -3
  195. package/dist/components/effects/LightningEffect.d.ts.map +1 -1
  196. package/dist/components/effects/LightningEffect.js +54 -32
  197. package/dist/components/effects/MoleculesEffect.d.ts +8 -3
  198. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
  199. package/dist/components/effects/MoleculesEffect.js +31 -21
  200. package/dist/components/effects/MurmurationEffect.d.ts +7 -2
  201. package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
  202. package/dist/components/effects/MurmurationEffect.js +19 -9
  203. package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
  204. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
  205. package/dist/components/effects/NeuralNetworkEffect.js +66 -33
  206. package/dist/components/effects/OrbEffect.d.ts +8 -3
  207. package/dist/components/effects/OrbEffect.d.ts.map +1 -1
  208. package/dist/components/effects/OrbEffect.js +89 -42
  209. package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
  210. package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
  211. package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
  212. package/dist/components/effects/PortalEffect.d.ts +8 -3
  213. package/dist/components/effects/PortalEffect.d.ts.map +1 -1
  214. package/dist/components/effects/PortalEffect.js +41 -25
  215. package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
  216. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  217. package/dist/components/effects/ShockwaveEffect.js +19 -9
  218. package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
  219. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
  220. package/dist/components/effects/SmokePlumeEffect.js +30 -20
  221. package/dist/components/effects/SmokeRibbon.d.ts +8 -2
  222. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  223. package/dist/components/effects/SmokeRibbon.js +34 -24
  224. package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
  225. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
  226. package/dist/components/effects/SmokeRingEffect.js +33 -21
  227. package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
  228. package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
  229. package/dist/components/effects/StrangeAttractorEffect.js +30 -20
  230. package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
  231. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
  232. package/dist/components/effects/VolumetricFogEffect.js +38 -20
  233. package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
  234. package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
  235. package/dist/components/effects/WaterCausticsEffect.js +19 -9
  236. package/dist/components/effects/index.d.ts +0 -1
  237. package/dist/components/effects/index.d.ts.map +1 -1
  238. package/dist/components/effects/index.js +0 -1
  239. package/dist/components/index.d.ts +0 -1
  240. package/dist/components/index.d.ts.map +1 -1
  241. package/dist/components/index.js +0 -1
  242. package/dist/components/landscape/LandscapeMesh.js +1 -1
  243. package/dist/components/landscape/types.d.ts +1 -1
  244. package/dist/components/landscape/types.d.ts.map +1 -1
  245. package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
  246. package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
  247. package/dist/components/particles/MagneticBottleParticles.js +618 -0
  248. package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
  249. package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
  250. package/dist/components/particles/ShapeBurstParticles.js +588 -0
  251. package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
  252. package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
  253. package/dist/components/particles/ShapeFlowParticles.js +755 -0
  254. package/dist/components/particles/index.d.ts +6 -0
  255. package/dist/components/particles/index.d.ts.map +1 -1
  256. package/dist/components/particles/index.js +3 -0
  257. package/dist/components/terrain/TerrainSurface.d.ts.map +1 -1
  258. package/dist/components/terrain/TerrainSurface.js +0 -5
  259. package/dist/components/terrain/types.d.ts +1 -1
  260. package/dist/components/terrain/types.d.ts.map +1 -1
  261. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
  262. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  263. package/dist/components/volumetricClouds/VolumetricCloudsPass.js +0 -6
  264. package/dist/components/volumetricClouds/types.d.ts +1 -1
  265. package/dist/components/volumetricClouds/types.d.ts.map +1 -1
  266. package/dist/components/water/types.d.ts +1 -1
  267. package/dist/components/water/types.d.ts.map +1 -1
  268. package/dist/constants.d.ts +1 -1
  269. package/dist/constants.d.ts.map +1 -1
  270. package/dist/constants.js +1 -1
  271. package/dist/hooks/index.d.ts +2 -2
  272. package/dist/hooks/index.d.ts.map +1 -1
  273. package/dist/hooks/index.js +1 -2
  274. package/dist/hooks/useConfigDriver.d.ts +22 -0
  275. package/dist/hooks/useConfigDriver.d.ts.map +1 -0
  276. package/dist/hooks/useConfigDriver.js +43 -0
  277. package/dist/hooks/useConfigLive.d.ts +1 -1
  278. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  279. package/dist/hooks/useInteraction.d.ts +6 -7
  280. package/dist/hooks/useInteraction.d.ts.map +1 -1
  281. package/dist/hooks/useInteraction.js +87 -268
  282. package/dist/hooks/useLandscapeMaps.d.ts +1 -1
  283. package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
  284. package/dist/hooks/useObjectAnimation.d.ts.map +1 -1
  285. package/dist/hooks/useObjectAnimation.js +0 -2
  286. package/dist/hooks/useOceanMaterial.d.ts +1 -1
  287. package/dist/hooks/useOceanMaterial.d.ts.map +1 -1
  288. package/dist/hooks/useOceanMaterial.js +0 -5
  289. package/dist/hooks/useRuntimeSettings.d.ts +1 -1
  290. package/dist/hooks/useRuntimeSettings.js +1 -1
  291. package/dist/hooks/useThunder.d.ts +1 -1
  292. package/dist/index.d.ts +6 -4
  293. package/dist/index.d.ts.map +1 -1
  294. package/dist/index.js +4 -2
  295. package/dist/interactions/index.d.ts +4 -0
  296. package/dist/interactions/index.d.ts.map +1 -0
  297. package/dist/interactions/index.js +1 -0
  298. package/dist/interactions/runner.d.ts +24 -0
  299. package/dist/interactions/runner.d.ts.map +1 -0
  300. package/dist/interactions/runner.js +46 -0
  301. package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
  302. package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
  303. package/dist/operations/catalogue/curlSmoke.js +178 -0
  304. package/dist/operations/catalogue/displayImage.d.ts +3 -0
  305. package/dist/operations/catalogue/displayImage.d.ts.map +1 -0
  306. package/dist/operations/catalogue/displayImage.js +40 -0
  307. package/dist/operations/catalogue/dissolve.d.ts +3 -0
  308. package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
  309. package/dist/operations/catalogue/dissolve.js +57 -0
  310. package/dist/operations/catalogue/emberAsh.d.ts +3 -0
  311. package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
  312. package/dist/operations/catalogue/emberAsh.js +171 -0
  313. package/dist/operations/catalogue/fade.d.ts +3 -0
  314. package/dist/operations/catalogue/fade.d.ts.map +1 -0
  315. package/dist/operations/catalogue/fade.js +45 -0
  316. package/dist/operations/catalogue/flip.d.ts +3 -0
  317. package/dist/operations/catalogue/flip.d.ts.map +1 -0
  318. package/dist/operations/catalogue/flip.js +69 -0
  319. package/dist/operations/catalogue/flock.d.ts +3 -0
  320. package/dist/operations/catalogue/flock.d.ts.map +1 -0
  321. package/dist/operations/catalogue/flock.js +163 -0
  322. package/dist/operations/catalogue/focus.d.ts +3 -0
  323. package/dist/operations/catalogue/focus.d.ts.map +1 -0
  324. package/dist/operations/catalogue/focus.js +23 -0
  325. package/dist/operations/catalogue/frame.d.ts +3 -0
  326. package/dist/operations/catalogue/frame.d.ts.map +1 -0
  327. package/dist/operations/catalogue/frame.js +44 -0
  328. package/dist/operations/catalogue/frost.d.ts +3 -0
  329. package/dist/operations/catalogue/frost.d.ts.map +1 -0
  330. package/dist/operations/catalogue/frost.js +111 -0
  331. package/dist/operations/catalogue/fxInstances.d.ts +21 -0
  332. package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
  333. package/dist/operations/catalogue/fxInstances.js +47 -0
  334. package/dist/operations/catalogue/fxPoints.d.ts +22 -0
  335. package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
  336. package/dist/operations/catalogue/fxPoints.js +70 -0
  337. package/dist/operations/catalogue/glow.d.ts +3 -0
  338. package/dist/operations/catalogue/glow.d.ts.map +1 -0
  339. package/dist/operations/catalogue/glow.js +50 -0
  340. package/dist/operations/catalogue/heatCracks.d.ts +3 -0
  341. package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
  342. package/dist/operations/catalogue/heatCracks.js +134 -0
  343. package/dist/operations/catalogue/hologram.d.ts +3 -0
  344. package/dist/operations/catalogue/hologram.d.ts.map +1 -0
  345. package/dist/operations/catalogue/hologram.js +118 -0
  346. package/dist/operations/catalogue/inkBloom.d.ts +3 -0
  347. package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
  348. package/dist/operations/catalogue/inkBloom.js +156 -0
  349. package/dist/operations/catalogue/ivy.d.ts +13 -0
  350. package/dist/operations/catalogue/ivy.d.ts.map +1 -0
  351. package/dist/operations/catalogue/ivy.js +469 -0
  352. package/dist/operations/catalogue/jelly.d.ts +3 -0
  353. package/dist/operations/catalogue/jelly.d.ts.map +1 -0
  354. package/dist/operations/catalogue/jelly.js +50 -0
  355. package/dist/operations/catalogue/kintsugi.d.ts +3 -0
  356. package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
  357. package/dist/operations/catalogue/kintsugi.js +173 -0
  358. package/dist/operations/catalogue/lidarScan.d.ts +3 -0
  359. package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
  360. package/dist/operations/catalogue/lidarScan.js +240 -0
  361. package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
  362. package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
  363. package/dist/operations/catalogue/liquidMetal.js +122 -0
  364. package/dist/operations/catalogue/materialFx.d.ts +6 -0
  365. package/dist/operations/catalogue/materialFx.d.ts.map +1 -0
  366. package/dist/operations/catalogue/materialFx.js +13 -0
  367. package/dist/operations/catalogue/metalize.d.ts +3 -0
  368. package/dist/operations/catalogue/metalize.d.ts.map +1 -0
  369. package/dist/operations/catalogue/metalize.js +135 -0
  370. package/dist/operations/catalogue/moveToFront.d.ts +3 -0
  371. package/dist/operations/catalogue/moveToFront.d.ts.map +1 -0
  372. package/dist/operations/catalogue/moveToFront.js +26 -0
  373. package/dist/operations/catalogue/orbit.d.ts +3 -0
  374. package/dist/operations/catalogue/orbit.d.ts.map +1 -0
  375. package/dist/operations/catalogue/orbit.js +29 -0
  376. package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
  377. package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
  378. package/dist/operations/catalogue/particleSwarm.js +138 -0
  379. package/dist/operations/catalogue/petalPeel.d.ts +3 -0
  380. package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
  381. package/dist/operations/catalogue/petalPeel.js +137 -0
  382. package/dist/operations/catalogue/petrify.d.ts +3 -0
  383. package/dist/operations/catalogue/petrify.d.ts.map +1 -0
  384. package/dist/operations/catalogue/petrify.js +94 -0
  385. package/dist/operations/catalogue/portal.d.ts +3 -0
  386. package/dist/operations/catalogue/portal.d.ts.map +1 -0
  387. package/dist/operations/catalogue/portal.js +224 -0
  388. package/dist/operations/catalogue/print3d.d.ts +3 -0
  389. package/dist/operations/catalogue/print3d.d.ts.map +1 -0
  390. package/dist/operations/catalogue/print3d.js +275 -0
  391. package/dist/operations/catalogue/rainBeads.d.ts +3 -0
  392. package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
  393. package/dist/operations/catalogue/rainBeads.js +223 -0
  394. package/dist/operations/catalogue/restPose.d.ts +21 -0
  395. package/dist/operations/catalogue/restPose.d.ts.map +1 -0
  396. package/dist/operations/catalogue/restPose.js +55 -0
  397. package/dist/operations/catalogue/rimLight.d.ts +3 -0
  398. package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
  399. package/dist/operations/catalogue/rimLight.js +72 -0
  400. package/dist/operations/catalogue/sandErosion.d.ts +3 -0
  401. package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
  402. package/dist/operations/catalogue/sandErosion.js +167 -0
  403. package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
  404. package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
  405. package/dist/operations/catalogue/shaderLayers.js +322 -0
  406. package/dist/operations/catalogue/shatter.d.ts +3 -0
  407. package/dist/operations/catalogue/shatter.d.ts.map +1 -0
  408. package/dist/operations/catalogue/shatter.js +267 -0
  409. package/dist/operations/catalogue/silkDrape.d.ts +3 -0
  410. package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
  411. package/dist/operations/catalogue/silkDrape.js +340 -0
  412. package/dist/operations/catalogue/spin.d.ts +3 -0
  413. package/dist/operations/catalogue/spin.d.ts.map +1 -0
  414. package/dist/operations/catalogue/spin.js +42 -0
  415. package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
  416. package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
  417. package/dist/operations/catalogue/surfaceSample.js +187 -0
  418. package/dist/operations/catalogue/swirl.d.ts +3 -0
  419. package/dist/operations/catalogue/swirl.d.ts.map +1 -0
  420. package/dist/operations/catalogue/swirl.js +69 -0
  421. package/dist/operations/catalogue/teleport.d.ts +3 -0
  422. package/dist/operations/catalogue/teleport.d.ts.map +1 -0
  423. package/dist/operations/catalogue/teleport.js +213 -0
  424. package/dist/operations/catalogue/transitionField.d.ts +124 -0
  425. package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
  426. package/dist/operations/catalogue/transitionField.js +278 -0
  427. package/dist/operations/catalogue/unweave.d.ts +3 -0
  428. package/dist/operations/catalogue/unweave.d.ts.map +1 -0
  429. package/dist/operations/catalogue/unweave.js +233 -0
  430. package/dist/operations/catalogue/visibility.d.ts +3 -0
  431. package/dist/operations/catalogue/visibility.d.ts.map +1 -0
  432. package/dist/operations/catalogue/visibility.js +25 -0
  433. package/dist/operations/catalogue/voxelize.d.ts +3 -0
  434. package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
  435. package/dist/operations/catalogue/voxelize.js +148 -0
  436. package/dist/operations/catalogue/warmup.d.ts +22 -0
  437. package/dist/operations/catalogue/warmup.d.ts.map +1 -0
  438. package/dist/operations/catalogue/warmup.js +106 -0
  439. package/dist/operations/catalogue/zoom.d.ts +3 -0
  440. package/dist/operations/catalogue/zoom.d.ts.map +1 -0
  441. package/dist/operations/catalogue/zoom.js +33 -0
  442. package/dist/operations/index.d.ts +7 -0
  443. package/dist/operations/index.d.ts.map +1 -0
  444. package/dist/operations/index.js +6 -0
  445. package/dist/operations/objectEffects.d.ts +46 -0
  446. package/dist/operations/objectEffects.d.ts.map +1 -0
  447. package/dist/operations/objectEffects.js +136 -0
  448. package/dist/operations/registry.d.ts +16 -0
  449. package/dist/operations/registry.d.ts.map +1 -0
  450. package/dist/operations/registry.js +63 -0
  451. package/dist/operations/runtime.d.ts +60 -0
  452. package/dist/operations/runtime.d.ts.map +1 -0
  453. package/dist/operations/runtime.js +317 -0
  454. package/dist/operations/types.d.ts +122 -0
  455. package/dist/operations/types.d.ts.map +1 -0
  456. package/dist/operations/types.js +9 -0
  457. package/dist/operations/useObjectEffectLayers.d.ts +4 -0
  458. package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
  459. package/dist/operations/useObjectEffectLayers.js +42 -0
  460. package/dist/operations/useOperationsRuntime.d.ts +3 -0
  461. package/dist/operations/useOperationsRuntime.d.ts.map +1 -0
  462. package/dist/operations/useOperationsRuntime.js +69 -0
  463. package/dist/presets/landscapePresets.d.ts +1 -1
  464. package/dist/presets/landscapePresets.d.ts.map +1 -1
  465. package/dist/presets/landscapePresets.js +1 -1
  466. package/dist/presets/landscapeTypes.d.ts +1 -1
  467. package/dist/presets/landscapeTypes.d.ts.map +1 -1
  468. package/dist/presets/landscapeTypes.js +1 -1
  469. package/dist/presets/oceanSurfacePresets.d.ts +1 -1
  470. package/dist/presets/terrainPresets.d.ts +1 -1
  471. package/dist/presets/terrainPresets.d.ts.map +1 -1
  472. package/dist/presets/volumetricCloudPresets.d.ts +1 -1
  473. package/dist/types/cloudConfigs.d.ts +2 -309
  474. package/dist/types/cloudConfigs.d.ts.map +1 -1
  475. package/dist/types/cloudConfigs.js +2 -339
  476. package/dist/types/index.d.ts +8 -8
  477. package/dist/types/index.d.ts.map +1 -1
  478. package/dist/types/index.js +4 -4
  479. package/dist/types/landscapeConfigs.d.ts +2 -217
  480. package/dist/types/landscapeConfigs.d.ts.map +1 -1
  481. package/dist/types/landscapeConfigs.js +2 -256
  482. package/dist/types/oceanConfigs.d.ts +2 -289
  483. package/dist/types/oceanConfigs.d.ts.map +1 -1
  484. package/dist/types/oceanConfigs.js +2 -380
  485. package/dist/types/terrainConfigs.d.ts +2 -250
  486. package/dist/types/terrainConfigs.d.ts.map +1 -1
  487. package/dist/types/terrainConfigs.js +2 -292
  488. package/dist/utils/cloudUniforms.d.ts +1 -1
  489. package/dist/utils/configAnimations.d.ts +6 -0
  490. package/dist/utils/configAnimations.d.ts.map +1 -1
  491. package/dist/utils/configAnimations.js +14 -0
  492. package/dist/utils/gridConfig.d.ts +19 -0
  493. package/dist/utils/gridConfig.d.ts.map +1 -0
  494. package/dist/utils/gridConfig.js +52 -0
  495. package/dist/utils/handleCloudsAnimations.d.ts +1 -1
  496. package/dist/utils/handleCloudsAnimations.js +1 -1
  497. package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
  498. package/dist/utils/hasHoverAnimation.js +0 -2
  499. package/dist/utils/landscapeUniforms.d.ts +1 -1
  500. package/dist/utils/landscapeUniforms.d.ts.map +1 -1
  501. package/dist/utils/oceanUniforms.d.ts +1 -1
  502. package/dist/utils/particleShape.d.ts +33 -0
  503. package/dist/utils/particleShape.d.ts.map +1 -0
  504. package/dist/utils/particleShape.js +207 -0
  505. package/dist/utils/particleTrails.d.ts.map +1 -1
  506. package/dist/utils/particleTrails.js +29 -14
  507. package/dist/utils/terrainUniforms.d.ts +1 -1
  508. package/dist/utils/terrainUniforms.d.ts.map +1 -1
  509. package/package.json +2 -2
@@ -1,10 +1,16 @@
1
1
  import type { Object3D } from 'three';
2
2
  import React from "react";
3
- import type { GenerativeEffectSettings } from "@3driseai/3drise-core";
3
+ import type { AnimationOptions, GenerativeEffectSettings, MouseMoveDomain } from "@3driseai/3drise-core";
4
4
  import type { ObjectReadyProps } from '../types/objectReady';
5
5
  export interface EffectsGeneratorProps extends ObjectReadyProps {
6
6
  settings: GenerativeEffectSettings;
7
7
  object?: Object3D | null;
8
+ /** Scene object id of a standalone effect (type 'effect'): the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on the effect's config knobs (the object's animations.effect.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on the effect's config knobs (the object's mouseMove.effect). */
13
+ mouseMove?: MouseMoveDomain;
8
14
  }
9
15
  declare const EffectsGenerator: React.FC<EffectsGeneratorProps>;
10
16
  export default EffectsGenerator;
@@ -1 +1 @@
1
- {"version":3,"file":"EffectsGenerator.d.ts","sourceRoot":"","sources":["../../src/components/EffectsGenerator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAqCtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B;AAGD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAsDrD,CAAC;AACF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"EffectsGenerator.d.ts","sourceRoot":"","sources":["../../src/components/EffectsGenerator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAqCtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,mGAAmG;IACnG,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0FAA0F;IAC1F,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qFAAqF;IACrF,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAGD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAuDrD,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -37,7 +37,7 @@ import IceHaloEffect from './effects/IceHaloEffect.js';
37
37
  import FallingLeavesEffect from './effects/FallingLeavesEffect.js';
38
38
  import LichtenbergEffect from './effects/LichtenbergEffect.js';
39
39
  import DandelionSeedsEffect from './effects/DandelionSeedsEffect.js';
40
- const EffectsGenerator = ({ settings, object, onObjectReady, onObjectDispose }) => {
40
+ const EffectsGenerator = ({ settings, object, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
41
41
  const { config } = settings;
42
42
  const boundingRadius = useMemo(() => {
43
43
  if (!object)
@@ -49,45 +49,46 @@ const EffectsGenerator = ({ settings, object, onObjectReady, onObjectDispose })
49
49
  }, [object]);
50
50
  if (!config.enabled)
51
51
  return null;
52
- const animations = settings.animations;
53
52
  const ready = { onObjectReady, onObjectDispose };
53
+ // Every effect takes the domain drivers: live drag, keyframes and pointer bindings.
54
+ const driven = { id, keyframes, mouseMove };
54
55
  switch (config.type) {
55
- case 'molecules': return _jsx(MoleculesEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
56
- case 'shockwave': return _jsx(ShockwaveEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
57
- case 'aura': return _jsx(AuraEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
58
- case 'dataStream': return _jsx(DataStreamEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
59
- case 'constellation': return _jsx(ConstellationEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
60
- case 'hologram': return _jsx(HologramEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
61
- case 'portal': return _jsx(PortalEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
62
- case 'dnaHelix': return _jsx(DnaHelixEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
63
- case 'orb': return _jsx(OrbEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
64
- case 'lightning': return _jsx(LightningEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
65
- case 'aurora': return _jsx(AuroraEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
66
- case 'forcefield': return _jsx(ForcefieldEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
67
- case 'neuralNetwork': return _jsx(NeuralNetworkEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
68
- case 'blackHole': return _jsx(BlackHoleEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
69
- case 'iceCrystals': return _jsx(IceCrystalsEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
70
- case 'smokePlume': return _jsx(SmokePlumeEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
71
- case 'volumetricFog': return _jsx(VolumetricFogEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
72
- case 'smokeRing': return _jsx(SmokeRingEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
73
- case 'fire': return _jsx(Fire, { hostRef: object, config: config, animations: animations, ...ready });
74
- case 'flares': return _jsx(Flares, { hostRef: object, config: config, animations: animations, ...ready });
75
- case 'sparklesBurst': return _jsx(SparklesBurst, { boundingRadius: boundingRadius, config: config });
76
- case 'bubbles': return _jsx(Bubbles, { boundingRadius: boundingRadius, config: config });
77
- case 'glyphs': return _jsx(Glyphs, { boundingRadius: boundingRadius, config: config });
78
- case 'smokeRibbon': return _jsx(SmokeRibbon, { config: config, boundingRadius: boundingRadius, ...ready });
79
- case 'fieldLines': return _jsx(FieldLinesEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
80
- case 'strangeAttractor': return _jsx(StrangeAttractorEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
81
- case 'harmonicShell': return _jsx(HarmonicShellEffect, { boundingRadius: boundingRadius, config: config, animations: animations, ...ready });
82
- case 'galaxy': return _jsx(GalaxyEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
83
- case 'fireflySwarm': return _jsx(FireflySwarmEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
84
- case 'murmuration': return _jsx(MurmurationEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
85
- case 'planetaryRings': return _jsx(PlanetaryRingsEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
86
- case 'waterCaustics': return _jsx(WaterCausticsEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
87
- case 'iceHalo': return _jsx(IceHaloEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
88
- case 'fallingLeaves': return _jsx(FallingLeavesEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
89
- case 'lichtenberg': return _jsx(LichtenbergEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
90
- case 'dandelionSeeds': return _jsx(DandelionSeedsEffect, { boundingRadius: boundingRadius, config: config, animations: animations, hasHost: !!object, ...ready });
56
+ case 'molecules': return _jsx(MoleculesEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
57
+ case 'shockwave': return _jsx(ShockwaveEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
58
+ case 'aura': return _jsx(AuraEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
59
+ case 'dataStream': return _jsx(DataStreamEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
60
+ case 'constellation': return _jsx(ConstellationEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
61
+ case 'hologram': return _jsx(HologramEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
62
+ case 'portal': return _jsx(PortalEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
63
+ case 'dnaHelix': return _jsx(DnaHelixEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
64
+ case 'orb': return _jsx(OrbEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
65
+ case 'lightning': return _jsx(LightningEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
66
+ case 'aurora': return _jsx(AuroraEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
67
+ case 'forcefield': return _jsx(ForcefieldEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
68
+ case 'neuralNetwork': return _jsx(NeuralNetworkEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
69
+ case 'blackHole': return _jsx(BlackHoleEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
70
+ case 'iceCrystals': return _jsx(IceCrystalsEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
71
+ case 'smokePlume': return _jsx(SmokePlumeEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
72
+ case 'volumetricFog': return _jsx(VolumetricFogEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
73
+ case 'smokeRing': return _jsx(SmokeRingEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
74
+ case 'fire': return _jsx(Fire, { hostRef: object, config: config, ...driven, ...ready });
75
+ case 'flares': return _jsx(Flares, { hostRef: object, boundingRadius: boundingRadius, config: config, ...driven, ...ready });
76
+ case 'sparklesBurst': return _jsx(SparklesBurst, { boundingRadius: boundingRadius, config: config, ...driven });
77
+ case 'bubbles': return _jsx(Bubbles, { boundingRadius: boundingRadius, config: config, ...driven });
78
+ case 'glyphs': return _jsx(Glyphs, { boundingRadius: boundingRadius, config: config, ...driven });
79
+ case 'smokeRibbon': return _jsx(SmokeRibbon, { config: config, boundingRadius: boundingRadius, ...driven, ...ready });
80
+ case 'fieldLines': return _jsx(FieldLinesEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
81
+ case 'strangeAttractor': return _jsx(StrangeAttractorEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
82
+ case 'harmonicShell': return _jsx(HarmonicShellEffect, { boundingRadius: boundingRadius, config: config, ...driven, ...ready });
83
+ case 'galaxy': return _jsx(GalaxyEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
84
+ case 'fireflySwarm': return _jsx(FireflySwarmEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
85
+ case 'murmuration': return _jsx(MurmurationEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
86
+ case 'planetaryRings': return _jsx(PlanetaryRingsEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
87
+ case 'waterCaustics': return _jsx(WaterCausticsEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
88
+ case 'iceHalo': return _jsx(IceHaloEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
89
+ case 'fallingLeaves': return _jsx(FallingLeavesEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
90
+ case 'lichtenberg': return _jsx(LichtenbergEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
91
+ case 'dandelionSeeds': return _jsx(DandelionSeedsEffect, { boundingRadius: boundingRadius, config: config, hasHost: !!object, ...driven, ...ready });
91
92
  default: return null;
92
93
  }
93
94
  };
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import { Vector3 } from 'three';
3
3
  import { type SkySystemRef, type SkySystemProps } from './SkySystem';
4
4
  import type { EnvironmentConfig, FogSettings, HdrSettings, SkySettings, TimeSettings } from '@3driseai/3drise-core';
5
- import type { VolumetricCloudsSettings } from '../types/cloudConfigs';
6
- import type { ProceduralTerrainSettings } from '../types/terrainConfigs';
7
- import type { LandscapeSettings } from '../types/landscapeConfigs';
8
- import type { OceanWaterSettings } from '../types/oceanConfigs';
5
+ import type { VolumetricCloudsSettings } from '@3driseai/3drise-core';
6
+ import type { ProceduralTerrainSettings } from '@3driseai/3drise-core';
7
+ import type { LandscapeSettings } from '@3driseai/3drise-core';
8
+ import type { OceanWaterSettings } from '@3driseai/3drise-core';
9
9
  import type { ObjectReadyProps } from '../types/objectReady';
10
10
  /**
11
11
  * The whole environment in one component: HDR background, image-based lighting,
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/components/EnvironmentManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EACR,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;iFAWiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAChF,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C;sEACkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAoBD,QAAA,MAAM,kBAAkB,8FAyGtB,CAAC;AAGH,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/components/EnvironmentManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EACR,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;iFAWiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAChF,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C;sEACkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAoBD,QAAA,MAAM,kBAAkB,8FAyGtB,CAAC;AAGH,eAAe,kBAAkB,CAAC"}
@@ -29,7 +29,7 @@ const EnvironmentManager = forwardRef(({ timeSettings, environment, hdrSettings,
29
29
  // Authored settings + applied action patches (runtime only).
30
30
  const sky = useRuntimeSettings('sky', skySettings ?? environment?.sky);
31
31
  const clouds = useRuntimeSettings('clouds', cloudsSettings ?? environment?.clouds);
32
- const terrain = terrainSettings ?? environment?.terrain;
32
+ const terrain = useRuntimeSettings('terrain', terrainSettings ?? environment?.terrain);
33
33
  const landscape = landscapeSettings ?? environment?.landscape;
34
34
  const ocean = useRuntimeSettings('ocean', oceanSettings ?? environment?.ocean);
35
35
  const fog = fogSettings ?? environment?.fog;
@@ -1,15 +1,19 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { FlowNetGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface FlowNetGridProps extends ObjectReadyProps {
5
6
  config?: FlowNetGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** FlowNetGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
9
16
  export declare const defaultFlowNetGridConfig: FlowNetGridConfig;
10
- /**
11
- * Potential flow past a cylinder with circulation, drawn as a flow net: streamlines and equipotentials that cross at right angles everywhere and bend around the obstacle.
12
- */
13
- export declare function FlowNetGrid({ config, groupProps, onObjectReady, onObjectDispose }: FlowNetGridProps): import("react").JSX.Element;
17
+ export declare function FlowNetGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: FlowNetGridProps): import("react").JSX.Element;
14
18
  export default FlowNetGrid;
15
19
  //# sourceMappingURL=FlowNetGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowNetGrid.d.ts","sourceRoot":"","sources":["../../src/components/FlowNetGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BAgE9H;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"FlowNetGrid.d.ts","sourceRoot":"","sources":["../../src/components/FlowNetGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAcF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA4CxJ;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { FlowNetGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { FlowNetGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <flowNetGridMaterial> via extend().
8
11
  void FlowNetGridMaterial;
9
12
  /** FlowNetGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
@@ -39,23 +42,38 @@ export const defaultFlowNetGridConfig = {
39
42
  /**
40
43
  * Potential flow past a cylinder with circulation, drawn as a flow net: streamlines and equipotentials that cross at right angles everywhere and bend around the obstacle.
41
44
  */
42
- export function FlowNetGrid({ config = defaultFlowNetGridConfig, groupProps, onObjectReady, onObjectDispose }) {
45
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
46
+ const VARIANT = ['obstacleRadius', 'flowAngle'];
47
+ /** Computed uniforms (clamps, enum indices, booleans as 0/1). */
48
+ const DERIVE = { circulation: (c) => Math.round(c.circulation) };
49
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
50
+ const STRUCTURAL = [...GRID_STRUCTURAL, 'circulation'];
51
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
52
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.flowNetGrid ?? []).map((p) => p.value));
53
+ export function FlowNetGrid({ config = defaultFlowNetGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
43
54
  const matRef = useRef(null);
44
55
  const rootRef = useRef(null);
45
56
  const meshRef = useRef(null);
46
57
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
47
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, obstacleRadius, circulation, flowAngle, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
58
+ // The committed config over this grid's defaults: every knob has a value to render
59
+ // and for a keyframe or pointer binding to start from.
60
+ const base = useMemo(() => withConfigDefaults(defaultFlowNetGridConfig, config), [config]);
61
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
48
62
  // a gentle wave only needs a moderate mesh
49
63
  const segs = segments ?? (displace > 0 ? Math.min(512, Math.max(96, Math.ceil(size / Math.max(cellSize, 1e-4)) * 4)) : 1);
50
- const fade = fadeDistance ?? size * 0.5;
51
- const colors = useMemo(() => ({
52
- line: new THREE.Color(lineColor),
53
- section: new THREE.Color(sectionColor),
54
- cell: new THREE.Color(cellColor),
55
- glow: new THREE.Color(glowColor),
56
- bg: new THREE.Color(bgColor),
57
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
58
64
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
59
- return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("flowNetGridMaterial", { ref: matRef, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide, u_cellSize: cellSize, u_lineWidth: lineWidth, u_sectionSize: sectionSize, u_sectionWidth: sectionWidth, u_lineMode: lineMode, u_cellMode: cellMode, u_animSpeed: animSpeed, u_animScale: animScale, u_animIntensity: animIntensity, u_fadeDistance: fade, u_fadeStrength: fadeStrength, u_displace: displace, u_obstacleRadius: obstacleRadius, u_circulation: Math.round(circulation), u_flowAngle: flowAngle, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, FlowNetGridMaterial.key)] }) }));
65
+ // One push point for every uniform the config owns: the committed config when the
66
+ // material mounts or the config commits, the merged one while anything overrides it.
67
+ const baseRef = useRef(base);
68
+ baseRef.current = base;
69
+ const setMaterial = useCallback((m) => {
70
+ matRef.current = m;
71
+ if (m)
72
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
73
+ }, []);
74
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
75
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
76
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
77
+ return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("flowNetGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, FlowNetGridMaterial.key)] }) }));
60
78
  }
61
79
  export default FlowNetGrid;
@@ -1,23 +1,19 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { FractalGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface FractalGridProps extends ObjectReadyProps {
5
6
  config?: FractalGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** FractalGridConfig — the single source of truth for a fractal grid instance. */
9
16
  export declare const defaultFractalGridConfig: FractalGridConfig;
10
- /**
11
- * A quadtree that subdivides toward the focus point — fine where you are
12
- * pointing, coarse at the edges, with `depth` levels between the two.
13
- *
14
- * The split radius halves at every level, which is what makes the refinement
15
- * self-similar instead of one blurred blob around the focus. `splitJitter`
16
- * wobbles that radius per cell so the boundary is ragged rather than a circle,
17
- * and deeper cells lean toward `sectionColor` so the depth reads at a glance.
18
- *
19
- * `followMouse` defaults to on here, unlike the other grids.
20
- */
21
- export declare function FractalGrid({ config, groupProps, onObjectReady, onObjectDispose }: FractalGridProps): import("react").JSX.Element;
17
+ export declare function FractalGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: FractalGridProps): import("react").JSX.Element;
22
18
  export default FractalGrid;
23
19
  //# sourceMappingURL=FractalGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FractalGrid.d.ts","sourceRoot":"","sources":["../../src/components/FractalGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA8BtC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BAiE9H;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"FractalGrid.d.ts","sourceRoot":"","sources":["../../src/components/FractalGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA8BtC,CAAC;AAsBF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA6CxJ;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { FractalGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { FractalGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <fractalGridMaterial> via extend().
8
11
  void FractalGridMaterial;
9
12
  /** FractalGridConfig — the single source of truth for a fractal grid instance. */
@@ -49,24 +52,39 @@ export const defaultFractalGridConfig = {
49
52
  *
50
53
  * `followMouse` defaults to on here, unlike the other grids.
51
54
  */
52
- export function FractalGrid({ config = defaultFractalGridConfig, groupProps, onObjectReady, onObjectDispose }) {
55
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
56
+ const VARIANT = ['splitRadius', 'splitJitter'];
57
+ /** Computed uniforms (clamps, enum indices, booleans as 0/1). */
58
+ const DERIVE = { depth: (c) => Math.max(1, Math.min(6, c.depth)) };
59
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
60
+ const STRUCTURAL = [...GRID_STRUCTURAL, 'depth'];
61
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
62
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.fractalGrid ?? []).map((p) => p.value));
63
+ export function FractalGrid({ config = defaultFractalGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
53
64
  const matRef = useRef(null);
54
65
  const rootRef = useRef(null);
55
66
  const meshRef = useRef(null);
56
67
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
57
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, depth, splitRadius, splitJitter, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
68
+ // The committed config over this grid's defaults: every knob has a value to render
69
+ // and for a keyframe or pointer binding to start from.
70
+ const base = useMemo(() => withConfigDefaults(defaultFractalGridConfig, config), [config]);
71
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
58
72
  const segs = segments ?? (displace > 0
59
73
  ? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
60
74
  : 1);
61
- const fade = fadeDistance ?? size * 0.5;
62
- const colors = useMemo(() => ({
63
- line: new THREE.Color(lineColor),
64
- section: new THREE.Color(sectionColor),
65
- cell: new THREE.Color(cellColor),
66
- glow: new THREE.Color(glowColor),
67
- bg: new THREE.Color(bgColor),
68
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
69
75
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
70
- return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("fractalGridMaterial", { ref: matRef, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide, u_cellSize: cellSize, u_lineWidth: lineWidth, u_sectionSize: sectionSize, u_sectionWidth: sectionWidth, u_lineMode: lineMode, u_cellMode: cellMode, u_animSpeed: animSpeed, u_animScale: animScale, u_animIntensity: animIntensity, u_fadeDistance: fade, u_fadeStrength: fadeStrength, u_displace: displace, u_depth: Math.max(1, Math.min(6, depth)), u_splitRadius: splitRadius, u_splitJitter: splitJitter, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, FractalGridMaterial.key)] }) }));
76
+ // One push point for every uniform the config owns: the committed config when the
77
+ // material mounts or the config commits, the merged one while anything overrides it.
78
+ const baseRef = useRef(base);
79
+ baseRef.current = base;
80
+ const setMaterial = useCallback((m) => {
81
+ matRef.current = m;
82
+ if (m)
83
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
84
+ }, []);
85
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
86
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
87
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
88
+ return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("fractalGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, FractalGridMaterial.key)] }) }));
71
89
  }
72
90
  export default FractalGrid;
@@ -1,15 +1,22 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { GirihGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface GirihGridProps extends ObjectReadyProps {
5
6
  config?: GirihGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** GirihGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
9
16
  export declare const defaultGirihGridConfig: GirihGridConfig;
10
17
  /**
11
18
  * An Islamic star pattern drawn by Hankin polygons-in-contact. One ray per dihedral sector, from the edge midpoint to the sector bisector, generates the whole interlaced star-and-rosette strapwork over an octagon-square, hexagonal or trihexagonal tiling.
12
19
  */
13
- export declare function GirihGrid({ config, groupProps, onObjectReady, onObjectDispose }: GirihGridProps): import("react").JSX.Element;
20
+ export declare function GirihGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: GirihGridProps): import("react").JSX.Element;
14
21
  export default GirihGrid;
15
22
  //# sourceMappingURL=GirihGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GirihGrid.d.ts","sourceRoot":"","sources":["../../src/components/GirihGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,EAAE,eA6BpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAA+B,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,cAAc,+BAiExH;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"GirihGrid.d.ts","sourceRoot":"","sources":["../../src/components/GirihGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,EAAE,eA6BpC,CAAC;AAWF;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAA+B,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,cAAc,+BA2ClJ;AAED,eAAe,SAAS,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { GirihGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { GirihGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <girihGridMaterial> via extend().
8
11
  void GirihGridMaterial;
9
12
  /** GirihGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
@@ -37,26 +40,41 @@ export const defaultGirihGridConfig = {
37
40
  reveal: 1,
38
41
  revealDuration: 0,
39
42
  };
43
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
44
+ const VARIANT = ['contactAngle', 'strapWidth', 'angleDrift'];
45
+ /** Computed uniforms: the tiling index is a whole number. */
46
+ const DERIVE = { tiling: (c) => Math.round(c.tiling) };
47
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
48
+ const STRUCTURAL = [...GRID_STRUCTURAL, 'tiling'];
49
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
50
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.girihGrid ?? []).map((p) => p.value));
40
51
  /**
41
52
  * An Islamic star pattern drawn by Hankin polygons-in-contact. One ray per dihedral sector, from the edge midpoint to the sector bisector, generates the whole interlaced star-and-rosette strapwork over an octagon-square, hexagonal or trihexagonal tiling.
42
53
  */
43
- export function GirihGrid({ config = defaultGirihGridConfig, groupProps, onObjectReady, onObjectDispose }) {
54
+ export function GirihGrid({ config = defaultGirihGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
44
55
  const matRef = useRef(null);
45
56
  const rootRef = useRef(null);
46
57
  const meshRef = useRef(null);
47
58
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
48
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, tiling, contactAngle, strapWidth, angleDrift, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
59
+ // The committed config over this grid's defaults: every knob has a value to render
60
+ // and for a keyframe or pointer binding to start from.
61
+ const base = useMemo(() => withConfigDefaults(defaultGirihGridConfig, config), [config]);
62
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
49
63
  // the relief follows the star outlines, which are a fraction of a cell wide
50
64
  const segs = segments ?? (displace > 0 ? Math.min(512, Math.max(128, Math.ceil(size / Math.max(cellSize, 1e-4)) * 24)) : 1);
51
- const fade = fadeDistance ?? size * 0.5;
52
- const colors = useMemo(() => ({
53
- line: new THREE.Color(lineColor),
54
- section: new THREE.Color(sectionColor),
55
- cell: new THREE.Color(cellColor),
56
- glow: new THREE.Color(glowColor),
57
- bg: new THREE.Color(bgColor),
58
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
59
65
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
60
- return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("girihGridMaterial", { ref: matRef, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide, u_cellSize: cellSize, u_lineWidth: lineWidth, u_sectionSize: sectionSize, u_sectionWidth: sectionWidth, u_lineMode: lineMode, u_cellMode: cellMode, u_animSpeed: animSpeed, u_animScale: animScale, u_animIntensity: animIntensity, u_fadeDistance: fade, u_fadeStrength: fadeStrength, u_displace: displace, u_tiling: Math.round(tiling), u_contactAngle: contactAngle, u_strapWidth: strapWidth, u_angleDrift: angleDrift, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, GirihGridMaterial.key)] }) }));
66
+ // One push point for every uniform the config owns: the committed config when the
67
+ // material mounts or the config commits, the merged one while anything overrides it.
68
+ const baseRef = useRef(base);
69
+ baseRef.current = base;
70
+ const setMaterial = useCallback((m) => {
71
+ matRef.current = m;
72
+ if (m)
73
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
74
+ }, []);
75
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
76
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
77
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
78
+ return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("girihGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, GirihGridMaterial.key)] }) }));
61
79
  }
62
80
  export default GirihGrid;
@@ -1,9 +1,15 @@
1
1
  import type { ObjectReadyProps } from '../types/objectReady';
2
- import type { GlyphsConfig } from '@3driseai/3drise-core';
2
+ import type { AnimationOptions, GlyphsConfig, MouseMoveDomain } from '@3driseai/3drise-core';
3
3
  import React from "react";
4
4
  export interface GlyphsProps extends ObjectReadyProps {
5
5
  config: GlyphsConfig;
6
6
  boundingRadius?: number;
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;
7
13
  }
8
14
  declare const Glyphs: React.FC<GlyphsProps>;
9
15
  export default Glyphs;
@@ -1 +1 @@
1
- {"version":3,"file":"Glyphs.d.ts","sourceRoot":"","sources":["../../src/components/Glyphs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAK7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAoDjC,CAAC;AACF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Glyphs.d.ts","sourceRoot":"","sources":["../../src/components/Glyphs.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,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;AA0BD,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAuCjC,CAAC;AACF,eAAe,MAAM,CAAC"}
@@ -1,19 +1,43 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRef } from 'react';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import { useObjectReady } from '../hooks/useObjectReady.js';
4
- import { useEffect, useMemo } from 'react';
4
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
5
+ import { withConfigDefaults } from '../utils/configAnimations.js';
5
6
  import { useFrame } from '@react-three/fiber';
6
7
  import * as THREE from 'three';
7
- import { GlyphRingMaterial } from '@3driseai/3drise-core';
8
- const Glyphs = ({ config, boundingRadius, onObjectReady, onObjectDispose }) => {
8
+ import { GlyphRingMaterial, DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
9
+ /** Knobs that resize the plane: commit only, never live. */
10
+ const STRUCTURAL = ['ringRadius'];
11
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
12
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.glyphs.map((p) => p.value));
13
+ /** The single push point: every config knob reaches its uniform here. */
14
+ function applyConfig(material, c) {
15
+ const u = material.uniforms;
16
+ u.uRingColor.value.set(c.ringColor);
17
+ u.uGlyphsColor.value.set(c.glyphsColor);
18
+ u.uShadesMultiplier.value = c.shadesMultiplier;
19
+ u.uHoverColor.value.set(c.hoverColor);
20
+ u.uHoverRadius.value = c.hoverRadius;
21
+ u.uHoverIntensity.value = c.hoverIntensity;
22
+ u.uGlyphCount.value = Math.max(3, c.glyphCount);
23
+ // the morph rate is integrated into uTime on the CPU (see useFrame), so the
24
+ // shader's uTime * uMorphSpeed never jumps when the speed changes
25
+ u.uMorphSpeed.value = 1;
26
+ u.uIntensity.value = c.intensity;
27
+ u.uOpacity.value = c.opacity;
28
+ }
29
+ const Glyphs = ({ config, boundingRadius, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
30
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.glyphs, config), [config]);
9
31
  const rootRef = useRef(null);
10
32
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
33
+ // the knobs read per frame (rotationSpeed, morphSpeed), from the last merged config
34
+ const cur = useRef(cfg);
11
35
  // The ring sits at r=0.55 within UV space, so the plane must span 2 * ringRadius / 0.55
12
36
  // for the ring's outer edge to land at the configured `ringRadius` in world units.
13
37
  const planeSize = useMemo(() => {
14
- const r = Math.max(0.05, (boundingRadius ?? config.ringRadius ?? 1) * 2);
38
+ const r = Math.max(0.05, (boundingRadius ?? cfg.ringRadius) * 2);
15
39
  return (2 * r) / 0.55;
16
- }, [boundingRadius, config.ringRadius]);
40
+ }, [boundingRadius, cfg.ringRadius]);
17
41
  const geometry = useMemo(() => new THREE.PlaneGeometry(planeSize, planeSize, 1, 1), [planeSize]);
18
42
  const material = useMemo(() => {
19
43
  const m = new GlyphRingMaterial();
@@ -23,35 +47,17 @@ const Glyphs = ({ config, boundingRadius, onObjectReady, onObjectDispose }) => {
23
47
  m.blending = THREE.AdditiveBlending;
24
48
  return m;
25
49
  }, []);
26
- useEffect(() => {
27
- const u = material.uniforms;
28
- u.uRingColor.value.set(config.ringColor ?? '#88ccff');
29
- u.uGlyphsColor.value.set(config.glyphsColor ?? '#88ccff');
30
- u.uShadesMultiplier.value = config.shadesMultiplier ?? 0.0;
31
- u.uHoverColor.value.set(config.hoverColor ?? '#ffffff');
32
- u.uHoverRadius.value = config.hoverRadius ?? 0.3;
33
- u.uHoverIntensity.value = config.hoverIntensity ?? 0.0;
34
- u.uGlyphCount.value = Math.max(3, config.glyphCount ?? 12);
35
- u.uMorphSpeed.value = config.morphSpeed ?? 0.4;
36
- u.uIntensity.value = config.intensity ?? 1.5;
37
- u.uOpacity.value = config.opacity ?? 1.0;
38
- }, [
39
- config.ringColor,
40
- config.glyphsColor,
41
- config.shadesMultiplier,
42
- config.hoverColor,
43
- config.hoverRadius,
44
- config.hoverIntensity,
45
- config.glyphCount,
46
- config.morphSpeed,
47
- config.intensity,
48
- config.opacity,
49
- material,
50
- ]);
51
50
  useEffect(() => () => { geometry.dispose(); material.dispose(); }, [geometry, material]);
52
- useFrame((state, delta) => {
53
- material.uniforms.uTime.value = state.clock.getElapsedTime();
54
- const rotSpeed = config.rotationSpeed ?? 0.5;
51
+ const push = useCallback((merged) => {
52
+ cur.current = merged;
53
+ applyConfig(material, merged);
54
+ }, [material]);
55
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
56
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
57
+ useFrame((_, delta) => {
58
+ const dt = Math.min(delta, 0.1);
59
+ material.uniforms.uTime.value += dt * cur.current.morphSpeed;
60
+ const rotSpeed = cur.current.rotationSpeed;
55
61
  material.uniforms.uRotation.value += delta * rotSpeed * 0.15;
56
62
  });
57
63
  if (!config.enabled)