@ntalmagor/3drize-viewer 0.1.2
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/components/AnimatedObject.d.ts +22 -0
- package/dist/components/AnimatedObject.d.ts.map +1 -0
- package/dist/components/AnimatedObject.js +121 -0
- package/dist/components/CameraController.d.ts +16 -0
- package/dist/components/CameraController.d.ts.map +1 -0
- package/dist/components/CameraController.js +132 -0
- package/dist/components/Clouds.d.ts +14 -0
- package/dist/components/Clouds.d.ts.map +1 -0
- package/dist/components/Clouds.js +97 -0
- package/dist/components/CreatedObject.d.ts +12 -0
- package/dist/components/CreatedObject.d.ts.map +1 -0
- package/dist/components/CreatedObject.js +139 -0
- package/dist/components/CustomPrimitive.d.ts +12 -0
- package/dist/components/CustomPrimitive.d.ts.map +1 -0
- package/dist/components/CustomPrimitive.js +80 -0
- package/dist/components/EffectsGenerator.d.ts +10 -0
- package/dist/components/EffectsGenerator.d.ts.map +1 -0
- package/dist/components/EffectsGenerator.js +59 -0
- package/dist/components/EffectsGroup.d.ts +8 -0
- package/dist/components/EffectsGroup.d.ts.map +1 -0
- package/dist/components/EffectsGroup.js +8 -0
- package/dist/components/EnvironmentManager.d.ts +9 -0
- package/dist/components/EnvironmentManager.d.ts.map +1 -0
- package/dist/components/EnvironmentManager.js +47 -0
- package/dist/components/Frame.d.ts +26 -0
- package/dist/components/Frame.d.ts.map +1 -0
- package/dist/components/Frame.js +50 -0
- package/dist/components/FrameGeometry.d.ts +10 -0
- package/dist/components/FrameGeometry.d.ts.map +1 -0
- package/dist/components/FrameGeometry.js +17 -0
- package/dist/components/FrameImage.d.ts +14 -0
- package/dist/components/FrameImage.d.ts.map +1 -0
- package/dist/components/FrameImage.js +15 -0
- package/dist/components/Galaxy.d.ts +8 -0
- package/dist/components/Galaxy.d.ts.map +1 -0
- package/dist/components/Galaxy.js +9 -0
- package/dist/components/GalleryLayout.d.ts +10 -0
- package/dist/components/GalleryLayout.d.ts.map +1 -0
- package/dist/components/GalleryLayout.js +18 -0
- package/dist/components/GridHelper.d.ts +23 -0
- package/dist/components/GridHelper.d.ts.map +1 -0
- package/dist/components/GridHelper.js +38 -0
- package/dist/components/ImageGeometry.d.ts +14 -0
- package/dist/components/ImageGeometry.d.ts.map +1 -0
- package/dist/components/ImageGeometry.js +62 -0
- package/dist/components/Lensflare.d.ts +12 -0
- package/dist/components/Lensflare.d.ts.map +1 -0
- package/dist/components/Lensflare.js +66 -0
- package/dist/components/Letter.d.ts +20 -0
- package/dist/components/Letter.d.ts.map +1 -0
- package/dist/components/Letter.js +83 -0
- package/dist/components/Letters.d.ts +16 -0
- package/dist/components/Letters.d.ts.map +1 -0
- package/dist/components/Letters.js +18 -0
- package/dist/components/LightsManager.d.ts +9 -0
- package/dist/components/LightsManager.d.ts.map +1 -0
- package/dist/components/LightsManager.js +121 -0
- package/dist/components/Lines.d.ts +9 -0
- package/dist/components/Lines.d.ts.map +1 -0
- package/dist/components/Lines.js +19 -0
- package/dist/components/LoadingIndicator.d.ts +10 -0
- package/dist/components/LoadingIndicator.d.ts.map +1 -0
- package/dist/components/LoadingIndicator.js +143 -0
- package/dist/components/MaterialLibrary.d.ts +9 -0
- package/dist/components/MaterialLibrary.d.ts.map +1 -0
- package/dist/components/MaterialLibrary.js +57 -0
- package/dist/components/Moon.d.ts +13 -0
- package/dist/components/Moon.d.ts.map +1 -0
- package/dist/components/Moon.js +52 -0
- package/dist/components/ObjectNode.d.ts +11 -0
- package/dist/components/ObjectNode.d.ts.map +1 -0
- package/dist/components/ObjectNode.js +61 -0
- package/dist/components/ObjectsRenderer.d.ts +11 -0
- package/dist/components/ObjectsRenderer.d.ts.map +1 -0
- package/dist/components/ObjectsRenderer.js +19 -0
- package/dist/components/Ocean.d.ts +8 -0
- package/dist/components/Ocean.d.ts.map +1 -0
- package/dist/components/Ocean.js +111 -0
- package/dist/components/ParticlesR3f.d.ts +16 -0
- package/dist/components/ParticlesR3f.d.ts.map +1 -0
- package/dist/components/ParticlesR3f.js +66 -0
- package/dist/components/Path.d.ts +13 -0
- package/dist/components/Path.d.ts.map +1 -0
- package/dist/components/Path.js +41 -0
- package/dist/components/PathGeometry.d.ts +11 -0
- package/dist/components/PathGeometry.d.ts.map +1 -0
- package/dist/components/PathGeometry.js +109 -0
- package/dist/components/PathRenderer.d.ts +14 -0
- package/dist/components/PathRenderer.d.ts.map +1 -0
- package/dist/components/PathRenderer.js +33 -0
- package/dist/components/ProductionScene.d.ts +29 -0
- package/dist/components/ProductionScene.d.ts.map +1 -0
- package/dist/components/ProductionScene.js +18 -0
- package/dist/components/ProjectLoader.d.ts +14 -0
- package/dist/components/ProjectLoader.d.ts.map +1 -0
- package/dist/components/ProjectLoader.js +76 -0
- package/dist/components/Rain.d.ts +8 -0
- package/dist/components/Rain.d.ts.map +1 -0
- package/dist/components/Rain.js +133 -0
- package/dist/components/SceneBuilder.d.ts +5 -0
- package/dist/components/SceneBuilder.d.ts.map +1 -0
- package/dist/components/SceneBuilder.js +104 -0
- package/dist/components/SceneFog.d.ts +8 -0
- package/dist/components/SceneFog.d.ts.map +1 -0
- package/dist/components/SceneFog.js +19 -0
- package/dist/components/ShootingStar.d.ts +16 -0
- package/dist/components/ShootingStar.d.ts.map +1 -0
- package/dist/components/ShootingStar.js +92 -0
- package/dist/components/ShootingStars.d.ts +8 -0
- package/dist/components/ShootingStars.d.ts.map +1 -0
- package/dist/components/ShootingStars.js +40 -0
- package/dist/components/SkyController.d.ts +10 -0
- package/dist/components/SkyController.d.ts.map +1 -0
- package/dist/components/SkyController.js +159 -0
- package/dist/components/SkyMesh.d.ts +11 -0
- package/dist/components/SkyMesh.d.ts.map +1 -0
- package/dist/components/SkyMesh.js +36 -0
- package/dist/components/SkySystem.d.ts +34 -0
- package/dist/components/SkySystem.d.ts.map +1 -0
- package/dist/components/SkySystem.js +47 -0
- package/dist/components/Skybox.d.ts +12 -0
- package/dist/components/Skybox.d.ts.map +1 -0
- package/dist/components/Skybox.js +79 -0
- package/dist/components/Stars.d.ts +14 -0
- package/dist/components/Stars.d.ts.map +1 -0
- package/dist/components/Stars.js +165 -0
- package/dist/components/SunLight.d.ts +15 -0
- package/dist/components/SunLight.d.ts.map +1 -0
- package/dist/components/SunLight.js +57 -0
- package/dist/components/Text2D.d.ts +9 -0
- package/dist/components/Text2D.d.ts.map +1 -0
- package/dist/components/Text2D.js +56 -0
- package/dist/components/Text3D.d.ts +10 -0
- package/dist/components/Text3D.d.ts.map +1 -0
- package/dist/components/Text3D.js +8 -0
- package/dist/components/effects/AuraEffect.d.ts +10 -0
- package/dist/components/effects/AuraEffect.d.ts.map +1 -0
- package/dist/components/effects/AuraEffect.js +127 -0
- package/dist/components/effects/AuroraEffect.d.ts +10 -0
- package/dist/components/effects/AuroraEffect.d.ts.map +1 -0
- package/dist/components/effects/AuroraEffect.js +112 -0
- package/dist/components/effects/BlackHoleEffect.d.ts +10 -0
- package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -0
- package/dist/components/effects/BlackHoleEffect.js +193 -0
- package/dist/components/effects/ConstellationEffect.d.ts +10 -0
- package/dist/components/effects/ConstellationEffect.d.ts.map +1 -0
- package/dist/components/effects/ConstellationEffect.js +189 -0
- package/dist/components/effects/DataStreamEffect.d.ts +10 -0
- package/dist/components/effects/DataStreamEffect.d.ts.map +1 -0
- package/dist/components/effects/DataStreamEffect.js +138 -0
- package/dist/components/effects/DnaHelixEffect.d.ts +10 -0
- package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -0
- package/dist/components/effects/DnaHelixEffect.js +311 -0
- package/dist/components/effects/FireEffect.d.ts +10 -0
- package/dist/components/effects/FireEffect.d.ts.map +1 -0
- package/dist/components/effects/FireEffect.js +194 -0
- package/dist/components/effects/ForcefieldEffect.d.ts +10 -0
- package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -0
- package/dist/components/effects/ForcefieldEffect.js +132 -0
- package/dist/components/effects/HologramEffect.d.ts +10 -0
- package/dist/components/effects/HologramEffect.d.ts.map +1 -0
- package/dist/components/effects/HologramEffect.js +143 -0
- package/dist/components/effects/IceCrystalsEffect.d.ts +10 -0
- package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -0
- package/dist/components/effects/IceCrystalsEffect.js +190 -0
- package/dist/components/effects/LightningEffect.d.ts +10 -0
- package/dist/components/effects/LightningEffect.d.ts.map +1 -0
- package/dist/components/effects/LightningEffect.js +240 -0
- package/dist/components/effects/MoleculesEffect.d.ts +10 -0
- package/dist/components/effects/MoleculesEffect.d.ts.map +1 -0
- package/dist/components/effects/MoleculesEffect.js +179 -0
- package/dist/components/effects/NeuralNetworkEffect.d.ts +10 -0
- package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -0
- package/dist/components/effects/NeuralNetworkEffect.js +188 -0
- package/dist/components/effects/OrbEffect.d.ts +10 -0
- package/dist/components/effects/OrbEffect.d.ts.map +1 -0
- package/dist/components/effects/OrbEffect.js +291 -0
- package/dist/components/effects/PortalEffect.d.ts +10 -0
- package/dist/components/effects/PortalEffect.d.ts.map +1 -0
- package/dist/components/effects/PortalEffect.js +191 -0
- package/dist/components/effects/ShockwaveEffect.d.ts +10 -0
- package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -0
- package/dist/components/effects/ShockwaveEffect.js +159 -0
- package/dist/components/effects/SmokePlumeEffect.d.ts +10 -0
- package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -0
- package/dist/components/effects/SmokePlumeEffect.js +141 -0
- package/dist/components/effects/SmokeRingEffect.d.ts +10 -0
- package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -0
- package/dist/components/effects/SmokeRingEffect.js +158 -0
- package/dist/components/effects/VolumetricFogEffect.d.ts +10 -0
- package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -0
- package/dist/components/effects/VolumetricFogEffect.js +111 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useAnimationEvents.d.ts +10 -0
- package/dist/hooks/useAnimationEvents.d.ts.map +1 -0
- package/dist/hooks/useAnimationEvents.js +28 -0
- package/dist/hooks/useCameraAnimation.d.ts +35 -0
- package/dist/hooks/useCameraAnimation.d.ts.map +1 -0
- package/dist/hooks/useCameraAnimation.js +268 -0
- package/dist/hooks/useContinuousEffects.d.ts +15 -0
- package/dist/hooks/useContinuousEffects.d.ts.map +1 -0
- package/dist/hooks/useContinuousEffects.js +173 -0
- package/dist/hooks/useCubeCamera.d.ts +19 -0
- package/dist/hooks/useCubeCamera.d.ts.map +1 -0
- package/dist/hooks/useCubeCamera.js +73 -0
- package/dist/hooks/useEnvironmentEffects.d.ts +12 -0
- package/dist/hooks/useEnvironmentEffects.d.ts.map +1 -0
- package/dist/hooks/useEnvironmentEffects.js +22 -0
- package/dist/hooks/useFrameEffects.d.ts +6 -0
- package/dist/hooks/useFrameEffects.d.ts.map +1 -0
- package/dist/hooks/useFrameEffects.js +19 -0
- package/dist/hooks/useInteractionEffects.d.ts +11 -0
- package/dist/hooks/useInteractionEffects.d.ts.map +1 -0
- package/dist/hooks/useInteractionEffects.js +35 -0
- package/dist/hooks/useKey.d.ts +26 -0
- package/dist/hooks/useKey.d.ts.map +1 -0
- package/dist/hooks/useKey.js +73 -0
- package/dist/hooks/useLightHandlers.d.ts +14 -0
- package/dist/hooks/useLightHandlers.d.ts.map +1 -0
- package/dist/hooks/useLightHandlers.js +116 -0
- package/dist/hooks/useMaterialApplication.d.ts +9 -0
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -0
- package/dist/hooks/useMaterialApplication.js +113 -0
- package/dist/hooks/useMaterialOptions.d.ts +13 -0
- package/dist/hooks/useMaterialOptions.d.ts.map +1 -0
- package/dist/hooks/useMaterialOptions.js +110 -0
- package/dist/hooks/useMaterialUniforms.d.ts +18 -0
- package/dist/hooks/useMaterialUniforms.d.ts.map +1 -0
- package/dist/hooks/useMaterialUniforms.js +96 -0
- package/dist/hooks/useMeshController.d.ts +3 -0
- package/dist/hooks/useMeshController.d.ts.map +1 -0
- package/dist/hooks/useMeshController.js +152 -0
- package/dist/hooks/useMouseHandlers.d.ts +8 -0
- package/dist/hooks/useMouseHandlers.d.ts.map +1 -0
- package/dist/hooks/useMouseHandlers.js +47 -0
- package/dist/hooks/useObjectAnimation.d.ts +13 -0
- package/dist/hooks/useObjectAnimation.d.ts.map +1 -0
- package/dist/hooks/useObjectAnimation.js +11 -0
- package/dist/hooks/useObjectEdges.d.ts +4 -0
- package/dist/hooks/useObjectEdges.d.ts.map +1 -0
- package/dist/hooks/useObjectEdges.js +199 -0
- package/dist/hooks/useOrbitControls.d.ts +7 -0
- package/dist/hooks/useOrbitControls.d.ts.map +1 -0
- package/dist/hooks/useOrbitControls.js +9 -0
- package/dist/hooks/useParticlePositions.d.ts +19 -0
- package/dist/hooks/useParticlePositions.d.ts.map +1 -0
- package/dist/hooks/useParticlePositions.js +56 -0
- package/dist/hooks/useParticlesColors.d.ts +14 -0
- package/dist/hooks/useParticlesColors.d.ts.map +1 -0
- package/dist/hooks/useParticlesColors.js +27 -0
- package/dist/hooks/useParticlesTextures.d.ts +10 -0
- package/dist/hooks/useParticlesTextures.d.ts.map +1 -0
- package/dist/hooks/useParticlesTextures.js +23 -0
- package/dist/hooks/usePathAnimation.d.ts +26 -0
- package/dist/hooks/usePathAnimation.d.ts.map +1 -0
- package/dist/hooks/usePathAnimation.js +120 -0
- package/dist/hooks/useSkyAnimation.d.ts +14 -0
- package/dist/hooks/useSkyAnimation.d.ts.map +1 -0
- package/dist/hooks/useSkyAnimation.js +46 -0
- package/dist/hooks/useSkySystem.d.ts +26 -0
- package/dist/hooks/useSkySystem.d.ts.map +1 -0
- package/dist/hooks/useSkySystem.js +57 -0
- package/dist/hooks/useSkyUniforms.d.ts +18 -0
- package/dist/hooks/useSkyUniforms.d.ts.map +1 -0
- package/dist/hooks/useSkyUniforms.js +59 -0
- package/dist/hooks/useTransformControls.d.ts +6 -0
- package/dist/hooks/useTransformControls.d.ts.map +1 -0
- package/dist/hooks/useTransformControls.js +111 -0
- package/dist/hooks/useWaterEnvironment.d.ts +5 -0
- package/dist/hooks/useWaterEnvironment.d.ts.map +1 -0
- package/dist/hooks/useWaterEnvironment.js +27 -0
- package/dist/hooks/useWaterReflections.d.ts +17 -0
- package/dist/hooks/useWaterReflections.d.ts.map +1 -0
- package/dist/hooks/useWaterReflections.js +77 -0
- package/dist/index.d.ts +140 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/services/AnimationsManager.d.ts +33 -0
- package/dist/services/AnimationsManager.d.ts.map +1 -0
- package/dist/services/AnimationsManager.js +58 -0
- package/dist/services/FontManager.d.ts +32 -0
- package/dist/services/FontManager.d.ts.map +1 -0
- package/dist/services/FontManager.js +76 -0
- package/dist/services/TexturesManager.d.ts +17 -0
- package/dist/services/TexturesManager.d.ts.map +1 -0
- package/dist/services/TexturesManager.js +48 -0
- package/dist/shaders/RainMaterial.d.ts +34 -0
- package/dist/shaders/RainMaterial.d.ts.map +1 -0
- package/dist/shaders/RainMaterial.js +56 -0
- package/dist/shaders/ShaderEffectsMaterial.d.ts +279 -0
- package/dist/shaders/ShaderEffectsMaterial.d.ts.map +1 -0
- package/dist/shaders/ShaderEffectsMaterial.js +257 -0
- package/dist/shaders/ShootingStarMaterial.d.ts +14 -0
- package/dist/shaders/ShootingStarMaterial.d.ts.map +1 -0
- package/dist/shaders/ShootingStarMaterial.js +33 -0
- package/dist/shaders/SkyboxMaterial.d.ts +38 -0
- package/dist/shaders/SkyboxMaterial.d.ts.map +1 -0
- package/dist/shaders/SkyboxMaterial.js +57 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts +2 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.js +167 -0
- package/dist/utils/CameraSingleton.d.ts +35 -0
- package/dist/utils/CameraSingleton.d.ts.map +1 -0
- package/dist/utils/CameraSingleton.js +178 -0
- package/dist/utils/anchorUtils.d.ts +10 -0
- package/dist/utils/anchorUtils.d.ts.map +1 -0
- package/dist/utils/anchorUtils.js +13 -0
- package/dist/utils/frameAnimations.d.ts +49 -0
- package/dist/utils/frameAnimations.d.ts.map +1 -0
- package/dist/utils/frameAnimations.js +213 -0
- package/dist/utils/handleGenerativeEffectsAnimations.d.ts +5 -0
- package/dist/utils/handleGenerativeEffectsAnimations.d.ts.map +1 -0
- package/dist/utils/handleGenerativeEffectsAnimations.js +268 -0
- package/dist/utils/hasHoverAnimation.d.ts +3 -0
- package/dist/utils/hasHoverAnimation.d.ts.map +1 -0
- package/dist/utils/hasHoverAnimation.js +15 -0
- package/dist/utils/particleAnimations.d.ts +3 -0
- package/dist/utils/particleAnimations.d.ts.map +1 -0
- package/dist/utils/particleAnimations.js +17 -0
- package/dist/utils/sceneQuery.d.ts +9 -0
- package/dist/utils/sceneQuery.d.ts.map +1 -0
- package/dist/utils/sceneQuery.js +22 -0
- package/dist/utils/shaderUtils.d.ts +6 -0
- package/dist/utils/shaderUtils.d.ts.map +1 -0
- package/dist/utils/shaderUtils.js +145 -0
- package/dist/utils/textEffects.d.ts +31 -0
- package/dist/utils/textEffects.d.ts.map +1 -0
- package/dist/utils/textEffects.js +61 -0
- package/dist/utils/utils3d.d.ts +7 -0
- package/dist/utils/utils3d.d.ts.map +1 -0
- package/dist/utils/utils3d.js +34 -0
- package/package.json +43 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useMemo, useCallback } from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { useThree } from '@react-three/fiber';
|
|
5
|
+
import { useSkySystem } from '../hooks/useSkySystem';
|
|
6
|
+
export function createFlareTexture(type) {
|
|
7
|
+
const canvas = document.createElement('canvas');
|
|
8
|
+
canvas.width = 256;
|
|
9
|
+
canvas.height = 256;
|
|
10
|
+
const ctx = canvas.getContext('2d');
|
|
11
|
+
if (type === 0) {
|
|
12
|
+
const gradient = ctx.createRadialGradient(128, 128, 0, 128, 128, 128);
|
|
13
|
+
gradient.addColorStop(0, 'rgba(255, 255, 255, 1)');
|
|
14
|
+
gradient.addColorStop(0.1, 'rgba(255, 250, 240, 0.9)');
|
|
15
|
+
gradient.addColorStop(0.25, 'rgba(255, 229, 176, 0.6)');
|
|
16
|
+
gradient.addColorStop(0.5, 'rgba(255, 229, 176, 0.2)');
|
|
17
|
+
gradient.addColorStop(1, 'rgba(255, 229, 176, 0)');
|
|
18
|
+
ctx.fillStyle = gradient;
|
|
19
|
+
ctx.fillRect(0, 0, 256, 256);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const gradient = ctx.createRadialGradient(128, 128, 0, 128, 128, 128);
|
|
23
|
+
gradient.addColorStop(0, 'rgba(255, 229, 176, 0.6)');
|
|
24
|
+
gradient.addColorStop(0.3, 'rgba(255, 229, 176, 0.3)');
|
|
25
|
+
gradient.addColorStop(0.6, 'rgba(255, 229, 176, 0.1)');
|
|
26
|
+
gradient.addColorStop(1, 'rgba(255, 229, 176, 0)');
|
|
27
|
+
ctx.fillStyle = gradient;
|
|
28
|
+
ctx.fillRect(0, 0, 256, 256);
|
|
29
|
+
}
|
|
30
|
+
const texture = new THREE.CanvasTexture(canvas);
|
|
31
|
+
texture.minFilter = THREE.LinearFilter;
|
|
32
|
+
texture.magFilter = THREE.LinearFilter;
|
|
33
|
+
return texture;
|
|
34
|
+
}
|
|
35
|
+
const Lensflare = ({ visible = true, intensity = 1, timeSettings, }) => {
|
|
36
|
+
const spriteRef = useRef(null);
|
|
37
|
+
const { camera } = useThree();
|
|
38
|
+
const texture = useMemo(() => createFlareTexture(0), []);
|
|
39
|
+
const material = useMemo(() => new THREE.SpriteMaterial({
|
|
40
|
+
map: texture,
|
|
41
|
+
transparent: true,
|
|
42
|
+
blending: THREE.AdditiveBlending,
|
|
43
|
+
depthWrite: false,
|
|
44
|
+
depthTest: false,
|
|
45
|
+
}), [texture]);
|
|
46
|
+
const handleTimeUpdate = useCallback((state) => {
|
|
47
|
+
const { sunDirection } = state;
|
|
48
|
+
if (spriteRef.current) {
|
|
49
|
+
const distance = Math.min(camera.far * 0.5, 200);
|
|
50
|
+
spriteRef.current.position.copy(camera.position);
|
|
51
|
+
spriteRef.current.position.addScaledVector(sunDirection, distance);
|
|
52
|
+
const flareScale = 5 * intensity;
|
|
53
|
+
spriteRef.current.scale.setScalar(flareScale);
|
|
54
|
+
material.opacity = sunDirection.y > 0 ? Math.min(sunDirection.y * 2, 1) : 0;
|
|
55
|
+
}
|
|
56
|
+
}, [camera, intensity, material]);
|
|
57
|
+
useSkySystem({
|
|
58
|
+
timeSettings,
|
|
59
|
+
onTimeUpdate: handleTimeUpdate,
|
|
60
|
+
enabled: visible,
|
|
61
|
+
});
|
|
62
|
+
if (!visible)
|
|
63
|
+
return null;
|
|
64
|
+
return (_jsx("sprite", { ref: spriteRef, material: material, renderOrder: Infinity }));
|
|
65
|
+
};
|
|
66
|
+
export default Lensflare;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Object3D } from 'three';
|
|
2
|
+
import type { HoverSettings, Vector3Array } from '@ntalmagor/3drize-core';
|
|
3
|
+
import type { TransformEffect, MaterialSettings, ColorEffect, TextConfig } from '@ntalmagor/3drize-core';
|
|
4
|
+
export interface LetterData {
|
|
5
|
+
char: string;
|
|
6
|
+
position: Vector3Array;
|
|
7
|
+
index: number;
|
|
8
|
+
}
|
|
9
|
+
export interface LetterProps {
|
|
10
|
+
letterData: LetterData;
|
|
11
|
+
config: TextConfig;
|
|
12
|
+
materialSettings: MaterialSettings;
|
|
13
|
+
hoverSettings: HoverSettings;
|
|
14
|
+
transformEffects?: TransformEffect[];
|
|
15
|
+
colorEffects?: ColorEffect[];
|
|
16
|
+
isActive: boolean;
|
|
17
|
+
onClick?: (object: Object3D) => void;
|
|
18
|
+
}
|
|
19
|
+
export default function Letter({ letterData, config, materialSettings, hoverSettings, transformEffects, colorEffects, isActive, onClick, }: LetterProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=Letter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Letter.d.ts","sourceRoot":"","sources":["../../src/components/Letter.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAe,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAC,gBAAgB,EAAe,WAAW,EAAE,UAAU,EAA8B,MAAM,wBAAwB,CAAC;AAMjJ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC;CACtC;AA8BD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAqB,EACrB,YAAiB,EACjB,QAAQ,EACR,OAAO,GACR,EAAE,WAAW,2CA6Gb"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState, useEffect } from 'react';
|
|
3
|
+
import { useFrame } from '@react-three/fiber';
|
|
4
|
+
import { useCursor, Text, Text3D, Center } from '@react-three/drei';
|
|
5
|
+
import MaterialLibrary from './MaterialLibrary';
|
|
6
|
+
import { createDefaultEffectState, applyTransformEffects } from '@ntalmagor/3drize-core';
|
|
7
|
+
import { useFrameEffects } from '../hooks/useFrameEffects';
|
|
8
|
+
import { fontManager } from '../../../core/src/services/FontManager';
|
|
9
|
+
const getText3DConfig = (config) => {
|
|
10
|
+
const c = config;
|
|
11
|
+
return {
|
|
12
|
+
size: c.size ?? 1,
|
|
13
|
+
height: c.height ?? 0.2,
|
|
14
|
+
curveSegments: c.curveSegments ?? 12,
|
|
15
|
+
bevelEnabled: c.bevelEnabled ?? true,
|
|
16
|
+
bevelThickness: c.bevelThickness ?? 0.03,
|
|
17
|
+
bevelSize: c.bevelSize ?? 0.02,
|
|
18
|
+
bevelOffset: c.bevelOffset ?? 0,
|
|
19
|
+
bevelSegments: c.bevelSegments ?? 5,
|
|
20
|
+
letterSpacing: c.letterSpacing ?? 0,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
const getText2DConfig = (config) => {
|
|
24
|
+
const c = config;
|
|
25
|
+
return {
|
|
26
|
+
fontSize: c.fontSize ?? 1,
|
|
27
|
+
maxWidth: c.maxWidth ?? Infinity,
|
|
28
|
+
lineHeight: c.lineHeight ?? 1,
|
|
29
|
+
letterSpacing: c.letterSpacing ?? 0,
|
|
30
|
+
textAlign: c.textAlign ?? 'center',
|
|
31
|
+
anchorX: c.anchorX ?? 'center',
|
|
32
|
+
anchorY: c.anchorY ?? 'middle',
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export default function Letter({ letterData, config, materialSettings, hoverSettings, transformEffects = [], colorEffects = [], isActive, onClick, }) {
|
|
36
|
+
const groupRef = useRef(null);
|
|
37
|
+
const letterRef = useRef(null);
|
|
38
|
+
const hitboxRef = useRef(null);
|
|
39
|
+
const effectStateRef = useRef(null);
|
|
40
|
+
const [rnd] = useState(() => Math.random());
|
|
41
|
+
const [clicked, setClicked] = useState(false);
|
|
42
|
+
const { handlePointerEnter, handlePointerLeave, hovered } = useFrameEffects(isActive);
|
|
43
|
+
const { renderMode = 'bitmap', font } = config;
|
|
44
|
+
const text3DConfig = getText3DConfig(config);
|
|
45
|
+
const text2DConfig = getText2DConfig(config);
|
|
46
|
+
const { sensitivity = 0.5, applyToChildren = false } = hoverSettings;
|
|
47
|
+
const color = 'color' in materialSettings ? materialSettings.color : '#ffffff';
|
|
48
|
+
const opacity = 'opacity' in materialSettings ? materialSettings.opacity : 1;
|
|
49
|
+
const useDreiMaterials = materialSettings.materialType === 'advanced';
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (useDreiMaterials && renderMode === 'bitmap') {
|
|
52
|
+
console.warn('[Letter] Advanced materials not supported with bitmap text. Switch to text3d render mode.');
|
|
53
|
+
}
|
|
54
|
+
}, [useDreiMaterials, renderMode]);
|
|
55
|
+
useCursor(hovered);
|
|
56
|
+
const fontInfo = font ? fontManager.getFont(font) : null;
|
|
57
|
+
const bitmapFontUrl = fontInfo?.googleFont;
|
|
58
|
+
const text3dFontUrl = fontInfo?.threejsFont;
|
|
59
|
+
const enabledEffects = transformEffects.filter(e => e.enabled !== false);
|
|
60
|
+
useFrame((state, dt) => {
|
|
61
|
+
if (!groupRef.current || !letterRef.current || !applyToChildren)
|
|
62
|
+
return;
|
|
63
|
+
const time = state.clock.elapsedTime;
|
|
64
|
+
if (!effectStateRef.current) {
|
|
65
|
+
effectStateRef.current = createDefaultEffectState(letterRef.current);
|
|
66
|
+
}
|
|
67
|
+
if (enabledEffects.length > 0) {
|
|
68
|
+
applyTransformEffects(letterRef.current, enabledEffects, time, dt, effectStateRef.current, hovered, clicked, sensitivity);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const handleClick = (e) => {
|
|
72
|
+
e.stopPropagation();
|
|
73
|
+
setClicked(!clicked);
|
|
74
|
+
if (groupRef.current)
|
|
75
|
+
onClick?.(groupRef.current);
|
|
76
|
+
};
|
|
77
|
+
const actualRenderMode = renderMode === 'text3d' && !font ? 'bitmap' : renderMode;
|
|
78
|
+
const fontSize = actualRenderMode === 'text3d' ? text3DConfig.size : text2DConfig.fontSize;
|
|
79
|
+
const boxWidth = fontSize * 0.8;
|
|
80
|
+
const boxHeight = fontSize * 1.2;
|
|
81
|
+
const boxDepth = actualRenderMode === 'text3d' ? text3DConfig.height + text3DConfig.bevelThickness * 2 : text3DConfig.height + 1;
|
|
82
|
+
return (_jsxs("group", { position: letterData.position, rotation: [0, 0, 0], ref: groupRef, name: `letter-${letterData.char}-${letterData.index}`, userData: { char: letterData.char, index: letterData.index, position: letterData.position }, children: [_jsx("mesh", { ref: hitboxRef, visible: false, onPointerEnter: handlePointerEnter, onPointerLeave: handlePointerLeave, onClick: handleClick, children: _jsx("boxGeometry", { args: [boxWidth, boxHeight, boxDepth] }) }), _jsx("group", { ref: letterRef, raycast: () => null, children: actualRenderMode === 'text3d' ? (_jsx(Center, { disableX: text2DConfig.anchorX === 'left', disableY: text2DConfig.anchorY === 'top', disableZ: false, children: _jsxs(Text3D, { font: text3dFontUrl || 'https://threejs.org/examples/fonts/helvetiker_regular.typeface.json', size: text3DConfig.size, height: text3DConfig.height, curveSegments: text3DConfig.curveSegments, bevelEnabled: text3DConfig.bevelEnabled, bevelThickness: text3DConfig.bevelThickness, bevelSize: text3DConfig.bevelSize, bevelOffset: text3DConfig.bevelOffset, bevelSegments: text3DConfig.bevelSegments, children: [letterData.char, useDreiMaterials && actualRenderMode === 'text3d' ? (_jsx(MaterialLibrary, { materialSettings: materialSettings })) : (_jsx("meshStandardMaterial", { color: color, transparent: opacity < 1, opacity: opacity }))] }) })) : (_jsx(Text, { fontSize: text2DConfig.fontSize, color: color, maxWidth: text2DConfig.maxWidth, lineHeight: text2DConfig.lineHeight, letterSpacing: text2DConfig.letterSpacing, textAlign: text2DConfig.textAlign, anchorX: text2DConfig.anchorX, anchorY: text2DConfig.anchorY, font: bitmapFontUrl || undefined, fillOpacity: opacity, children: letterData.char })) })] }));
|
|
83
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LetterData } from './Letter';
|
|
2
|
+
import type { HoverSettings } from '@ntalmagor/3drize-core';
|
|
3
|
+
import type { TextConfig } from '@ntalmagor/3drize-core';
|
|
4
|
+
import type { MaterialSettings } from '@ntalmagor/3drize-core';
|
|
5
|
+
import type { ColorEffect, TransformEffect } from '@ntalmagor/3drize-core';
|
|
6
|
+
export interface LettersProps {
|
|
7
|
+
text: string;
|
|
8
|
+
config: TextConfig;
|
|
9
|
+
materialSettings: MaterialSettings;
|
|
10
|
+
hoverSettings: HoverSettings;
|
|
11
|
+
transformEffects?: TransformEffect[];
|
|
12
|
+
colorEffects?: ColorEffect[];
|
|
13
|
+
onLetterClick?: (letterData: LetterData) => void;
|
|
14
|
+
}
|
|
15
|
+
export default function Letters({ text, config, materialSettings, hoverSettings, transformEffects, colorEffects, onLetterClick, }: LettersProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=Letters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Letters.d.ts","sourceRoot":"","sources":["../../src/components/Letters.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAqB,EACrB,YAAiB,EACjB,aAAa,GACd,EAAE,YAAY,2CAkCd"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import Letter from './Letter';
|
|
4
|
+
export default function Letters({ text, config, materialSettings, hoverSettings, transformEffects = [], colorEffects = [], onLetterClick, }) {
|
|
5
|
+
const ref = useRef(null);
|
|
6
|
+
const characters = text.split('');
|
|
7
|
+
const letterSpacing = config.letterSpacing || 0;
|
|
8
|
+
const spacing = 0.6 + letterSpacing;
|
|
9
|
+
const letters = characters.map((char, index) => {
|
|
10
|
+
const totalWidth = (characters.length - 1) * spacing;
|
|
11
|
+
const xOffset = index * spacing - totalWidth / 2;
|
|
12
|
+
return { char, index, position: [xOffset, 0, 0] };
|
|
13
|
+
});
|
|
14
|
+
const handleLetterClick = (object, letterData) => {
|
|
15
|
+
onLetterClick?.(letterData);
|
|
16
|
+
};
|
|
17
|
+
return (_jsx("group", { ref: ref, scale: [1, 1, 1], position: [0, 0, 0], rotation: [0, 0, 0], children: letters.map((letterData) => (_jsx(Letter, { letterData: letterData, config: config, materialSettings: materialSettings, hoverSettings: hoverSettings, transformEffects: transformEffects, colorEffects: colorEffects, isActive: false, onClick: (object) => handleLetterClick(object, letterData) }, `${letterData.char}-${letterData.index}`))) }));
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { LightConfig } from '@ntalmagor/3drize-core';
|
|
3
|
+
export interface LightsManagerProps {
|
|
4
|
+
lights: LightConfig[];
|
|
5
|
+
selectedLight?: string | null;
|
|
6
|
+
}
|
|
7
|
+
declare const LightsManager: React.FC<LightsManagerProps>;
|
|
8
|
+
export default LightsManager;
|
|
9
|
+
//# sourceMappingURL=LightsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightsManager.d.ts","sourceRoot":"","sources":["../../src/components/LightsManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAI1D,OAAO,KAAK,EAAmB,WAAW,EAAqC,MAAM,wBAAwB,CAAC;AAc9G,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AA6BD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAkM/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect, useMemo } from 'react';
|
|
3
|
+
import { useFrame, useThree } from '@react-three/fiber';
|
|
4
|
+
import { useHelper } from '@react-three/drei';
|
|
5
|
+
import { createSunPosition } from '../utils/utils3d';
|
|
6
|
+
import { useLightHandlers } from '../hooks/useLightHandlers';
|
|
7
|
+
import { Color, DirectionalLightHelper, SpotLightHelper, PointLightHelper, } from 'three';
|
|
8
|
+
const LightHelperMesh = ({ position, lightName, lightColor, hasHandlers, onEnter, onLeave, size = 0.5, }) => {
|
|
9
|
+
if (!hasHandlers)
|
|
10
|
+
return null;
|
|
11
|
+
return (_jsxs("mesh", { visible: false, position: position, onPointerEnter: (e) => { e.stopPropagation(); onEnter(lightName); }, onPointerLeave: (e) => { e.stopPropagation(); onLeave(lightName); }, children: [_jsx("sphereGeometry", { args: [size, 16, 16] }), _jsx("meshBasicMaterial", { color: lightColor, transparent: true, opacity: 0.3, depthWrite: false })] }));
|
|
12
|
+
};
|
|
13
|
+
const LightsManager = ({ lights, selectedLight = null }) => {
|
|
14
|
+
const { scene } = useThree();
|
|
15
|
+
const config = lights[0];
|
|
16
|
+
const debug = config.showHelpers || false;
|
|
17
|
+
const ambientLightRef = useRef(null);
|
|
18
|
+
const directionalLightRefs = useRef(new Map());
|
|
19
|
+
const spotLightRefs = useRef(new Map());
|
|
20
|
+
const spotLightTargets = useRef(new Map());
|
|
21
|
+
const pointLightRefs = useRef(new Map());
|
|
22
|
+
const sunLightRef = useRef(null);
|
|
23
|
+
const allLightConfigs = useMemo(() => {
|
|
24
|
+
const configs = [];
|
|
25
|
+
if (config.directionalLights)
|
|
26
|
+
configs.push(...config.directionalLights);
|
|
27
|
+
if (config.spotLights)
|
|
28
|
+
configs.push(...config.spotLights);
|
|
29
|
+
if (config.pointLights)
|
|
30
|
+
configs.push(...config.pointLights);
|
|
31
|
+
return configs;
|
|
32
|
+
}, [config.directionalLights, config.spotLights, config.pointLights]);
|
|
33
|
+
const { handleLightEnter, handleLightLeave } = useLightHandlers({ directionalLightRefs, spotLightRefs, pointLightRefs }, allLightConfigs);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (!config.directionalLights)
|
|
36
|
+
return;
|
|
37
|
+
config.directionalLights.forEach((dc) => {
|
|
38
|
+
const light = directionalLightRefs.current.get(dc.name);
|
|
39
|
+
if (!light)
|
|
40
|
+
return;
|
|
41
|
+
light.color = new Color(dc.color || '#ffffff');
|
|
42
|
+
light.intensity = dc.intensity || 1;
|
|
43
|
+
light.position.set(dc.position?.[0] ?? 0, dc.position?.[1] ?? 10, dc.position?.[2] ?? 0);
|
|
44
|
+
});
|
|
45
|
+
}, [config.directionalLights]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (ambientLightRef.current && config.ambient?.color) {
|
|
48
|
+
ambientLightRef.current.color = new Color(config.ambient.color);
|
|
49
|
+
ambientLightRef.current.intensity = config.ambient.intensity || 1;
|
|
50
|
+
}
|
|
51
|
+
}, [config.ambient]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!config.spotLights)
|
|
54
|
+
return;
|
|
55
|
+
config.spotLights.forEach((sc) => {
|
|
56
|
+
const light = spotLightRefs.current.get(sc.name);
|
|
57
|
+
if (!light)
|
|
58
|
+
return;
|
|
59
|
+
light.color = new Color(sc.color || '#ffffff');
|
|
60
|
+
light.intensity = sc.intensity || 1;
|
|
61
|
+
light.position.set(sc.position?.[0] ?? 0, sc.position?.[1] ?? 10, sc.position?.[2] ?? 0);
|
|
62
|
+
light.angle = sc.angle || Math.PI / 3;
|
|
63
|
+
light.penumbra = sc.penumbra || 0;
|
|
64
|
+
light.decay = sc.decay || 1;
|
|
65
|
+
light.distance = sc.distance || 0;
|
|
66
|
+
if (sc.targetPosition) {
|
|
67
|
+
light.target.position.set(sc.targetPosition[0], sc.targetPosition[1], sc.targetPosition[2]);
|
|
68
|
+
light.target.updateMatrixWorld();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}, [config.spotLights, config.enableShadows]);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!config.pointLights)
|
|
74
|
+
return;
|
|
75
|
+
config.pointLights.forEach((pc) => {
|
|
76
|
+
const light = pointLightRefs.current.get(pc.name);
|
|
77
|
+
if (!light)
|
|
78
|
+
return;
|
|
79
|
+
light.color = new Color(pc.color || '#ffffff');
|
|
80
|
+
light.intensity = pc.intensity || 1;
|
|
81
|
+
light.position.set(pc.position?.[0] ?? 0, pc.position?.[1] ?? 10, pc.position?.[2] ?? 0);
|
|
82
|
+
light.decay = pc.decay || 1;
|
|
83
|
+
light.distance = pc.distance || 0;
|
|
84
|
+
});
|
|
85
|
+
}, [config.pointLights, config.enableShadows]);
|
|
86
|
+
useFrame((state) => {
|
|
87
|
+
if (config.followSun && sunLightRef.current) {
|
|
88
|
+
const time = state.clock.getElapsedTime();
|
|
89
|
+
const sunPosition = createSunPosition(config.sun?.elevation ?? 45, (config.sun?.azimuth ?? -90) + time * 0.01);
|
|
90
|
+
sunLightRef.current.position.set(sunPosition.x * 100, sunPosition.y * 100, sunPosition.z * 100);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
useHelper(debug && selectedLight === 'sun' ? sunLightRef : null, DirectionalLightHelper, 5, 'orange');
|
|
94
|
+
const hasHandlers = (lightConfig) => !!lightConfig.handlers && (!!lightConfig.handlers.onMouseMove?.enabled ||
|
|
95
|
+
!!lightConfig.handlers.onMouseEnter?.enabled ||
|
|
96
|
+
!!lightConfig.handlers.onMouseLeave?.enabled);
|
|
97
|
+
return (_jsxs(_Fragment, { children: [_jsx("ambientLight", { ref: ambientLightRef, color: config.ambient?.color, intensity: config.ambient?.intensity }), config.enabled && (_jsxs(_Fragment, { children: [config.directionalLights?.map((dc) => dc.enabled !== false ? (_jsxs("group", { children: [_jsx("directionalLight", { color: dc.color || '#ffffff', intensity: dc.intensity || 1, position: dc.position || [0, 10, 0], castShadow: true, ref: (ref) => { if (ref)
|
|
98
|
+
directionalLightRefs.current.set(dc.name, ref); } }), _jsx(LightHelperMesh, { position: dc.position || [0, 10, 0], lightName: dc.name, lightColor: dc.color || '#ffffff', hasHandlers: hasHandlers(dc), onEnter: handleLightEnter, onLeave: handleLightLeave, size: 1 })] }, dc.name)) : null), config.spotLights?.map((sc) => sc.enabled !== false ? (_jsxs("group", { children: [_jsx("spotLight", { ref: (ref) => {
|
|
99
|
+
if (ref) {
|
|
100
|
+
spotLightRefs.current.set(sc.name, ref);
|
|
101
|
+
if (!spotLightTargets.current.has(sc.name)) {
|
|
102
|
+
scene.add(ref.target);
|
|
103
|
+
spotLightTargets.current.set(sc.name, ref.target);
|
|
104
|
+
}
|
|
105
|
+
if (sc.targetPosition) {
|
|
106
|
+
ref.target.position.set(sc.targetPosition[0], sc.targetPosition[1], sc.targetPosition[2]);
|
|
107
|
+
ref.target.updateMatrixWorld();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const target = spotLightTargets.current.get(sc.name);
|
|
112
|
+
if (target) {
|
|
113
|
+
scene.remove(target);
|
|
114
|
+
spotLightTargets.current.delete(sc.name);
|
|
115
|
+
}
|
|
116
|
+
spotLightRefs.current.delete(sc.name);
|
|
117
|
+
}
|
|
118
|
+
}, color: sc.color || '#ffffff', intensity: sc.intensity || 1, position: sc.position || [0, 10, 0], angle: sc.angle || Math.PI / 3, penumbra: sc.penumbra || 0, decay: sc.decay || 1, distance: sc.distance || 0, castShadow: config.enableShadows }), _jsx(LightHelperMesh, { position: sc.position || [0, 10, 0], lightName: sc.name, lightColor: sc.color || '#ffffff', hasHandlers: hasHandlers(sc), onEnter: handleLightEnter, onLeave: handleLightLeave, size: 0.8 })] }, sc.name)) : null), config.pointLights?.map((pc) => pc.enabled !== false ? (_jsxs("group", { children: [_jsx("pointLight", { ref: (ref) => { if (ref)
|
|
119
|
+
pointLightRefs.current.set(pc.name, ref); }, color: pc.color || '#ffffff', intensity: pc.intensity || 1, position: pc.position || [0, 10, 0], decay: pc.decay || 1, distance: pc.distance || 0, castShadow: config.enableShadows }), _jsx(LightHelperMesh, { position: pc.position || [0, 10, 0], lightName: pc.name, lightColor: pc.color || '#ffffff', hasHandlers: hasHandlers(pc), onEnter: handleLightEnter, onLeave: handleLightLeave, size: 0.6 })] }, pc.name)) : null)] })), debug && selectedLight && (_jsxs(_Fragment, { children: [config.directionalLights?.map((lc) => lc.enabled !== false && selectedLight === lc.name && directionalLightRefs.current.get(lc.name) ? (_jsx("primitive", { object: new DirectionalLightHelper(directionalLightRefs.current.get(lc.name), 3, 'red') }, `helper-${lc.name}`)) : null), config.spotLights?.map((lc) => lc.enabled !== false && selectedLight === lc.name && spotLightRefs.current.get(lc.name) ? (_jsx("primitive", { object: new SpotLightHelper(spotLightRefs.current.get(lc.name), 'yellow') }, `helper-${lc.name}`)) : null), config.pointLights?.map((lc) => lc.enabled !== false && selectedLight === lc.name && pointLightRefs.current.get(lc.name) ? (_jsx("primitive", { object: new PointLightHelper(pointLightRefs.current.get(lc.name), 1, 'blue') }, `helper-${lc.name}`)) : null)] }))] }));
|
|
120
|
+
};
|
|
121
|
+
export default LightsManager;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ParticlesSettings } from '@ntalmagor/3drize-core';
|
|
3
|
+
interface LinesProps {
|
|
4
|
+
createdObject: ParticlesSettings;
|
|
5
|
+
transitionSettings?: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
declare const Lines: React.FC<LinesProps>;
|
|
8
|
+
export default Lines;
|
|
9
|
+
//# sourceMappingURL=Lines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lines.d.ts","sourceRoot":"","sources":["../../src/components/Lines.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,wBAAwB,CAAC;AAE/E,UAAU,UAAU;IAClB,aAAa,EAAE,iBAAiB,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1C;AAED,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA4B/B,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { PositionsCreator } from '@ntalmagor/3drize-core';
|
|
4
|
+
import Path from './Path';
|
|
5
|
+
const Lines = ({ createdObject, transitionSettings }) => {
|
|
6
|
+
if (!createdObject)
|
|
7
|
+
return null;
|
|
8
|
+
const { config } = createdObject;
|
|
9
|
+
const color = createdObject.materialSettings && 'color' in createdObject.materialSettings
|
|
10
|
+
? createdObject.materialSettings.color
|
|
11
|
+
: '#ffffff';
|
|
12
|
+
const targetShape = (transitionSettings?.shapeType && typeof transitionSettings.shapeType === 'string')
|
|
13
|
+
? transitionSettings.shapeType
|
|
14
|
+
: config.shapeType;
|
|
15
|
+
const curves = useMemo(() => PositionsCreator.generatePaths(config.shapeType), [config.shapeType]);
|
|
16
|
+
const targetCurves = useMemo(() => PositionsCreator.generatePaths(targetShape), [targetShape]);
|
|
17
|
+
return (_jsx(_Fragment, { children: curves.map((currentCurve, index) => (_jsx(Path, { curve: currentCurve, targetCurve: targetCurves[index % targetCurves.length], duration: 1, color: color }, `path-${index}`))) }));
|
|
18
|
+
};
|
|
19
|
+
export default Lines;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface LoadingIndicatorProps {
|
|
3
|
+
text?: string;
|
|
4
|
+
fullScreen?: boolean;
|
|
5
|
+
animate?: boolean;
|
|
6
|
+
size?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const LoadingIndicator: React.FC<LoadingIndicatorProps>;
|
|
9
|
+
export default LoadingIndicator;
|
|
10
|
+
//# sourceMappingURL=LoadingIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingIndicator.d.ts","sourceRoot":"","sources":["../../src/components/LoadingIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4ID,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAuB5D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
const STYLE_ID = '3drise-loading-indicator-styles';
|
|
4
|
+
const CSS = `
|
|
5
|
+
.loading-indicator {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
position: relative;
|
|
11
|
+
}
|
|
12
|
+
.loading-indicator-fullscreen {
|
|
13
|
+
position: fixed;
|
|
14
|
+
top: 0;
|
|
15
|
+
left: 0;
|
|
16
|
+
width: 100vw;
|
|
17
|
+
height: 100vh;
|
|
18
|
+
background-color: rgba(0, 0, 0, 0.75);
|
|
19
|
+
backdrop-filter: blur(4px);
|
|
20
|
+
z-index: 9999;
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
}
|
|
24
|
+
.loading-indicator.animate .loading-spinner {
|
|
25
|
+
animation: _3drise-spin 2s linear infinite;
|
|
26
|
+
}
|
|
27
|
+
.loading-indicator.animate .spinner-ring {
|
|
28
|
+
animation: _3drise-spinY 2s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
|
|
29
|
+
}
|
|
30
|
+
.loading-indicator.animate .spinner-ring:nth-child(1) {
|
|
31
|
+
animation-duration: 2s;
|
|
32
|
+
}
|
|
33
|
+
.loading-indicator.animate .spinner-ring:nth-child(2) {
|
|
34
|
+
animation-duration: 2.5s;
|
|
35
|
+
animation-direction: reverse;
|
|
36
|
+
}
|
|
37
|
+
.loading-indicator.animate .spinner-ring:nth-child(3) {
|
|
38
|
+
animation-duration: 3s;
|
|
39
|
+
}
|
|
40
|
+
.loading-indicator.animate .loading-text {
|
|
41
|
+
animation: _3drise-shimmer 3s linear infinite;
|
|
42
|
+
}
|
|
43
|
+
.loading-spinner {
|
|
44
|
+
position: relative;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
perspective: 1000px;
|
|
49
|
+
transform-style: preserve-3d;
|
|
50
|
+
}
|
|
51
|
+
.spinner-ring {
|
|
52
|
+
position: absolute;
|
|
53
|
+
width: 100%;
|
|
54
|
+
height: 100%;
|
|
55
|
+
border: 3px solid transparent;
|
|
56
|
+
transform-style: preserve-3d;
|
|
57
|
+
}
|
|
58
|
+
.spinner-ring:nth-child(1) {
|
|
59
|
+
border-top-color: #007bff;
|
|
60
|
+
border-right-color: #007bff;
|
|
61
|
+
width: 100%;
|
|
62
|
+
height: 100%;
|
|
63
|
+
}
|
|
64
|
+
.spinner-ring:nth-child(2) {
|
|
65
|
+
border-bottom-color: #17a2b8;
|
|
66
|
+
border-left-color: #17a2b8;
|
|
67
|
+
width: 70%;
|
|
68
|
+
height: 70%;
|
|
69
|
+
}
|
|
70
|
+
.spinner-ring:nth-child(3) {
|
|
71
|
+
border-top-color: #6f42c1;
|
|
72
|
+
border-right-color: #6f42c1;
|
|
73
|
+
width: 40%;
|
|
74
|
+
height: 40%;
|
|
75
|
+
}
|
|
76
|
+
@keyframes _3drise-spinY {
|
|
77
|
+
0% { transform: rotateY(0deg); }
|
|
78
|
+
100% { transform: rotateY(360deg); }
|
|
79
|
+
}
|
|
80
|
+
@keyframes _3drise-spin {
|
|
81
|
+
0% { transform: rotate(0deg); }
|
|
82
|
+
100% { transform: rotate(360deg); }
|
|
83
|
+
}
|
|
84
|
+
.loading-text {
|
|
85
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
86
|
+
font-size: 1rem;
|
|
87
|
+
font-weight: 500;
|
|
88
|
+
letter-spacing: 0.5px;
|
|
89
|
+
text-transform: uppercase;
|
|
90
|
+
background: linear-gradient(90deg, #007bff, #17a2b8, #6f42c1, #007bff);
|
|
91
|
+
background-size: 200% auto;
|
|
92
|
+
-webkit-background-clip: text;
|
|
93
|
+
-webkit-text-fill-color: transparent;
|
|
94
|
+
background-clip: text;
|
|
95
|
+
}
|
|
96
|
+
@keyframes _3drise-shimmer {
|
|
97
|
+
0% { background-position: 0% center; }
|
|
98
|
+
100% { background-position: 200% center; }
|
|
99
|
+
}
|
|
100
|
+
@media (prefers-color-scheme: dark) {
|
|
101
|
+
.loading-text {
|
|
102
|
+
background: linear-gradient(90deg, #4dabf7, #22b8cf, #9775fa, #4dabf7);
|
|
103
|
+
background-size: 200% auto;
|
|
104
|
+
-webkit-background-clip: text;
|
|
105
|
+
-webkit-text-fill-color: transparent;
|
|
106
|
+
background-clip: text;
|
|
107
|
+
}
|
|
108
|
+
.spinner-ring:nth-child(1) {
|
|
109
|
+
border-top-color: #4dabf7;
|
|
110
|
+
border-right-color: #4dabf7;
|
|
111
|
+
}
|
|
112
|
+
.spinner-ring:nth-child(2) {
|
|
113
|
+
border-bottom-color: #22b8cf;
|
|
114
|
+
border-left-color: #22b8cf;
|
|
115
|
+
}
|
|
116
|
+
.spinner-ring:nth-child(3) {
|
|
117
|
+
border-top-color: #9775fa;
|
|
118
|
+
border-right-color: #9775fa;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
@media (max-width: 576px) {
|
|
122
|
+
.loading-spinner {
|
|
123
|
+
width: 60px;
|
|
124
|
+
height: 60px;
|
|
125
|
+
}
|
|
126
|
+
.loading-text {
|
|
127
|
+
font-size: 0.875rem;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
`;
|
|
131
|
+
function injectStyles() {
|
|
132
|
+
if (typeof document === 'undefined' || document.getElementById(STYLE_ID))
|
|
133
|
+
return;
|
|
134
|
+
const style = document.createElement('style');
|
|
135
|
+
style.id = STYLE_ID;
|
|
136
|
+
style.textContent = CSS;
|
|
137
|
+
document.head.appendChild(style);
|
|
138
|
+
}
|
|
139
|
+
export const LoadingIndicator = ({ text, fullScreen = false, animate = true, size = 80, }) => {
|
|
140
|
+
useEffect(() => { injectStyles(); }, []);
|
|
141
|
+
return (_jsxs("div", { className: `loading-indicator${animate ? ' animate' : ''}${fullScreen ? ' loading-indicator-fullscreen' : ''}`, children: [_jsxs("div", { className: "loading-spinner", style: { width: `${size}px`, height: `${size}px` }, children: [_jsx("div", { className: "spinner-ring" }), _jsx("div", { className: "spinner-ring" }), _jsx("div", { className: "spinner-ring" })] }), text && _jsx("div", { className: "loading-text", children: text })] }));
|
|
142
|
+
};
|
|
143
|
+
export default LoadingIndicator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MaterialSettings } from '@ntalmagor/3drize-core';
|
|
3
|
+
export interface MaterialLibraryProps {
|
|
4
|
+
materialSettings: MaterialSettings;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
declare const MaterialLibrary: React.FC<MaterialLibraryProps>;
|
|
8
|
+
export default MaterialLibrary;
|
|
9
|
+
//# sourceMappingURL=MaterialLibrary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaterialLibrary.d.ts","sourceRoot":"","sources":["../../src/components/MaterialLibrary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAUtC,OAAO,KAAK,EACV,gBAAgB,EAOjB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA6DnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { MeshReflectorMaterial, MeshRefractionMaterial, MeshTransmissionMaterial, MeshDistortMaterial, MeshWobbleMaterial, MeshDiscardMaterial, MeshPortalMaterial, } from '@react-three/drei';
|
|
4
|
+
const MaterialLibrary = ({ materialSettings }) => {
|
|
5
|
+
const variant = materialSettings.materialVariant;
|
|
6
|
+
const cubeCameraTexture = useRef(null);
|
|
7
|
+
const getSettings = (defaultSettings) => {
|
|
8
|
+
const settings = { ...defaultSettings };
|
|
9
|
+
Object.keys(materialSettings).forEach(key => {
|
|
10
|
+
if (key in settings && key !== 'materialType' && key !== 'materialVariant' && key !== 'handlers') {
|
|
11
|
+
settings[key] = materialSettings[key];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return settings;
|
|
15
|
+
};
|
|
16
|
+
switch (variant) {
|
|
17
|
+
case 'Reflector':
|
|
18
|
+
return _jsx(MeshReflectorMaterial, { ...getSettings({
|
|
19
|
+
color: "#777777", roughness: 0.1, metalness: 1.0,
|
|
20
|
+
blur: [300, 100], resolution: 512, mixBlur: 1, mixStrength: 40,
|
|
21
|
+
depthScale: 1, minDepthThreshold: 0.1, maxDepthThreshold: 1,
|
|
22
|
+
depthToBlurRatioBias: 0.25, mirror: 1, distortion: 1, mixContrast: 1,
|
|
23
|
+
...materialSettings,
|
|
24
|
+
}) });
|
|
25
|
+
case 'Refraction':
|
|
26
|
+
if (cubeCameraTexture.current)
|
|
27
|
+
return _jsx(MeshRefractionMaterial, { envMap: cubeCameraTexture.current, ...getSettings({
|
|
28
|
+
color: "#ffffff", ior: 2.4, fresnel: 0, aberrationStrength: 0.01, fastChroma: true, ...materialSettings,
|
|
29
|
+
}) });
|
|
30
|
+
return _jsx("meshStandardMaterial", { color: "#ffffff" });
|
|
31
|
+
case 'Transmission':
|
|
32
|
+
return _jsx(MeshTransmissionMaterial, { ...getSettings({
|
|
33
|
+
transmission: 1, thickness: 0.2, roughness: 0.0, chromaticAberration: 0.03,
|
|
34
|
+
anisotropy: 0.1, anisotropicBlur: 0.1, distortion: 0.0, distortionScale: 0.3,
|
|
35
|
+
temporalDistortion: 0.5, transmissionSampler: true, backside: false,
|
|
36
|
+
backsideThickness: 0.2, backsideEnvMapIntensity: 1, resolution: 256,
|
|
37
|
+
backsideResolution: 256, samples: 10, ...materialSettings,
|
|
38
|
+
}) });
|
|
39
|
+
case 'Distort':
|
|
40
|
+
return _jsx(MeshDistortMaterial, { ...getSettings({
|
|
41
|
+
color: "#ffffff", distort: 0.5, speed: 2, radius: 1, ...materialSettings,
|
|
42
|
+
}) });
|
|
43
|
+
case 'Wobble':
|
|
44
|
+
return _jsx(MeshWobbleMaterial, { ...getSettings({
|
|
45
|
+
color: "#ffffff", factor: 1, speed: 2, ...materialSettings,
|
|
46
|
+
}) });
|
|
47
|
+
case 'Discard':
|
|
48
|
+
return _jsx(MeshDiscardMaterial, {});
|
|
49
|
+
case 'Portal':
|
|
50
|
+
return _jsx(MeshPortalMaterial, { blur: 0, resolution: 512, ...getSettings({
|
|
51
|
+
blend: 1, resolution: 512, ...materialSettings,
|
|
52
|
+
}) });
|
|
53
|
+
default:
|
|
54
|
+
return _jsx("meshStandardMaterial", { color: "#ffffff" });
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
export default MaterialLibrary;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import type { MoonSettings } from '@ntalmagor/3drize-core';
|
|
4
|
+
export { defaultMoonSettings } from '@ntalmagor/3drize-core';
|
|
5
|
+
export interface MoonProps {
|
|
6
|
+
settings?: MoonSettings;
|
|
7
|
+
sunPosition?: [number, number, number];
|
|
8
|
+
onMeshReady?: (mesh: THREE.Mesh) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const Moon: React.FC<MoonProps>;
|
|
11
|
+
export default Moon;
|
|
12
|
+
export type { MoonSettings };
|
|
13
|
+
//# sourceMappingURL=Moon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Moon.d.ts","sourceRoot":"","sources":["../../src/components/Moon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;CAC1C;AAED,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAmE7B,CAAC;AAGF,eAAe,IAAI,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,CAAC"}
|