├── .codesandbox
└── tasks.json
├── .devcontainer
└── devcontainer.json
├── .eslintrc.json
├── .github
└── dependabot.yml
├── .gitignore
├── .prettierrc
├── .zed
└── settings.json
├── README.md
├── index.html
├── lib
├── Fluid.tsx
├── constant.ts
├── effect
│ ├── Fluid.tsx
│ └── FluidEffect.tsx
├── glsl.d.ts
├── glsl
│ ├── advection.frag
│ ├── base.vert
│ ├── clear.frag
│ ├── composite.frag
│ ├── curl.frag
│ ├── divergence.frag
│ ├── gradientSubstract.frag
│ ├── pressure.frag
│ ├── splat.frag
│ └── vorticity.frag
├── hooks
│ ├── useConfig.tsx
│ ├── useDoubleFBO.tsx
│ ├── useFBOs.tsx
│ ├── useMaterials.tsx
│ └── usePointer.tsx
├── index.ts
├── types.ts
├── utils.ts
└── utils
│ └── colors.ts
├── package.json
├── pnpm-lock.yaml
├── src
├── assets
│ ├── abc-normal.ttf
│ ├── decay.otf
│ ├── github-mark-white.svg
│ ├── img.jpg
│ ├── img2.jpg
│ └── screen_capture.png
├── example
│ ├── Canvas.tsx
│ ├── Example1.tsx
│ ├── Example2.tsx
│ ├── Example3.tsx
│ ├── Layout.tsx
│ ├── Text.tsx
│ └── tunel.ts
├── main.tsx
├── styles.css
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.codesandbox/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // These tasks will run in order when initializing your CodeSandbox project.
3 | "setupTasks": [
4 | {
5 | "command": "pnpm install",
6 | "name": "Install Dependencies"
7 | }
8 | ],
9 |
10 | // These tasks can be run from CodeSandbox. Running one will open a log in the app.
11 | "tasks": {
12 | "dev": {
13 | "name": "dev",
14 | "command": "pnpm dev",
15 | "runAtStart": true
16 | },
17 | "build": {
18 | "name": "build",
19 | "command": "pnpm build"
20 | },
21 | "lint": {
22 | "name": "lint",
23 | "command": "pnpm lint"
24 | },
25 | "preview": {
26 | "name": "preview",
27 | "command": "pnpm preview"
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2 | // README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
3 | {
4 | "name": "Node.js & TypeScript",
5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6 | "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye"
7 |
8 | // Features to add to the dev container. More info: https://containers.dev/features.
9 | // "features": {},
10 |
11 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
12 | // "forwardPorts": [],
13 |
14 | // Use 'postCreateCommand' to run commands after the container is created.
15 | // "postCreateCommand": "yarn install",
16 |
17 | // Configure tool-specific properties.
18 | // "customizations": {},
19 |
20 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
21 | // "remoteUser": "root"
22 | }
23 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "env": { "browser": true, "es2020": true },
4 | "extends": [
5 | "eslint:recommended",
6 | "plugin:@typescript-eslint/recommended",
7 | "plugin:react-hooks/recommended"
8 | ],
9 | "ignorePatterns": ["dist", ".eslintrc.cjs"],
10 | "parser": "@typescript-eslint/parser",
11 | "plugins": ["react-refresh"],
12 | "rules": {
13 | "no-undef": "error",
14 | "no-extra-semi": "off",
15 | "@typescript-eslint/no-explicit-any": "off"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for more information:
4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5 | # https://containers.dev/guide/dependabot
6 |
7 | version: 2
8 | updates:
9 | - package-ecosystem: "devcontainers"
10 | directory: "/"
11 | schedule:
12 | interval: weekly
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | *.tsbuildinfo
15 | .pnpm-store
16 |
17 |
18 | # Editor directories and files
19 | .vscode/*
20 | !.vscode/extensions.json
21 | .idea
22 | .DS_Store
23 | *.suo
24 | *.ntvs*
25 | *.njsproj
26 | *.sln
27 | *.sw?
28 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "tabWidth": 4,
4 | "printWidth": 100,
5 | "singleQuote": true,
6 | "jsxSingleQuote": true,
7 | "trailingComma": "all",
8 | "bracketSpacing": true,
9 | "bracketSameLine": true,
10 | "singleAttributePerLine": false,
11 | "object-curly-spacing": "always"
12 | }
13 |
--------------------------------------------------------------------------------
/.zed/settings.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/.zed/settings.json
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://www.npmjs.com/package/@whatisjery/react-fluid-distortion)
2 |
3 | # Fluid Distortion for React Three Fiber
4 |
5 | 
6 |
7 | Implementing post-processing fluid distortion effects in response to cursor interactions for React-Three-Fiber.
8 | Based on the shaders developed by [Pavel Dobryakov](https://github.com/PavelDoGreat/WebGL-Fluid-Simulation)
9 |
10 | ---
11 |
12 | From the [react-three-fiber](https://github.com/pmndrs/react-three-fiber) documentation :
13 |
14 | > [!WARNING]
15 | > Three-fiber is a React renderer, it must pair with a major version of React, just like react-dom, react-native, etc. @react-three/fiber@8 pairs with react@18, @react-three/fiber@9 pairs with react@19.
16 |
17 | ---
18 |
19 | ## Try it :
20 |
21 | [codesandbox](https://codesandbox.io/p/github/whatisjery/react-fluid-distortion/draft/empty-leaf)
22 |
23 | ## Installation :
24 |
25 | ```bash
26 | npm install @whatisjery/react-fluid-distortion @react-three/drei @react-three/postprocessing postprocessing leva
27 | ```
28 |
29 | ## Example of use :
30 |
31 | ```jsx
32 | import { Fluid } from '@whatisjery/react-fluid-distortion';
33 | import { EffectComposer } from '@react-three/postprocessing';
34 | import { Canvas } from '@react-three/fiber';
35 |
36 | ;
50 | ```
51 |
52 | ## Display configuration panel :
53 |
54 | Show a debug panel to test options more easily.
55 |
56 | ```jsx
57 | const config = useConfig();
58 |
59 | ...
60 |
61 |
62 | ```
63 |
64 | ## Options :
65 |
66 | | Name | Type | Default Value | Description |
67 | | ---------------------- | ----------- | ------------- | ---------------------------------------------------------------------------------------------- |
68 | | `fluidColor` | hexadecimal | `#005eff` | Sets the fluid color. Effective only when `rainbow` is set to `false`. |
69 | | `backgroundColor` | string | `#070410` | Sets the background color. Effective only when `showBackground` is `true`. |
70 | | `showBackground` | boolean | `false` | Toggles the background color's visibility. If `false` it becomes transprent. |
71 | | `blend` | number | `5` | Blends fluid into the scene when `showBackground` is true. Valid range: `0.00` to `10.0`. |
72 | | `intensity` | number | `10` | Sets the fluid intensity. Valid range: `0` to `10`. |
73 | | `force` | number | `2` | Multiplies the mouse velocity to increase fluid splatter. Valid range: `0.0` to `20`. |
74 | | `distortion` | number | `2` | Sets the distortion amount. Valid range: `0.00` to `2.00`. |
75 | | `radius` | number | `0.3` | Sets the fluid radius. Valid range: `0.01` to `1.00`. |
76 | | `curl` | number | `10` | Sets the amount of the curl effect. Valid range: `0.0` to `50`. |
77 | | `swirl` | number | `20` | Sets the amount of the swirling effect. Valid range: `0` to `20`. |
78 | | `velocityDissipation` | number | `0.99` | Reduces the fluid velocity over time. Valid range: `0.00` to `1.00`. |
79 | | `densitionDissipation` | number | `0.95` | Reduces the fluid density over time. Valid range: `0.00` to `1.00`. |
80 | | `pressure` | number | `0.80` | Controls the reduction of pressure. Valid range: `0.00` to `1.00`. |
81 | | `rainbow` | boolean | `true` | Activates color mode based on mouse direction. No range applicable as this is a boolean value. |
82 |
83 | ## Usage with nextjs
84 |
85 | If you're working with an older version of Next.js, you may get this type of error:
86 |
87 | ```javascript
88 | TypeError: Cannot read properties of undefined (reading '__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED')
89 | ```
90 |
91 | To fix it, you can enable package transpilation in your next.config file. Here’s how:
92 |
93 | ```javascript
94 | const nextConfig = {
95 | transpilePackages: ['@whatisjery/react-fluid-distortion'],
96 | };
97 |
98 | module.exports = nextConfig;
99 | ```
100 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/lib/Fluid.tsx:
--------------------------------------------------------------------------------
1 | import { createPortal, useFrame, useThree } from '@react-three/fiber';
2 | import { useCallback, useMemo, useRef } from 'react';
3 | import { Camera, Color, Mesh, Scene, Texture, Vector2, Vector3 } from 'three';
4 | import { ShaderPass } from 'three/examples/jsm/Addons.js';
5 | import { Effect as FluidEffect } from './effect/Fluid';
6 | import { useFBOs } from './hooks/useFBOs';
7 | import { useMaterials } from './hooks/useMaterials';
8 | import { Props } from './types';
9 | import { OPTS } from './constant';
10 | import { usePointer } from './hooks/usePointer';
11 | import { BlendFunction } from 'postprocessing';
12 | import { normalizeScreenHz } from './utils';
13 |
14 | type Uniforms = {
15 | uColor: Vector3 | Color;
16 | uPointer: Vector2;
17 | uTarget: Texture | null;
18 | uVelocity: Texture;
19 | uCurl: Texture;
20 | uTexture: Texture;
21 | uPressure: Texture;
22 | uDivergence: Texture;
23 | uSource: Texture;
24 | uRadius: number;
25 | uClearValue: number;
26 | uCurlValue: number;
27 | uDissipation: number;
28 | };
29 |
30 | export const Fluid = ({
31 | blend = OPTS.blend,
32 | force = OPTS.force,
33 | radius = OPTS.radius,
34 | curl = OPTS.curl,
35 | swirl = OPTS.swirl,
36 | intensity = OPTS.intensity,
37 | distortion = OPTS.distortion,
38 | fluidColor = OPTS.fluidColor,
39 | backgroundColor = OPTS.backgroundColor,
40 | showBackground = OPTS.showBackground,
41 | rainbow = OPTS.rainbow,
42 | pressure = OPTS.pressure,
43 | densityDissipation = OPTS.densityDissipation,
44 | velocityDissipation = OPTS.velocityDissipation,
45 | blendFunction = BlendFunction.NORMAL,
46 | }: Props) => {
47 | const size = useThree((three) => three.size);
48 | const gl = useThree((three) => three.gl);
49 |
50 | const bufferScene = useMemo(() => new Scene(), []);
51 | const bufferCamera = useMemo(() => new Camera(), []);
52 |
53 | const meshRef = useRef(null);
54 | const postRef = useRef(null);
55 | const pointerRef = useRef(new Vector2());
56 | const colorRef = useRef(new Vector3());
57 |
58 | const FBOs = useFBOs();
59 | const materials = useMaterials();
60 | const { onPointerMove, splatStack } = usePointer({ force });
61 |
62 | const setShaderMaterial = useCallback(
63 | (name: keyof ReturnType) => {
64 | if (!meshRef.current) return;
65 |
66 | meshRef.current.material = materials[name];
67 | meshRef.current.material.needsUpdate = true;
68 | },
69 | [materials],
70 | );
71 |
72 | const setRenderTarget = useCallback(
73 | (name: keyof ReturnType) => {
74 | const target = FBOs[name];
75 |
76 | if ('write' in target) {
77 | gl.setRenderTarget(target.write);
78 | gl.clear();
79 | gl.render(bufferScene, bufferCamera);
80 | target.swap();
81 | } else {
82 | gl.setRenderTarget(target);
83 | gl.clear();
84 | gl.render(bufferScene, bufferCamera);
85 | }
86 | },
87 | [bufferCamera, bufferScene, FBOs, gl],
88 | );
89 |
90 | const setUniforms = useCallback(
91 | (
92 | material: keyof ReturnType,
93 | uniform: K,
94 | value: Uniforms[K],
95 | ) => {
96 | const mat = materials[material];
97 |
98 | if (mat && mat.uniforms[uniform]) {
99 | mat.uniforms[uniform].value = value;
100 | }
101 | },
102 | [materials],
103 | );
104 |
105 | useFrame((_, delta) => {
106 | if (!meshRef.current || !postRef.current) return;
107 |
108 | for (let i = splatStack.length - 1; i >= 0; i--) {
109 | const { mouseX, mouseY, velocityX, velocityY } = splatStack[i];
110 |
111 | pointerRef.current.set(mouseX, mouseY);
112 | colorRef.current.set(velocityX, velocityY, 10.0);
113 |
114 | setShaderMaterial('splat');
115 | setUniforms('splat', 'uTarget', FBOs.velocity.read.texture);
116 | setUniforms('splat', 'uPointer', pointerRef.current);
117 | setUniforms('splat', 'uColor', colorRef.current);
118 | setUniforms('splat', 'uRadius', radius / 100.0);
119 | setRenderTarget('velocity');
120 | setUniforms('splat', 'uTarget', FBOs.density.read.texture);
121 | setRenderTarget('density');
122 |
123 | splatStack.pop();
124 | }
125 |
126 | setShaderMaterial('curl');
127 | setUniforms('curl', 'uVelocity', FBOs.velocity.read.texture);
128 | setRenderTarget('curl');
129 |
130 | setShaderMaterial('vorticity');
131 | setUniforms('vorticity', 'uVelocity', FBOs.velocity.read.texture);
132 | setUniforms('vorticity', 'uCurl', FBOs.curl.texture);
133 | setUniforms('vorticity', 'uCurlValue', curl);
134 | setRenderTarget('velocity');
135 |
136 | setShaderMaterial('divergence');
137 | setUniforms('divergence', 'uVelocity', FBOs.velocity.read.texture);
138 | setRenderTarget('divergence');
139 |
140 | setShaderMaterial('clear');
141 | setUniforms('clear', 'uTexture', FBOs.pressure.read.texture);
142 | setUniforms('clear', 'uClearValue', normalizeScreenHz(pressure, delta));
143 | setRenderTarget('pressure');
144 |
145 | setShaderMaterial('pressure');
146 | setUniforms('pressure', 'uDivergence', FBOs.divergence.texture);
147 |
148 | for (let i = 0; i < swirl; i++) {
149 | setUniforms('pressure', 'uPressure', FBOs.pressure.read.texture);
150 | setRenderTarget('pressure');
151 | }
152 |
153 | setShaderMaterial('gradientSubstract');
154 | setUniforms('gradientSubstract', 'uPressure', FBOs.pressure.read.texture);
155 | setUniforms('gradientSubstract', 'uVelocity', FBOs.velocity.read.texture);
156 | setRenderTarget('velocity');
157 |
158 | setShaderMaterial('advection');
159 | setUniforms('advection', 'uVelocity', FBOs.velocity.read.texture);
160 | setUniforms('advection', 'uSource', FBOs.velocity.read.texture);
161 | setUniforms('advection', 'uDissipation', normalizeScreenHz(velocityDissipation, delta));
162 |
163 | setRenderTarget('velocity');
164 | setUniforms('advection', 'uVelocity', FBOs.velocity.read.texture);
165 | setUniforms('advection', 'uSource', FBOs.density.read.texture);
166 | setUniforms('advection', 'uDissipation', normalizeScreenHz(densityDissipation, delta));
167 |
168 | setRenderTarget('density');
169 | });
170 |
171 | return (
172 | <>
173 | {createPortal(
174 |
178 |
179 | ,
180 | bufferScene,
181 | )}
182 |
183 |
195 | >
196 | );
197 | };
198 |
--------------------------------------------------------------------------------
/lib/constant.ts:
--------------------------------------------------------------------------------
1 | export const OPTS = {
2 | blend: 5,
3 | intensity: 2,
4 | force: 1.1,
5 | distortion: 0.4,
6 | curl: 1.9,
7 | radius: 0.3,
8 | swirl: 4,
9 | pressure: 0.8,
10 | densityDissipation: 0.96,
11 | velocityDissipation: 1.0,
12 | fluidColor: '#3300ff',
13 | backgroundColor: '#070410',
14 | showBackground: true,
15 | rainbow: false,
16 | dyeRes: 512,
17 | simRes: 128,
18 | refreshRate: 60,
19 | } as const;
20 |
--------------------------------------------------------------------------------
/lib/effect/Fluid.tsx:
--------------------------------------------------------------------------------
1 | import { forwardRef, useEffect, useMemo } from 'react';
2 | import { EffectProps } from '../types';
3 | import { FluidEffect } from './FluidEffect';
4 |
5 | export const Effect = forwardRef(function Fluid(props: EffectProps, ref) {
6 | // prevent re-creating the effect on every render
7 | // eslint-disable-next-line react-hooks/exhaustive-deps
8 | const effect = useMemo(() => new FluidEffect(props), []);
9 |
10 | useEffect(() => {
11 | effect.state = { ...props };
12 | effect.update();
13 | }, [effect, props]);
14 |
15 | useEffect(() => {
16 | return () => {
17 | effect.dispose?.();
18 | };
19 | }, [effect]);
20 |
21 | return ;
22 | });
23 |
--------------------------------------------------------------------------------
/lib/effect/FluidEffect.tsx:
--------------------------------------------------------------------------------
1 | import { Effect } from 'postprocessing';
2 | import { Texture, Uniform, Vector3 } from 'three';
3 | import { EffectProps } from '../types';
4 | import { hexToRgb } from '../utils';
5 | import compositeFrag from '../glsl/composite.frag';
6 |
7 | type Uniforms = {
8 | tFluid: Texture | null;
9 | uColor: Vector3;
10 | uBackgroundColor: Vector3;
11 | uRainbow: boolean;
12 | uShowBackground: boolean;
13 | uDistort: number;
14 | uBlend: number;
15 | uIntensity: number;
16 | };
17 |
18 | export class FluidEffect extends Effect {
19 | state: Partial;
20 |
21 | constructor(props: EffectProps = {}) {
22 | const uniforms: Record = {
23 | tFluid: new Uniform(props.tFluid),
24 | uDistort: new Uniform(props.distortion),
25 | uRainbow: new Uniform(props.rainbow),
26 | uIntensity: new Uniform(props.intensity),
27 | uBlend: new Uniform(props.blend),
28 | uShowBackground: new Uniform(props.showBackground),
29 |
30 | uColor: new Uniform(hexToRgb(props.fluidColor!)),
31 | uBackgroundColor: new Uniform(hexToRgb(props.backgroundColor!)),
32 | };
33 |
34 | super('FluidEffect', compositeFrag, {
35 | blendFunction: props.blendFunction,
36 | uniforms: new Map(Object.entries(uniforms)),
37 | });
38 |
39 | this.state = {
40 | ...props,
41 | };
42 | }
43 |
44 | private updateUniform(key: K, value: Uniforms[K]) {
45 | const uniform = this.uniforms.get(key);
46 | if (uniform) {
47 | uniform.value = value;
48 | }
49 | }
50 |
51 | update() {
52 | this.updateUniform('uIntensity', this.state.intensity!);
53 | this.updateUniform('uDistort', this.state.distortion!);
54 | this.updateUniform('uRainbow', this.state.rainbow!);
55 | this.updateUniform('uBlend', this.state.blend!);
56 | this.updateUniform('uShowBackground', this.state.showBackground!);
57 | this.updateUniform('uColor', hexToRgb(this.state.fluidColor!));
58 | this.updateUniform('uBackgroundColor', hexToRgb(this.state.backgroundColor!));
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/lib/glsl.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.glsl' {
2 | const value: string;
3 | export default value;
4 | }
5 |
6 | declare module '*.vert' {
7 | const value: string;
8 | export default value;
9 | }
10 |
11 | declare module '*.frag' {
12 | const value: string;
13 | export default value;
14 | }
15 |
--------------------------------------------------------------------------------
/lib/glsl/advection.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying vec2 vUv;
4 | uniform sampler2D uVelocity;
5 | uniform sampler2D uSource;
6 | uniform vec2 texelSize;
7 | uniform float dt;
8 | uniform float uDissipation;
9 |
10 | void main() {
11 | vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;
12 |
13 | gl_FragColor = uDissipation * texture2D(uSource, coord);
14 |
15 | gl_FragColor.a = 1.0;
16 | }
--------------------------------------------------------------------------------
/lib/glsl/base.vert:
--------------------------------------------------------------------------------
1 | varying vec2 vUv;
2 | varying vec2 vL;
3 | varying vec2 vR;
4 | varying vec2 vT;
5 | varying vec2 vB;
6 | uniform vec2 texelSize;
7 |
8 | void main() {
9 | vUv = uv;
10 |
11 | vL = vUv - vec2(texelSize.x, 0.0);
12 |
13 | vR = vUv + vec2(texelSize.x, 0.0);
14 |
15 | vT = vUv + vec2(0.0, texelSize.y);
16 |
17 | vB = vUv - vec2(0.0, texelSize.y);
18 |
19 | gl_Position = vec4(position, 1.0);
20 | }
21 |
--------------------------------------------------------------------------------
/lib/glsl/clear.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying vec2 vUv;
4 | uniform sampler2D uTexture;
5 | uniform float uClearValue;
6 |
7 | void main() { gl_FragColor = uClearValue * texture2D(uTexture, vUv); }
8 |
--------------------------------------------------------------------------------
/lib/glsl/composite.frag:
--------------------------------------------------------------------------------
1 | uniform sampler2D tFluid;
2 |
3 | uniform vec3 uColor;
4 | uniform vec3 uBackgroundColor;
5 |
6 | uniform float uDistort;
7 | uniform float uIntensity;
8 | uniform float uRainbow;
9 | uniform float uBlend;
10 | uniform float uShowBackground;
11 |
12 | void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
13 |
14 | vec3 fluidColor = texture2D(tFluid, uv).rgb;
15 |
16 | vec2 distortedUv = uv - fluidColor.rg * uDistort * 0.001;
17 |
18 | vec4 texture = texture2D(inputBuffer, distortedUv);
19 |
20 | float intensity = length(fluidColor) * uIntensity * 0.0001;
21 |
22 | vec3 selectedColor = uColor * length(fluidColor);
23 |
24 | vec4 colorForFluidEffect = vec4(uRainbow == 1.0 ? fluidColor : selectedColor, 1.0);
25 |
26 | vec4 computedBgColor = vec4(uBackgroundColor, 1.);
27 |
28 | outputColor = mix(texture, colorForFluidEffect, intensity);
29 |
30 | vec4 computedFluidColor = mix(texture, colorForFluidEffect, uBlend * 0.01);
31 |
32 | vec4 finalColor;
33 |
34 | if(texture.a < 0.1) {
35 | finalColor = mix(computedBgColor, colorForFluidEffect, intensity);
36 | } else {
37 | finalColor = mix(computedFluidColor, computedBgColor, 1.0 - texture.a);
38 | }
39 |
40 | outputColor = finalColor;
41 | }
42 |
--------------------------------------------------------------------------------
/lib/glsl/curl.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying vec2 vUv;
4 | varying vec2 vL;
5 | varying vec2 vR;
6 | varying vec2 vT;
7 | varying vec2 vB;
8 |
9 | uniform sampler2D uVelocity;
10 |
11 | void main() {
12 | float L = texture2D(uVelocity, vL).y;
13 |
14 | float R = texture2D(uVelocity, vR).y;
15 |
16 | float T = texture2D(uVelocity, vT).x;
17 |
18 | float B = texture2D(uVelocity, vB).x;
19 |
20 | float vorticity = R - L - T + B;
21 |
22 | gl_FragColor = vec4(vorticity, 0.0, 0.0, 1.0);
23 | }
--------------------------------------------------------------------------------
/lib/glsl/divergence.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying highp vec2 vUv;
4 | varying highp vec2 vL;
5 | varying highp vec2 vR;
6 | varying highp vec2 vT;
7 | varying highp vec2 vB;
8 |
9 | uniform sampler2D uVelocity;
10 |
11 | void main() {
12 | float L = texture2D(uVelocity, vL).x;
13 |
14 | float R = texture2D(uVelocity, vR).x;
15 |
16 | float T = texture2D(uVelocity, vT).y;
17 |
18 | float B = texture2D(uVelocity, vB).y;
19 |
20 | vec2 C = texture2D(uVelocity, vUv).xy;
21 |
22 | if(vL.x < 0.0) {
23 | L = -C.x;
24 | }
25 |
26 | if(vR.x > 1.0) {
27 | R = -C.x;
28 | }
29 |
30 | if(vT.y > 1.0) {
31 | T = -C.y;
32 | }
33 |
34 | if(vB.y < 0.0) {
35 | B = -C.y;
36 | }
37 |
38 | float div = 0.5 * (R - L + T - B);
39 |
40 | gl_FragColor = vec4(div, 0.0, 0.0, 1.0);
41 | }
--------------------------------------------------------------------------------
/lib/glsl/gradientSubstract.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying highp vec2 vUv;
4 | varying highp vec2 vL;
5 | varying highp vec2 vR;
6 | varying highp vec2 vT;
7 | varying highp vec2 vB;
8 |
9 | uniform sampler2D uPressure;
10 | uniform sampler2D uVelocity;
11 |
12 | void main() {
13 | float L = texture2D(uPressure, vL).x;
14 |
15 | float R = texture2D(uPressure, vR).x;
16 |
17 | float T = texture2D(uPressure, vT).x;
18 |
19 | float B = texture2D(uPressure, vB).x;
20 |
21 | vec2 velocity = texture2D(uVelocity, vUv).xy;
22 |
23 | velocity.xy -= vec2(R - L, T - B);
24 |
25 | gl_FragColor = vec4(velocity, 0.0, 1.0);
26 | }
--------------------------------------------------------------------------------
/lib/glsl/pressure.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying highp vec2 vUv;
4 | varying highp vec2 vL;
5 | varying highp vec2 vR;
6 | varying highp vec2 vT;
7 | varying highp vec2 vB;
8 |
9 | uniform sampler2D uPressure;
10 | uniform sampler2D uDivergence;
11 |
12 | void main() {
13 | float L = texture2D(uPressure, vL).x;
14 |
15 | float R = texture2D(uPressure, vR).x;
16 |
17 | float T = texture2D(uPressure, vT).x;
18 |
19 | float B = texture2D(uPressure, vB).x;
20 |
21 | float C = texture2D(uPressure, vUv).x;
22 |
23 | float divergence = texture2D(uDivergence, vUv).x;
24 |
25 | float pressure = (L + R + B + T - divergence) * 0.25;
26 |
27 | gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);
28 | }
29 |
--------------------------------------------------------------------------------
/lib/glsl/splat.frag:
--------------------------------------------------------------------------------
1 | varying vec2 vUv;
2 |
3 | uniform sampler2D uTarget;
4 | uniform float aspectRatio;
5 | uniform vec3 uColor;
6 | uniform vec2 uPointer;
7 | uniform float uRadius;
8 |
9 | void main() {
10 | vec2 p = vUv - uPointer.xy;
11 |
12 | p.x *= aspectRatio;
13 |
14 | vec3 splat = exp(-dot(p, p) / uRadius) * uColor;
15 |
16 | vec3 base = texture2D(uTarget, vUv).xyz;
17 |
18 | gl_FragColor = vec4(base + splat, 1.0);
19 | }
20 |
--------------------------------------------------------------------------------
/lib/glsl/vorticity.frag:
--------------------------------------------------------------------------------
1 | precision highp float;
2 |
3 | varying vec2 vUv;
4 | varying vec2 vL;
5 | varying vec2 vR;
6 | varying vec2 vT;
7 | varying vec2 vB;
8 |
9 | uniform sampler2D uVelocity;
10 | uniform sampler2D uCurl;
11 | uniform float uCurlValue;
12 | uniform float dt;
13 |
14 | void main() {
15 | float L = texture2D(uCurl, vL).x;
16 |
17 | float R = texture2D(uCurl, vR).x;
18 |
19 | float T = texture2D(uCurl, vT).x;
20 |
21 | float B = texture2D(uCurl, vB).x;
22 |
23 | float C = texture2D(uCurl, vUv).x;
24 |
25 | vec2 force = vec2(abs(T) - abs(B), abs(R) - abs(L)) * 0.5;
26 |
27 | force /= length(force) + 1.;
28 |
29 | force *= uCurlValue * C;
30 |
31 | force.y *= -1.;
32 |
33 | vec2 vel = texture2D(uVelocity, vUv).xy;
34 |
35 | gl_FragColor = vec4(vel + force * dt, 0.0, 1.0);
36 | }
--------------------------------------------------------------------------------
/lib/hooks/useConfig.tsx:
--------------------------------------------------------------------------------
1 | import { useControls, button } from 'leva';
2 | import { OPTS } from '../constant';
3 |
4 | export const useConfig = () => {
5 | const handleReset = () => {
6 | return set(
7 | Object.fromEntries(
8 | Object.keys(params).map((key) => {
9 | return [key, OPTS[key as keyof typeof OPTS]];
10 | }),
11 | ),
12 | );
13 | };
14 |
15 | const [params, set] = useControls('Settings', () => ({
16 | intensity: {
17 | value: OPTS.intensity,
18 | min: 0.0,
19 | max: 10,
20 | step: 0.01,
21 | label: 'intensity',
22 | },
23 |
24 | force: {
25 | value: OPTS.force,
26 | min: 0,
27 | max: 20,
28 | step: 0.1,
29 | label: 'force',
30 | },
31 |
32 | distortion: {
33 | value: OPTS.distortion,
34 | min: 0,
35 | max: 2,
36 | step: 0.01,
37 | label: 'distortion',
38 | },
39 |
40 | curl: {
41 | value: OPTS.curl,
42 | min: 0,
43 | max: 50,
44 | step: 0.1,
45 | label: 'curl',
46 | },
47 |
48 | swirl: {
49 | value: OPTS.swirl,
50 | min: 0,
51 | max: 20,
52 | step: 1,
53 | label: 'swirl',
54 | },
55 |
56 | fluidColor: {
57 | value: OPTS.fluidColor,
58 | label: 'fluid color',
59 | },
60 |
61 | backgroundColor: {
62 | value: OPTS.backgroundColor,
63 | label: 'background color',
64 | },
65 |
66 | blend: {
67 | value: OPTS.blend,
68 | min: 0.0,
69 | max: 10,
70 | step: 0.01,
71 | label: 'blend',
72 | },
73 |
74 | showBackground: {
75 | value: OPTS.showBackground,
76 | label: 'show background',
77 | },
78 |
79 | rainbow: {
80 | value: OPTS.rainbow,
81 | label: 'rainbow mode',
82 | },
83 |
84 | pressure: {
85 | value: OPTS.pressure,
86 | min: 0,
87 | max: 1,
88 | step: 0.01,
89 | label: 'pressure reduction',
90 | },
91 |
92 | densityDissipation: {
93 | value: OPTS.densityDissipation,
94 | min: 0,
95 | max: 1,
96 | step: 0.01,
97 | label: 'density dissipation',
98 | },
99 |
100 | velocityDissipation: {
101 | value: OPTS.velocityDissipation,
102 | min: 0,
103 | max: 1,
104 | step: 0.01,
105 | label: 'velocity dissipation',
106 | },
107 |
108 | radius: {
109 | value: OPTS.radius,
110 | min: 0.01,
111 | max: 1,
112 | step: 0.01,
113 | label: 'radius',
114 | },
115 | 'reset settings': button(handleReset),
116 | }));
117 |
118 | return params;
119 | };
120 |
--------------------------------------------------------------------------------
/lib/hooks/useDoubleFBO.tsx:
--------------------------------------------------------------------------------
1 | import * as THREE from 'three';
2 | import { useFBO } from '@react-three/drei';
3 | import { useRef } from 'react';
4 |
5 | type FBO = {
6 | read: THREE.WebGLRenderTarget;
7 | write: THREE.WebGLRenderTarget;
8 | swap: () => void;
9 | dispose: () => void;
10 | setGenerateMipmaps: (value: boolean) => void;
11 | };
12 |
13 | type Options = {
14 | minFilter?: THREE.TextureFilter;
15 | format?: THREE.PixelFormat;
16 | type?: THREE.TextureDataType;
17 | depth: boolean;
18 | };
19 |
20 | export const useDoubleFBO = (width: number, height: number, options: Options) => {
21 | const read = useFBO(width, height, options);
22 |
23 | const write = useFBO(width, height, options);
24 |
25 | const fbo = useRef({
26 | read,
27 | write,
28 | swap: () => {
29 | const temp = fbo.read;
30 | fbo.read = fbo.write;
31 | fbo.write = temp;
32 | },
33 | dispose: () => {
34 | read.dispose();
35 | write.dispose();
36 | },
37 | setGenerateMipmaps: (value: boolean) => {
38 | read.texture.generateMipmaps = value;
39 | write.texture.generateMipmaps = value;
40 | },
41 | }).current;
42 |
43 | return fbo;
44 | };
45 |
--------------------------------------------------------------------------------
/lib/hooks/useFBOs.tsx:
--------------------------------------------------------------------------------
1 | import * as THREE from 'three';
2 |
3 | import { useFBO } from '@react-three/drei';
4 | import { useEffect, useMemo } from 'react';
5 | import { useDoubleFBO } from '../hooks/useDoubleFBO';
6 | import { OPTS } from '../constant';
7 |
8 | export const useFBOs = () => {
9 | const density = useDoubleFBO(OPTS.dyeRes, OPTS.dyeRes, {
10 | type: THREE.HalfFloatType,
11 | format: THREE.RGBAFormat,
12 | minFilter: THREE.LinearFilter,
13 | depth: false,
14 | });
15 |
16 | const velocity = useDoubleFBO(OPTS.simRes, OPTS.simRes, {
17 | type: THREE.HalfFloatType,
18 | format: THREE.RGFormat,
19 | minFilter: THREE.LinearFilter,
20 | depth: false,
21 | });
22 |
23 | const pressure = useDoubleFBO(OPTS.simRes, OPTS.simRes, {
24 | type: THREE.HalfFloatType,
25 | format: THREE.RedFormat,
26 | minFilter: THREE.NearestFilter,
27 | depth: false,
28 | });
29 |
30 | const divergence = useFBO(OPTS.simRes, OPTS.simRes, {
31 | type: THREE.HalfFloatType,
32 | format: THREE.RedFormat,
33 | minFilter: THREE.NearestFilter,
34 | depth: false,
35 | });
36 |
37 | const curl = useFBO(OPTS.simRes, OPTS.simRes, {
38 | type: THREE.HalfFloatType,
39 | format: THREE.RedFormat,
40 | minFilter: THREE.NearestFilter,
41 | depth: false,
42 | });
43 |
44 | const FBOs = useMemo(() => {
45 | return {
46 | density,
47 | velocity,
48 | pressure,
49 | divergence,
50 | curl,
51 | };
52 | }, [curl, density, divergence, pressure, velocity]);
53 |
54 | useEffect(() => {
55 | for (const FBO of Object.values(FBOs)) {
56 | if ('write' in FBO) {
57 | FBO.setGenerateMipmaps(false);
58 | } else {
59 | FBO.texture.generateMipmaps = false;
60 | }
61 | }
62 |
63 | return () => {
64 | for (const FBO of Object.values(FBOs)) {
65 | FBO.dispose();
66 | }
67 | };
68 | }, [FBOs]);
69 |
70 | return FBOs;
71 | };
72 |
--------------------------------------------------------------------------------
/lib/hooks/useMaterials.tsx:
--------------------------------------------------------------------------------
1 | import { ShaderMaterial, Texture, Vector2, Vector3 } from 'three';
2 | import { useEffect, useMemo } from 'react';
3 | import { useThree } from '@react-three/fiber';
4 | import { OPTS } from '../constant';
5 |
6 | import baseVertex from '../glsl/base.vert';
7 | import clearFrag from '../glsl/clear.frag';
8 | import curlFrag from '../glsl/curl.frag';
9 | import divergenceFrag from '../glsl/divergence.frag';
10 | import gradientSubstractFrag from '../glsl/gradientSubstract.frag';
11 | import pressureFrag from '../glsl/pressure.frag';
12 | import splatFrag from '../glsl/splat.frag';
13 | import advectionFrag from '../glsl/advection.frag';
14 | import vorticityFrag from '../glsl/vorticity.frag';
15 |
16 | export const useMaterials = (): { [key: string]: ShaderMaterial } => {
17 | const size = useThree((s) => s.size);
18 |
19 | const shaderMaterials = useMemo(() => {
20 | const advection = new ShaderMaterial({
21 | uniforms: {
22 | uVelocity: {
23 | value: new Texture(),
24 | },
25 | uSource: {
26 | value: new Texture(),
27 | },
28 | dt: {
29 | value: 1 / OPTS.refreshRate,
30 | },
31 | uDissipation: {
32 | value: 1.0,
33 | },
34 | texelSize: { value: new Vector2() },
35 | },
36 | fragmentShader: advectionFrag,
37 | vertexShader: baseVertex,
38 | depthTest: false,
39 | depthWrite: false,
40 | });
41 |
42 | const clear = new ShaderMaterial({
43 | uniforms: {
44 | uTexture: {
45 | value: new Texture(),
46 | },
47 | uClearValue: {
48 | value: OPTS.pressure,
49 | },
50 | texelSize: {
51 | value: new Vector2(),
52 | },
53 | },
54 | fragmentShader: clearFrag,
55 | vertexShader: baseVertex,
56 | depthTest: false,
57 | depthWrite: false,
58 | });
59 |
60 | const curl = new ShaderMaterial({
61 | uniforms: {
62 | uVelocity: {
63 | value: new Texture(),
64 | },
65 | texelSize: {
66 | value: new Vector2(),
67 | },
68 | },
69 | fragmentShader: curlFrag,
70 | vertexShader: baseVertex,
71 | depthTest: false,
72 | depthWrite: false,
73 | });
74 |
75 | const divergence = new ShaderMaterial({
76 | uniforms: {
77 | uVelocity: {
78 | value: new Texture(),
79 | },
80 | texelSize: {
81 | value: new Vector2(),
82 | },
83 | },
84 | fragmentShader: divergenceFrag,
85 | vertexShader: baseVertex,
86 | depthTest: false,
87 | depthWrite: false,
88 | });
89 |
90 | const gradientSubstract = new ShaderMaterial({
91 | uniforms: {
92 | uPressure: {
93 | value: new Texture(),
94 | },
95 | uVelocity: {
96 | value: new Texture(),
97 | },
98 | texelSize: {
99 | value: new Vector2(),
100 | },
101 | },
102 | fragmentShader: gradientSubstractFrag,
103 | vertexShader: baseVertex,
104 | depthTest: false,
105 | depthWrite: false,
106 | });
107 |
108 | const pressure = new ShaderMaterial({
109 | uniforms: {
110 | uPressure: {
111 | value: new Texture(),
112 | },
113 | uDivergence: {
114 | value: new Texture(),
115 | },
116 | texelSize: {
117 | value: new Vector2(),
118 | },
119 | },
120 | fragmentShader: pressureFrag,
121 | vertexShader: baseVertex,
122 | depthTest: false,
123 | depthWrite: false,
124 | });
125 |
126 | const splat = new ShaderMaterial({
127 | uniforms: {
128 | uTarget: {
129 | value: new Texture(),
130 | },
131 | aspectRatio: {
132 | value: size.width / size.height,
133 | },
134 | uColor: {
135 | value: new Vector3(),
136 | },
137 | uPointer: {
138 | value: new Vector2(),
139 | },
140 | uRadius: {
141 | value: OPTS.radius / 100.0,
142 | },
143 | texelSize: {
144 | value: new Vector2(),
145 | },
146 | },
147 | fragmentShader: splatFrag,
148 | vertexShader: baseVertex,
149 | depthTest: false,
150 | depthWrite: false,
151 | });
152 |
153 | const vorticity = new ShaderMaterial({
154 | uniforms: {
155 | uVelocity: {
156 | value: new Texture(),
157 | },
158 | uCurl: {
159 | value: new Texture(),
160 | },
161 | uCurlValue: {
162 | value: OPTS.curl,
163 | },
164 | dt: {
165 | value: 1 / OPTS.refreshRate,
166 | },
167 | texelSize: {
168 | value: new Vector2(),
169 | },
170 | },
171 | fragmentShader: vorticityFrag,
172 | vertexShader: baseVertex,
173 | depthTest: false,
174 | depthWrite: false,
175 | });
176 |
177 | return {
178 | splat,
179 | curl,
180 | clear,
181 | divergence,
182 | pressure,
183 | gradientSubstract,
184 | advection,
185 | vorticity,
186 | };
187 | }, [size]);
188 |
189 | useEffect(() => {
190 | for (const material of Object.values(shaderMaterials)) {
191 | const aspectRatio = size.width / (size.height + 400);
192 | material.uniforms.texelSize.value.set(1 / (OPTS.simRes * aspectRatio), 1 / OPTS.simRes);
193 | }
194 |
195 | return () => {
196 | for (const material of Object.values(shaderMaterials)) {
197 | material.dispose();
198 | }
199 | };
200 | }, [shaderMaterials, size]);
201 |
202 | return shaderMaterials;
203 | };
204 |
--------------------------------------------------------------------------------
/lib/hooks/usePointer.tsx:
--------------------------------------------------------------------------------
1 | import { ThreeEvent, useThree } from '@react-three/fiber';
2 | import { useCallback, useRef } from 'react';
3 | import { Vector2 } from 'three';
4 |
5 | type SplatStack = {
6 | mouseX: number;
7 | mouseY: number;
8 | velocityX: number;
9 | velocityY: number;
10 | };
11 |
12 | export const usePointer = ({ force }: { force: number }) => {
13 | const size = useThree((three) => three.size);
14 |
15 | const splatStack: SplatStack[] = useRef([]).current;
16 |
17 | const lastMouse = useRef(new Vector2());
18 | const hasMoved = useRef(false);
19 |
20 | const onPointerMove = useCallback(
21 | (event: ThreeEvent) => {
22 | const deltaX = event.x - lastMouse.current.x;
23 | const deltaY = event.y - lastMouse.current.y;
24 |
25 | if (!hasMoved.current) {
26 | hasMoved.current = true;
27 | lastMouse.current.set(event.x, event.y);
28 | return;
29 | }
30 |
31 | lastMouse.current.set(event.x, event.y);
32 |
33 | splatStack.push({
34 | mouseX: event.x / size.width,
35 | mouseY: 1.0 - event.y / size.height,
36 | velocityX: deltaX * force,
37 | velocityY: -deltaY * force,
38 | });
39 | },
40 | [force, size.height, size.width, splatStack],
41 | );
42 |
43 | return { onPointerMove, splatStack };
44 | };
45 |
--------------------------------------------------------------------------------
/lib/index.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | export type { Props } from './types';
4 |
5 | export { Fluid } from './Fluid';
6 | export { useConfig } from './hooks/useConfig';
7 |
--------------------------------------------------------------------------------
/lib/types.ts:
--------------------------------------------------------------------------------
1 | import { BlendFunction } from 'postprocessing';
2 | import { Texture } from 'three';
3 |
4 | export type SharedProps = {
5 | blend?: number;
6 | intensity?: number;
7 | distortion?: number;
8 | rainbow?: boolean;
9 | fluidColor?: string;
10 | backgroundColor?: string;
11 | showBackground?: boolean;
12 | blendFunction?: BlendFunction;
13 | };
14 |
15 | export type Props = SharedProps & {
16 | densityDissipation?: number;
17 | pressure?: number;
18 | velocityDissipation?: number;
19 | force?: number;
20 | radius?: number;
21 | curl?: number;
22 | swirl?: number;
23 | };
24 |
25 | export type EffectProps = SharedProps & {
26 | tFluid?: Texture;
27 | };
28 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { Color, Vector3 } from 'three';
2 | import { OPTS } from './constant';
3 |
4 | export const hexToRgb = (hex: string) => {
5 | const color = new Color(hex);
6 |
7 | return new Vector3(color.r, color.g, color.b);
8 | };
9 |
10 | export const normalizeScreenHz = (value: number, dt: number) => {
11 | return Math.pow(value, dt * OPTS.refreshRate);
12 | };
13 |
--------------------------------------------------------------------------------
/lib/utils/colors.ts:
--------------------------------------------------------------------------------
1 | import * as THREE from 'three';
2 |
3 | export const hexToRgb = (hex: string) => {
4 | const color = new THREE.Color(hex);
5 |
6 | return new THREE.Vector3(color.r, color.g, color.b);
7 | };
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@whatisjery/react-fluid-distortion",
3 | "description": "A react-three-fiber component for creating fluid distortion effects",
4 | "author": "Jeremie Nallet",
5 | "private": false,
6 | "version": "1.4.4",
7 | "type": "module",
8 | "main": "dist/index.umd.js",
9 | "module": "dist/index.es.js",
10 | "types": "dist/lib/index.d.ts",
11 | ".": {
12 | "import": "./dist/index.es.js",
13 | "require": "./dist/index.umd.js"
14 | },
15 | "scripts": {
16 | "dev": "vite",
17 | "build": "tsc && vite build",
18 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
19 | "preview": "vite preview"
20 | },
21 | "license": "MIT",
22 | "peerDependencies": {
23 | "@react-three/fiber": "*",
24 | "@react-three/postprocessing": "*",
25 | "postprocessing": "*",
26 | "leva": "*",
27 | "react": "*",
28 | "react-dom": "*",
29 | "three": "*"
30 | },
31 | "devDependencies": {
32 | "@react-three/drei": "^10.0.1",
33 | "@react-three/fiber": "^9.0.4",
34 | "@react-three/postprocessing": "^3.0.4",
35 | "@types/node": "^22.13.5",
36 | "@types/react": "^19.0.10",
37 | "@types/react-dom": "^19.0.4",
38 | "@types/three": "^0.173.0",
39 | "@typescript-eslint/eslint-plugin": "^8.24.1",
40 | "@typescript-eslint/parser": "^8.24.1",
41 | "@vitejs/plugin-react": "^4.3.4",
42 | "clang-format": "^1.8.0",
43 | "eslint": "^9.21.0",
44 | "eslint-plugin-react-hooks": "^5.1.0",
45 | "eslint-plugin-react-refresh": "^0.4.19",
46 | "leva": "^0.10.0",
47 | "postprocessing": "6.36.7",
48 | "react": "^19.0.0",
49 | "react-dom": "^19.0.0",
50 | "react-router-dom": "^7.2.0",
51 | "three": "^0.173.0",
52 | "tunnel-rat": "^0.1.2",
53 | "typescript": "^5.7.3",
54 | "vite": "^6.1.1",
55 | "vite-plugin-dts": "^4.5.0",
56 | "vite-plugin-glsl": "^1.3.1",
57 | "vite-tsconfig-paths": "^5.1.4"
58 | },
59 | "files": [
60 | "dist",
61 | "lib"
62 | ],
63 | "publishConfig": {
64 | "access": "public"
65 | },
66 | "include": [
67 | "lib"
68 | ],
69 | "keywords": [
70 | "react",
71 | "fluid",
72 | "react three fiber",
73 | "webgl",
74 | "postprocessing",
75 | "three js",
76 | "hover effect",
77 | "shaders",
78 | "glsl"
79 | ],
80 | "bugs": {
81 | "url": "https://github.com/whatisjery/react-fluid-distortion/issues"
82 | },
83 | "repository": {
84 | "type": "git",
85 | "url": "git+https://github.com/whatisjery/react-fluid-distortion"
86 | },
87 | "homepage": "https://github.com/whatisjery/react-fluid-distortion#readme"
88 | }
89 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@react-three/drei':
12 | specifier: ^10.0.1
13 | version: 10.0.6(@react-three/fiber@9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0))(@types/react@19.1.2)(@types/three@0.173.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)
14 | '@react-three/fiber':
15 | specifier: ^9.0.4
16 | version: 9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)
17 | '@react-three/postprocessing':
18 | specifier: ^3.0.4
19 | version: 3.0.4(@react-three/fiber@9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0))(@types/three@0.173.0)(react@19.1.0)(three@0.173.0)
20 | '@types/node':
21 | specifier: ^22.13.5
22 | version: 22.14.1
23 | '@types/react':
24 | specifier: ^19.0.10
25 | version: 19.1.2
26 | '@types/react-dom':
27 | specifier: ^19.0.4
28 | version: 19.1.2(@types/react@19.1.2)
29 | '@types/three':
30 | specifier: ^0.173.0
31 | version: 0.173.0
32 | '@typescript-eslint/eslint-plugin':
33 | specifier: ^8.24.1
34 | version: 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3)
35 | '@typescript-eslint/parser':
36 | specifier: ^8.24.1
37 | version: 8.30.1(eslint@9.24.0)(typescript@5.8.3)
38 | '@vitejs/plugin-react':
39 | specifier: ^4.3.4
40 | version: 4.4.0(vite@6.2.6(@types/node@22.14.1))
41 | clang-format:
42 | specifier: ^1.8.0
43 | version: 1.8.0
44 | eslint:
45 | specifier: ^9.21.0
46 | version: 9.24.0
47 | eslint-plugin-react-hooks:
48 | specifier: ^5.1.0
49 | version: 5.2.0(eslint@9.24.0)
50 | eslint-plugin-react-refresh:
51 | specifier: ^0.4.19
52 | version: 0.4.19(eslint@9.24.0)
53 | leva:
54 | specifier: ^0.10.0
55 | version: 0.10.0(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
56 | postprocessing:
57 | specifier: 6.36.7
58 | version: 6.36.7(three@0.173.0)
59 | react:
60 | specifier: ^19.0.0
61 | version: 19.1.0
62 | react-dom:
63 | specifier: ^19.0.0
64 | version: 19.1.0(react@19.1.0)
65 | react-router-dom:
66 | specifier: ^7.2.0
67 | version: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
68 | three:
69 | specifier: ^0.173.0
70 | version: 0.173.0
71 | tunnel-rat:
72 | specifier: ^0.1.2
73 | version: 0.1.2(@types/react@19.1.2)(react@19.1.0)
74 | typescript:
75 | specifier: ^5.7.3
76 | version: 5.8.3
77 | vite:
78 | specifier: ^6.1.1
79 | version: 6.2.6(@types/node@22.14.1)
80 | vite-plugin-dts:
81 | specifier: ^4.5.0
82 | version: 4.5.3(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1))
83 | vite-plugin-glsl:
84 | specifier: ^1.3.1
85 | version: 1.4.0(rollup@4.40.0)(vite@6.2.6(@types/node@22.14.1))
86 | vite-tsconfig-paths:
87 | specifier: ^5.1.4
88 | version: 5.1.4(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1))
89 |
90 | packages:
91 |
92 | '@ampproject/remapping@2.3.0':
93 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
94 | engines: {node: '>=6.0.0'}
95 |
96 | '@babel/code-frame@7.26.2':
97 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
98 | engines: {node: '>=6.9.0'}
99 |
100 | '@babel/compat-data@7.26.8':
101 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
102 | engines: {node: '>=6.9.0'}
103 |
104 | '@babel/core@7.26.10':
105 | resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
106 | engines: {node: '>=6.9.0'}
107 |
108 | '@babel/generator@7.27.0':
109 | resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
110 | engines: {node: '>=6.9.0'}
111 |
112 | '@babel/helper-compilation-targets@7.27.0':
113 | resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
114 | engines: {node: '>=6.9.0'}
115 |
116 | '@babel/helper-module-imports@7.25.9':
117 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
118 | engines: {node: '>=6.9.0'}
119 |
120 | '@babel/helper-module-transforms@7.26.0':
121 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
122 | engines: {node: '>=6.9.0'}
123 | peerDependencies:
124 | '@babel/core': ^7.0.0
125 |
126 | '@babel/helper-plugin-utils@7.26.5':
127 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
128 | engines: {node: '>=6.9.0'}
129 |
130 | '@babel/helper-string-parser@7.25.9':
131 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
132 | engines: {node: '>=6.9.0'}
133 |
134 | '@babel/helper-validator-identifier@7.25.9':
135 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
136 | engines: {node: '>=6.9.0'}
137 |
138 | '@babel/helper-validator-option@7.25.9':
139 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
140 | engines: {node: '>=6.9.0'}
141 |
142 | '@babel/helpers@7.27.0':
143 | resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
144 | engines: {node: '>=6.9.0'}
145 |
146 | '@babel/parser@7.27.0':
147 | resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
148 | engines: {node: '>=6.0.0'}
149 | hasBin: true
150 |
151 | '@babel/plugin-transform-react-jsx-self@7.25.9':
152 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==}
153 | engines: {node: '>=6.9.0'}
154 | peerDependencies:
155 | '@babel/core': ^7.0.0-0
156 |
157 | '@babel/plugin-transform-react-jsx-source@7.25.9':
158 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==}
159 | engines: {node: '>=6.9.0'}
160 | peerDependencies:
161 | '@babel/core': ^7.0.0-0
162 |
163 | '@babel/runtime@7.27.0':
164 | resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
165 | engines: {node: '>=6.9.0'}
166 |
167 | '@babel/template@7.27.0':
168 | resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
169 | engines: {node: '>=6.9.0'}
170 |
171 | '@babel/traverse@7.27.0':
172 | resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
173 | engines: {node: '>=6.9.0'}
174 |
175 | '@babel/types@7.27.0':
176 | resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
177 | engines: {node: '>=6.9.0'}
178 |
179 | '@esbuild/aix-ppc64@0.25.2':
180 | resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==}
181 | engines: {node: '>=18'}
182 | cpu: [ppc64]
183 | os: [aix]
184 |
185 | '@esbuild/android-arm64@0.25.2':
186 | resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==}
187 | engines: {node: '>=18'}
188 | cpu: [arm64]
189 | os: [android]
190 |
191 | '@esbuild/android-arm@0.25.2':
192 | resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==}
193 | engines: {node: '>=18'}
194 | cpu: [arm]
195 | os: [android]
196 |
197 | '@esbuild/android-x64@0.25.2':
198 | resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==}
199 | engines: {node: '>=18'}
200 | cpu: [x64]
201 | os: [android]
202 |
203 | '@esbuild/darwin-arm64@0.25.2':
204 | resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==}
205 | engines: {node: '>=18'}
206 | cpu: [arm64]
207 | os: [darwin]
208 |
209 | '@esbuild/darwin-x64@0.25.2':
210 | resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==}
211 | engines: {node: '>=18'}
212 | cpu: [x64]
213 | os: [darwin]
214 |
215 | '@esbuild/freebsd-arm64@0.25.2':
216 | resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==}
217 | engines: {node: '>=18'}
218 | cpu: [arm64]
219 | os: [freebsd]
220 |
221 | '@esbuild/freebsd-x64@0.25.2':
222 | resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==}
223 | engines: {node: '>=18'}
224 | cpu: [x64]
225 | os: [freebsd]
226 |
227 | '@esbuild/linux-arm64@0.25.2':
228 | resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==}
229 | engines: {node: '>=18'}
230 | cpu: [arm64]
231 | os: [linux]
232 |
233 | '@esbuild/linux-arm@0.25.2':
234 | resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==}
235 | engines: {node: '>=18'}
236 | cpu: [arm]
237 | os: [linux]
238 |
239 | '@esbuild/linux-ia32@0.25.2':
240 | resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==}
241 | engines: {node: '>=18'}
242 | cpu: [ia32]
243 | os: [linux]
244 |
245 | '@esbuild/linux-loong64@0.25.2':
246 | resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==}
247 | engines: {node: '>=18'}
248 | cpu: [loong64]
249 | os: [linux]
250 |
251 | '@esbuild/linux-mips64el@0.25.2':
252 | resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==}
253 | engines: {node: '>=18'}
254 | cpu: [mips64el]
255 | os: [linux]
256 |
257 | '@esbuild/linux-ppc64@0.25.2':
258 | resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==}
259 | engines: {node: '>=18'}
260 | cpu: [ppc64]
261 | os: [linux]
262 |
263 | '@esbuild/linux-riscv64@0.25.2':
264 | resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==}
265 | engines: {node: '>=18'}
266 | cpu: [riscv64]
267 | os: [linux]
268 |
269 | '@esbuild/linux-s390x@0.25.2':
270 | resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==}
271 | engines: {node: '>=18'}
272 | cpu: [s390x]
273 | os: [linux]
274 |
275 | '@esbuild/linux-x64@0.25.2':
276 | resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==}
277 | engines: {node: '>=18'}
278 | cpu: [x64]
279 | os: [linux]
280 |
281 | '@esbuild/netbsd-arm64@0.25.2':
282 | resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==}
283 | engines: {node: '>=18'}
284 | cpu: [arm64]
285 | os: [netbsd]
286 |
287 | '@esbuild/netbsd-x64@0.25.2':
288 | resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==}
289 | engines: {node: '>=18'}
290 | cpu: [x64]
291 | os: [netbsd]
292 |
293 | '@esbuild/openbsd-arm64@0.25.2':
294 | resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==}
295 | engines: {node: '>=18'}
296 | cpu: [arm64]
297 | os: [openbsd]
298 |
299 | '@esbuild/openbsd-x64@0.25.2':
300 | resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==}
301 | engines: {node: '>=18'}
302 | cpu: [x64]
303 | os: [openbsd]
304 |
305 | '@esbuild/sunos-x64@0.25.2':
306 | resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==}
307 | engines: {node: '>=18'}
308 | cpu: [x64]
309 | os: [sunos]
310 |
311 | '@esbuild/win32-arm64@0.25.2':
312 | resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==}
313 | engines: {node: '>=18'}
314 | cpu: [arm64]
315 | os: [win32]
316 |
317 | '@esbuild/win32-ia32@0.25.2':
318 | resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==}
319 | engines: {node: '>=18'}
320 | cpu: [ia32]
321 | os: [win32]
322 |
323 | '@esbuild/win32-x64@0.25.2':
324 | resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==}
325 | engines: {node: '>=18'}
326 | cpu: [x64]
327 | os: [win32]
328 |
329 | '@eslint-community/eslint-utils@4.6.0':
330 | resolution: {integrity: sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==}
331 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
332 | peerDependencies:
333 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
334 |
335 | '@eslint-community/regexpp@4.12.1':
336 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
337 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
338 |
339 | '@eslint/config-array@0.20.0':
340 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
341 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
342 |
343 | '@eslint/config-helpers@0.2.1':
344 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
345 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
346 |
347 | '@eslint/core@0.12.0':
348 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
349 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
350 |
351 | '@eslint/core@0.13.0':
352 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
353 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
354 |
355 | '@eslint/eslintrc@3.3.1':
356 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
357 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
358 |
359 | '@eslint/js@9.24.0':
360 | resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==}
361 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
362 |
363 | '@eslint/object-schema@2.1.6':
364 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
365 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
366 |
367 | '@eslint/plugin-kit@0.2.8':
368 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
369 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
370 |
371 | '@floating-ui/core@0.7.3':
372 | resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==}
373 |
374 | '@floating-ui/dom@0.5.4':
375 | resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==}
376 |
377 | '@floating-ui/react-dom@0.7.2':
378 | resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==}
379 | peerDependencies:
380 | react: '>=16.8.0'
381 | react-dom: '>=16.8.0'
382 |
383 | '@humanfs/core@0.19.1':
384 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
385 | engines: {node: '>=18.18.0'}
386 |
387 | '@humanfs/node@0.16.6':
388 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
389 | engines: {node: '>=18.18.0'}
390 |
391 | '@humanwhocodes/module-importer@1.0.1':
392 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
393 | engines: {node: '>=12.22'}
394 |
395 | '@humanwhocodes/retry@0.3.1':
396 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
397 | engines: {node: '>=18.18'}
398 |
399 | '@humanwhocodes/retry@0.4.2':
400 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
401 | engines: {node: '>=18.18'}
402 |
403 | '@jridgewell/gen-mapping@0.3.8':
404 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
405 | engines: {node: '>=6.0.0'}
406 |
407 | '@jridgewell/resolve-uri@3.1.2':
408 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
409 | engines: {node: '>=6.0.0'}
410 |
411 | '@jridgewell/set-array@1.2.1':
412 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
413 | engines: {node: '>=6.0.0'}
414 |
415 | '@jridgewell/sourcemap-codec@1.5.0':
416 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
417 |
418 | '@jridgewell/trace-mapping@0.3.25':
419 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
420 |
421 | '@mediapipe/tasks-vision@0.10.17':
422 | resolution: {integrity: sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==}
423 |
424 | '@microsoft/api-extractor-model@7.30.5':
425 | resolution: {integrity: sha512-0ic4rcbcDZHz833RaTZWTGu+NpNgrxVNjVaor0ZDUymfDFzjA/Uuk8hYziIUIOEOSTfmIQqyzVwlzxZxPe7tOA==}
426 |
427 | '@microsoft/api-extractor@7.52.3':
428 | resolution: {integrity: sha512-QEs6l8h7p9eOSHrQ9NBBUZhUuq+j/2QKcRgigbSs2YQepKz8glvsqmsUOp+nvuaY60ps7KkpVVYQCj81WLoMVQ==}
429 | hasBin: true
430 |
431 | '@microsoft/tsdoc-config@0.17.1':
432 | resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==}
433 |
434 | '@microsoft/tsdoc@0.15.1':
435 | resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
436 |
437 | '@monogrid/gainmap-js@3.1.0':
438 | resolution: {integrity: sha512-Obb0/gEd/HReTlg8ttaYk+0m62gQJmCblMOjHSMHRrBP2zdfKMHLCRbh/6ex9fSUJMKdjjIEiohwkbGD3wj2Nw==}
439 | peerDependencies:
440 | three: '>= 0.159.0'
441 |
442 | '@nodelib/fs.scandir@2.1.5':
443 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
444 | engines: {node: '>= 8'}
445 |
446 | '@nodelib/fs.stat@2.0.5':
447 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
448 | engines: {node: '>= 8'}
449 |
450 | '@nodelib/fs.walk@1.2.8':
451 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
452 | engines: {node: '>= 8'}
453 |
454 | '@radix-ui/primitive@1.0.0':
455 | resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
456 |
457 | '@radix-ui/react-arrow@1.0.2':
458 | resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==}
459 | peerDependencies:
460 | react: ^16.8 || ^17.0 || ^18.0
461 | react-dom: ^16.8 || ^17.0 || ^18.0
462 |
463 | '@radix-ui/react-compose-refs@1.0.0':
464 | resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
465 | peerDependencies:
466 | react: ^16.8 || ^17.0 || ^18.0
467 |
468 | '@radix-ui/react-context@1.0.0':
469 | resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
470 | peerDependencies:
471 | react: ^16.8 || ^17.0 || ^18.0
472 |
473 | '@radix-ui/react-dismissable-layer@1.0.3':
474 | resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==}
475 | peerDependencies:
476 | react: ^16.8 || ^17.0 || ^18.0
477 | react-dom: ^16.8 || ^17.0 || ^18.0
478 |
479 | '@radix-ui/react-id@1.0.0':
480 | resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
481 | peerDependencies:
482 | react: ^16.8 || ^17.0 || ^18.0
483 |
484 | '@radix-ui/react-popper@1.1.1':
485 | resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==}
486 | peerDependencies:
487 | react: ^16.8 || ^17.0 || ^18.0
488 | react-dom: ^16.8 || ^17.0 || ^18.0
489 |
490 | '@radix-ui/react-portal@1.0.2':
491 | resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==}
492 | peerDependencies:
493 | react: ^16.8 || ^17.0 || ^18.0
494 | react-dom: ^16.8 || ^17.0 || ^18.0
495 |
496 | '@radix-ui/react-presence@1.0.0':
497 | resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
498 | peerDependencies:
499 | react: ^16.8 || ^17.0 || ^18.0
500 | react-dom: ^16.8 || ^17.0 || ^18.0
501 |
502 | '@radix-ui/react-primitive@1.0.2':
503 | resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==}
504 | peerDependencies:
505 | react: ^16.8 || ^17.0 || ^18.0
506 | react-dom: ^16.8 || ^17.0 || ^18.0
507 |
508 | '@radix-ui/react-slot@1.0.1':
509 | resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==}
510 | peerDependencies:
511 | react: ^16.8 || ^17.0 || ^18.0
512 |
513 | '@radix-ui/react-tooltip@1.0.5':
514 | resolution: {integrity: sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==}
515 | peerDependencies:
516 | react: ^16.8 || ^17.0 || ^18.0
517 | react-dom: ^16.8 || ^17.0 || ^18.0
518 |
519 | '@radix-ui/react-use-callback-ref@1.0.0':
520 | resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
521 | peerDependencies:
522 | react: ^16.8 || ^17.0 || ^18.0
523 |
524 | '@radix-ui/react-use-controllable-state@1.0.0':
525 | resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
526 | peerDependencies:
527 | react: ^16.8 || ^17.0 || ^18.0
528 |
529 | '@radix-ui/react-use-escape-keydown@1.0.2':
530 | resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==}
531 | peerDependencies:
532 | react: ^16.8 || ^17.0 || ^18.0
533 |
534 | '@radix-ui/react-use-layout-effect@1.0.0':
535 | resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
536 | peerDependencies:
537 | react: ^16.8 || ^17.0 || ^18.0
538 |
539 | '@radix-ui/react-use-rect@1.0.0':
540 | resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==}
541 | peerDependencies:
542 | react: ^16.8 || ^17.0 || ^18.0
543 |
544 | '@radix-ui/react-use-size@1.0.0':
545 | resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==}
546 | peerDependencies:
547 | react: ^16.8 || ^17.0 || ^18.0
548 |
549 | '@radix-ui/react-visually-hidden@1.0.2':
550 | resolution: {integrity: sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==}
551 | peerDependencies:
552 | react: ^16.8 || ^17.0 || ^18.0
553 | react-dom: ^16.8 || ^17.0 || ^18.0
554 |
555 | '@radix-ui/rect@1.0.0':
556 | resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==}
557 |
558 | '@react-three/drei@10.0.6':
559 | resolution: {integrity: sha512-QtiAv/a1BaP+ZYfp8BphV8BMSO0O1BNhIPye3Zqm5iDqgX6JeiknPR6f2UmzUdBfPLwjZEaqjfULgJFvTUWgkg==}
560 | peerDependencies:
561 | '@react-three/fiber': ^9.0.0
562 | react: ^19
563 | react-dom: ^19
564 | three: '>=0.159'
565 | peerDependenciesMeta:
566 | react-dom:
567 | optional: true
568 |
569 | '@react-three/fiber@9.1.2':
570 | resolution: {integrity: sha512-k8FR9yVHV9kIF3iuOD0ds5hVymXYXfgdKklqziBVod9ZEJ8uk05Zjw29J/omU3IKeUfLNAIHfxneN3TUYM4I2w==}
571 | peerDependencies:
572 | expo: '>=43.0'
573 | expo-asset: '>=8.4'
574 | expo-file-system: '>=11.0'
575 | expo-gl: '>=11.0'
576 | react: ^19.0.0
577 | react-dom: ^19.0.0
578 | react-native: '>=0.78'
579 | three: '>=0.156'
580 | peerDependenciesMeta:
581 | expo:
582 | optional: true
583 | expo-asset:
584 | optional: true
585 | expo-file-system:
586 | optional: true
587 | expo-gl:
588 | optional: true
589 | react-dom:
590 | optional: true
591 | react-native:
592 | optional: true
593 |
594 | '@react-three/postprocessing@3.0.4':
595 | resolution: {integrity: sha512-e4+F5xtudDYvhxx3y0NtWXpZbwvQ0x1zdOXWTbXMK6fFLVDd4qucN90YaaStanZGS4Bd5siQm0lGL/5ogf8iDQ==}
596 | peerDependencies:
597 | '@react-three/fiber': ^9.0.0
598 | react: ^19.0
599 | three: '>= 0.156.0'
600 |
601 | '@rollup/pluginutils@5.1.4':
602 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
603 | engines: {node: '>=14.0.0'}
604 | peerDependencies:
605 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
606 | peerDependenciesMeta:
607 | rollup:
608 | optional: true
609 |
610 | '@rollup/rollup-android-arm-eabi@4.40.0':
611 | resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==}
612 | cpu: [arm]
613 | os: [android]
614 |
615 | '@rollup/rollup-android-arm64@4.40.0':
616 | resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==}
617 | cpu: [arm64]
618 | os: [android]
619 |
620 | '@rollup/rollup-darwin-arm64@4.40.0':
621 | resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==}
622 | cpu: [arm64]
623 | os: [darwin]
624 |
625 | '@rollup/rollup-darwin-x64@4.40.0':
626 | resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==}
627 | cpu: [x64]
628 | os: [darwin]
629 |
630 | '@rollup/rollup-freebsd-arm64@4.40.0':
631 | resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==}
632 | cpu: [arm64]
633 | os: [freebsd]
634 |
635 | '@rollup/rollup-freebsd-x64@4.40.0':
636 | resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==}
637 | cpu: [x64]
638 | os: [freebsd]
639 |
640 | '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
641 | resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==}
642 | cpu: [arm]
643 | os: [linux]
644 |
645 | '@rollup/rollup-linux-arm-musleabihf@4.40.0':
646 | resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==}
647 | cpu: [arm]
648 | os: [linux]
649 |
650 | '@rollup/rollup-linux-arm64-gnu@4.40.0':
651 | resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==}
652 | cpu: [arm64]
653 | os: [linux]
654 |
655 | '@rollup/rollup-linux-arm64-musl@4.40.0':
656 | resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==}
657 | cpu: [arm64]
658 | os: [linux]
659 |
660 | '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
661 | resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==}
662 | cpu: [loong64]
663 | os: [linux]
664 |
665 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
666 | resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==}
667 | cpu: [ppc64]
668 | os: [linux]
669 |
670 | '@rollup/rollup-linux-riscv64-gnu@4.40.0':
671 | resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==}
672 | cpu: [riscv64]
673 | os: [linux]
674 |
675 | '@rollup/rollup-linux-riscv64-musl@4.40.0':
676 | resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==}
677 | cpu: [riscv64]
678 | os: [linux]
679 |
680 | '@rollup/rollup-linux-s390x-gnu@4.40.0':
681 | resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==}
682 | cpu: [s390x]
683 | os: [linux]
684 |
685 | '@rollup/rollup-linux-x64-gnu@4.40.0':
686 | resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==}
687 | cpu: [x64]
688 | os: [linux]
689 |
690 | '@rollup/rollup-linux-x64-musl@4.40.0':
691 | resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==}
692 | cpu: [x64]
693 | os: [linux]
694 |
695 | '@rollup/rollup-win32-arm64-msvc@4.40.0':
696 | resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==}
697 | cpu: [arm64]
698 | os: [win32]
699 |
700 | '@rollup/rollup-win32-ia32-msvc@4.40.0':
701 | resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==}
702 | cpu: [ia32]
703 | os: [win32]
704 |
705 | '@rollup/rollup-win32-x64-msvc@4.40.0':
706 | resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==}
707 | cpu: [x64]
708 | os: [win32]
709 |
710 | '@rushstack/node-core-library@5.13.0':
711 | resolution: {integrity: sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg==}
712 | peerDependencies:
713 | '@types/node': '*'
714 | peerDependenciesMeta:
715 | '@types/node':
716 | optional: true
717 |
718 | '@rushstack/rig-package@0.5.3':
719 | resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==}
720 |
721 | '@rushstack/terminal@0.15.2':
722 | resolution: {integrity: sha512-7Hmc0ysK5077R/IkLS9hYu0QuNafm+TbZbtYVzCMbeOdMjaRboLKrhryjwZSRJGJzu+TV1ON7qZHeqf58XfLpA==}
723 | peerDependencies:
724 | '@types/node': '*'
725 | peerDependenciesMeta:
726 | '@types/node':
727 | optional: true
728 |
729 | '@rushstack/ts-command-line@4.23.7':
730 | resolution: {integrity: sha512-Gr9cB7DGe6uz5vq2wdr89WbVDKz0UeuFEn5H2CfWDe7JvjFFaiV15gi6mqDBTbHhHCWS7w8mF1h3BnIfUndqdA==}
731 |
732 | '@stitches/react@1.2.8':
733 | resolution: {integrity: sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==}
734 | peerDependencies:
735 | react: '>= 16.3.0'
736 |
737 | '@tweenjs/tween.js@23.1.3':
738 | resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
739 |
740 | '@types/argparse@1.0.38':
741 | resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
742 |
743 | '@types/babel__core@7.20.5':
744 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
745 |
746 | '@types/babel__generator@7.27.0':
747 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
748 |
749 | '@types/babel__template@7.4.4':
750 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
751 |
752 | '@types/babel__traverse@7.20.7':
753 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
754 |
755 | '@types/cookie@0.6.0':
756 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
757 |
758 | '@types/draco3d@1.4.10':
759 | resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==}
760 |
761 | '@types/estree@1.0.7':
762 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
763 |
764 | '@types/json-schema@7.0.15':
765 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
766 |
767 | '@types/node@22.14.1':
768 | resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==}
769 |
770 | '@types/offscreencanvas@2019.7.3':
771 | resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==}
772 |
773 | '@types/react-dom@19.1.2':
774 | resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==}
775 | peerDependencies:
776 | '@types/react': ^19.0.0
777 |
778 | '@types/react-reconciler@0.28.9':
779 | resolution: {integrity: sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==}
780 | peerDependencies:
781 | '@types/react': '*'
782 |
783 | '@types/react@19.1.2':
784 | resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==}
785 |
786 | '@types/stats.js@0.17.3':
787 | resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==}
788 |
789 | '@types/three@0.173.0':
790 | resolution: {integrity: sha512-KtNjfI/CRB6JVKIVeZM1R3GYDX2wkoV2itNcQu2j4d7qkhjGOuB+s2oF6jl9mztycDLGMtrAnJQYxInC8Bb20A==}
791 |
792 | '@types/webxr@0.5.22':
793 | resolution: {integrity: sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==}
794 |
795 | '@typescript-eslint/eslint-plugin@8.30.1':
796 | resolution: {integrity: sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==}
797 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
798 | peerDependencies:
799 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
800 | eslint: ^8.57.0 || ^9.0.0
801 | typescript: '>=4.8.4 <5.9.0'
802 |
803 | '@typescript-eslint/parser@8.30.1':
804 | resolution: {integrity: sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==}
805 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
806 | peerDependencies:
807 | eslint: ^8.57.0 || ^9.0.0
808 | typescript: '>=4.8.4 <5.9.0'
809 |
810 | '@typescript-eslint/scope-manager@8.30.1':
811 | resolution: {integrity: sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==}
812 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
813 |
814 | '@typescript-eslint/type-utils@8.30.1':
815 | resolution: {integrity: sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==}
816 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
817 | peerDependencies:
818 | eslint: ^8.57.0 || ^9.0.0
819 | typescript: '>=4.8.4 <5.9.0'
820 |
821 | '@typescript-eslint/types@8.30.1':
822 | resolution: {integrity: sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==}
823 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
824 |
825 | '@typescript-eslint/typescript-estree@8.30.1':
826 | resolution: {integrity: sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==}
827 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
828 | peerDependencies:
829 | typescript: '>=4.8.4 <5.9.0'
830 |
831 | '@typescript-eslint/utils@8.30.1':
832 | resolution: {integrity: sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==}
833 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
834 | peerDependencies:
835 | eslint: ^8.57.0 || ^9.0.0
836 | typescript: '>=4.8.4 <5.9.0'
837 |
838 | '@typescript-eslint/visitor-keys@8.30.1':
839 | resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==}
840 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
841 |
842 | '@use-gesture/core@10.3.1':
843 | resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==}
844 |
845 | '@use-gesture/react@10.3.1':
846 | resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==}
847 | peerDependencies:
848 | react: '>= 16.8.0'
849 |
850 | '@vitejs/plugin-react@4.4.0':
851 | resolution: {integrity: sha512-x/EztcTKVj+TDeANY1WjNeYsvZjZdfWRMP/KXi5Yn8BoTzpa13ZltaQqKfvWYbX8CE10GOHHdC5v86jY9x8i/g==}
852 | engines: {node: ^14.18.0 || >=16.0.0}
853 | peerDependencies:
854 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
855 |
856 | '@volar/language-core@2.4.12':
857 | resolution: {integrity: sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==}
858 |
859 | '@volar/source-map@2.4.12':
860 | resolution: {integrity: sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==}
861 |
862 | '@volar/typescript@2.4.12':
863 | resolution: {integrity: sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==}
864 |
865 | '@vue/compiler-core@3.5.13':
866 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
867 |
868 | '@vue/compiler-dom@3.5.13':
869 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
870 |
871 | '@vue/compiler-vue2@2.7.16':
872 | resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
873 |
874 | '@vue/language-core@2.2.0':
875 | resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
876 | peerDependencies:
877 | typescript: '*'
878 | peerDependenciesMeta:
879 | typescript:
880 | optional: true
881 |
882 | '@vue/shared@3.5.13':
883 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
884 |
885 | '@webgpu/types@0.1.60':
886 | resolution: {integrity: sha512-8B/tdfRFKdrnejqmvq95ogp8tf52oZ51p3f4QD5m5Paey/qlX4Rhhy5Y8tgFMi7Ms70HzcMMw3EQjH/jdhTwlA==}
887 |
888 | acorn-jsx@5.3.2:
889 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
890 | peerDependencies:
891 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
892 |
893 | acorn@8.14.1:
894 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
895 | engines: {node: '>=0.4.0'}
896 | hasBin: true
897 |
898 | ajv-draft-04@1.0.0:
899 | resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
900 | peerDependencies:
901 | ajv: ^8.5.0
902 | peerDependenciesMeta:
903 | ajv:
904 | optional: true
905 |
906 | ajv-formats@3.0.1:
907 | resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
908 | peerDependencies:
909 | ajv: ^8.0.0
910 | peerDependenciesMeta:
911 | ajv:
912 | optional: true
913 |
914 | ajv@6.12.6:
915 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
916 |
917 | ajv@8.12.0:
918 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
919 |
920 | ajv@8.13.0:
921 | resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
922 |
923 | alien-signals@0.4.14:
924 | resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
925 |
926 | ansi-styles@4.3.0:
927 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
928 | engines: {node: '>=8'}
929 |
930 | argparse@1.0.10:
931 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
932 |
933 | argparse@2.0.1:
934 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
935 |
936 | assign-symbols@1.0.0:
937 | resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
938 | engines: {node: '>=0.10.0'}
939 |
940 | async@3.2.6:
941 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
942 |
943 | attr-accept@2.2.5:
944 | resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==}
945 | engines: {node: '>=4'}
946 |
947 | balanced-match@1.0.2:
948 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
949 |
950 | base64-js@1.5.1:
951 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
952 |
953 | bidi-js@1.0.3:
954 | resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
955 |
956 | brace-expansion@1.1.11:
957 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
958 |
959 | brace-expansion@2.0.1:
960 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
961 |
962 | braces@3.0.3:
963 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
964 | engines: {node: '>=8'}
965 |
966 | browserslist@4.24.4:
967 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
968 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
969 | hasBin: true
970 |
971 | buffer@6.0.3:
972 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
973 |
974 | callsites@3.1.0:
975 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
976 | engines: {node: '>=6'}
977 |
978 | camera-controls@2.10.1:
979 | resolution: {integrity: sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==}
980 | peerDependencies:
981 | three: '>=0.126.1'
982 |
983 | caniuse-lite@1.0.30001713:
984 | resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==}
985 |
986 | chalk@4.1.2:
987 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
988 | engines: {node: '>=10'}
989 |
990 | clang-format@1.8.0:
991 | resolution: {integrity: sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==}
992 | hasBin: true
993 |
994 | color-convert@2.0.1:
995 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
996 | engines: {node: '>=7.0.0'}
997 |
998 | color-name@1.1.4:
999 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1000 |
1001 | colord@2.9.3:
1002 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
1003 |
1004 | compare-versions@6.1.1:
1005 | resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
1006 |
1007 | concat-map@0.0.1:
1008 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1009 |
1010 | confbox@0.1.8:
1011 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
1012 |
1013 | confbox@0.2.2:
1014 | resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
1015 |
1016 | convert-source-map@2.0.0:
1017 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1018 |
1019 | cookie@1.0.2:
1020 | resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
1021 | engines: {node: '>=18'}
1022 |
1023 | cross-env@7.0.3:
1024 | resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
1025 | engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
1026 | hasBin: true
1027 |
1028 | cross-spawn@7.0.6:
1029 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
1030 | engines: {node: '>= 8'}
1031 |
1032 | csstype@3.1.3:
1033 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
1034 |
1035 | de-indent@1.0.2:
1036 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
1037 |
1038 | debug@4.4.0:
1039 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
1040 | engines: {node: '>=6.0'}
1041 | peerDependencies:
1042 | supports-color: '*'
1043 | peerDependenciesMeta:
1044 | supports-color:
1045 | optional: true
1046 |
1047 | deep-is@0.1.4:
1048 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1049 |
1050 | dequal@2.0.3:
1051 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
1052 | engines: {node: '>=6'}
1053 |
1054 | detect-gpu@5.0.70:
1055 | resolution: {integrity: sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==}
1056 |
1057 | draco3d@1.5.7:
1058 | resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==}
1059 |
1060 | electron-to-chromium@1.5.137:
1061 | resolution: {integrity: sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==}
1062 |
1063 | entities@4.5.0:
1064 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1065 | engines: {node: '>=0.12'}
1066 |
1067 | esbuild@0.25.2:
1068 | resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==}
1069 | engines: {node: '>=18'}
1070 | hasBin: true
1071 |
1072 | escalade@3.2.0:
1073 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1074 | engines: {node: '>=6'}
1075 |
1076 | escape-string-regexp@4.0.0:
1077 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1078 | engines: {node: '>=10'}
1079 |
1080 | eslint-plugin-react-hooks@5.2.0:
1081 | resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
1082 | engines: {node: '>=10'}
1083 | peerDependencies:
1084 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
1085 |
1086 | eslint-plugin-react-refresh@0.4.19:
1087 | resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==}
1088 | peerDependencies:
1089 | eslint: '>=8.40'
1090 |
1091 | eslint-scope@8.3.0:
1092 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
1093 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1094 |
1095 | eslint-visitor-keys@3.4.3:
1096 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1097 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1098 |
1099 | eslint-visitor-keys@4.2.0:
1100 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
1101 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1102 |
1103 | eslint@9.24.0:
1104 | resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==}
1105 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1106 | hasBin: true
1107 | peerDependencies:
1108 | jiti: '*'
1109 | peerDependenciesMeta:
1110 | jiti:
1111 | optional: true
1112 |
1113 | espree@10.3.0:
1114 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
1115 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1116 |
1117 | esquery@1.6.0:
1118 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
1119 | engines: {node: '>=0.10'}
1120 |
1121 | esrecurse@4.3.0:
1122 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1123 | engines: {node: '>=4.0'}
1124 |
1125 | estraverse@5.3.0:
1126 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1127 | engines: {node: '>=4.0'}
1128 |
1129 | estree-walker@2.0.2:
1130 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
1131 |
1132 | esutils@2.0.3:
1133 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1134 | engines: {node: '>=0.10.0'}
1135 |
1136 | exsolve@1.0.4:
1137 | resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
1138 |
1139 | extend-shallow@2.0.1:
1140 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
1141 | engines: {node: '>=0.10.0'}
1142 |
1143 | extend-shallow@3.0.2:
1144 | resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
1145 | engines: {node: '>=0.10.0'}
1146 |
1147 | fast-deep-equal@3.1.3:
1148 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1149 |
1150 | fast-glob@3.3.3:
1151 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
1152 | engines: {node: '>=8.6.0'}
1153 |
1154 | fast-json-stable-stringify@2.1.0:
1155 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1156 |
1157 | fast-levenshtein@2.0.6:
1158 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1159 |
1160 | fastq@1.19.1:
1161 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
1162 |
1163 | fflate@0.6.10:
1164 | resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==}
1165 |
1166 | fflate@0.8.2:
1167 | resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
1168 |
1169 | file-entry-cache@8.0.0:
1170 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
1171 | engines: {node: '>=16.0.0'}
1172 |
1173 | file-selector@0.5.0:
1174 | resolution: {integrity: sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA==}
1175 | engines: {node: '>= 10'}
1176 |
1177 | fill-range@7.1.1:
1178 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1179 | engines: {node: '>=8'}
1180 |
1181 | find-up@5.0.0:
1182 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1183 | engines: {node: '>=10'}
1184 |
1185 | flat-cache@4.0.1:
1186 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
1187 | engines: {node: '>=16'}
1188 |
1189 | flatted@3.3.3:
1190 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
1191 |
1192 | for-in@1.0.2:
1193 | resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
1194 | engines: {node: '>=0.10.0'}
1195 |
1196 | fs-extra@11.3.0:
1197 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
1198 | engines: {node: '>=14.14'}
1199 |
1200 | fs.realpath@1.0.0:
1201 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1202 |
1203 | fsevents@2.3.3:
1204 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1205 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1206 | os: [darwin]
1207 |
1208 | function-bind@1.1.2:
1209 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1210 |
1211 | gensync@1.0.0-beta.2:
1212 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1213 | engines: {node: '>=6.9.0'}
1214 |
1215 | get-value@2.0.6:
1216 | resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
1217 | engines: {node: '>=0.10.0'}
1218 |
1219 | glob-parent@5.1.2:
1220 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1221 | engines: {node: '>= 6'}
1222 |
1223 | glob-parent@6.0.2:
1224 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1225 | engines: {node: '>=10.13.0'}
1226 |
1227 | glob@7.2.3:
1228 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1229 | deprecated: Glob versions prior to v9 are no longer supported
1230 |
1231 | globals@11.12.0:
1232 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1233 | engines: {node: '>=4'}
1234 |
1235 | globals@14.0.0:
1236 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
1237 | engines: {node: '>=18'}
1238 |
1239 | globrex@0.1.2:
1240 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1241 |
1242 | glsl-noise@0.0.0:
1243 | resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==}
1244 |
1245 | graceful-fs@4.2.11:
1246 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1247 |
1248 | graphemer@1.4.0:
1249 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1250 |
1251 | has-flag@4.0.0:
1252 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1253 | engines: {node: '>=8'}
1254 |
1255 | hasown@2.0.2:
1256 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1257 | engines: {node: '>= 0.4'}
1258 |
1259 | he@1.2.0:
1260 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
1261 | hasBin: true
1262 |
1263 | hls.js@1.6.2:
1264 | resolution: {integrity: sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==}
1265 |
1266 | ieee754@1.2.1:
1267 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1268 |
1269 | ignore@5.3.2:
1270 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1271 | engines: {node: '>= 4'}
1272 |
1273 | immediate@3.0.6:
1274 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
1275 |
1276 | import-fresh@3.3.1:
1277 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1278 | engines: {node: '>=6'}
1279 |
1280 | import-lazy@4.0.0:
1281 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
1282 | engines: {node: '>=8'}
1283 |
1284 | imurmurhash@0.1.4:
1285 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1286 | engines: {node: '>=0.8.19'}
1287 |
1288 | inflight@1.0.6:
1289 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1290 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1291 |
1292 | inherits@2.0.4:
1293 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1294 |
1295 | is-core-module@2.16.1:
1296 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1297 | engines: {node: '>= 0.4'}
1298 |
1299 | is-extendable@0.1.1:
1300 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
1301 | engines: {node: '>=0.10.0'}
1302 |
1303 | is-extendable@1.0.1:
1304 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
1305 | engines: {node: '>=0.10.0'}
1306 |
1307 | is-extglob@2.1.1:
1308 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1309 | engines: {node: '>=0.10.0'}
1310 |
1311 | is-glob@4.0.3:
1312 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1313 | engines: {node: '>=0.10.0'}
1314 |
1315 | is-number@7.0.0:
1316 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1317 | engines: {node: '>=0.12.0'}
1318 |
1319 | is-plain-object@2.0.4:
1320 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
1321 | engines: {node: '>=0.10.0'}
1322 |
1323 | is-promise@2.2.2:
1324 | resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
1325 |
1326 | isexe@2.0.0:
1327 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1328 |
1329 | isobject@3.0.1:
1330 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
1331 | engines: {node: '>=0.10.0'}
1332 |
1333 | its-fine@2.0.0:
1334 | resolution: {integrity: sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==}
1335 | peerDependencies:
1336 | react: ^19.0.0
1337 |
1338 | jju@1.4.0:
1339 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
1340 |
1341 | js-tokens@4.0.0:
1342 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1343 |
1344 | js-yaml@4.1.0:
1345 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1346 | hasBin: true
1347 |
1348 | jsesc@3.1.0:
1349 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1350 | engines: {node: '>=6'}
1351 | hasBin: true
1352 |
1353 | json-buffer@3.0.1:
1354 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1355 |
1356 | json-schema-traverse@0.4.1:
1357 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1358 |
1359 | json-schema-traverse@1.0.0:
1360 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
1361 |
1362 | json-stable-stringify-without-jsonify@1.0.1:
1363 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1364 |
1365 | json5@2.2.3:
1366 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1367 | engines: {node: '>=6'}
1368 | hasBin: true
1369 |
1370 | jsonfile@6.1.0:
1371 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1372 |
1373 | keyv@4.5.4:
1374 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1375 |
1376 | kolorist@1.8.0:
1377 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1378 |
1379 | leva@0.10.0:
1380 | resolution: {integrity: sha512-RiNJWmeqQdKIeHuVXgshmxIHu144a2AMYtLxKf8Nm1j93pisDPexuQDHKNdQlbo37wdyDQibLjY9JKGIiD7gaw==}
1381 | peerDependencies:
1382 | react: ^18.0.0 || ^19.0.0
1383 | react-dom: ^18.0.0 || ^19.0.0
1384 |
1385 | levn@0.4.1:
1386 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1387 | engines: {node: '>= 0.8.0'}
1388 |
1389 | lie@3.3.0:
1390 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
1391 |
1392 | local-pkg@1.1.1:
1393 | resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
1394 | engines: {node: '>=14'}
1395 |
1396 | locate-path@6.0.0:
1397 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1398 | engines: {node: '>=10'}
1399 |
1400 | lodash.merge@4.6.2:
1401 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1402 |
1403 | lodash@4.17.21:
1404 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1405 |
1406 | loose-envify@1.4.0:
1407 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1408 | hasBin: true
1409 |
1410 | lru-cache@5.1.1:
1411 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1412 |
1413 | lru-cache@6.0.0:
1414 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1415 | engines: {node: '>=10'}
1416 |
1417 | maath@0.10.8:
1418 | resolution: {integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==}
1419 | peerDependencies:
1420 | '@types/three': '>=0.134.0'
1421 | three: '>=0.134.0'
1422 |
1423 | maath@0.6.0:
1424 | resolution: {integrity: sha512-dSb2xQuP7vDnaYqfoKzlApeRcR2xtN8/f7WV/TMAkBC8552TwTLtOO0JTcSygkYMjNDPoo6V01jTw/aPi4JrMw==}
1425 | peerDependencies:
1426 | '@types/three': '>=0.144.0'
1427 | three: '>=0.144.0'
1428 |
1429 | magic-string@0.30.17:
1430 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1431 |
1432 | merge-value@1.0.0:
1433 | resolution: {integrity: sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==}
1434 | engines: {node: '>=0.10.0'}
1435 |
1436 | merge2@1.4.1:
1437 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1438 | engines: {node: '>= 8'}
1439 |
1440 | meshline@3.3.1:
1441 | resolution: {integrity: sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==}
1442 | peerDependencies:
1443 | three: '>=0.137'
1444 |
1445 | meshoptimizer@0.18.1:
1446 | resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==}
1447 |
1448 | micromatch@4.0.8:
1449 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1450 | engines: {node: '>=8.6'}
1451 |
1452 | minimatch@3.0.8:
1453 | resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
1454 |
1455 | minimatch@3.1.2:
1456 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1457 |
1458 | minimatch@9.0.5:
1459 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1460 | engines: {node: '>=16 || 14 >=14.17'}
1461 |
1462 | mixin-deep@1.3.2:
1463 | resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
1464 | engines: {node: '>=0.10.0'}
1465 |
1466 | mlly@1.7.4:
1467 | resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
1468 |
1469 | ms@2.1.3:
1470 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1471 |
1472 | muggle-string@0.4.1:
1473 | resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
1474 |
1475 | n8ao@1.9.4:
1476 | resolution: {integrity: sha512-gbpAorQecZn2oGK/rheHxPTNwOxVsEC6216+Jr9tXHUk9L5VCE2q/uxsSrQpfNkZDoCmQHf7oSg3SYFWCAt0wg==}
1477 | peerDependencies:
1478 | postprocessing: '>=6.30.0'
1479 | three: '>=0.137'
1480 |
1481 | nanoid@3.3.11:
1482 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1483 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1484 | hasBin: true
1485 |
1486 | natural-compare@1.4.0:
1487 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1488 |
1489 | node-releases@2.0.19:
1490 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1491 |
1492 | object-assign@4.1.1:
1493 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1494 | engines: {node: '>=0.10.0'}
1495 |
1496 | once@1.4.0:
1497 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1498 |
1499 | optionator@0.9.4:
1500 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1501 | engines: {node: '>= 0.8.0'}
1502 |
1503 | p-limit@3.1.0:
1504 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1505 | engines: {node: '>=10'}
1506 |
1507 | p-locate@5.0.0:
1508 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1509 | engines: {node: '>=10'}
1510 |
1511 | parent-module@1.0.1:
1512 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1513 | engines: {node: '>=6'}
1514 |
1515 | path-browserify@1.0.1:
1516 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
1517 |
1518 | path-exists@4.0.0:
1519 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1520 | engines: {node: '>=8'}
1521 |
1522 | path-is-absolute@1.0.1:
1523 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1524 | engines: {node: '>=0.10.0'}
1525 |
1526 | path-key@3.1.1:
1527 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1528 | engines: {node: '>=8'}
1529 |
1530 | path-parse@1.0.7:
1531 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1532 |
1533 | pathe@2.0.3:
1534 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1535 |
1536 | picocolors@1.1.1:
1537 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1538 |
1539 | picomatch@2.3.1:
1540 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1541 | engines: {node: '>=8.6'}
1542 |
1543 | picomatch@4.0.2:
1544 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1545 | engines: {node: '>=12'}
1546 |
1547 | pkg-types@1.3.1:
1548 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
1549 |
1550 | pkg-types@2.1.0:
1551 | resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
1552 |
1553 | postcss@8.5.3:
1554 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1555 | engines: {node: ^10 || ^12 || >=14}
1556 |
1557 | postprocessing@6.36.7:
1558 | resolution: {integrity: sha512-X6B3xt9dy4Osv19kqnVGqV01I2Tm7VwV6rLegRIZkZJPH3ozKLypHSBK1xKx7P/Ols++OkXe6L8dBGTaDUL5aw==}
1559 | peerDependencies:
1560 | three: '>= 0.157.0 < 0.174.0'
1561 |
1562 | potpack@1.0.2:
1563 | resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==}
1564 |
1565 | prelude-ls@1.2.1:
1566 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1567 | engines: {node: '>= 0.8.0'}
1568 |
1569 | promise-worker-transferable@1.0.4:
1570 | resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==}
1571 |
1572 | prop-types@15.8.1:
1573 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1574 |
1575 | punycode@2.3.1:
1576 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1577 | engines: {node: '>=6'}
1578 |
1579 | quansync@0.2.10:
1580 | resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
1581 |
1582 | queue-microtask@1.2.3:
1583 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1584 |
1585 | react-colorful@5.6.1:
1586 | resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
1587 | peerDependencies:
1588 | react: '>=16.8.0'
1589 | react-dom: '>=16.8.0'
1590 |
1591 | react-dom@19.1.0:
1592 | resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
1593 | peerDependencies:
1594 | react: ^19.1.0
1595 |
1596 | react-dropzone@12.1.0:
1597 | resolution: {integrity: sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog==}
1598 | engines: {node: '>= 10.13'}
1599 | peerDependencies:
1600 | react: '>= 16.8'
1601 |
1602 | react-is@16.13.1:
1603 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1604 |
1605 | react-reconciler@0.31.0:
1606 | resolution: {integrity: sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==}
1607 | engines: {node: '>=0.10.0'}
1608 | peerDependencies:
1609 | react: ^19.0.0
1610 |
1611 | react-refresh@0.17.0:
1612 | resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1613 | engines: {node: '>=0.10.0'}
1614 |
1615 | react-router-dom@7.5.0:
1616 | resolution: {integrity: sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==}
1617 | engines: {node: '>=20.0.0'}
1618 | peerDependencies:
1619 | react: '>=18'
1620 | react-dom: '>=18'
1621 |
1622 | react-router@7.5.0:
1623 | resolution: {integrity: sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==}
1624 | engines: {node: '>=20.0.0'}
1625 | peerDependencies:
1626 | react: '>=18'
1627 | react-dom: '>=18'
1628 | peerDependenciesMeta:
1629 | react-dom:
1630 | optional: true
1631 |
1632 | react-use-measure@2.1.7:
1633 | resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==}
1634 | peerDependencies:
1635 | react: '>=16.13'
1636 | react-dom: '>=16.13'
1637 | peerDependenciesMeta:
1638 | react-dom:
1639 | optional: true
1640 |
1641 | react@19.1.0:
1642 | resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
1643 | engines: {node: '>=0.10.0'}
1644 |
1645 | regenerator-runtime@0.14.1:
1646 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1647 |
1648 | require-from-string@2.0.2:
1649 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1650 | engines: {node: '>=0.10.0'}
1651 |
1652 | resolve-from@4.0.0:
1653 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1654 | engines: {node: '>=4'}
1655 |
1656 | resolve@1.22.10:
1657 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1658 | engines: {node: '>= 0.4'}
1659 | hasBin: true
1660 |
1661 | reusify@1.1.0:
1662 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1663 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1664 |
1665 | rollup@4.40.0:
1666 | resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==}
1667 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1668 | hasBin: true
1669 |
1670 | run-parallel@1.2.0:
1671 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1672 |
1673 | scheduler@0.25.0:
1674 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
1675 |
1676 | scheduler@0.26.0:
1677 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
1678 |
1679 | semver@6.3.1:
1680 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1681 | hasBin: true
1682 |
1683 | semver@7.5.4:
1684 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
1685 | engines: {node: '>=10'}
1686 | hasBin: true
1687 |
1688 | semver@7.7.1:
1689 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1690 | engines: {node: '>=10'}
1691 | hasBin: true
1692 |
1693 | set-cookie-parser@2.7.1:
1694 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
1695 |
1696 | set-value@2.0.1:
1697 | resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
1698 | engines: {node: '>=0.10.0'}
1699 |
1700 | shebang-command@2.0.0:
1701 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1702 | engines: {node: '>=8'}
1703 |
1704 | shebang-regex@3.0.0:
1705 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1706 | engines: {node: '>=8'}
1707 |
1708 | source-map-js@1.2.1:
1709 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1710 | engines: {node: '>=0.10.0'}
1711 |
1712 | source-map@0.6.1:
1713 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1714 | engines: {node: '>=0.10.0'}
1715 |
1716 | split-string@3.1.0:
1717 | resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
1718 | engines: {node: '>=0.10.0'}
1719 |
1720 | sprintf-js@1.0.3:
1721 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
1722 |
1723 | stats-gl@2.4.2:
1724 | resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==}
1725 | peerDependencies:
1726 | '@types/three': '*'
1727 | three: '*'
1728 |
1729 | stats.js@0.17.0:
1730 | resolution: {integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==}
1731 |
1732 | string-argv@0.3.2:
1733 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
1734 | engines: {node: '>=0.6.19'}
1735 |
1736 | strip-json-comments@3.1.1:
1737 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1738 | engines: {node: '>=8'}
1739 |
1740 | supports-color@7.2.0:
1741 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1742 | engines: {node: '>=8'}
1743 |
1744 | supports-color@8.1.1:
1745 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1746 | engines: {node: '>=10'}
1747 |
1748 | supports-preserve-symlinks-flag@1.0.0:
1749 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1750 | engines: {node: '>= 0.4'}
1751 |
1752 | suspend-react@0.1.3:
1753 | resolution: {integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==}
1754 | peerDependencies:
1755 | react: '>=17.0'
1756 |
1757 | three-mesh-bvh@0.8.3:
1758 | resolution: {integrity: sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==}
1759 | peerDependencies:
1760 | three: '>= 0.159.0'
1761 |
1762 | three-stdlib@2.35.15:
1763 | resolution: {integrity: sha512-2XbhiOV7jVCchUoWxTmsj5dNhTe8eYb58Nyrfoa2F2yL+6h/+2VRaU2gENljRW1d/P1mk4/uwNzbdkKWV3hwzw==}
1764 | peerDependencies:
1765 | three: '>=0.128.0'
1766 |
1767 | three@0.173.0:
1768 | resolution: {integrity: sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==}
1769 |
1770 | to-regex-range@5.0.1:
1771 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1772 | engines: {node: '>=8.0'}
1773 |
1774 | troika-three-text@0.52.4:
1775 | resolution: {integrity: sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==}
1776 | peerDependencies:
1777 | three: '>=0.125.0'
1778 |
1779 | troika-three-utils@0.52.4:
1780 | resolution: {integrity: sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==}
1781 | peerDependencies:
1782 | three: '>=0.125.0'
1783 |
1784 | troika-worker-utils@0.52.0:
1785 | resolution: {integrity: sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==}
1786 |
1787 | ts-api-utils@2.1.0:
1788 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1789 | engines: {node: '>=18.12'}
1790 | peerDependencies:
1791 | typescript: '>=4.8.4'
1792 |
1793 | tsconfck@3.1.5:
1794 | resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==}
1795 | engines: {node: ^18 || >=20}
1796 | hasBin: true
1797 | peerDependencies:
1798 | typescript: ^5.0.0
1799 | peerDependenciesMeta:
1800 | typescript:
1801 | optional: true
1802 |
1803 | tslib@2.8.1:
1804 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1805 |
1806 | tunnel-rat@0.1.2:
1807 | resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==}
1808 |
1809 | turbo-stream@2.4.0:
1810 | resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==}
1811 |
1812 | type-check@0.4.0:
1813 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1814 | engines: {node: '>= 0.8.0'}
1815 |
1816 | typescript@5.8.2:
1817 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
1818 | engines: {node: '>=14.17'}
1819 | hasBin: true
1820 |
1821 | typescript@5.8.3:
1822 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1823 | engines: {node: '>=14.17'}
1824 | hasBin: true
1825 |
1826 | ufo@1.6.1:
1827 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
1828 |
1829 | undici-types@6.21.0:
1830 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1831 |
1832 | universalify@2.0.1:
1833 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
1834 | engines: {node: '>= 10.0.0'}
1835 |
1836 | update-browserslist-db@1.1.3:
1837 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1838 | hasBin: true
1839 | peerDependencies:
1840 | browserslist: '>= 4.21.0'
1841 |
1842 | uri-js@4.4.1:
1843 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1844 |
1845 | use-isomorphic-layout-effect@1.2.0:
1846 | resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==}
1847 | peerDependencies:
1848 | '@types/react': '*'
1849 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1850 | peerDependenciesMeta:
1851 | '@types/react':
1852 | optional: true
1853 |
1854 | use-sync-external-store@1.5.0:
1855 | resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
1856 | peerDependencies:
1857 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1858 |
1859 | utility-types@3.11.0:
1860 | resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
1861 | engines: {node: '>= 4'}
1862 |
1863 | v8n@1.5.1:
1864 | resolution: {integrity: sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A==}
1865 |
1866 | vite-plugin-dts@4.5.3:
1867 | resolution: {integrity: sha512-P64VnD00dR+e8S26ESoFELqc17+w7pKkwlBpgXteOljFyT0zDwD8hH4zXp49M/kciy//7ZbVXIwQCekBJjfWzA==}
1868 | peerDependencies:
1869 | typescript: '*'
1870 | vite: '*'
1871 | peerDependenciesMeta:
1872 | vite:
1873 | optional: true
1874 |
1875 | vite-plugin-glsl@1.4.0:
1876 | resolution: {integrity: sha512-mjT4AaU4qRmlpawgd0M2Qz72tvK4WF0ii2p0WbVRpr7ga6+cRScJUT3oIMv5coT8u/lqUe9u9T5+0zJLZ1uhug==}
1877 | engines: {node: '>= 20.17.0', npm: '>= 10.8.3'}
1878 | peerDependencies:
1879 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
1880 |
1881 | vite-tsconfig-paths@5.1.4:
1882 | resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
1883 | peerDependencies:
1884 | vite: '*'
1885 | peerDependenciesMeta:
1886 | vite:
1887 | optional: true
1888 |
1889 | vite@6.2.6:
1890 | resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==}
1891 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1892 | hasBin: true
1893 | peerDependencies:
1894 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1895 | jiti: '>=1.21.0'
1896 | less: '*'
1897 | lightningcss: ^1.21.0
1898 | sass: '*'
1899 | sass-embedded: '*'
1900 | stylus: '*'
1901 | sugarss: '*'
1902 | terser: ^5.16.0
1903 | tsx: ^4.8.1
1904 | yaml: ^2.4.2
1905 | peerDependenciesMeta:
1906 | '@types/node':
1907 | optional: true
1908 | jiti:
1909 | optional: true
1910 | less:
1911 | optional: true
1912 | lightningcss:
1913 | optional: true
1914 | sass:
1915 | optional: true
1916 | sass-embedded:
1917 | optional: true
1918 | stylus:
1919 | optional: true
1920 | sugarss:
1921 | optional: true
1922 | terser:
1923 | optional: true
1924 | tsx:
1925 | optional: true
1926 | yaml:
1927 | optional: true
1928 |
1929 | vscode-uri@3.1.0:
1930 | resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
1931 |
1932 | webgl-constants@1.1.1:
1933 | resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==}
1934 |
1935 | webgl-sdf-generator@1.1.1:
1936 | resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==}
1937 |
1938 | which@2.0.2:
1939 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1940 | engines: {node: '>= 8'}
1941 | hasBin: true
1942 |
1943 | word-wrap@1.2.5:
1944 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1945 | engines: {node: '>=0.10.0'}
1946 |
1947 | wrappy@1.0.2:
1948 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1949 |
1950 | yallist@3.1.1:
1951 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1952 |
1953 | yallist@4.0.0:
1954 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1955 |
1956 | yocto-queue@0.1.0:
1957 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1958 | engines: {node: '>=10'}
1959 |
1960 | zustand@3.7.2:
1961 | resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==}
1962 | engines: {node: '>=12.7.0'}
1963 | peerDependencies:
1964 | react: '>=16.8'
1965 | peerDependenciesMeta:
1966 | react:
1967 | optional: true
1968 |
1969 | zustand@4.5.6:
1970 | resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
1971 | engines: {node: '>=12.7.0'}
1972 | peerDependencies:
1973 | '@types/react': '>=16.8'
1974 | immer: '>=9.0.6'
1975 | react: '>=16.8'
1976 | peerDependenciesMeta:
1977 | '@types/react':
1978 | optional: true
1979 | immer:
1980 | optional: true
1981 | react:
1982 | optional: true
1983 |
1984 | zustand@5.0.3:
1985 | resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==}
1986 | engines: {node: '>=12.20.0'}
1987 | peerDependencies:
1988 | '@types/react': '>=18.0.0'
1989 | immer: '>=9.0.6'
1990 | react: '>=18.0.0'
1991 | use-sync-external-store: '>=1.2.0'
1992 | peerDependenciesMeta:
1993 | '@types/react':
1994 | optional: true
1995 | immer:
1996 | optional: true
1997 | react:
1998 | optional: true
1999 | use-sync-external-store:
2000 | optional: true
2001 |
2002 | snapshots:
2003 |
2004 | '@ampproject/remapping@2.3.0':
2005 | dependencies:
2006 | '@jridgewell/gen-mapping': 0.3.8
2007 | '@jridgewell/trace-mapping': 0.3.25
2008 |
2009 | '@babel/code-frame@7.26.2':
2010 | dependencies:
2011 | '@babel/helper-validator-identifier': 7.25.9
2012 | js-tokens: 4.0.0
2013 | picocolors: 1.1.1
2014 |
2015 | '@babel/compat-data@7.26.8': {}
2016 |
2017 | '@babel/core@7.26.10':
2018 | dependencies:
2019 | '@ampproject/remapping': 2.3.0
2020 | '@babel/code-frame': 7.26.2
2021 | '@babel/generator': 7.27.0
2022 | '@babel/helper-compilation-targets': 7.27.0
2023 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
2024 | '@babel/helpers': 7.27.0
2025 | '@babel/parser': 7.27.0
2026 | '@babel/template': 7.27.0
2027 | '@babel/traverse': 7.27.0
2028 | '@babel/types': 7.27.0
2029 | convert-source-map: 2.0.0
2030 | debug: 4.4.0
2031 | gensync: 1.0.0-beta.2
2032 | json5: 2.2.3
2033 | semver: 6.3.1
2034 | transitivePeerDependencies:
2035 | - supports-color
2036 |
2037 | '@babel/generator@7.27.0':
2038 | dependencies:
2039 | '@babel/parser': 7.27.0
2040 | '@babel/types': 7.27.0
2041 | '@jridgewell/gen-mapping': 0.3.8
2042 | '@jridgewell/trace-mapping': 0.3.25
2043 | jsesc: 3.1.0
2044 |
2045 | '@babel/helper-compilation-targets@7.27.0':
2046 | dependencies:
2047 | '@babel/compat-data': 7.26.8
2048 | '@babel/helper-validator-option': 7.25.9
2049 | browserslist: 4.24.4
2050 | lru-cache: 5.1.1
2051 | semver: 6.3.1
2052 |
2053 | '@babel/helper-module-imports@7.25.9':
2054 | dependencies:
2055 | '@babel/traverse': 7.27.0
2056 | '@babel/types': 7.27.0
2057 | transitivePeerDependencies:
2058 | - supports-color
2059 |
2060 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
2061 | dependencies:
2062 | '@babel/core': 7.26.10
2063 | '@babel/helper-module-imports': 7.25.9
2064 | '@babel/helper-validator-identifier': 7.25.9
2065 | '@babel/traverse': 7.27.0
2066 | transitivePeerDependencies:
2067 | - supports-color
2068 |
2069 | '@babel/helper-plugin-utils@7.26.5': {}
2070 |
2071 | '@babel/helper-string-parser@7.25.9': {}
2072 |
2073 | '@babel/helper-validator-identifier@7.25.9': {}
2074 |
2075 | '@babel/helper-validator-option@7.25.9': {}
2076 |
2077 | '@babel/helpers@7.27.0':
2078 | dependencies:
2079 | '@babel/template': 7.27.0
2080 | '@babel/types': 7.27.0
2081 |
2082 | '@babel/parser@7.27.0':
2083 | dependencies:
2084 | '@babel/types': 7.27.0
2085 |
2086 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)':
2087 | dependencies:
2088 | '@babel/core': 7.26.10
2089 | '@babel/helper-plugin-utils': 7.26.5
2090 |
2091 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)':
2092 | dependencies:
2093 | '@babel/core': 7.26.10
2094 | '@babel/helper-plugin-utils': 7.26.5
2095 |
2096 | '@babel/runtime@7.27.0':
2097 | dependencies:
2098 | regenerator-runtime: 0.14.1
2099 |
2100 | '@babel/template@7.27.0':
2101 | dependencies:
2102 | '@babel/code-frame': 7.26.2
2103 | '@babel/parser': 7.27.0
2104 | '@babel/types': 7.27.0
2105 |
2106 | '@babel/traverse@7.27.0':
2107 | dependencies:
2108 | '@babel/code-frame': 7.26.2
2109 | '@babel/generator': 7.27.0
2110 | '@babel/parser': 7.27.0
2111 | '@babel/template': 7.27.0
2112 | '@babel/types': 7.27.0
2113 | debug: 4.4.0
2114 | globals: 11.12.0
2115 | transitivePeerDependencies:
2116 | - supports-color
2117 |
2118 | '@babel/types@7.27.0':
2119 | dependencies:
2120 | '@babel/helper-string-parser': 7.25.9
2121 | '@babel/helper-validator-identifier': 7.25.9
2122 |
2123 | '@esbuild/aix-ppc64@0.25.2':
2124 | optional: true
2125 |
2126 | '@esbuild/android-arm64@0.25.2':
2127 | optional: true
2128 |
2129 | '@esbuild/android-arm@0.25.2':
2130 | optional: true
2131 |
2132 | '@esbuild/android-x64@0.25.2':
2133 | optional: true
2134 |
2135 | '@esbuild/darwin-arm64@0.25.2':
2136 | optional: true
2137 |
2138 | '@esbuild/darwin-x64@0.25.2':
2139 | optional: true
2140 |
2141 | '@esbuild/freebsd-arm64@0.25.2':
2142 | optional: true
2143 |
2144 | '@esbuild/freebsd-x64@0.25.2':
2145 | optional: true
2146 |
2147 | '@esbuild/linux-arm64@0.25.2':
2148 | optional: true
2149 |
2150 | '@esbuild/linux-arm@0.25.2':
2151 | optional: true
2152 |
2153 | '@esbuild/linux-ia32@0.25.2':
2154 | optional: true
2155 |
2156 | '@esbuild/linux-loong64@0.25.2':
2157 | optional: true
2158 |
2159 | '@esbuild/linux-mips64el@0.25.2':
2160 | optional: true
2161 |
2162 | '@esbuild/linux-ppc64@0.25.2':
2163 | optional: true
2164 |
2165 | '@esbuild/linux-riscv64@0.25.2':
2166 | optional: true
2167 |
2168 | '@esbuild/linux-s390x@0.25.2':
2169 | optional: true
2170 |
2171 | '@esbuild/linux-x64@0.25.2':
2172 | optional: true
2173 |
2174 | '@esbuild/netbsd-arm64@0.25.2':
2175 | optional: true
2176 |
2177 | '@esbuild/netbsd-x64@0.25.2':
2178 | optional: true
2179 |
2180 | '@esbuild/openbsd-arm64@0.25.2':
2181 | optional: true
2182 |
2183 | '@esbuild/openbsd-x64@0.25.2':
2184 | optional: true
2185 |
2186 | '@esbuild/sunos-x64@0.25.2':
2187 | optional: true
2188 |
2189 | '@esbuild/win32-arm64@0.25.2':
2190 | optional: true
2191 |
2192 | '@esbuild/win32-ia32@0.25.2':
2193 | optional: true
2194 |
2195 | '@esbuild/win32-x64@0.25.2':
2196 | optional: true
2197 |
2198 | '@eslint-community/eslint-utils@4.6.0(eslint@9.24.0)':
2199 | dependencies:
2200 | eslint: 9.24.0
2201 | eslint-visitor-keys: 3.4.3
2202 |
2203 | '@eslint-community/regexpp@4.12.1': {}
2204 |
2205 | '@eslint/config-array@0.20.0':
2206 | dependencies:
2207 | '@eslint/object-schema': 2.1.6
2208 | debug: 4.4.0
2209 | minimatch: 3.1.2
2210 | transitivePeerDependencies:
2211 | - supports-color
2212 |
2213 | '@eslint/config-helpers@0.2.1': {}
2214 |
2215 | '@eslint/core@0.12.0':
2216 | dependencies:
2217 | '@types/json-schema': 7.0.15
2218 |
2219 | '@eslint/core@0.13.0':
2220 | dependencies:
2221 | '@types/json-schema': 7.0.15
2222 |
2223 | '@eslint/eslintrc@3.3.1':
2224 | dependencies:
2225 | ajv: 6.12.6
2226 | debug: 4.4.0
2227 | espree: 10.3.0
2228 | globals: 14.0.0
2229 | ignore: 5.3.2
2230 | import-fresh: 3.3.1
2231 | js-yaml: 4.1.0
2232 | minimatch: 3.1.2
2233 | strip-json-comments: 3.1.1
2234 | transitivePeerDependencies:
2235 | - supports-color
2236 |
2237 | '@eslint/js@9.24.0': {}
2238 |
2239 | '@eslint/object-schema@2.1.6': {}
2240 |
2241 | '@eslint/plugin-kit@0.2.8':
2242 | dependencies:
2243 | '@eslint/core': 0.13.0
2244 | levn: 0.4.1
2245 |
2246 | '@floating-ui/core@0.7.3': {}
2247 |
2248 | '@floating-ui/dom@0.5.4':
2249 | dependencies:
2250 | '@floating-ui/core': 0.7.3
2251 |
2252 | '@floating-ui/react-dom@0.7.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2253 | dependencies:
2254 | '@floating-ui/dom': 0.5.4
2255 | react: 19.1.0
2256 | react-dom: 19.1.0(react@19.1.0)
2257 | use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.2)(react@19.1.0)
2258 | transitivePeerDependencies:
2259 | - '@types/react'
2260 |
2261 | '@humanfs/core@0.19.1': {}
2262 |
2263 | '@humanfs/node@0.16.6':
2264 | dependencies:
2265 | '@humanfs/core': 0.19.1
2266 | '@humanwhocodes/retry': 0.3.1
2267 |
2268 | '@humanwhocodes/module-importer@1.0.1': {}
2269 |
2270 | '@humanwhocodes/retry@0.3.1': {}
2271 |
2272 | '@humanwhocodes/retry@0.4.2': {}
2273 |
2274 | '@jridgewell/gen-mapping@0.3.8':
2275 | dependencies:
2276 | '@jridgewell/set-array': 1.2.1
2277 | '@jridgewell/sourcemap-codec': 1.5.0
2278 | '@jridgewell/trace-mapping': 0.3.25
2279 |
2280 | '@jridgewell/resolve-uri@3.1.2': {}
2281 |
2282 | '@jridgewell/set-array@1.2.1': {}
2283 |
2284 | '@jridgewell/sourcemap-codec@1.5.0': {}
2285 |
2286 | '@jridgewell/trace-mapping@0.3.25':
2287 | dependencies:
2288 | '@jridgewell/resolve-uri': 3.1.2
2289 | '@jridgewell/sourcemap-codec': 1.5.0
2290 |
2291 | '@mediapipe/tasks-vision@0.10.17': {}
2292 |
2293 | '@microsoft/api-extractor-model@7.30.5(@types/node@22.14.1)':
2294 | dependencies:
2295 | '@microsoft/tsdoc': 0.15.1
2296 | '@microsoft/tsdoc-config': 0.17.1
2297 | '@rushstack/node-core-library': 5.13.0(@types/node@22.14.1)
2298 | transitivePeerDependencies:
2299 | - '@types/node'
2300 |
2301 | '@microsoft/api-extractor@7.52.3(@types/node@22.14.1)':
2302 | dependencies:
2303 | '@microsoft/api-extractor-model': 7.30.5(@types/node@22.14.1)
2304 | '@microsoft/tsdoc': 0.15.1
2305 | '@microsoft/tsdoc-config': 0.17.1
2306 | '@rushstack/node-core-library': 5.13.0(@types/node@22.14.1)
2307 | '@rushstack/rig-package': 0.5.3
2308 | '@rushstack/terminal': 0.15.2(@types/node@22.14.1)
2309 | '@rushstack/ts-command-line': 4.23.7(@types/node@22.14.1)
2310 | lodash: 4.17.21
2311 | minimatch: 3.0.8
2312 | resolve: 1.22.10
2313 | semver: 7.5.4
2314 | source-map: 0.6.1
2315 | typescript: 5.8.2
2316 | transitivePeerDependencies:
2317 | - '@types/node'
2318 |
2319 | '@microsoft/tsdoc-config@0.17.1':
2320 | dependencies:
2321 | '@microsoft/tsdoc': 0.15.1
2322 | ajv: 8.12.0
2323 | jju: 1.4.0
2324 | resolve: 1.22.10
2325 |
2326 | '@microsoft/tsdoc@0.15.1': {}
2327 |
2328 | '@monogrid/gainmap-js@3.1.0(three@0.173.0)':
2329 | dependencies:
2330 | promise-worker-transferable: 1.0.4
2331 | three: 0.173.0
2332 |
2333 | '@nodelib/fs.scandir@2.1.5':
2334 | dependencies:
2335 | '@nodelib/fs.stat': 2.0.5
2336 | run-parallel: 1.2.0
2337 |
2338 | '@nodelib/fs.stat@2.0.5': {}
2339 |
2340 | '@nodelib/fs.walk@1.2.8':
2341 | dependencies:
2342 | '@nodelib/fs.scandir': 2.1.5
2343 | fastq: 1.19.1
2344 |
2345 | '@radix-ui/primitive@1.0.0':
2346 | dependencies:
2347 | '@babel/runtime': 7.27.0
2348 |
2349 | '@radix-ui/react-arrow@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2350 | dependencies:
2351 | '@babel/runtime': 7.27.0
2352 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2353 | react: 19.1.0
2354 | react-dom: 19.1.0(react@19.1.0)
2355 |
2356 | '@radix-ui/react-compose-refs@1.0.0(react@19.1.0)':
2357 | dependencies:
2358 | '@babel/runtime': 7.27.0
2359 | react: 19.1.0
2360 |
2361 | '@radix-ui/react-context@1.0.0(react@19.1.0)':
2362 | dependencies:
2363 | '@babel/runtime': 7.27.0
2364 | react: 19.1.0
2365 |
2366 | '@radix-ui/react-dismissable-layer@1.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2367 | dependencies:
2368 | '@babel/runtime': 7.27.0
2369 | '@radix-ui/primitive': 1.0.0
2370 | '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0)
2371 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2372 | '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0)
2373 | '@radix-ui/react-use-escape-keydown': 1.0.2(react@19.1.0)
2374 | react: 19.1.0
2375 | react-dom: 19.1.0(react@19.1.0)
2376 |
2377 | '@radix-ui/react-id@1.0.0(react@19.1.0)':
2378 | dependencies:
2379 | '@babel/runtime': 7.27.0
2380 | '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0)
2381 | react: 19.1.0
2382 |
2383 | '@radix-ui/react-popper@1.1.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2384 | dependencies:
2385 | '@babel/runtime': 7.27.0
2386 | '@floating-ui/react-dom': 0.7.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2387 | '@radix-ui/react-arrow': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2388 | '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0)
2389 | '@radix-ui/react-context': 1.0.0(react@19.1.0)
2390 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2391 | '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0)
2392 | '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0)
2393 | '@radix-ui/react-use-rect': 1.0.0(react@19.1.0)
2394 | '@radix-ui/react-use-size': 1.0.0(react@19.1.0)
2395 | '@radix-ui/rect': 1.0.0
2396 | react: 19.1.0
2397 | react-dom: 19.1.0(react@19.1.0)
2398 | transitivePeerDependencies:
2399 | - '@types/react'
2400 |
2401 | '@radix-ui/react-portal@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2402 | dependencies:
2403 | '@babel/runtime': 7.27.0
2404 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2405 | react: 19.1.0
2406 | react-dom: 19.1.0(react@19.1.0)
2407 |
2408 | '@radix-ui/react-presence@1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2409 | dependencies:
2410 | '@babel/runtime': 7.27.0
2411 | '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0)
2412 | '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0)
2413 | react: 19.1.0
2414 | react-dom: 19.1.0(react@19.1.0)
2415 |
2416 | '@radix-ui/react-primitive@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2417 | dependencies:
2418 | '@babel/runtime': 7.27.0
2419 | '@radix-ui/react-slot': 1.0.1(react@19.1.0)
2420 | react: 19.1.0
2421 | react-dom: 19.1.0(react@19.1.0)
2422 |
2423 | '@radix-ui/react-slot@1.0.1(react@19.1.0)':
2424 | dependencies:
2425 | '@babel/runtime': 7.27.0
2426 | '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0)
2427 | react: 19.1.0
2428 |
2429 | '@radix-ui/react-tooltip@1.0.5(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2430 | dependencies:
2431 | '@babel/runtime': 7.27.0
2432 | '@radix-ui/primitive': 1.0.0
2433 | '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0)
2434 | '@radix-ui/react-context': 1.0.0(react@19.1.0)
2435 | '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2436 | '@radix-ui/react-id': 1.0.0(react@19.1.0)
2437 | '@radix-ui/react-popper': 1.1.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2438 | '@radix-ui/react-portal': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2439 | '@radix-ui/react-presence': 1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2440 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2441 | '@radix-ui/react-slot': 1.0.1(react@19.1.0)
2442 | '@radix-ui/react-use-controllable-state': 1.0.0(react@19.1.0)
2443 | '@radix-ui/react-visually-hidden': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2444 | react: 19.1.0
2445 | react-dom: 19.1.0(react@19.1.0)
2446 | transitivePeerDependencies:
2447 | - '@types/react'
2448 |
2449 | '@radix-ui/react-use-callback-ref@1.0.0(react@19.1.0)':
2450 | dependencies:
2451 | '@babel/runtime': 7.27.0
2452 | react: 19.1.0
2453 |
2454 | '@radix-ui/react-use-controllable-state@1.0.0(react@19.1.0)':
2455 | dependencies:
2456 | '@babel/runtime': 7.27.0
2457 | '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0)
2458 | react: 19.1.0
2459 |
2460 | '@radix-ui/react-use-escape-keydown@1.0.2(react@19.1.0)':
2461 | dependencies:
2462 | '@babel/runtime': 7.27.0
2463 | '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0)
2464 | react: 19.1.0
2465 |
2466 | '@radix-ui/react-use-layout-effect@1.0.0(react@19.1.0)':
2467 | dependencies:
2468 | '@babel/runtime': 7.27.0
2469 | react: 19.1.0
2470 |
2471 | '@radix-ui/react-use-rect@1.0.0(react@19.1.0)':
2472 | dependencies:
2473 | '@babel/runtime': 7.27.0
2474 | '@radix-ui/rect': 1.0.0
2475 | react: 19.1.0
2476 |
2477 | '@radix-ui/react-use-size@1.0.0(react@19.1.0)':
2478 | dependencies:
2479 | '@babel/runtime': 7.27.0
2480 | '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0)
2481 | react: 19.1.0
2482 |
2483 | '@radix-ui/react-visually-hidden@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2484 | dependencies:
2485 | '@babel/runtime': 7.27.0
2486 | '@radix-ui/react-primitive': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2487 | react: 19.1.0
2488 | react-dom: 19.1.0(react@19.1.0)
2489 |
2490 | '@radix-ui/rect@1.0.0':
2491 | dependencies:
2492 | '@babel/runtime': 7.27.0
2493 |
2494 | '@react-three/drei@10.0.6(@react-three/fiber@9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0))(@types/react@19.1.2)(@types/three@0.173.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)':
2495 | dependencies:
2496 | '@babel/runtime': 7.27.0
2497 | '@mediapipe/tasks-vision': 0.10.17
2498 | '@monogrid/gainmap-js': 3.1.0(three@0.173.0)
2499 | '@react-three/fiber': 9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)
2500 | '@use-gesture/react': 10.3.1(react@19.1.0)
2501 | camera-controls: 2.10.1(three@0.173.0)
2502 | cross-env: 7.0.3
2503 | detect-gpu: 5.0.70
2504 | glsl-noise: 0.0.0
2505 | hls.js: 1.6.2
2506 | maath: 0.10.8(@types/three@0.173.0)(three@0.173.0)
2507 | meshline: 3.3.1(three@0.173.0)
2508 | react: 19.1.0
2509 | stats-gl: 2.4.2(@types/three@0.173.0)(three@0.173.0)
2510 | stats.js: 0.17.0
2511 | suspend-react: 0.1.3(react@19.1.0)
2512 | three: 0.173.0
2513 | three-mesh-bvh: 0.8.3(three@0.173.0)
2514 | three-stdlib: 2.35.15(three@0.173.0)
2515 | troika-three-text: 0.52.4(three@0.173.0)
2516 | tunnel-rat: 0.1.2(@types/react@19.1.2)(react@19.1.0)
2517 | use-sync-external-store: 1.5.0(react@19.1.0)
2518 | utility-types: 3.11.0
2519 | zustand: 5.0.3(@types/react@19.1.2)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
2520 | optionalDependencies:
2521 | react-dom: 19.1.0(react@19.1.0)
2522 | transitivePeerDependencies:
2523 | - '@types/react'
2524 | - '@types/three'
2525 | - immer
2526 |
2527 | '@react-three/fiber@9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)':
2528 | dependencies:
2529 | '@babel/runtime': 7.27.0
2530 | '@types/react-reconciler': 0.28.9(@types/react@19.1.2)
2531 | '@types/webxr': 0.5.22
2532 | base64-js: 1.5.1
2533 | buffer: 6.0.3
2534 | its-fine: 2.0.0(@types/react@19.1.2)(react@19.1.0)
2535 | react: 19.1.0
2536 | react-reconciler: 0.31.0(react@19.1.0)
2537 | react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2538 | scheduler: 0.25.0
2539 | suspend-react: 0.1.3(react@19.1.0)
2540 | three: 0.173.0
2541 | use-sync-external-store: 1.5.0(react@19.1.0)
2542 | zustand: 5.0.3(@types/react@19.1.2)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
2543 | optionalDependencies:
2544 | react-dom: 19.1.0(react@19.1.0)
2545 | transitivePeerDependencies:
2546 | - '@types/react'
2547 | - immer
2548 |
2549 | '@react-three/postprocessing@3.0.4(@react-three/fiber@9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0))(@types/three@0.173.0)(react@19.1.0)(three@0.173.0)':
2550 | dependencies:
2551 | '@react-three/fiber': 9.1.2(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.173.0)
2552 | maath: 0.6.0(@types/three@0.173.0)(three@0.173.0)
2553 | n8ao: 1.9.4(postprocessing@6.36.7(three@0.173.0))(three@0.173.0)
2554 | postprocessing: 6.36.7(three@0.173.0)
2555 | react: 19.1.0
2556 | three: 0.173.0
2557 | transitivePeerDependencies:
2558 | - '@types/three'
2559 |
2560 | '@rollup/pluginutils@5.1.4(rollup@4.40.0)':
2561 | dependencies:
2562 | '@types/estree': 1.0.7
2563 | estree-walker: 2.0.2
2564 | picomatch: 4.0.2
2565 | optionalDependencies:
2566 | rollup: 4.40.0
2567 |
2568 | '@rollup/rollup-android-arm-eabi@4.40.0':
2569 | optional: true
2570 |
2571 | '@rollup/rollup-android-arm64@4.40.0':
2572 | optional: true
2573 |
2574 | '@rollup/rollup-darwin-arm64@4.40.0':
2575 | optional: true
2576 |
2577 | '@rollup/rollup-darwin-x64@4.40.0':
2578 | optional: true
2579 |
2580 | '@rollup/rollup-freebsd-arm64@4.40.0':
2581 | optional: true
2582 |
2583 | '@rollup/rollup-freebsd-x64@4.40.0':
2584 | optional: true
2585 |
2586 | '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
2587 | optional: true
2588 |
2589 | '@rollup/rollup-linux-arm-musleabihf@4.40.0':
2590 | optional: true
2591 |
2592 | '@rollup/rollup-linux-arm64-gnu@4.40.0':
2593 | optional: true
2594 |
2595 | '@rollup/rollup-linux-arm64-musl@4.40.0':
2596 | optional: true
2597 |
2598 | '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
2599 | optional: true
2600 |
2601 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
2602 | optional: true
2603 |
2604 | '@rollup/rollup-linux-riscv64-gnu@4.40.0':
2605 | optional: true
2606 |
2607 | '@rollup/rollup-linux-riscv64-musl@4.40.0':
2608 | optional: true
2609 |
2610 | '@rollup/rollup-linux-s390x-gnu@4.40.0':
2611 | optional: true
2612 |
2613 | '@rollup/rollup-linux-x64-gnu@4.40.0':
2614 | optional: true
2615 |
2616 | '@rollup/rollup-linux-x64-musl@4.40.0':
2617 | optional: true
2618 |
2619 | '@rollup/rollup-win32-arm64-msvc@4.40.0':
2620 | optional: true
2621 |
2622 | '@rollup/rollup-win32-ia32-msvc@4.40.0':
2623 | optional: true
2624 |
2625 | '@rollup/rollup-win32-x64-msvc@4.40.0':
2626 | optional: true
2627 |
2628 | '@rushstack/node-core-library@5.13.0(@types/node@22.14.1)':
2629 | dependencies:
2630 | ajv: 8.13.0
2631 | ajv-draft-04: 1.0.0(ajv@8.13.0)
2632 | ajv-formats: 3.0.1(ajv@8.13.0)
2633 | fs-extra: 11.3.0
2634 | import-lazy: 4.0.0
2635 | jju: 1.4.0
2636 | resolve: 1.22.10
2637 | semver: 7.5.4
2638 | optionalDependencies:
2639 | '@types/node': 22.14.1
2640 |
2641 | '@rushstack/rig-package@0.5.3':
2642 | dependencies:
2643 | resolve: 1.22.10
2644 | strip-json-comments: 3.1.1
2645 |
2646 | '@rushstack/terminal@0.15.2(@types/node@22.14.1)':
2647 | dependencies:
2648 | '@rushstack/node-core-library': 5.13.0(@types/node@22.14.1)
2649 | supports-color: 8.1.1
2650 | optionalDependencies:
2651 | '@types/node': 22.14.1
2652 |
2653 | '@rushstack/ts-command-line@4.23.7(@types/node@22.14.1)':
2654 | dependencies:
2655 | '@rushstack/terminal': 0.15.2(@types/node@22.14.1)
2656 | '@types/argparse': 1.0.38
2657 | argparse: 1.0.10
2658 | string-argv: 0.3.2
2659 | transitivePeerDependencies:
2660 | - '@types/node'
2661 |
2662 | '@stitches/react@1.2.8(react@19.1.0)':
2663 | dependencies:
2664 | react: 19.1.0
2665 |
2666 | '@tweenjs/tween.js@23.1.3': {}
2667 |
2668 | '@types/argparse@1.0.38': {}
2669 |
2670 | '@types/babel__core@7.20.5':
2671 | dependencies:
2672 | '@babel/parser': 7.27.0
2673 | '@babel/types': 7.27.0
2674 | '@types/babel__generator': 7.27.0
2675 | '@types/babel__template': 7.4.4
2676 | '@types/babel__traverse': 7.20.7
2677 |
2678 | '@types/babel__generator@7.27.0':
2679 | dependencies:
2680 | '@babel/types': 7.27.0
2681 |
2682 | '@types/babel__template@7.4.4':
2683 | dependencies:
2684 | '@babel/parser': 7.27.0
2685 | '@babel/types': 7.27.0
2686 |
2687 | '@types/babel__traverse@7.20.7':
2688 | dependencies:
2689 | '@babel/types': 7.27.0
2690 |
2691 | '@types/cookie@0.6.0': {}
2692 |
2693 | '@types/draco3d@1.4.10': {}
2694 |
2695 | '@types/estree@1.0.7': {}
2696 |
2697 | '@types/json-schema@7.0.15': {}
2698 |
2699 | '@types/node@22.14.1':
2700 | dependencies:
2701 | undici-types: 6.21.0
2702 |
2703 | '@types/offscreencanvas@2019.7.3': {}
2704 |
2705 | '@types/react-dom@19.1.2(@types/react@19.1.2)':
2706 | dependencies:
2707 | '@types/react': 19.1.2
2708 |
2709 | '@types/react-reconciler@0.28.9(@types/react@19.1.2)':
2710 | dependencies:
2711 | '@types/react': 19.1.2
2712 |
2713 | '@types/react@19.1.2':
2714 | dependencies:
2715 | csstype: 3.1.3
2716 |
2717 | '@types/stats.js@0.17.3': {}
2718 |
2719 | '@types/three@0.173.0':
2720 | dependencies:
2721 | '@tweenjs/tween.js': 23.1.3
2722 | '@types/stats.js': 0.17.3
2723 | '@types/webxr': 0.5.22
2724 | '@webgpu/types': 0.1.60
2725 | fflate: 0.8.2
2726 | meshoptimizer: 0.18.1
2727 |
2728 | '@types/webxr@0.5.22': {}
2729 |
2730 | '@typescript-eslint/eslint-plugin@8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3)':
2731 | dependencies:
2732 | '@eslint-community/regexpp': 4.12.1
2733 | '@typescript-eslint/parser': 8.30.1(eslint@9.24.0)(typescript@5.8.3)
2734 | '@typescript-eslint/scope-manager': 8.30.1
2735 | '@typescript-eslint/type-utils': 8.30.1(eslint@9.24.0)(typescript@5.8.3)
2736 | '@typescript-eslint/utils': 8.30.1(eslint@9.24.0)(typescript@5.8.3)
2737 | '@typescript-eslint/visitor-keys': 8.30.1
2738 | eslint: 9.24.0
2739 | graphemer: 1.4.0
2740 | ignore: 5.3.2
2741 | natural-compare: 1.4.0
2742 | ts-api-utils: 2.1.0(typescript@5.8.3)
2743 | typescript: 5.8.3
2744 | transitivePeerDependencies:
2745 | - supports-color
2746 |
2747 | '@typescript-eslint/parser@8.30.1(eslint@9.24.0)(typescript@5.8.3)':
2748 | dependencies:
2749 | '@typescript-eslint/scope-manager': 8.30.1
2750 | '@typescript-eslint/types': 8.30.1
2751 | '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
2752 | '@typescript-eslint/visitor-keys': 8.30.1
2753 | debug: 4.4.0
2754 | eslint: 9.24.0
2755 | typescript: 5.8.3
2756 | transitivePeerDependencies:
2757 | - supports-color
2758 |
2759 | '@typescript-eslint/scope-manager@8.30.1':
2760 | dependencies:
2761 | '@typescript-eslint/types': 8.30.1
2762 | '@typescript-eslint/visitor-keys': 8.30.1
2763 |
2764 | '@typescript-eslint/type-utils@8.30.1(eslint@9.24.0)(typescript@5.8.3)':
2765 | dependencies:
2766 | '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
2767 | '@typescript-eslint/utils': 8.30.1(eslint@9.24.0)(typescript@5.8.3)
2768 | debug: 4.4.0
2769 | eslint: 9.24.0
2770 | ts-api-utils: 2.1.0(typescript@5.8.3)
2771 | typescript: 5.8.3
2772 | transitivePeerDependencies:
2773 | - supports-color
2774 |
2775 | '@typescript-eslint/types@8.30.1': {}
2776 |
2777 | '@typescript-eslint/typescript-estree@8.30.1(typescript@5.8.3)':
2778 | dependencies:
2779 | '@typescript-eslint/types': 8.30.1
2780 | '@typescript-eslint/visitor-keys': 8.30.1
2781 | debug: 4.4.0
2782 | fast-glob: 3.3.3
2783 | is-glob: 4.0.3
2784 | minimatch: 9.0.5
2785 | semver: 7.7.1
2786 | ts-api-utils: 2.1.0(typescript@5.8.3)
2787 | typescript: 5.8.3
2788 | transitivePeerDependencies:
2789 | - supports-color
2790 |
2791 | '@typescript-eslint/utils@8.30.1(eslint@9.24.0)(typescript@5.8.3)':
2792 | dependencies:
2793 | '@eslint-community/eslint-utils': 4.6.0(eslint@9.24.0)
2794 | '@typescript-eslint/scope-manager': 8.30.1
2795 | '@typescript-eslint/types': 8.30.1
2796 | '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3)
2797 | eslint: 9.24.0
2798 | typescript: 5.8.3
2799 | transitivePeerDependencies:
2800 | - supports-color
2801 |
2802 | '@typescript-eslint/visitor-keys@8.30.1':
2803 | dependencies:
2804 | '@typescript-eslint/types': 8.30.1
2805 | eslint-visitor-keys: 4.2.0
2806 |
2807 | '@use-gesture/core@10.3.1': {}
2808 |
2809 | '@use-gesture/react@10.3.1(react@19.1.0)':
2810 | dependencies:
2811 | '@use-gesture/core': 10.3.1
2812 | react: 19.1.0
2813 |
2814 | '@vitejs/plugin-react@4.4.0(vite@6.2.6(@types/node@22.14.1))':
2815 | dependencies:
2816 | '@babel/core': 7.26.10
2817 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
2818 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
2819 | '@types/babel__core': 7.20.5
2820 | react-refresh: 0.17.0
2821 | vite: 6.2.6(@types/node@22.14.1)
2822 | transitivePeerDependencies:
2823 | - supports-color
2824 |
2825 | '@volar/language-core@2.4.12':
2826 | dependencies:
2827 | '@volar/source-map': 2.4.12
2828 |
2829 | '@volar/source-map@2.4.12': {}
2830 |
2831 | '@volar/typescript@2.4.12':
2832 | dependencies:
2833 | '@volar/language-core': 2.4.12
2834 | path-browserify: 1.0.1
2835 | vscode-uri: 3.1.0
2836 |
2837 | '@vue/compiler-core@3.5.13':
2838 | dependencies:
2839 | '@babel/parser': 7.27.0
2840 | '@vue/shared': 3.5.13
2841 | entities: 4.5.0
2842 | estree-walker: 2.0.2
2843 | source-map-js: 1.2.1
2844 |
2845 | '@vue/compiler-dom@3.5.13':
2846 | dependencies:
2847 | '@vue/compiler-core': 3.5.13
2848 | '@vue/shared': 3.5.13
2849 |
2850 | '@vue/compiler-vue2@2.7.16':
2851 | dependencies:
2852 | de-indent: 1.0.2
2853 | he: 1.2.0
2854 |
2855 | '@vue/language-core@2.2.0(typescript@5.8.3)':
2856 | dependencies:
2857 | '@volar/language-core': 2.4.12
2858 | '@vue/compiler-dom': 3.5.13
2859 | '@vue/compiler-vue2': 2.7.16
2860 | '@vue/shared': 3.5.13
2861 | alien-signals: 0.4.14
2862 | minimatch: 9.0.5
2863 | muggle-string: 0.4.1
2864 | path-browserify: 1.0.1
2865 | optionalDependencies:
2866 | typescript: 5.8.3
2867 |
2868 | '@vue/shared@3.5.13': {}
2869 |
2870 | '@webgpu/types@0.1.60': {}
2871 |
2872 | acorn-jsx@5.3.2(acorn@8.14.1):
2873 | dependencies:
2874 | acorn: 8.14.1
2875 |
2876 | acorn@8.14.1: {}
2877 |
2878 | ajv-draft-04@1.0.0(ajv@8.13.0):
2879 | optionalDependencies:
2880 | ajv: 8.13.0
2881 |
2882 | ajv-formats@3.0.1(ajv@8.13.0):
2883 | optionalDependencies:
2884 | ajv: 8.13.0
2885 |
2886 | ajv@6.12.6:
2887 | dependencies:
2888 | fast-deep-equal: 3.1.3
2889 | fast-json-stable-stringify: 2.1.0
2890 | json-schema-traverse: 0.4.1
2891 | uri-js: 4.4.1
2892 |
2893 | ajv@8.12.0:
2894 | dependencies:
2895 | fast-deep-equal: 3.1.3
2896 | json-schema-traverse: 1.0.0
2897 | require-from-string: 2.0.2
2898 | uri-js: 4.4.1
2899 |
2900 | ajv@8.13.0:
2901 | dependencies:
2902 | fast-deep-equal: 3.1.3
2903 | json-schema-traverse: 1.0.0
2904 | require-from-string: 2.0.2
2905 | uri-js: 4.4.1
2906 |
2907 | alien-signals@0.4.14: {}
2908 |
2909 | ansi-styles@4.3.0:
2910 | dependencies:
2911 | color-convert: 2.0.1
2912 |
2913 | argparse@1.0.10:
2914 | dependencies:
2915 | sprintf-js: 1.0.3
2916 |
2917 | argparse@2.0.1: {}
2918 |
2919 | assign-symbols@1.0.0: {}
2920 |
2921 | async@3.2.6: {}
2922 |
2923 | attr-accept@2.2.5: {}
2924 |
2925 | balanced-match@1.0.2: {}
2926 |
2927 | base64-js@1.5.1: {}
2928 |
2929 | bidi-js@1.0.3:
2930 | dependencies:
2931 | require-from-string: 2.0.2
2932 |
2933 | brace-expansion@1.1.11:
2934 | dependencies:
2935 | balanced-match: 1.0.2
2936 | concat-map: 0.0.1
2937 |
2938 | brace-expansion@2.0.1:
2939 | dependencies:
2940 | balanced-match: 1.0.2
2941 |
2942 | braces@3.0.3:
2943 | dependencies:
2944 | fill-range: 7.1.1
2945 |
2946 | browserslist@4.24.4:
2947 | dependencies:
2948 | caniuse-lite: 1.0.30001713
2949 | electron-to-chromium: 1.5.137
2950 | node-releases: 2.0.19
2951 | update-browserslist-db: 1.1.3(browserslist@4.24.4)
2952 |
2953 | buffer@6.0.3:
2954 | dependencies:
2955 | base64-js: 1.5.1
2956 | ieee754: 1.2.1
2957 |
2958 | callsites@3.1.0: {}
2959 |
2960 | camera-controls@2.10.1(three@0.173.0):
2961 | dependencies:
2962 | three: 0.173.0
2963 |
2964 | caniuse-lite@1.0.30001713: {}
2965 |
2966 | chalk@4.1.2:
2967 | dependencies:
2968 | ansi-styles: 4.3.0
2969 | supports-color: 7.2.0
2970 |
2971 | clang-format@1.8.0:
2972 | dependencies:
2973 | async: 3.2.6
2974 | glob: 7.2.3
2975 | resolve: 1.22.10
2976 |
2977 | color-convert@2.0.1:
2978 | dependencies:
2979 | color-name: 1.1.4
2980 |
2981 | color-name@1.1.4: {}
2982 |
2983 | colord@2.9.3: {}
2984 |
2985 | compare-versions@6.1.1: {}
2986 |
2987 | concat-map@0.0.1: {}
2988 |
2989 | confbox@0.1.8: {}
2990 |
2991 | confbox@0.2.2: {}
2992 |
2993 | convert-source-map@2.0.0: {}
2994 |
2995 | cookie@1.0.2: {}
2996 |
2997 | cross-env@7.0.3:
2998 | dependencies:
2999 | cross-spawn: 7.0.6
3000 |
3001 | cross-spawn@7.0.6:
3002 | dependencies:
3003 | path-key: 3.1.1
3004 | shebang-command: 2.0.0
3005 | which: 2.0.2
3006 |
3007 | csstype@3.1.3: {}
3008 |
3009 | de-indent@1.0.2: {}
3010 |
3011 | debug@4.4.0:
3012 | dependencies:
3013 | ms: 2.1.3
3014 |
3015 | deep-is@0.1.4: {}
3016 |
3017 | dequal@2.0.3: {}
3018 |
3019 | detect-gpu@5.0.70:
3020 | dependencies:
3021 | webgl-constants: 1.1.1
3022 |
3023 | draco3d@1.5.7: {}
3024 |
3025 | electron-to-chromium@1.5.137: {}
3026 |
3027 | entities@4.5.0: {}
3028 |
3029 | esbuild@0.25.2:
3030 | optionalDependencies:
3031 | '@esbuild/aix-ppc64': 0.25.2
3032 | '@esbuild/android-arm': 0.25.2
3033 | '@esbuild/android-arm64': 0.25.2
3034 | '@esbuild/android-x64': 0.25.2
3035 | '@esbuild/darwin-arm64': 0.25.2
3036 | '@esbuild/darwin-x64': 0.25.2
3037 | '@esbuild/freebsd-arm64': 0.25.2
3038 | '@esbuild/freebsd-x64': 0.25.2
3039 | '@esbuild/linux-arm': 0.25.2
3040 | '@esbuild/linux-arm64': 0.25.2
3041 | '@esbuild/linux-ia32': 0.25.2
3042 | '@esbuild/linux-loong64': 0.25.2
3043 | '@esbuild/linux-mips64el': 0.25.2
3044 | '@esbuild/linux-ppc64': 0.25.2
3045 | '@esbuild/linux-riscv64': 0.25.2
3046 | '@esbuild/linux-s390x': 0.25.2
3047 | '@esbuild/linux-x64': 0.25.2
3048 | '@esbuild/netbsd-arm64': 0.25.2
3049 | '@esbuild/netbsd-x64': 0.25.2
3050 | '@esbuild/openbsd-arm64': 0.25.2
3051 | '@esbuild/openbsd-x64': 0.25.2
3052 | '@esbuild/sunos-x64': 0.25.2
3053 | '@esbuild/win32-arm64': 0.25.2
3054 | '@esbuild/win32-ia32': 0.25.2
3055 | '@esbuild/win32-x64': 0.25.2
3056 |
3057 | escalade@3.2.0: {}
3058 |
3059 | escape-string-regexp@4.0.0: {}
3060 |
3061 | eslint-plugin-react-hooks@5.2.0(eslint@9.24.0):
3062 | dependencies:
3063 | eslint: 9.24.0
3064 |
3065 | eslint-plugin-react-refresh@0.4.19(eslint@9.24.0):
3066 | dependencies:
3067 | eslint: 9.24.0
3068 |
3069 | eslint-scope@8.3.0:
3070 | dependencies:
3071 | esrecurse: 4.3.0
3072 | estraverse: 5.3.0
3073 |
3074 | eslint-visitor-keys@3.4.3: {}
3075 |
3076 | eslint-visitor-keys@4.2.0: {}
3077 |
3078 | eslint@9.24.0:
3079 | dependencies:
3080 | '@eslint-community/eslint-utils': 4.6.0(eslint@9.24.0)
3081 | '@eslint-community/regexpp': 4.12.1
3082 | '@eslint/config-array': 0.20.0
3083 | '@eslint/config-helpers': 0.2.1
3084 | '@eslint/core': 0.12.0
3085 | '@eslint/eslintrc': 3.3.1
3086 | '@eslint/js': 9.24.0
3087 | '@eslint/plugin-kit': 0.2.8
3088 | '@humanfs/node': 0.16.6
3089 | '@humanwhocodes/module-importer': 1.0.1
3090 | '@humanwhocodes/retry': 0.4.2
3091 | '@types/estree': 1.0.7
3092 | '@types/json-schema': 7.0.15
3093 | ajv: 6.12.6
3094 | chalk: 4.1.2
3095 | cross-spawn: 7.0.6
3096 | debug: 4.4.0
3097 | escape-string-regexp: 4.0.0
3098 | eslint-scope: 8.3.0
3099 | eslint-visitor-keys: 4.2.0
3100 | espree: 10.3.0
3101 | esquery: 1.6.0
3102 | esutils: 2.0.3
3103 | fast-deep-equal: 3.1.3
3104 | file-entry-cache: 8.0.0
3105 | find-up: 5.0.0
3106 | glob-parent: 6.0.2
3107 | ignore: 5.3.2
3108 | imurmurhash: 0.1.4
3109 | is-glob: 4.0.3
3110 | json-stable-stringify-without-jsonify: 1.0.1
3111 | lodash.merge: 4.6.2
3112 | minimatch: 3.1.2
3113 | natural-compare: 1.4.0
3114 | optionator: 0.9.4
3115 | transitivePeerDependencies:
3116 | - supports-color
3117 |
3118 | espree@10.3.0:
3119 | dependencies:
3120 | acorn: 8.14.1
3121 | acorn-jsx: 5.3.2(acorn@8.14.1)
3122 | eslint-visitor-keys: 4.2.0
3123 |
3124 | esquery@1.6.0:
3125 | dependencies:
3126 | estraverse: 5.3.0
3127 |
3128 | esrecurse@4.3.0:
3129 | dependencies:
3130 | estraverse: 5.3.0
3131 |
3132 | estraverse@5.3.0: {}
3133 |
3134 | estree-walker@2.0.2: {}
3135 |
3136 | esutils@2.0.3: {}
3137 |
3138 | exsolve@1.0.4: {}
3139 |
3140 | extend-shallow@2.0.1:
3141 | dependencies:
3142 | is-extendable: 0.1.1
3143 |
3144 | extend-shallow@3.0.2:
3145 | dependencies:
3146 | assign-symbols: 1.0.0
3147 | is-extendable: 1.0.1
3148 |
3149 | fast-deep-equal@3.1.3: {}
3150 |
3151 | fast-glob@3.3.3:
3152 | dependencies:
3153 | '@nodelib/fs.stat': 2.0.5
3154 | '@nodelib/fs.walk': 1.2.8
3155 | glob-parent: 5.1.2
3156 | merge2: 1.4.1
3157 | micromatch: 4.0.8
3158 |
3159 | fast-json-stable-stringify@2.1.0: {}
3160 |
3161 | fast-levenshtein@2.0.6: {}
3162 |
3163 | fastq@1.19.1:
3164 | dependencies:
3165 | reusify: 1.1.0
3166 |
3167 | fflate@0.6.10: {}
3168 |
3169 | fflate@0.8.2: {}
3170 |
3171 | file-entry-cache@8.0.0:
3172 | dependencies:
3173 | flat-cache: 4.0.1
3174 |
3175 | file-selector@0.5.0:
3176 | dependencies:
3177 | tslib: 2.8.1
3178 |
3179 | fill-range@7.1.1:
3180 | dependencies:
3181 | to-regex-range: 5.0.1
3182 |
3183 | find-up@5.0.0:
3184 | dependencies:
3185 | locate-path: 6.0.0
3186 | path-exists: 4.0.0
3187 |
3188 | flat-cache@4.0.1:
3189 | dependencies:
3190 | flatted: 3.3.3
3191 | keyv: 4.5.4
3192 |
3193 | flatted@3.3.3: {}
3194 |
3195 | for-in@1.0.2: {}
3196 |
3197 | fs-extra@11.3.0:
3198 | dependencies:
3199 | graceful-fs: 4.2.11
3200 | jsonfile: 6.1.0
3201 | universalify: 2.0.1
3202 |
3203 | fs.realpath@1.0.0: {}
3204 |
3205 | fsevents@2.3.3:
3206 | optional: true
3207 |
3208 | function-bind@1.1.2: {}
3209 |
3210 | gensync@1.0.0-beta.2: {}
3211 |
3212 | get-value@2.0.6: {}
3213 |
3214 | glob-parent@5.1.2:
3215 | dependencies:
3216 | is-glob: 4.0.3
3217 |
3218 | glob-parent@6.0.2:
3219 | dependencies:
3220 | is-glob: 4.0.3
3221 |
3222 | glob@7.2.3:
3223 | dependencies:
3224 | fs.realpath: 1.0.0
3225 | inflight: 1.0.6
3226 | inherits: 2.0.4
3227 | minimatch: 3.1.2
3228 | once: 1.4.0
3229 | path-is-absolute: 1.0.1
3230 |
3231 | globals@11.12.0: {}
3232 |
3233 | globals@14.0.0: {}
3234 |
3235 | globrex@0.1.2: {}
3236 |
3237 | glsl-noise@0.0.0: {}
3238 |
3239 | graceful-fs@4.2.11: {}
3240 |
3241 | graphemer@1.4.0: {}
3242 |
3243 | has-flag@4.0.0: {}
3244 |
3245 | hasown@2.0.2:
3246 | dependencies:
3247 | function-bind: 1.1.2
3248 |
3249 | he@1.2.0: {}
3250 |
3251 | hls.js@1.6.2: {}
3252 |
3253 | ieee754@1.2.1: {}
3254 |
3255 | ignore@5.3.2: {}
3256 |
3257 | immediate@3.0.6: {}
3258 |
3259 | import-fresh@3.3.1:
3260 | dependencies:
3261 | parent-module: 1.0.1
3262 | resolve-from: 4.0.0
3263 |
3264 | import-lazy@4.0.0: {}
3265 |
3266 | imurmurhash@0.1.4: {}
3267 |
3268 | inflight@1.0.6:
3269 | dependencies:
3270 | once: 1.4.0
3271 | wrappy: 1.0.2
3272 |
3273 | inherits@2.0.4: {}
3274 |
3275 | is-core-module@2.16.1:
3276 | dependencies:
3277 | hasown: 2.0.2
3278 |
3279 | is-extendable@0.1.1: {}
3280 |
3281 | is-extendable@1.0.1:
3282 | dependencies:
3283 | is-plain-object: 2.0.4
3284 |
3285 | is-extglob@2.1.1: {}
3286 |
3287 | is-glob@4.0.3:
3288 | dependencies:
3289 | is-extglob: 2.1.1
3290 |
3291 | is-number@7.0.0: {}
3292 |
3293 | is-plain-object@2.0.4:
3294 | dependencies:
3295 | isobject: 3.0.1
3296 |
3297 | is-promise@2.2.2: {}
3298 |
3299 | isexe@2.0.0: {}
3300 |
3301 | isobject@3.0.1: {}
3302 |
3303 | its-fine@2.0.0(@types/react@19.1.2)(react@19.1.0):
3304 | dependencies:
3305 | '@types/react-reconciler': 0.28.9(@types/react@19.1.2)
3306 | react: 19.1.0
3307 | transitivePeerDependencies:
3308 | - '@types/react'
3309 |
3310 | jju@1.4.0: {}
3311 |
3312 | js-tokens@4.0.0: {}
3313 |
3314 | js-yaml@4.1.0:
3315 | dependencies:
3316 | argparse: 2.0.1
3317 |
3318 | jsesc@3.1.0: {}
3319 |
3320 | json-buffer@3.0.1: {}
3321 |
3322 | json-schema-traverse@0.4.1: {}
3323 |
3324 | json-schema-traverse@1.0.0: {}
3325 |
3326 | json-stable-stringify-without-jsonify@1.0.1: {}
3327 |
3328 | json5@2.2.3: {}
3329 |
3330 | jsonfile@6.1.0:
3331 | dependencies:
3332 | universalify: 2.0.1
3333 | optionalDependencies:
3334 | graceful-fs: 4.2.11
3335 |
3336 | keyv@4.5.4:
3337 | dependencies:
3338 | json-buffer: 3.0.1
3339 |
3340 | kolorist@1.8.0: {}
3341 |
3342 | leva@0.10.0(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3343 | dependencies:
3344 | '@radix-ui/react-portal': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
3345 | '@radix-ui/react-tooltip': 1.0.5(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
3346 | '@stitches/react': 1.2.8(react@19.1.0)
3347 | '@use-gesture/react': 10.3.1(react@19.1.0)
3348 | colord: 2.9.3
3349 | dequal: 2.0.3
3350 | merge-value: 1.0.0
3351 | react: 19.1.0
3352 | react-colorful: 5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
3353 | react-dom: 19.1.0(react@19.1.0)
3354 | react-dropzone: 12.1.0(react@19.1.0)
3355 | v8n: 1.5.1
3356 | zustand: 3.7.2(react@19.1.0)
3357 | transitivePeerDependencies:
3358 | - '@types/react'
3359 |
3360 | levn@0.4.1:
3361 | dependencies:
3362 | prelude-ls: 1.2.1
3363 | type-check: 0.4.0
3364 |
3365 | lie@3.3.0:
3366 | dependencies:
3367 | immediate: 3.0.6
3368 |
3369 | local-pkg@1.1.1:
3370 | dependencies:
3371 | mlly: 1.7.4
3372 | pkg-types: 2.1.0
3373 | quansync: 0.2.10
3374 |
3375 | locate-path@6.0.0:
3376 | dependencies:
3377 | p-locate: 5.0.0
3378 |
3379 | lodash.merge@4.6.2: {}
3380 |
3381 | lodash@4.17.21: {}
3382 |
3383 | loose-envify@1.4.0:
3384 | dependencies:
3385 | js-tokens: 4.0.0
3386 |
3387 | lru-cache@5.1.1:
3388 | dependencies:
3389 | yallist: 3.1.1
3390 |
3391 | lru-cache@6.0.0:
3392 | dependencies:
3393 | yallist: 4.0.0
3394 |
3395 | maath@0.10.8(@types/three@0.173.0)(three@0.173.0):
3396 | dependencies:
3397 | '@types/three': 0.173.0
3398 | three: 0.173.0
3399 |
3400 | maath@0.6.0(@types/three@0.173.0)(three@0.173.0):
3401 | dependencies:
3402 | '@types/three': 0.173.0
3403 | three: 0.173.0
3404 |
3405 | magic-string@0.30.17:
3406 | dependencies:
3407 | '@jridgewell/sourcemap-codec': 1.5.0
3408 |
3409 | merge-value@1.0.0:
3410 | dependencies:
3411 | get-value: 2.0.6
3412 | is-extendable: 1.0.1
3413 | mixin-deep: 1.3.2
3414 | set-value: 2.0.1
3415 |
3416 | merge2@1.4.1: {}
3417 |
3418 | meshline@3.3.1(three@0.173.0):
3419 | dependencies:
3420 | three: 0.173.0
3421 |
3422 | meshoptimizer@0.18.1: {}
3423 |
3424 | micromatch@4.0.8:
3425 | dependencies:
3426 | braces: 3.0.3
3427 | picomatch: 2.3.1
3428 |
3429 | minimatch@3.0.8:
3430 | dependencies:
3431 | brace-expansion: 1.1.11
3432 |
3433 | minimatch@3.1.2:
3434 | dependencies:
3435 | brace-expansion: 1.1.11
3436 |
3437 | minimatch@9.0.5:
3438 | dependencies:
3439 | brace-expansion: 2.0.1
3440 |
3441 | mixin-deep@1.3.2:
3442 | dependencies:
3443 | for-in: 1.0.2
3444 | is-extendable: 1.0.1
3445 |
3446 | mlly@1.7.4:
3447 | dependencies:
3448 | acorn: 8.14.1
3449 | pathe: 2.0.3
3450 | pkg-types: 1.3.1
3451 | ufo: 1.6.1
3452 |
3453 | ms@2.1.3: {}
3454 |
3455 | muggle-string@0.4.1: {}
3456 |
3457 | n8ao@1.9.4(postprocessing@6.36.7(three@0.173.0))(three@0.173.0):
3458 | dependencies:
3459 | postprocessing: 6.36.7(three@0.173.0)
3460 | three: 0.173.0
3461 |
3462 | nanoid@3.3.11: {}
3463 |
3464 | natural-compare@1.4.0: {}
3465 |
3466 | node-releases@2.0.19: {}
3467 |
3468 | object-assign@4.1.1: {}
3469 |
3470 | once@1.4.0:
3471 | dependencies:
3472 | wrappy: 1.0.2
3473 |
3474 | optionator@0.9.4:
3475 | dependencies:
3476 | deep-is: 0.1.4
3477 | fast-levenshtein: 2.0.6
3478 | levn: 0.4.1
3479 | prelude-ls: 1.2.1
3480 | type-check: 0.4.0
3481 | word-wrap: 1.2.5
3482 |
3483 | p-limit@3.1.0:
3484 | dependencies:
3485 | yocto-queue: 0.1.0
3486 |
3487 | p-locate@5.0.0:
3488 | dependencies:
3489 | p-limit: 3.1.0
3490 |
3491 | parent-module@1.0.1:
3492 | dependencies:
3493 | callsites: 3.1.0
3494 |
3495 | path-browserify@1.0.1: {}
3496 |
3497 | path-exists@4.0.0: {}
3498 |
3499 | path-is-absolute@1.0.1: {}
3500 |
3501 | path-key@3.1.1: {}
3502 |
3503 | path-parse@1.0.7: {}
3504 |
3505 | pathe@2.0.3: {}
3506 |
3507 | picocolors@1.1.1: {}
3508 |
3509 | picomatch@2.3.1: {}
3510 |
3511 | picomatch@4.0.2: {}
3512 |
3513 | pkg-types@1.3.1:
3514 | dependencies:
3515 | confbox: 0.1.8
3516 | mlly: 1.7.4
3517 | pathe: 2.0.3
3518 |
3519 | pkg-types@2.1.0:
3520 | dependencies:
3521 | confbox: 0.2.2
3522 | exsolve: 1.0.4
3523 | pathe: 2.0.3
3524 |
3525 | postcss@8.5.3:
3526 | dependencies:
3527 | nanoid: 3.3.11
3528 | picocolors: 1.1.1
3529 | source-map-js: 1.2.1
3530 |
3531 | postprocessing@6.36.7(three@0.173.0):
3532 | dependencies:
3533 | three: 0.173.0
3534 |
3535 | potpack@1.0.2: {}
3536 |
3537 | prelude-ls@1.2.1: {}
3538 |
3539 | promise-worker-transferable@1.0.4:
3540 | dependencies:
3541 | is-promise: 2.2.2
3542 | lie: 3.3.0
3543 |
3544 | prop-types@15.8.1:
3545 | dependencies:
3546 | loose-envify: 1.4.0
3547 | object-assign: 4.1.1
3548 | react-is: 16.13.1
3549 |
3550 | punycode@2.3.1: {}
3551 |
3552 | quansync@0.2.10: {}
3553 |
3554 | queue-microtask@1.2.3: {}
3555 |
3556 | react-colorful@5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3557 | dependencies:
3558 | react: 19.1.0
3559 | react-dom: 19.1.0(react@19.1.0)
3560 |
3561 | react-dom@19.1.0(react@19.1.0):
3562 | dependencies:
3563 | react: 19.1.0
3564 | scheduler: 0.26.0
3565 |
3566 | react-dropzone@12.1.0(react@19.1.0):
3567 | dependencies:
3568 | attr-accept: 2.2.5
3569 | file-selector: 0.5.0
3570 | prop-types: 15.8.1
3571 | react: 19.1.0
3572 |
3573 | react-is@16.13.1: {}
3574 |
3575 | react-reconciler@0.31.0(react@19.1.0):
3576 | dependencies:
3577 | react: 19.1.0
3578 | scheduler: 0.25.0
3579 |
3580 | react-refresh@0.17.0: {}
3581 |
3582 | react-router-dom@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3583 | dependencies:
3584 | react: 19.1.0
3585 | react-dom: 19.1.0(react@19.1.0)
3586 | react-router: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
3587 |
3588 | react-router@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3589 | dependencies:
3590 | '@types/cookie': 0.6.0
3591 | cookie: 1.0.2
3592 | react: 19.1.0
3593 | set-cookie-parser: 2.7.1
3594 | turbo-stream: 2.4.0
3595 | optionalDependencies:
3596 | react-dom: 19.1.0(react@19.1.0)
3597 |
3598 | react-use-measure@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3599 | dependencies:
3600 | react: 19.1.0
3601 | optionalDependencies:
3602 | react-dom: 19.1.0(react@19.1.0)
3603 |
3604 | react@19.1.0: {}
3605 |
3606 | regenerator-runtime@0.14.1: {}
3607 |
3608 | require-from-string@2.0.2: {}
3609 |
3610 | resolve-from@4.0.0: {}
3611 |
3612 | resolve@1.22.10:
3613 | dependencies:
3614 | is-core-module: 2.16.1
3615 | path-parse: 1.0.7
3616 | supports-preserve-symlinks-flag: 1.0.0
3617 |
3618 | reusify@1.1.0: {}
3619 |
3620 | rollup@4.40.0:
3621 | dependencies:
3622 | '@types/estree': 1.0.7
3623 | optionalDependencies:
3624 | '@rollup/rollup-android-arm-eabi': 4.40.0
3625 | '@rollup/rollup-android-arm64': 4.40.0
3626 | '@rollup/rollup-darwin-arm64': 4.40.0
3627 | '@rollup/rollup-darwin-x64': 4.40.0
3628 | '@rollup/rollup-freebsd-arm64': 4.40.0
3629 | '@rollup/rollup-freebsd-x64': 4.40.0
3630 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.0
3631 | '@rollup/rollup-linux-arm-musleabihf': 4.40.0
3632 | '@rollup/rollup-linux-arm64-gnu': 4.40.0
3633 | '@rollup/rollup-linux-arm64-musl': 4.40.0
3634 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.0
3635 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0
3636 | '@rollup/rollup-linux-riscv64-gnu': 4.40.0
3637 | '@rollup/rollup-linux-riscv64-musl': 4.40.0
3638 | '@rollup/rollup-linux-s390x-gnu': 4.40.0
3639 | '@rollup/rollup-linux-x64-gnu': 4.40.0
3640 | '@rollup/rollup-linux-x64-musl': 4.40.0
3641 | '@rollup/rollup-win32-arm64-msvc': 4.40.0
3642 | '@rollup/rollup-win32-ia32-msvc': 4.40.0
3643 | '@rollup/rollup-win32-x64-msvc': 4.40.0
3644 | fsevents: 2.3.3
3645 |
3646 | run-parallel@1.2.0:
3647 | dependencies:
3648 | queue-microtask: 1.2.3
3649 |
3650 | scheduler@0.25.0: {}
3651 |
3652 | scheduler@0.26.0: {}
3653 |
3654 | semver@6.3.1: {}
3655 |
3656 | semver@7.5.4:
3657 | dependencies:
3658 | lru-cache: 6.0.0
3659 |
3660 | semver@7.7.1: {}
3661 |
3662 | set-cookie-parser@2.7.1: {}
3663 |
3664 | set-value@2.0.1:
3665 | dependencies:
3666 | extend-shallow: 2.0.1
3667 | is-extendable: 0.1.1
3668 | is-plain-object: 2.0.4
3669 | split-string: 3.1.0
3670 |
3671 | shebang-command@2.0.0:
3672 | dependencies:
3673 | shebang-regex: 3.0.0
3674 |
3675 | shebang-regex@3.0.0: {}
3676 |
3677 | source-map-js@1.2.1: {}
3678 |
3679 | source-map@0.6.1: {}
3680 |
3681 | split-string@3.1.0:
3682 | dependencies:
3683 | extend-shallow: 3.0.2
3684 |
3685 | sprintf-js@1.0.3: {}
3686 |
3687 | stats-gl@2.4.2(@types/three@0.173.0)(three@0.173.0):
3688 | dependencies:
3689 | '@types/three': 0.173.0
3690 | three: 0.173.0
3691 |
3692 | stats.js@0.17.0: {}
3693 |
3694 | string-argv@0.3.2: {}
3695 |
3696 | strip-json-comments@3.1.1: {}
3697 |
3698 | supports-color@7.2.0:
3699 | dependencies:
3700 | has-flag: 4.0.0
3701 |
3702 | supports-color@8.1.1:
3703 | dependencies:
3704 | has-flag: 4.0.0
3705 |
3706 | supports-preserve-symlinks-flag@1.0.0: {}
3707 |
3708 | suspend-react@0.1.3(react@19.1.0):
3709 | dependencies:
3710 | react: 19.1.0
3711 |
3712 | three-mesh-bvh@0.8.3(three@0.173.0):
3713 | dependencies:
3714 | three: 0.173.0
3715 |
3716 | three-stdlib@2.35.15(three@0.173.0):
3717 | dependencies:
3718 | '@types/draco3d': 1.4.10
3719 | '@types/offscreencanvas': 2019.7.3
3720 | '@types/webxr': 0.5.22
3721 | draco3d: 1.5.7
3722 | fflate: 0.6.10
3723 | potpack: 1.0.2
3724 | three: 0.173.0
3725 |
3726 | three@0.173.0: {}
3727 |
3728 | to-regex-range@5.0.1:
3729 | dependencies:
3730 | is-number: 7.0.0
3731 |
3732 | troika-three-text@0.52.4(three@0.173.0):
3733 | dependencies:
3734 | bidi-js: 1.0.3
3735 | three: 0.173.0
3736 | troika-three-utils: 0.52.4(three@0.173.0)
3737 | troika-worker-utils: 0.52.0
3738 | webgl-sdf-generator: 1.1.1
3739 |
3740 | troika-three-utils@0.52.4(three@0.173.0):
3741 | dependencies:
3742 | three: 0.173.0
3743 |
3744 | troika-worker-utils@0.52.0: {}
3745 |
3746 | ts-api-utils@2.1.0(typescript@5.8.3):
3747 | dependencies:
3748 | typescript: 5.8.3
3749 |
3750 | tsconfck@3.1.5(typescript@5.8.3):
3751 | optionalDependencies:
3752 | typescript: 5.8.3
3753 |
3754 | tslib@2.8.1: {}
3755 |
3756 | tunnel-rat@0.1.2(@types/react@19.1.2)(react@19.1.0):
3757 | dependencies:
3758 | zustand: 4.5.6(@types/react@19.1.2)(react@19.1.0)
3759 | transitivePeerDependencies:
3760 | - '@types/react'
3761 | - immer
3762 | - react
3763 |
3764 | turbo-stream@2.4.0: {}
3765 |
3766 | type-check@0.4.0:
3767 | dependencies:
3768 | prelude-ls: 1.2.1
3769 |
3770 | typescript@5.8.2: {}
3771 |
3772 | typescript@5.8.3: {}
3773 |
3774 | ufo@1.6.1: {}
3775 |
3776 | undici-types@6.21.0: {}
3777 |
3778 | universalify@2.0.1: {}
3779 |
3780 | update-browserslist-db@1.1.3(browserslist@4.24.4):
3781 | dependencies:
3782 | browserslist: 4.24.4
3783 | escalade: 3.2.0
3784 | picocolors: 1.1.1
3785 |
3786 | uri-js@4.4.1:
3787 | dependencies:
3788 | punycode: 2.3.1
3789 |
3790 | use-isomorphic-layout-effect@1.2.0(@types/react@19.1.2)(react@19.1.0):
3791 | dependencies:
3792 | react: 19.1.0
3793 | optionalDependencies:
3794 | '@types/react': 19.1.2
3795 |
3796 | use-sync-external-store@1.5.0(react@19.1.0):
3797 | dependencies:
3798 | react: 19.1.0
3799 |
3800 | utility-types@3.11.0: {}
3801 |
3802 | v8n@1.5.1: {}
3803 |
3804 | vite-plugin-dts@4.5.3(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)):
3805 | dependencies:
3806 | '@microsoft/api-extractor': 7.52.3(@types/node@22.14.1)
3807 | '@rollup/pluginutils': 5.1.4(rollup@4.40.0)
3808 | '@volar/typescript': 2.4.12
3809 | '@vue/language-core': 2.2.0(typescript@5.8.3)
3810 | compare-versions: 6.1.1
3811 | debug: 4.4.0
3812 | kolorist: 1.8.0
3813 | local-pkg: 1.1.1
3814 | magic-string: 0.30.17
3815 | typescript: 5.8.3
3816 | optionalDependencies:
3817 | vite: 6.2.6(@types/node@22.14.1)
3818 | transitivePeerDependencies:
3819 | - '@types/node'
3820 | - rollup
3821 | - supports-color
3822 |
3823 | vite-plugin-glsl@1.4.0(rollup@4.40.0)(vite@6.2.6(@types/node@22.14.1)):
3824 | dependencies:
3825 | '@rollup/pluginutils': 5.1.4(rollup@4.40.0)
3826 | vite: 6.2.6(@types/node@22.14.1)
3827 | transitivePeerDependencies:
3828 | - rollup
3829 |
3830 | vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)):
3831 | dependencies:
3832 | debug: 4.4.0
3833 | globrex: 0.1.2
3834 | tsconfck: 3.1.5(typescript@5.8.3)
3835 | optionalDependencies:
3836 | vite: 6.2.6(@types/node@22.14.1)
3837 | transitivePeerDependencies:
3838 | - supports-color
3839 | - typescript
3840 |
3841 | vite@6.2.6(@types/node@22.14.1):
3842 | dependencies:
3843 | esbuild: 0.25.2
3844 | postcss: 8.5.3
3845 | rollup: 4.40.0
3846 | optionalDependencies:
3847 | '@types/node': 22.14.1
3848 | fsevents: 2.3.3
3849 |
3850 | vscode-uri@3.1.0: {}
3851 |
3852 | webgl-constants@1.1.1: {}
3853 |
3854 | webgl-sdf-generator@1.1.1: {}
3855 |
3856 | which@2.0.2:
3857 | dependencies:
3858 | isexe: 2.0.0
3859 |
3860 | word-wrap@1.2.5: {}
3861 |
3862 | wrappy@1.0.2: {}
3863 |
3864 | yallist@3.1.1: {}
3865 |
3866 | yallist@4.0.0: {}
3867 |
3868 | yocto-queue@0.1.0: {}
3869 |
3870 | zustand@3.7.2(react@19.1.0):
3871 | optionalDependencies:
3872 | react: 19.1.0
3873 |
3874 | zustand@4.5.6(@types/react@19.1.2)(react@19.1.0):
3875 | dependencies:
3876 | use-sync-external-store: 1.5.0(react@19.1.0)
3877 | optionalDependencies:
3878 | '@types/react': 19.1.2
3879 | react: 19.1.0
3880 |
3881 | zustand@5.0.3(@types/react@19.1.2)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
3882 | optionalDependencies:
3883 | '@types/react': 19.1.2
3884 | react: 19.1.0
3885 | use-sync-external-store: 1.5.0(react@19.1.0)
3886 |
--------------------------------------------------------------------------------
/src/assets/abc-normal.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/src/assets/abc-normal.ttf
--------------------------------------------------------------------------------
/src/assets/decay.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/src/assets/decay.otf
--------------------------------------------------------------------------------
/src/assets/github-mark-white.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/src/assets/img.jpg
--------------------------------------------------------------------------------
/src/assets/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/src/assets/img2.jpg
--------------------------------------------------------------------------------
/src/assets/screen_capture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whatisjery/react-fluid-distortion/962eaf3c927416b0c0aa94868cb0563ad82f1229/src/assets/screen_capture.png
--------------------------------------------------------------------------------
/src/example/Canvas.tsx:
--------------------------------------------------------------------------------
1 | import { Canvas as R3fCanvas } from '@react-three/fiber';
2 | import { ThreeTunnel } from './tunel';
3 | import { Suspense } from 'react';
4 |
5 | const Canvas = () => {
6 | return (
7 |
15 |
16 |
17 |
18 |
19 | );
20 | };
21 |
22 | export default Canvas;
23 |
--------------------------------------------------------------------------------
/src/example/Example1.tsx:
--------------------------------------------------------------------------------
1 | import { useTexture } from '@react-three/drei';
2 | import { EffectComposer } from '@react-three/postprocessing';
3 | import { Fluid } from '../../lib/Fluid';
4 | import { ThreeTunnel } from './tunel';
5 |
6 | import img from '@/assets/img.jpg';
7 | import Text from './Text';
8 |
9 | const Image = () => {
10 | const texture = useTexture(img);
11 |
12 | return (
13 |
14 |
15 |
16 |
17 | );
18 | };
19 |
20 | const Example1 = () => {
21 | return (
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | };
31 |
32 | export default Example1;
33 |
--------------------------------------------------------------------------------
/src/example/Example2.tsx:
--------------------------------------------------------------------------------
1 | import { Environment, MeshTransmissionMaterial } from '@react-three/drei';
2 | import { useFrame } from '@react-three/fiber';
3 | import { EffectComposer } from '@react-three/postprocessing';
4 | import { useRef } from 'react';
5 | import { Mesh } from 'three';
6 | import { Fluid, useConfig } from '../../lib';
7 | import { ThreeTunnel } from './tunel';
8 |
9 | import Text from './Text';
10 |
11 | const Torus = () => {
12 | const meshRef = useRef(null);
13 |
14 | useFrame(() => {
15 | if (!meshRef.current) return;
16 |
17 | meshRef.current.rotation.y += 0.01;
18 | meshRef.current.rotation.x += 0.005;
19 | });
20 | return (
21 | <>
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
35 |
36 | >
37 | );
38 | };
39 |
40 | const Example2 = () => {
41 | const { ...config } = useConfig();
42 |
43 | return (
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | );
53 | };
54 |
55 | export default Example2;
56 |
--------------------------------------------------------------------------------
/src/example/Example3.tsx:
--------------------------------------------------------------------------------
1 | import { useTexture } from '@react-three/drei';
2 | import { EffectComposer } from '@react-three/postprocessing';
3 | import { Fluid } from '../../lib';
4 | import { ThreeTunnel } from './tunel';
5 |
6 | import img from '@/assets/img2.jpg';
7 |
8 | import Text from './Text';
9 |
10 | const Image = () => {
11 | const texture = useTexture(img);
12 |
13 | return (
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | const Example3 = () => {
22 | return (
23 |
24 |
25 |
26 |
27 |
43 |
44 |
45 | );
46 | };
47 |
48 | export default Example3;
49 |
--------------------------------------------------------------------------------
/src/example/Layout.tsx:
--------------------------------------------------------------------------------
1 | import { Link, Outlet } from 'react-router-dom';
2 | import Canvas from './Canvas';
3 | import Github from '@/assets/github-mark-white.svg';
4 |
5 | const Layout = () => {
6 | return (
7 | <>
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
20 |
21 |
22 | >
23 | );
24 | };
25 |
26 | export default Layout;
27 |
--------------------------------------------------------------------------------
/src/example/Text.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import { Text as DreiText } from '@react-three/drei';
4 |
5 | import abc_font from '@/assets/abc-normal.ttf';
6 | import decay_font from '@/assets/decay.otf';
7 |
8 | const Text = () => {
9 | return (
10 |
11 |
18 | REACT POST
19 |
20 |
21 |
27 | FLUID-DISTORTION
28 |
29 |
30 |
38 | A FLUID POST PROCESSING DISTORTION EFFECT MADE TO WORK WITH THE REACT-THREE-FIBER
39 | EFFECT COMPOSER. MOVE YOUR MOUSE AROUND TO SEE HOW IT INTERRACT WITH THE 3D OBJECTS
40 | IN THE SCENE.
41 |
42 |
43 | );
44 | };
45 |
46 | export default Text;
47 |
--------------------------------------------------------------------------------
/src/example/tunel.ts:
--------------------------------------------------------------------------------
1 | import tunnel from 'tunnel-rat';
2 |
3 | export const ThreeTunnel = tunnel();
4 |
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import './styles.css';
2 |
3 | import React from 'react';
4 | import ReactDOM from 'react-dom/client';
5 |
6 | import { RouterProvider, createBrowserRouter } from 'react-router-dom';
7 |
8 | import Layout from './example/Layout';
9 | import Example1 from './example/Example1';
10 | import Example2 from './example/Example2';
11 | import Example3 from './example/Example3';
12 |
13 | const router = createBrowserRouter([
14 | {
15 | path: '/',
16 | element: ,
17 | children: [
18 | { path: '/', element: },
19 | { path: '/example2', element: },
20 | { path: '/example3', element: },
21 | ],
22 | },
23 | ]);
24 |
25 | ReactDOM.createRoot(document.getElementById('root')!).render(
26 |
27 |
28 | ,
29 | );
30 |
--------------------------------------------------------------------------------
/src/styles.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | color: white;
9 | font-family: 'ABCNormal-Light';
10 | background: rgb(0, 0, 0);
11 | font-size: 1.3rem;
12 | }
13 |
14 | a {
15 | text-transform: none;
16 | color: white;
17 | margin-right: 0.5rem;
18 | pointer-events: initial;
19 | text-decoration: underline;
20 | }
21 |
22 | a:hover {
23 | text-decoration: none;
24 | }
25 |
26 | canvas {
27 | pointer-events: initial;
28 | }
29 |
30 | .layout {
31 | display: flex;
32 | flex-direction: column;
33 | justify-content: space-between;
34 | align-items: center;
35 | padding: 2rem;
36 | height: 100vh;
37 | pointer-events: none;
38 | z-index: 2;
39 | position: relative;
40 | text-transform: uppercase;
41 | }
42 |
43 | .icon {
44 | width: 1.7rem;
45 | }
46 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "composite": true,
5 | "useDefineForClassFields": true,
6 | "allowSyntheticDefaultImports": true,
7 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
8 | "module": "ESNext",
9 | "skipLibCheck": true,
10 | "moduleResolution": "Node",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "esModuleInterop": true,
14 | "isolatedModules": true,
15 | "declarationMap": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx",
18 | "baseUrl": ".",
19 | "paths": {
20 | "@/*": ["src/*"],
21 | "index": ["lib/index.ts"]
22 | },
23 |
24 | "typeRoots": ["node_modules/@types", "lib/dist/index.d.ts"],
25 | "types": ["node"],
26 | "strict": true,
27 | "noUnusedLocals": true,
28 | "noUnusedParameters": true,
29 | "noFallthroughCasesInSwitch": true,
30 | "declaration": true
31 | },
32 |
33 | "include": ["src", "lib", "lib/glsl.d.ts"],
34 | "references": [{ "path": "./tsconfig.node.json" }]
35 | }
36 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path';
2 | import { defineConfig } from 'vite';
3 | import { fileURLToPath } from 'node:url';
4 | import tsConfigPaths from 'vite-tsconfig-paths';
5 | import react from '@vitejs/plugin-react';
6 | import glsl from 'vite-plugin-glsl';
7 | import dts from 'vite-plugin-dts';
8 |
9 | export default defineConfig({
10 | plugins: [react(), glsl(), dts({ include: 'lib', insertTypesEntry: true }), tsConfigPaths()],
11 |
12 | resolve: {
13 | alias: [
14 | {
15 | find: '@',
16 | replacement: fileURLToPath(new URL('./src', import.meta.url)),
17 | },
18 | ],
19 | },
20 | build: {
21 | lib: {
22 | // eslint-disable-next-line no-undef
23 | entry: path.resolve(__dirname, 'lib/index.ts'),
24 | name: 'reactFluidDistortion',
25 | formats: ['es', 'umd'],
26 | fileName: (format) => `index.${format}.js`,
27 | },
28 | rollupOptions: {
29 | external: [
30 | 'react',
31 | '@react-three/fiber',
32 | '@react-three/drei',
33 | 'three',
34 | 'leva',
35 | 'postprocessing',
36 | ],
37 | output: {
38 | globals: {
39 | react: 'React',
40 | '@react-three/fiber': 'reactThreeFiber',
41 | '@react-three/drei': 'drei',
42 | three: 'THREE',
43 | leva: 'leva',
44 | postprocessing: 'postprocessing',
45 | },
46 | },
47 | },
48 | sourcemap: true,
49 | emptyOutDir: true,
50 | copyPublicDir: false,
51 | },
52 | });
53 |
--------------------------------------------------------------------------------