@3driseai/3drise-viewer 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animationsV2/ClipPlayer.d.ts +3 -0
- package/dist/animationsV2/ClipPlayer.d.ts.map +1 -1
- package/dist/animationsV2/ClipPlayer.js +67 -8
- package/dist/animationsV2/ClipsRuntime.d.ts +39 -0
- package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +245 -14
- package/dist/animationsV2/appliers.d.ts +5 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +25 -7
- package/dist/animationsV2/index.d.ts +1 -1
- package/dist/animationsV2/index.d.ts.map +1 -1
- package/dist/animationsV2/normalize.d.ts.map +1 -1
- package/dist/animationsV2/normalize.js +18 -7
- package/dist/animationsV2/sequenceUtils.d.ts +42 -1
- package/dist/animationsV2/sequenceUtils.d.ts.map +1 -1
- package/dist/animationsV2/sequenceUtils.js +103 -3
- package/dist/animationsV2/types.d.ts +20 -0
- package/dist/animationsV2/types.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.d.ts +8 -2
- package/dist/components/AdvancedGrid.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.js +31 -14
- package/dist/components/AnimatedObject.d.ts.map +1 -1
- package/dist/components/AnimatedObject.js +7 -5
- package/dist/components/ApollonianGrid.d.ts +25 -0
- package/dist/components/ApollonianGrid.d.ts.map +1 -0
- package/dist/components/ApollonianGrid.js +80 -0
- package/dist/components/Bubbles.d.ts +7 -1
- package/dist/components/Bubbles.d.ts.map +1 -1
- package/dist/components/Bubbles.js +42 -22
- package/dist/components/ChladniGrid.d.ts +8 -4
- package/dist/components/ChladniGrid.d.ts.map +1 -1
- package/dist/components/ChladniGrid.js +31 -13
- package/dist/components/CircuitGrid.d.ts +8 -11
- package/dist/components/CircuitGrid.d.ts.map +1 -1
- package/dist/components/CircuitGrid.js +31 -13
- package/dist/components/CloudsGenerator.d.ts +1 -1
- package/dist/components/CloudsGenerator.js +1 -1
- package/dist/components/ConformalGrid.d.ts +25 -0
- package/dist/components/ConformalGrid.d.ts.map +1 -0
- package/dist/components/ConformalGrid.js +97 -0
- package/dist/components/ContourGrid.d.ts +8 -14
- package/dist/components/ContourGrid.d.ts.map +1 -1
- package/dist/components/ContourGrid.js +31 -13
- package/dist/components/EffectsGenerator.d.ts +7 -1
- package/dist/components/EffectsGenerator.d.ts.map +1 -1
- package/dist/components/EffectsGenerator.js +39 -38
- package/dist/components/EnvironmentManager.d.ts +4 -4
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.d.ts +8 -4
- package/dist/components/FlowNetGrid.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.js +31 -13
- package/dist/components/FractalGrid.d.ts +8 -12
- package/dist/components/FractalGrid.d.ts.map +1 -1
- package/dist/components/FractalGrid.js +31 -13
- package/dist/components/GirihGrid.d.ts +8 -1
- package/dist/components/GirihGrid.d.ts.map +1 -1
- package/dist/components/GirihGrid.js +31 -13
- package/dist/components/Glyphs.d.ts +7 -1
- package/dist/components/Glyphs.d.ts.map +1 -1
- package/dist/components/Glyphs.js +40 -34
- package/dist/components/GravWaveGrid.d.ts +8 -1
- package/dist/components/GravWaveGrid.d.ts.map +1 -1
- package/dist/components/GravWaveGrid.js +31 -13
- package/dist/components/GridsGenerator.d.ts +9 -3
- package/dist/components/GridsGenerator.d.ts.map +1 -1
- package/dist/components/GridsGenerator.js +41 -18
- package/dist/components/HexGrid.d.ts +8 -10
- package/dist/components/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid.js +31 -13
- package/dist/components/HilbertGrid.d.ts +25 -0
- package/dist/components/HilbertGrid.d.ts.map +1 -0
- package/dist/components/HilbertGrid.js +93 -0
- package/dist/components/HyperbolicGrid.d.ts +8 -4
- package/dist/components/HyperbolicGrid.d.ts.map +1 -1
- package/dist/components/HyperbolicGrid.js +31 -13
- package/dist/components/LandscapeBuilder.d.ts +1 -1
- package/dist/components/LandscapeBuilder.d.ts.map +1 -1
- package/dist/components/LandscapeBuilder.js +1 -1
- package/dist/components/LandscapeObject.d.ts +1 -1
- package/dist/components/LandscapeObject.d.ts.map +1 -1
- package/dist/components/LandscapeObject.js +1 -1
- package/dist/components/LensingGrid.d.ts +25 -0
- package/dist/components/LensingGrid.d.ts.map +1 -0
- package/dist/components/LensingGrid.js +81 -0
- package/dist/components/MoireGrid.d.ts +8 -12
- package/dist/components/MoireGrid.d.ts.map +1 -1
- package/dist/components/MoireGrid.js +31 -13
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +2 -2
- package/dist/components/ObjectsRenderer.d.ts.map +1 -1
- package/dist/components/ObjectsRenderer.js +37 -3
- package/dist/components/OceanBuilder.d.ts +1 -1
- package/dist/components/OceanBuilder.js +1 -1
- package/dist/components/ParastichyGrid.d.ts +25 -0
- package/dist/components/ParastichyGrid.d.ts.map +1 -0
- package/dist/components/ParastichyGrid.js +82 -0
- package/dist/components/ParticlesGenerator.d.ts.map +1 -1
- package/dist/components/ParticlesGenerator.js +6 -0
- package/dist/components/PhyllotaxisGrid.d.ts +25 -0
- package/dist/components/PhyllotaxisGrid.d.ts.map +1 -0
- package/dist/components/PhyllotaxisGrid.js +95 -0
- package/dist/components/QuasiGrid.d.ts +8 -11
- package/dist/components/QuasiGrid.d.ts.map +1 -1
- package/dist/components/QuasiGrid.js +31 -13
- package/dist/components/RadarGrid.d.ts +8 -13
- package/dist/components/RadarGrid.d.ts.map +1 -1
- package/dist/components/RadarGrid.js +31 -13
- package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
- package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
- package/dist/components/ReactionDiffusionGrid.js +33 -139
- package/dist/components/SceneBuilder.js +1 -1
- package/dist/components/SkySystem.d.ts +1 -1
- package/dist/components/SparklesBurst.d.ts +7 -1
- package/dist/components/SparklesBurst.d.ts.map +1 -1
- package/dist/components/SparklesBurst.js +31 -28
- package/dist/components/TerrainBuilder.d.ts +1 -1
- package/dist/components/TerrainBuilder.d.ts.map +1 -1
- package/dist/components/TerrainBuilder.js +1 -1
- package/dist/components/TruchetGrid.d.ts +25 -0
- package/dist/components/TruchetGrid.d.ts.map +1 -0
- package/dist/components/TruchetGrid.js +82 -0
- package/dist/components/VoronoiGrid.d.ts +8 -10
- package/dist/components/VoronoiGrid.d.ts.map +1 -1
- package/dist/components/VoronoiGrid.js +31 -13
- package/dist/components/WallpaperGrid.d.ts +8 -1
- package/dist/components/WallpaperGrid.d.ts.map +1 -1
- package/dist/components/WallpaperGrid.js +33 -210
- package/dist/components/effects/AuraEffect.d.ts +8 -3
- package/dist/components/effects/AuraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuraEffect.js +49 -24
- package/dist/components/effects/AuroraEffect.d.ts +8 -3
- package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuroraEffect.js +45 -25
- package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
- package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
- package/dist/components/effects/BlackHoleEffect.js +42 -21
- package/dist/components/effects/ConstellationEffect.d.ts +8 -3
- package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
- package/dist/components/effects/ConstellationEffect.js +49 -23
- package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
- package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
- package/dist/components/effects/DandelionSeedsEffect.js +19 -9
- package/dist/components/effects/DataStreamEffect.d.ts +8 -3
- package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
- package/dist/components/effects/DataStreamEffect.js +54 -26
- package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
- package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
- package/dist/components/effects/DnaHelixEffect.js +62 -30
- package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
- package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
- package/dist/components/effects/FallingLeavesEffect.js +19 -9
- package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
- package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
- package/dist/components/effects/FieldLinesEffect.js +30 -20
- package/dist/components/effects/Fire.d.ts +8 -3
- package/dist/components/effects/Fire.d.ts.map +1 -1
- package/dist/components/effects/Fire.js +47 -10
- package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
- package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
- package/dist/components/effects/FireflySwarmEffect.js +19 -9
- package/dist/components/effects/Flares.d.ts +10 -3
- package/dist/components/effects/Flares.d.ts.map +1 -1
- package/dist/components/effects/Flares.js +53 -56
- package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
- package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
- package/dist/components/effects/ForcefieldEffect.js +52 -33
- package/dist/components/effects/GalaxyEffect.d.ts +7 -2
- package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
- package/dist/components/effects/GalaxyEffect.js +19 -9
- package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
- package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
- package/dist/components/effects/HarmonicShellEffect.js +30 -22
- package/dist/components/effects/HologramEffect.d.ts +8 -3
- package/dist/components/effects/HologramEffect.d.ts.map +1 -1
- package/dist/components/effects/HologramEffect.js +52 -23
- package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
- package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
- package/dist/components/effects/IceCrystalsEffect.js +36 -21
- package/dist/components/effects/IceHaloEffect.d.ts +7 -2
- package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
- package/dist/components/effects/IceHaloEffect.js +19 -9
- package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
- package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
- package/dist/components/effects/LichtenbergEffect.js +19 -9
- package/dist/components/effects/LightningEffect.d.ts +8 -3
- package/dist/components/effects/LightningEffect.d.ts.map +1 -1
- package/dist/components/effects/LightningEffect.js +54 -32
- package/dist/components/effects/MoleculesEffect.d.ts +8 -3
- package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
- package/dist/components/effects/MoleculesEffect.js +31 -21
- package/dist/components/effects/MurmurationEffect.d.ts +7 -2
- package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
- package/dist/components/effects/MurmurationEffect.js +19 -9
- package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
- package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
- package/dist/components/effects/NeuralNetworkEffect.js +66 -33
- package/dist/components/effects/OrbEffect.d.ts +8 -3
- package/dist/components/effects/OrbEffect.d.ts.map +1 -1
- package/dist/components/effects/OrbEffect.js +89 -42
- package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
- package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
- package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
- package/dist/components/effects/PortalEffect.d.ts +8 -3
- package/dist/components/effects/PortalEffect.d.ts.map +1 -1
- package/dist/components/effects/PortalEffect.js +41 -25
- package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
- package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
- package/dist/components/effects/ShockwaveEffect.js +19 -9
- package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
- package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokePlumeEffect.js +30 -20
- package/dist/components/effects/SmokeRibbon.d.ts +8 -2
- package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
- package/dist/components/effects/SmokeRibbon.js +34 -24
- package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
- package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokeRingEffect.js +33 -21
- package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
- package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
- package/dist/components/effects/StrangeAttractorEffect.js +30 -20
- package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
- package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
- package/dist/components/effects/VolumetricFogEffect.js +38 -20
- package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
- package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
- package/dist/components/effects/WaterCausticsEffect.js +19 -9
- package/dist/components/effects/index.d.ts +0 -1
- package/dist/components/effects/index.d.ts.map +1 -1
- package/dist/components/effects/index.js +0 -1
- package/dist/components/index.d.ts +14 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -1
- package/dist/components/landscape/LandscapeMesh.js +1 -1
- package/dist/components/landscape/types.d.ts +1 -1
- package/dist/components/landscape/types.d.ts.map +1 -1
- package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
- package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
- package/dist/components/particles/MagneticBottleParticles.js +618 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeBurstParticles.js +588 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeFlowParticles.js +755 -0
- package/dist/components/particles/index.d.ts +6 -0
- package/dist/components/particles/index.d.ts.map +1 -1
- package/dist/components/particles/index.js +3 -0
- package/dist/components/terrain/types.d.ts +1 -1
- package/dist/components/terrain/types.d.ts.map +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
- package/dist/components/volumetricClouds/types.d.ts +1 -1
- package/dist/components/volumetricClouds/types.d.ts.map +1 -1
- package/dist/components/water/types.d.ts +1 -1
- package/dist/components/water/types.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useConfigDriver.d.ts +22 -0
- package/dist/hooks/useConfigDriver.d.ts.map +1 -0
- package/dist/hooks/useConfigDriver.js +43 -0
- package/dist/hooks/useConfigLive.d.ts +1 -1
- package/dist/hooks/useConfigLive.d.ts.map +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
- package/dist/hooks/useOceanMaterial.d.ts +1 -1
- package/dist/hooks/useThunder.d.ts +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/interactions/index.d.ts +2 -1
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/interactions/index.js +1 -1
- package/dist/interactions/runner.d.ts +18 -3
- package/dist/interactions/runner.d.ts.map +1 -1
- package/dist/interactions/runner.js +25 -2
- package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
- package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
- package/dist/operations/catalogue/curlSmoke.js +178 -0
- package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
- package/dist/operations/catalogue/displayImage.js +1 -0
- package/dist/operations/catalogue/dissolve.d.ts +3 -0
- package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
- package/dist/operations/catalogue/dissolve.js +57 -0
- package/dist/operations/catalogue/emberAsh.d.ts +3 -0
- package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
- package/dist/operations/catalogue/emberAsh.js +171 -0
- package/dist/operations/catalogue/fade.d.ts.map +1 -1
- package/dist/operations/catalogue/fade.js +1 -0
- package/dist/operations/catalogue/flip.d.ts +3 -0
- package/dist/operations/catalogue/flip.d.ts.map +1 -0
- package/dist/operations/catalogue/flip.js +69 -0
- package/dist/operations/catalogue/flock.d.ts +3 -0
- package/dist/operations/catalogue/flock.d.ts.map +1 -0
- package/dist/operations/catalogue/flock.js +163 -0
- package/dist/operations/catalogue/focus.d.ts.map +1 -1
- package/dist/operations/catalogue/focus.js +1 -0
- package/dist/operations/catalogue/frame.d.ts +3 -0
- package/dist/operations/catalogue/frame.d.ts.map +1 -0
- package/dist/operations/catalogue/frame.js +44 -0
- package/dist/operations/catalogue/frost.d.ts +3 -0
- package/dist/operations/catalogue/frost.d.ts.map +1 -0
- package/dist/operations/catalogue/frost.js +111 -0
- package/dist/operations/catalogue/fxInstances.d.ts +21 -0
- package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
- package/dist/operations/catalogue/fxInstances.js +47 -0
- package/dist/operations/catalogue/fxPoints.d.ts +22 -0
- package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
- package/dist/operations/catalogue/fxPoints.js +70 -0
- package/dist/operations/catalogue/glow.d.ts.map +1 -1
- package/dist/operations/catalogue/glow.js +2 -1
- package/dist/operations/catalogue/heatCracks.d.ts +3 -0
- package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
- package/dist/operations/catalogue/heatCracks.js +134 -0
- package/dist/operations/catalogue/hologram.d.ts +3 -0
- package/dist/operations/catalogue/hologram.d.ts.map +1 -0
- package/dist/operations/catalogue/hologram.js +118 -0
- package/dist/operations/catalogue/inkBloom.d.ts +3 -0
- package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
- package/dist/operations/catalogue/inkBloom.js +156 -0
- package/dist/operations/catalogue/ivy.d.ts +13 -0
- package/dist/operations/catalogue/ivy.d.ts.map +1 -0
- package/dist/operations/catalogue/ivy.js +469 -0
- package/dist/operations/catalogue/jelly.d.ts +3 -0
- package/dist/operations/catalogue/jelly.d.ts.map +1 -0
- package/dist/operations/catalogue/jelly.js +50 -0
- package/dist/operations/catalogue/kintsugi.d.ts +3 -0
- package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
- package/dist/operations/catalogue/kintsugi.js +173 -0
- package/dist/operations/catalogue/lidarScan.d.ts +3 -0
- package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
- package/dist/operations/catalogue/lidarScan.js +240 -0
- package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
- package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
- package/dist/operations/catalogue/liquidMetal.js +122 -0
- package/dist/operations/catalogue/metalize.d.ts +3 -0
- package/dist/operations/catalogue/metalize.d.ts.map +1 -0
- package/dist/operations/catalogue/metalize.js +135 -0
- package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
- package/dist/operations/catalogue/moveToFront.js +1 -0
- package/dist/operations/catalogue/orbit.d.ts +3 -0
- package/dist/operations/catalogue/orbit.d.ts.map +1 -0
- package/dist/operations/catalogue/orbit.js +29 -0
- package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
- package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
- package/dist/operations/catalogue/particleSwarm.js +138 -0
- package/dist/operations/catalogue/petalPeel.d.ts +3 -0
- package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
- package/dist/operations/catalogue/petalPeel.js +137 -0
- package/dist/operations/catalogue/petrify.d.ts +3 -0
- package/dist/operations/catalogue/petrify.d.ts.map +1 -0
- package/dist/operations/catalogue/petrify.js +94 -0
- package/dist/operations/catalogue/portal.d.ts +3 -0
- package/dist/operations/catalogue/portal.d.ts.map +1 -0
- package/dist/operations/catalogue/portal.js +224 -0
- package/dist/operations/catalogue/print3d.d.ts +3 -0
- package/dist/operations/catalogue/print3d.d.ts.map +1 -0
- package/dist/operations/catalogue/print3d.js +275 -0
- package/dist/operations/catalogue/rainBeads.d.ts +3 -0
- package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
- package/dist/operations/catalogue/rainBeads.js +223 -0
- package/dist/operations/catalogue/restPose.d.ts +21 -0
- package/dist/operations/catalogue/restPose.d.ts.map +1 -0
- package/dist/operations/catalogue/restPose.js +55 -0
- package/dist/operations/catalogue/rimLight.d.ts +3 -0
- package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
- package/dist/operations/catalogue/rimLight.js +72 -0
- package/dist/operations/catalogue/sandErosion.d.ts +3 -0
- package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
- package/dist/operations/catalogue/sandErosion.js +167 -0
- package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
- package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
- package/dist/operations/catalogue/shaderLayers.js +322 -0
- package/dist/operations/catalogue/shatter.d.ts +3 -0
- package/dist/operations/catalogue/shatter.d.ts.map +1 -0
- package/dist/operations/catalogue/shatter.js +267 -0
- package/dist/operations/catalogue/silkDrape.d.ts +3 -0
- package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
- package/dist/operations/catalogue/silkDrape.js +340 -0
- package/dist/operations/catalogue/spin.d.ts +3 -0
- package/dist/operations/catalogue/spin.d.ts.map +1 -0
- package/dist/operations/catalogue/spin.js +42 -0
- package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
- package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
- package/dist/operations/catalogue/surfaceSample.js +187 -0
- package/dist/operations/catalogue/swirl.d.ts +3 -0
- package/dist/operations/catalogue/swirl.d.ts.map +1 -0
- package/dist/operations/catalogue/swirl.js +69 -0
- package/dist/operations/catalogue/teleport.d.ts +3 -0
- package/dist/operations/catalogue/teleport.d.ts.map +1 -0
- package/dist/operations/catalogue/teleport.js +213 -0
- package/dist/operations/catalogue/transitionField.d.ts +124 -0
- package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
- package/dist/operations/catalogue/transitionField.js +278 -0
- package/dist/operations/catalogue/unweave.d.ts +3 -0
- package/dist/operations/catalogue/unweave.d.ts.map +1 -0
- package/dist/operations/catalogue/unweave.js +233 -0
- package/dist/operations/catalogue/visibility.d.ts.map +1 -1
- package/dist/operations/catalogue/visibility.js +1 -0
- package/dist/operations/catalogue/voxelize.d.ts +3 -0
- package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
- package/dist/operations/catalogue/voxelize.js +148 -0
- package/dist/operations/catalogue/warmup.d.ts +22 -0
- package/dist/operations/catalogue/warmup.d.ts.map +1 -0
- package/dist/operations/catalogue/warmup.js +106 -0
- package/dist/operations/catalogue/zoom.d.ts.map +1 -1
- package/dist/operations/catalogue/zoom.js +1 -0
- package/dist/operations/index.d.ts +4 -2
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +4 -2
- package/dist/operations/objectEffects.d.ts +46 -0
- package/dist/operations/objectEffects.d.ts.map +1 -0
- package/dist/operations/objectEffects.js +136 -0
- package/dist/operations/registry.d.ts +7 -2
- package/dist/operations/registry.d.ts.map +1 -1
- package/dist/operations/registry.js +45 -3
- package/dist/operations/runtime.d.ts +40 -2
- package/dist/operations/runtime.d.ts.map +1 -1
- package/dist/operations/runtime.js +164 -8
- package/dist/operations/types.d.ts +29 -3
- package/dist/operations/types.d.ts.map +1 -1
- package/dist/operations/types.js +6 -0
- package/dist/operations/useObjectEffectLayers.d.ts +4 -0
- package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
- package/dist/operations/useObjectEffectLayers.js +42 -0
- package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
- package/dist/operations/useOperationsRuntime.js +42 -4
- package/dist/presets/landscapePresets.d.ts +1 -1
- package/dist/presets/landscapePresets.d.ts.map +1 -1
- package/dist/presets/landscapePresets.js +1 -1
- package/dist/presets/landscapeTypes.d.ts +1 -1
- package/dist/presets/landscapeTypes.d.ts.map +1 -1
- package/dist/presets/landscapeTypes.js +1 -1
- package/dist/presets/oceanSurfacePresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts.map +1 -1
- package/dist/presets/volumetricCloudPresets.d.ts +1 -1
- package/dist/types/cloudConfigs.d.ts +2 -309
- package/dist/types/cloudConfigs.d.ts.map +1 -1
- package/dist/types/cloudConfigs.js +2 -339
- package/dist/types/gridConfigs.d.ts +103 -0
- package/dist/types/gridConfigs.d.ts.map +1 -1
- package/dist/types/index.d.ts +9 -9
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/landscapeConfigs.d.ts +2 -217
- package/dist/types/landscapeConfigs.d.ts.map +1 -1
- package/dist/types/landscapeConfigs.js +2 -256
- package/dist/types/oceanConfigs.d.ts +2 -289
- package/dist/types/oceanConfigs.d.ts.map +1 -1
- package/dist/types/oceanConfigs.js +2 -380
- package/dist/types/terrainConfigs.d.ts +2 -250
- package/dist/types/terrainConfigs.d.ts.map +1 -1
- package/dist/types/terrainConfigs.js +2 -292
- package/dist/utils/cloudUniforms.d.ts +1 -1
- package/dist/utils/configAnimations.d.ts +6 -0
- package/dist/utils/configAnimations.d.ts.map +1 -1
- package/dist/utils/configAnimations.js +14 -0
- package/dist/utils/gridConfig.d.ts +19 -0
- package/dist/utils/gridConfig.d.ts.map +1 -0
- package/dist/utils/gridConfig.js +52 -0
- package/dist/utils/handleCloudsAnimations.d.ts +1 -1
- package/dist/utils/handleCloudsAnimations.js +1 -1
- package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
- package/dist/utils/hasHoverAnimation.js +0 -2
- package/dist/utils/landscapeUniforms.d.ts +1 -1
- package/dist/utils/landscapeUniforms.d.ts.map +1 -1
- package/dist/utils/oceanUniforms.d.ts +1 -1
- package/dist/utils/particleShape.d.ts +33 -0
- package/dist/utils/particleShape.d.ts.map +1 -0
- package/dist/utils/particleShape.js +207 -0
- package/dist/utils/particleTrails.d.ts.map +1 -1
- package/dist/utils/particleTrails.js +29 -14
- package/dist/utils/terrainUniforms.d.ts +1 -1
- package/dist/utils/terrainUniforms.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -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 { MoireGridConfig } from '../types/gridConfigs';
|
|
4
|
+
import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
4
5
|
export interface MoireGridProps extends ObjectReadyProps {
|
|
5
6
|
config?: MoireGridConfig;
|
|
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
|
/** MoireGridConfig — the single source of truth for a moire grid instance. */
|
|
9
16
|
export declare const defaultMoireGridConfig: MoireGridConfig;
|
|
10
|
-
|
|
11
|
-
* Two overlaid lattices, counter-rotating.
|
|
12
|
-
*
|
|
13
|
-
* Nothing draws the moire pattern — it emerges from where the two line sets
|
|
14
|
-
* nearly coincide, which is why it moves the way real interference does. Small
|
|
15
|
-
* `layerAngle` and `layerScale` values near 1 give the long, slow beats; larger
|
|
16
|
-
* ones break up into fine cross-hatch. `spin` 0 freezes it at `layerAngle`.
|
|
17
|
-
*
|
|
18
|
-
* `shape` picks what the two layers are made of. Rings have no orientation, so
|
|
19
|
-
* for that shape the layers are offset from each other rather than rotated.
|
|
20
|
-
*/
|
|
21
|
-
export declare function MoireGrid({ config, groupProps, onObjectReady, onObjectDispose }: MoireGridProps): import("react").JSX.Element;
|
|
17
|
+
export declare function MoireGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: MoireGridProps): import("react").JSX.Element;
|
|
22
18
|
export default MoireGrid;
|
|
23
19
|
//# sourceMappingURL=MoireGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoireGrid.d.ts","sourceRoot":"","sources":["../../src/components/MoireGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MoireGrid.d.ts","sourceRoot":"","sources":["../../src/components/MoireGrid.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;AAWD,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,eA6BpC,CAAC;AAsBF,wBAAgB,SAAS,CAAC,EAAE,MAA+B,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,cAAc,+BA6ClJ;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 {
|
|
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 { MoireGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
7
10
|
// Side-effect import registers <moireGridMaterial> via extend().
|
|
8
11
|
void MoireGridMaterial;
|
|
9
12
|
const SHAPE_INDEX = {
|
|
@@ -53,24 +56,39 @@ export const defaultMoireGridConfig = {
|
|
|
53
56
|
* `shape` picks what the two layers are made of. Rings have no orientation, so
|
|
54
57
|
* for that shape the layers are offset from each other rather than rotated.
|
|
55
58
|
*/
|
|
56
|
-
|
|
59
|
+
/** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
|
|
60
|
+
const VARIANT = ['layerAngle', 'layerScale', 'spin'];
|
|
61
|
+
/** Computed uniforms (clamps, enum indices, booleans as 0/1). */
|
|
62
|
+
const DERIVE = { shape: (c) => SHAPE_INDEX[c.shape] ?? 0 };
|
|
63
|
+
/** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
|
|
64
|
+
const STRUCTURAL = [...GRID_STRUCTURAL, 'shape'];
|
|
65
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
66
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.moireGrid ?? []).map((p) => p.value));
|
|
67
|
+
export function MoireGrid({ config = defaultMoireGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
57
68
|
const matRef = useRef(null);
|
|
58
69
|
const rootRef = useRef(null);
|
|
59
70
|
const meshRef = useRef(null);
|
|
60
71
|
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
61
|
-
|
|
72
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
73
|
+
// and for a keyframe or pointer binding to start from.
|
|
74
|
+
const base = useMemo(() => withConfigDefaults(defaultMoireGridConfig, config), [config]);
|
|
75
|
+
const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
|
|
62
76
|
const segs = segments ?? (displace > 0
|
|
63
77
|
? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
|
|
64
78
|
: 1);
|
|
65
|
-
const fade = fadeDistance ?? size * 0.5;
|
|
66
|
-
const colors = useMemo(() => ({
|
|
67
|
-
line: new THREE.Color(lineColor),
|
|
68
|
-
section: new THREE.Color(sectionColor),
|
|
69
|
-
cell: new THREE.Color(cellColor),
|
|
70
|
-
glow: new THREE.Color(glowColor),
|
|
71
|
-
bg: new THREE.Color(bgColor),
|
|
72
|
-
}), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
|
|
73
79
|
useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
|
|
74
|
-
|
|
80
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
81
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
82
|
+
const baseRef = useRef(base);
|
|
83
|
+
baseRef.current = base;
|
|
84
|
+
const setMaterial = useCallback((m) => {
|
|
85
|
+
matRef.current = m;
|
|
86
|
+
if (m)
|
|
87
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
88
|
+
}, []);
|
|
89
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
90
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
91
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
92
|
+
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("moireGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, MoireGridMaterial.key)] }) }));
|
|
75
93
|
}
|
|
76
94
|
export default MoireGrid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,
|
|
1
|
+
{"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAA2C,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AAkBF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA+IzC,CAAC;AACF,eAAe,UAAU,CAAC"}
|
|
@@ -111,7 +111,7 @@ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick })
|
|
|
111
111
|
path: (obj, onObjectReady) => (_jsx(PathRenderer, { pathSettings: obj.config, ...relabel(obj) }, obj.id)),
|
|
112
112
|
grid: (obj, onObjectReady) => (
|
|
113
113
|
// <GridHelper {...(obj.config as GridConfig)} side={2} />
|
|
114
|
-
_jsx(GridGenerator, { config: obj.config, ...relabel(obj) })),
|
|
114
|
+
_jsx(GridGenerator, { config: obj.config, id: obj.id, keyframes: obj.animations?.grid?.animations, mouseMove: obj.mouseMove?.grid, ...relabel(obj) })),
|
|
115
115
|
// A placed body of water — the object host. The world ocean is mounted by
|
|
116
116
|
// the environment instead, so this branch only ever sees a pool, a pond or
|
|
117
117
|
// a canal; OceanBuilder decides which from config.host either way.
|
|
@@ -122,7 +122,7 @@ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick })
|
|
|
122
122
|
landscape: (obj, onObjectReady) => (_jsx(LandscapeObject, { settings: obj, ...relabel(obj) }, obj.id)),
|
|
123
123
|
effect: (obj, _onObjectReady, slot = 0) => (_jsx(EffectsGenerator, { settings: {
|
|
124
124
|
config: obj.config,
|
|
125
|
-
}, ...(slot === 0 ? relabel(obj) : NO_READY) }, obj.id)),
|
|
125
|
+
}, id: slot === 0 ? obj.id : undefined, keyframes: obj.animations?.effect?.animations, mouseMove: obj.mouseMove?.effect, ...(slot === 0 ? relabel(obj) : NO_READY) }, obj.id)),
|
|
126
126
|
gallery: (obj, onObjectReady) => (_jsx(GalleryLayout, { createdObject: obj, handleObjectClick: handleObjectClick, ...relabel(obj) })),
|
|
127
127
|
light: (obj, _onObjectReady, slot = 0) => (_jsx(LightObject, { createdObject: slot === 0 ? obj : withoutShadow(obj), ...(slot === 0 ? relabel(obj) : NO_READY) })),
|
|
128
128
|
environment: (obj, onObjectReady) => (_jsx(EnvironmentObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,UAAU,oBAAqB,SAAQ,gBAAgB;IACnD,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,mEAAmE;IACnE,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAGD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAuFlD,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -3,7 +3,8 @@ import { memo, useRef, useCallback, useMemo, useEffect } from 'react';
|
|
|
3
3
|
import { buildObjectTree } from '@3driseai/3drise-core';
|
|
4
4
|
import ObjectNode from './ObjectNode.js';
|
|
5
5
|
import useInteraction from '../hooks/useInteraction.js';
|
|
6
|
-
import { ObjectHoverContext, setInteractionRunner } from '../interactions/runner.js';
|
|
6
|
+
import { ObjectHoverContext, setEffectPrewarmer, setEffectPreviewer, setInteractionRunner } from '../interactions/runner.js';
|
|
7
|
+
import { prewarmEffect, previewEffect, previewEffects } from '../operations/runtime.js';
|
|
7
8
|
import { findById } from '../utils/sceneQuery.js';
|
|
8
9
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
9
10
|
const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSettings, onObjectsReady, onObjectReady, onObjectDispose, handleObjectClick, sequences = [], clips = [], actionSequences = [], }) => {
|
|
@@ -46,14 +47,47 @@ const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSet
|
|
|
46
47
|
// "Try it" in the studio: run an interaction as if its trigger fired.
|
|
47
48
|
const objectsRef = useRef(createdObjects);
|
|
48
49
|
objectsRef.current = createdObjects;
|
|
49
|
-
useEffect(() => setInteractionRunner((objectId, interaction) => {
|
|
50
|
+
useEffect(() => setInteractionRunner((objectId, interaction, opts) => {
|
|
50
51
|
const ref = findById(objectId);
|
|
51
52
|
const createdObject = objectsRef.current?.find(o => o.id === objectId);
|
|
52
53
|
if (!ref || !createdObject)
|
|
53
54
|
return false;
|
|
54
|
-
|
|
55
|
+
if (opts?.preview) {
|
|
56
|
+
// effects play and come back; animations and actions run as usual
|
|
57
|
+
executeInteraction({ interaction: { ...interaction, effects: [] }, ref, createdObject });
|
|
58
|
+
void previewEffects(interaction.effects ?? [], ref);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
executeInteraction({ interaction, ref, createdObject });
|
|
62
|
+
}
|
|
55
63
|
return true;
|
|
56
64
|
}), [executeInteraction]);
|
|
65
|
+
useEffect(() => setEffectPreviewer((objectId, effect) => {
|
|
66
|
+
const ref = findById(objectId);
|
|
67
|
+
return ref ? previewEffect(effect, ref) : Promise.resolve(false);
|
|
68
|
+
}), []);
|
|
69
|
+
useEffect(() => setEffectPrewarmer((objectId, effect) => {
|
|
70
|
+
const ref = findById(objectId);
|
|
71
|
+
return ref ? prewarmEffect(effect, ref) : Promise.resolve();
|
|
72
|
+
}), []);
|
|
73
|
+
// Compile, in the background, the shaders of every effect this scene's interactions
|
|
74
|
+
// and actions use, so a visitor's first click never stalls. Each (effect, object) once.
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
const t = setTimeout(() => {
|
|
77
|
+
for (const o of objectsRef.current ?? []) {
|
|
78
|
+
const ref = findById(o.id);
|
|
79
|
+
if (!ref)
|
|
80
|
+
continue;
|
|
81
|
+
for (const ix of (o.actions ?? []))
|
|
82
|
+
for (const e of ix?.effects ?? [])
|
|
83
|
+
void prewarmEffect(e, ref);
|
|
84
|
+
}
|
|
85
|
+
for (const a of actionSequences ?? [])
|
|
86
|
+
for (const e of a.effects ?? [])
|
|
87
|
+
void prewarmEffect(e, null);
|
|
88
|
+
}, 1500);
|
|
89
|
+
return () => clearTimeout(t);
|
|
90
|
+
}, [createdObjects, actionSequences]);
|
|
57
91
|
const handleObjectClickHandler = (createdObject, ref, event) => {
|
|
58
92
|
const clickInteractions = filterInteractionsByEvent(createdObject.actions, "click");
|
|
59
93
|
clickInteractions.forEach((interaction) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { SkySettings, TimeSettings } from '@3driseai/3drise-core';
|
|
3
3
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
4
|
-
import type { OceanWaterSettings } from '
|
|
4
|
+
import type { OceanWaterSettings } from '@3driseai/3drise-core';
|
|
5
5
|
export interface OceanBuilderProps extends ObjectReadyProps {
|
|
6
6
|
/** Accepts a partial or older-shaped blob — including core's retired
|
|
7
7
|
* `OceanSettings`, the flat plane with a water material picked out of the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { normalizeOcean, normalizeOceanQuality } from '
|
|
3
|
+
import { normalizeOcean, normalizeOceanQuality } from '@3driseai/3drise-core';
|
|
4
4
|
import Sea from './water/Sea.js';
|
|
5
5
|
import Lake from './water/Lake.js';
|
|
6
6
|
import Storm from './water/Storm.js';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ThreeElements } from '@react-three/fiber';
|
|
2
|
+
import type { ObjectReadyProps } from '../types/objectReady';
|
|
3
|
+
import type { ParastichyGridConfig } from '../types/gridConfigs';
|
|
4
|
+
import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
5
|
+
export interface ParastichyGridProps extends ObjectReadyProps {
|
|
6
|
+
config?: ParastichyGridConfig;
|
|
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;
|
|
14
|
+
}
|
|
15
|
+
/** ParastichyGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
16
|
+
export declare const defaultParastichyGridConfig: ParastichyGridConfig;
|
|
17
|
+
/**
|
|
18
|
+
* The sunflower's crossed Fibonacci spiral families as a grid of their own: sectionSize spirals one way, sectionSize/φ the other, every crossing a seed, and the difference family cutting each cell into triangles. Light runs inward along the spirals.
|
|
19
|
+
*
|
|
20
|
+
* The grid always lies flat: any other orientation, and any movement of the
|
|
21
|
+
* whole, is the parent object's transform. Only what happens inside it animates.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ParastichyGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: ParastichyGridProps): import("react").JSX.Element;
|
|
24
|
+
export default ParastichyGrid;
|
|
25
|
+
//# sourceMappingURL=ParastichyGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParastichyGrid.d.ts","sourceRoot":"","sources":["../../src/components/ParastichyGrid.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,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,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,iGAAiG;AACjG,eAAO,MAAM,2BAA2B,EAAE,oBA2BzC,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAoC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,mBAAmB,+BA4CjK;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
5
|
+
import { useGridSurface } from '../hooks/useGridSurface.js';
|
|
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 { ParastichyGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
10
|
+
// Side-effect import registers <parastichyGridMaterial> via extend().
|
|
11
|
+
void ParastichyGridMaterial;
|
|
12
|
+
/** ParastichyGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
13
|
+
export const defaultParastichyGridConfig = {
|
|
14
|
+
cellSize: 1.2,
|
|
15
|
+
size: 50,
|
|
16
|
+
segments: undefined,
|
|
17
|
+
lineMode: 0,
|
|
18
|
+
cellMode: 0,
|
|
19
|
+
lineWidth: 1.1,
|
|
20
|
+
sectionSize: 21,
|
|
21
|
+
sectionWidth: 0.9,
|
|
22
|
+
animSpeed: 1,
|
|
23
|
+
animScale: 0.5,
|
|
24
|
+
animIntensity: 0.6,
|
|
25
|
+
fadeDistance: undefined,
|
|
26
|
+
fadeStrength: 0.5,
|
|
27
|
+
displace: 0,
|
|
28
|
+
divergence: 137.508,
|
|
29
|
+
third: 0.45,
|
|
30
|
+
sap: 0.9,
|
|
31
|
+
fill: 0.35,
|
|
32
|
+
lineColor: '#d4ac4e',
|
|
33
|
+
sectionColor: '#7fb8a8',
|
|
34
|
+
cellColor: '#0f3a33',
|
|
35
|
+
glowColor: '#fff0b8',
|
|
36
|
+
bgColor: '#03080a',
|
|
37
|
+
bgOpacity: 0,
|
|
38
|
+
reveal: 1,
|
|
39
|
+
revealDuration: 0,
|
|
40
|
+
};
|
|
41
|
+
/** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
|
|
42
|
+
const VARIANT = ['divergence', 'third', 'sap', 'fill'];
|
|
43
|
+
/** No computed uniforms: every knob maps straight to its u_<key>. */
|
|
44
|
+
const DERIVE = {};
|
|
45
|
+
/** Knobs that reshape the plane or pick a mode: they change on commit, never through the live path. */
|
|
46
|
+
const STRUCTURAL = [...GRID_STRUCTURAL];
|
|
47
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
48
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.parastichyGrid ?? []).map((p) => p.value));
|
|
49
|
+
/**
|
|
50
|
+
* The sunflower's crossed Fibonacci spiral families as a grid of their own: sectionSize spirals one way, sectionSize/φ the other, every crossing a seed, and the difference family cutting each cell into triangles. Light runs inward along the spirals.
|
|
51
|
+
*
|
|
52
|
+
* The grid always lies flat: any other orientation, and any movement of the
|
|
53
|
+
* whole, is the parent object's transform. Only what happens inside it animates.
|
|
54
|
+
*/
|
|
55
|
+
export function ParastichyGrid({ config = defaultParastichyGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
56
|
+
const matRef = useRef(null);
|
|
57
|
+
const rootRef = useRef(null);
|
|
58
|
+
const meshRef = useRef(null);
|
|
59
|
+
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
60
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
61
|
+
// and for a keyframe or pointer binding to start from.
|
|
62
|
+
const base = useMemo(() => withConfigDefaults(defaultParastichyGridConfig, config), [config]);
|
|
63
|
+
const { cellSize, size, segments, displace, reveal, revealDuration } = base;
|
|
64
|
+
const segs = segments ?? (displace > 0
|
|
65
|
+
? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
|
|
66
|
+
: 1);
|
|
67
|
+
useGridSurface(matRef, meshRef, { reveal, revealDuration });
|
|
68
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
69
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
70
|
+
const baseRef = useRef(base);
|
|
71
|
+
baseRef.current = base;
|
|
72
|
+
const setMaterial = useCallback((m) => {
|
|
73
|
+
matRef.current = m;
|
|
74
|
+
if (m)
|
|
75
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
76
|
+
}, []);
|
|
77
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
78
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
79
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
80
|
+
return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: [-Math.PI / 2, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("parastichyGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, ParastichyGridMaterial.key)] }) }));
|
|
81
|
+
}
|
|
82
|
+
export default ParastichyGrid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticlesGenerator.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesGenerator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ParticlesGenerator.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesGenerator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,QAAQ,EAAE,2BAA2B,CAAC;IACtC,uFAAuF;IACvF,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,0FAA0F;AAC1F,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmBzD,CAAC;AACF,eAAe,kBAAkB,CAAC"}
|
|
@@ -7,6 +7,9 @@ import GrinderSparksParticles from './particles/GrinderSparksParticles.js';
|
|
|
7
7
|
import ChladniSandParticles from './particles/ChladniSandParticles.js';
|
|
8
8
|
import FaradayPowderParticles from './particles/FaradayPowderParticles.js';
|
|
9
9
|
import NeonRainParticles from './particles/NeonRainParticles.js';
|
|
10
|
+
import MagneticBottleParticles from './particles/MagneticBottleParticles.js';
|
|
11
|
+
import ShapeBurstParticles from './particles/ShapeBurstParticles.js';
|
|
12
|
+
import ShapeFlowParticles from './particles/ShapeFlowParticles.js';
|
|
10
13
|
/** Standalone generative particle objects (type 'particles'), switched on config.type. */
|
|
11
14
|
const ParticlesGenerator = ({ settings, mouseMove, onObjectReady, onObjectDispose }) => {
|
|
12
15
|
const { config, animations } = settings;
|
|
@@ -23,6 +26,9 @@ const ParticlesGenerator = ({ settings, mouseMove, onObjectReady, onObjectDispos
|
|
|
23
26
|
case 'chladniSand': return _jsx(ChladniSandParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
24
27
|
case 'faradayPowder': return _jsx(FaradayPowderParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
25
28
|
case 'neonRain': return _jsx(NeonRainParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
29
|
+
case 'magneticBottle': return _jsx(MagneticBottleParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
30
|
+
case 'shapeBurst': return _jsx(ShapeBurstParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
31
|
+
case 'shapeFlow': return _jsx(ShapeFlowParticles, { id: settings.id, size: size, config: config, animations: animations, ...ready });
|
|
26
32
|
default: return null;
|
|
27
33
|
}
|
|
28
34
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ThreeElements } from '@react-three/fiber';
|
|
2
|
+
import type { ObjectReadyProps } from '../types/objectReady';
|
|
3
|
+
import type { PhyllotaxisGridConfig } from '../types/gridConfigs';
|
|
4
|
+
import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
5
|
+
export interface PhyllotaxisGridProps extends ObjectReadyProps {
|
|
6
|
+
config?: PhyllotaxisGridConfig;
|
|
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;
|
|
14
|
+
}
|
|
15
|
+
/** PhyllotaxisGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
16
|
+
export declare const defaultPhyllotaxisGridConfig: PhyllotaxisGridConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Vogel's sunflower: florets at the golden angle, each a lit dome coloured by age and carrying a mark aligned to the head's radius. Bloom rings travel from the rim to the centre and open the marks; the head itself never turns.
|
|
19
|
+
*
|
|
20
|
+
* The grid always lies flat: any other orientation, and any movement of the
|
|
21
|
+
* whole, is the parent object's transform. Only what happens inside it animates.
|
|
22
|
+
*/
|
|
23
|
+
export declare function PhyllotaxisGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: PhyllotaxisGridProps): import("react").JSX.Element;
|
|
24
|
+
export default PhyllotaxisGrid;
|
|
25
|
+
//# sourceMappingURL=PhyllotaxisGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhyllotaxisGrid.d.ts","sourceRoot":"","sources":["../../src/components/PhyllotaxisGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,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,kGAAkG;AAClG,eAAO,MAAM,4BAA4B,EAAE,qBA6B1C,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,MAAqC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,oBAAoB,+BAsDpK;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { useFrame } from '@react-three/fiber';
|
|
5
|
+
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
6
|
+
import { useGridSurface } from '../hooks/useGridSurface.js';
|
|
7
|
+
import { useConfigDriver } from '../hooks/useConfigDriver.js';
|
|
8
|
+
import { withConfigDefaults } from '../utils/configAnimations.js';
|
|
9
|
+
import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
|
|
10
|
+
import { PhyllotaxisGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
11
|
+
// Side-effect import registers <phyllotaxisGridMaterial> via extend().
|
|
12
|
+
void PhyllotaxisGridMaterial;
|
|
13
|
+
/** PhyllotaxisGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
14
|
+
export const defaultPhyllotaxisGridConfig = {
|
|
15
|
+
cellSize: 1.6,
|
|
16
|
+
size: 50,
|
|
17
|
+
segments: undefined,
|
|
18
|
+
lineMode: 0,
|
|
19
|
+
cellMode: 0,
|
|
20
|
+
lineWidth: 0.6,
|
|
21
|
+
sectionSize: 2,
|
|
22
|
+
sectionWidth: 1.4,
|
|
23
|
+
animSpeed: 1,
|
|
24
|
+
animScale: 0.5,
|
|
25
|
+
animIntensity: 0.6,
|
|
26
|
+
fadeDistance: undefined,
|
|
27
|
+
fadeStrength: 0.6,
|
|
28
|
+
displace: 0,
|
|
29
|
+
divergence: 137.508,
|
|
30
|
+
bloomRate: 0.04,
|
|
31
|
+
relief: 0.8,
|
|
32
|
+
shape: 1,
|
|
33
|
+
shapeSize: 0.85,
|
|
34
|
+
shapeGlow: 0.9,
|
|
35
|
+
lineColor: '#a8661c',
|
|
36
|
+
sectionColor: '#ffcf70',
|
|
37
|
+
cellColor: '#3a1a08',
|
|
38
|
+
glowColor: '#e4ee8a',
|
|
39
|
+
bgColor: '#070402',
|
|
40
|
+
bgOpacity: 0,
|
|
41
|
+
reveal: 1,
|
|
42
|
+
revealDuration: 0,
|
|
43
|
+
};
|
|
44
|
+
/** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
|
|
45
|
+
const VARIANT = ['divergence', 'bloomRate', 'relief', 'shape', 'shapeSize', 'shapeGlow'];
|
|
46
|
+
/** No computed uniforms: every knob maps straight to its u_<key>. */
|
|
47
|
+
const DERIVE = {};
|
|
48
|
+
/** Knobs that reshape the plane or pick a mode: they change on commit, never through the live path. */
|
|
49
|
+
const STRUCTURAL = [...GRID_STRUCTURAL, 'shape'];
|
|
50
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
51
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.phyllotaxisGrid ?? []).map((p) => p.value));
|
|
52
|
+
/**
|
|
53
|
+
* Vogel's sunflower: florets at the golden angle, each a lit dome coloured by age and carrying a mark aligned to the head's radius. Bloom rings travel from the rim to the centre and open the marks; the head itself never turns.
|
|
54
|
+
*
|
|
55
|
+
* The grid always lies flat: any other orientation, and any movement of the
|
|
56
|
+
* whole, is the parent object's transform. Only what happens inside it animates.
|
|
57
|
+
*/
|
|
58
|
+
export function PhyllotaxisGrid({ config = defaultPhyllotaxisGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
59
|
+
const matRef = useRef(null);
|
|
60
|
+
const rootRef = useRef(null);
|
|
61
|
+
const meshRef = useRef(null);
|
|
62
|
+
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
63
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
64
|
+
// and for a keyframe or pointer binding to start from.
|
|
65
|
+
const base = useMemo(() => withConfigDefaults(defaultPhyllotaxisGridConfig, config), [config]);
|
|
66
|
+
const { cellSize, size, segments, displace, reveal, revealDuration } = base;
|
|
67
|
+
const segs = segments ?? (displace > 0
|
|
68
|
+
? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
|
|
69
|
+
: 1);
|
|
70
|
+
useGridSurface(matRef, meshRef, { reveal, revealDuration });
|
|
71
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
72
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
73
|
+
const baseRef = useRef(base);
|
|
74
|
+
baseRef.current = base;
|
|
75
|
+
const setMaterial = useCallback((m) => {
|
|
76
|
+
matRef.current = m;
|
|
77
|
+
if (m)
|
|
78
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
79
|
+
}, []);
|
|
80
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
81
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
82
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
83
|
+
// Rate knobs are integrated here, never multiplied by time in the shader, so a
|
|
84
|
+
// keyframed or pointer-driven rate changes the speed without making the pattern
|
|
85
|
+
// jump. The knob is read from the material, i.e. the merged (driven) value.
|
|
86
|
+
useFrame((_, delta) => {
|
|
87
|
+
const u = matRef.current?.uniforms;
|
|
88
|
+
if (!u)
|
|
89
|
+
return;
|
|
90
|
+
const dt = Math.min(delta, 0.1) * u.u_animSpeed.value;
|
|
91
|
+
u.u_bloomPhase.value += dt * u.u_bloomRate.value;
|
|
92
|
+
});
|
|
93
|
+
return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: [-Math.PI / 2, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("phyllotaxisGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, PhyllotaxisGridMaterial.key)] }) }));
|
|
94
|
+
}
|
|
95
|
+
export default PhyllotaxisGrid;
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import type { ThreeElements } from '@react-three/fiber';
|
|
2
2
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
3
3
|
import type { QuasiGridConfig } from '../types/gridConfigs';
|
|
4
|
+
import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
4
5
|
export interface QuasiGridProps extends ObjectReadyProps {
|
|
5
6
|
config?: QuasiGridConfig;
|
|
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
|
/** QuasiGridConfig — the single source of truth for a quasicrystal grid instance. */
|
|
9
16
|
export declare const defaultQuasiGridConfig: QuasiGridConfig;
|
|
10
|
-
|
|
11
|
-
* An aperiodic quasicrystal lattice, built as a de Bruijn multigrid: `symmetry`
|
|
12
|
-
* families of evenly spaced parallel lines spread over a half turn.
|
|
13
|
-
*
|
|
14
|
-
* Where the angles do not divide the half turn evenly the intersections never
|
|
15
|
-
* repeat, so unlike every other grid in this package the pattern is genuinely
|
|
16
|
-
* non-periodic — pan as far as you like and it never comes back around. 5 is
|
|
17
|
-
* Penrose. 4 and 6 do divide evenly and so come out periodic, which makes them
|
|
18
|
-
* a useful sanity check rather than a bug.
|
|
19
|
-
*/
|
|
20
|
-
export declare function QuasiGrid({ config, groupProps, onObjectReady, onObjectDispose }: QuasiGridProps): import("react").JSX.Element;
|
|
17
|
+
export declare function QuasiGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: QuasiGridProps): import("react").JSX.Element;
|
|
21
18
|
export default QuasiGrid;
|
|
22
19
|
//# sourceMappingURL=QuasiGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuasiGrid.d.ts","sourceRoot":"","sources":["../../src/components/QuasiGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"QuasiGrid.d.ts","sourceRoot":"","sources":["../../src/components/QuasiGrid.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,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,EAAE,eA2BpC,CAAC;AAqBF,wBAAgB,SAAS,CAAC,EAAE,MAA+B,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,cAAc,+BA6ClJ;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 {
|
|
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 { QuasiGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
7
10
|
// Side-effect import registers <quasiGridMaterial> via extend().
|
|
8
11
|
void QuasiGridMaterial;
|
|
9
12
|
/** QuasiGridConfig — the single source of truth for a quasicrystal grid instance. */
|
|
@@ -45,24 +48,39 @@ export const defaultQuasiGridConfig = {
|
|
|
45
48
|
* Penrose. 4 and 6 do divide evenly and so come out periodic, which makes them
|
|
46
49
|
* a useful sanity check rather than a bug.
|
|
47
50
|
*/
|
|
48
|
-
|
|
51
|
+
/** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
|
|
52
|
+
const VARIANT = ['phase'];
|
|
53
|
+
/** Computed uniforms (clamps, enum indices, booleans as 0/1). */
|
|
54
|
+
const DERIVE = { symmetry: (c) => Math.max(3, Math.min(9, c.symmetry)) };
|
|
55
|
+
/** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
|
|
56
|
+
const STRUCTURAL = [...GRID_STRUCTURAL, 'symmetry'];
|
|
57
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
58
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.quasiGrid ?? []).map((p) => p.value));
|
|
59
|
+
export function QuasiGrid({ config = defaultQuasiGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
49
60
|
const matRef = useRef(null);
|
|
50
61
|
const rootRef = useRef(null);
|
|
51
62
|
const meshRef = useRef(null);
|
|
52
63
|
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
53
|
-
|
|
64
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
65
|
+
// and for a keyframe or pointer binding to start from.
|
|
66
|
+
const base = useMemo(() => withConfigDefaults(defaultQuasiGridConfig, config), [config]);
|
|
67
|
+
const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
|
|
54
68
|
const segs = segments ?? (displace > 0
|
|
55
69
|
? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
|
|
56
70
|
: 1);
|
|
57
|
-
const fade = fadeDistance ?? size * 0.5;
|
|
58
|
-
const colors = useMemo(() => ({
|
|
59
|
-
line: new THREE.Color(lineColor),
|
|
60
|
-
section: new THREE.Color(sectionColor),
|
|
61
|
-
cell: new THREE.Color(cellColor),
|
|
62
|
-
glow: new THREE.Color(glowColor),
|
|
63
|
-
bg: new THREE.Color(bgColor),
|
|
64
|
-
}), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
|
|
65
71
|
useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
|
|
66
|
-
|
|
72
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
73
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
74
|
+
const baseRef = useRef(base);
|
|
75
|
+
baseRef.current = base;
|
|
76
|
+
const setMaterial = useCallback((m) => {
|
|
77
|
+
matRef.current = m;
|
|
78
|
+
if (m)
|
|
79
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
80
|
+
}, []);
|
|
81
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
82
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
83
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
84
|
+
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("quasiGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, QuasiGridMaterial.key)] }) }));
|
|
67
85
|
}
|
|
68
86
|
export default QuasiGrid;
|