├── .gitignore
├── README.md
├── assets
└── demo.jpg
├── index.html
├── main.js
├── package-lock.json
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | splatter-three.js
3 |
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Three.js / splatter.app integration demo
2 |
3 | This is an example of integrating [splatter.app](https://splatter.app) in a simple Three.js application.
4 |
5 | To run it, first do `npm install` and then run `npx vite`.
6 |
7 | 
8 |
9 | ## API
10 |
11 | A minimum integration consists of these steps:
12 |
13 | ```js
14 | import { Splatter } from 'splatter-three';
15 | const splatter = new Splatter(context, {splatId: '7yr-idb'});
16 | ```
17 |
18 | Then render the splats at the end of the frame, over existing opaque Three.js content.
19 | Depth testing ensures correct visibility/occlusion of the content.
20 | ```js
21 | splatter.render(camera);
22 | ```
23 |
24 | ## Licensing
25 |
26 | The `splatter-three` module is available for licensing to Business and Enterprise customers. Please contact [info@splatter.app](mailto:info@splatter.app) to get access.
27 |
28 |
29 |
--------------------------------------------------------------------------------
/assets/demo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/splatter-app/three-demo/c96f083599fc076ca2a569149b501131be80ddeb/assets/demo.jpg
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Three.js / splatter.app integration demo
6 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | import * as THREE from 'three';
2 | import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
3 | import { Splatter } from 'splatter-three';
4 |
5 | // create WebGL2 context -- required for Splatter
6 | const options = {
7 | antialias: false,
8 | alpha: true,
9 | powerPreference: 'high-performance',
10 | }
11 | const canvas = document.createElement('canvas');
12 | const context = canvas.getContext('webgl2', options);
13 | if (!context) {
14 | alert('WebGL2 not supported in this browser');
15 | throw new Error('WebGL2 not supported');
16 | }
17 | document.body.appendChild(canvas);
18 |
19 | // set up Three.js renderer
20 | const renderer = new THREE.WebGLRenderer({ canvas, context });
21 | renderer.setSize(window.innerWidth, window.innerHeight);
22 | renderer.setPixelRatio(window.devicePixelRatio);
23 | renderer.setClearColor(0x000000);
24 |
25 | // set up Splatter
26 | const splatter = new Splatter(context, {splatId: '7yr-idb'});
27 | splatter.setTransform(new THREE.Matrix4().makeRotationX(130 / 180 * Math.PI));
28 |
29 | // set up scene
30 | const scene = new THREE.Scene();
31 |
32 | const grid = new THREE.GridHelper(10, 10);
33 | grid.position.set(0, -1, 0);
34 | scene.add(grid);
35 |
36 | const cubeMaterial = new THREE.MeshStandardMaterial({ color: 0x44aa88 });
37 | const cube = new THREE.Mesh(new THREE.BoxGeometry(), cubeMaterial);
38 | scene.add(cube);
39 |
40 | const ballMaterial = new THREE.MeshStandardMaterial({ color: 0xffff00 });
41 | const ball = new THREE.Mesh(new THREE.SphereGeometry(0.1, 16, 8), ballMaterial);
42 | scene.add(ball);
43 |
44 | const light = new THREE.DirectionalLight(0xffffff, 1);
45 | light.position.set(5, 10, 7.5);
46 | scene.add(light);
47 | scene.add(new THREE.AmbientLight(0xffffff));
48 |
49 | // set up camera and controls
50 | const camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);
51 | camera.position.set(3, 3, 3);
52 |
53 | const controls = new OrbitControls(camera, canvas);
54 | controls.enableDamping = true;
55 | controls.dampingFactor = 0.25;
56 | controls.rotateSpeed = 0.5;
57 |
58 | // set up a simple splat shader effect
59 | splatter.addUniform('vec3', 'uWeights');
60 | splatter.setShaderEffect(`
61 | // make the splats grayscale
62 | float gray = dot(color, uWeights);
63 | color = vec3(gray);
64 | `);
65 |
66 | // clipping demo: remove splats on the fly with GLSL code
67 | splatter.setClipTest(`
68 | // discard splats beyond a certain distance from origin
69 | if (length(position) + radius > 10.0) { return false; }
70 | `);
71 |
72 | // render scene (on demand)
73 | function render(deltaTime) {
74 | frameRequested = false;
75 |
76 | renderer.render(scene, camera);
77 | splatter.setUniform('uWeights', [0.299, 0.587, 0.114]);
78 | splatter.render(camera, controls.target);
79 |
80 | if (controls.update(deltaTime)) {
81 | update();
82 | };
83 | }
84 |
85 | // request redraw
86 | let frameRequested = false;
87 | function update() {
88 | if (!frameRequested) {
89 | requestAnimationFrame(render);
90 | frameRequested = true;
91 | }
92 | }
93 |
94 | // handle window resize
95 | function resize() {
96 | let [width, height] = [window.innerWidth, window.innerHeight];
97 | camera.aspect = width / height;
98 | camera.updateProjectionMatrix();
99 | renderer.setSize(width, height);
100 | update();
101 | }
102 |
103 | // recenter on double-click
104 | let lastTime = -1e3;
105 | function onclick(event) {
106 | if (performance.now() - lastTime < 300) {
107 | let pt = splatter.hitTest(camera, [event.clientX, event.clientY]);
108 | if (pt) {
109 | controls.target.copy(pt);
110 | ball.position.copy(pt);
111 | update();
112 | }
113 | }
114 | lastTime = performance.now();
115 | }
116 |
117 | // watch number of loaded/displayed Gaussians, hide spinner when enough displayed
118 | function onloaded(totalLoaded, numDisplayed) {
119 | if (totalLoaded > splatter.totalSize/2 || numDisplayed > 1e6) {
120 | document.getElementById('spinner').style.display = 'none';
121 | }
122 | }
123 |
124 | resize();
125 | update();
126 |
127 | window.addEventListener('resize', resize);
128 | controls.addEventListener('change', update);
129 | splatter.addEventListener('update', update); // important: redraw on streaming updates!
130 | splatter.addEventListener('loaded', onloaded);
131 | canvas.addEventListener('pointerdown', onclick);
132 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "three-demo",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "splatter-three": "github:splatter-app/splatter-three",
9 | "three": "^0.176.0"
10 | },
11 | "devDependencies": {
12 | "vite": "^6.3.4"
13 | }
14 | },
15 | "node_modules/@esbuild/aix-ppc64": {
16 | "version": "0.25.10",
17 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz",
18 | "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==",
19 | "cpu": [
20 | "ppc64"
21 | ],
22 | "dev": true,
23 | "license": "MIT",
24 | "optional": true,
25 | "os": [
26 | "aix"
27 | ],
28 | "engines": {
29 | "node": ">=18"
30 | }
31 | },
32 | "node_modules/@esbuild/android-arm": {
33 | "version": "0.25.10",
34 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz",
35 | "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==",
36 | "cpu": [
37 | "arm"
38 | ],
39 | "dev": true,
40 | "license": "MIT",
41 | "optional": true,
42 | "os": [
43 | "android"
44 | ],
45 | "engines": {
46 | "node": ">=18"
47 | }
48 | },
49 | "node_modules/@esbuild/android-arm64": {
50 | "version": "0.25.10",
51 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz",
52 | "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==",
53 | "cpu": [
54 | "arm64"
55 | ],
56 | "dev": true,
57 | "license": "MIT",
58 | "optional": true,
59 | "os": [
60 | "android"
61 | ],
62 | "engines": {
63 | "node": ">=18"
64 | }
65 | },
66 | "node_modules/@esbuild/android-x64": {
67 | "version": "0.25.10",
68 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz",
69 | "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==",
70 | "cpu": [
71 | "x64"
72 | ],
73 | "dev": true,
74 | "license": "MIT",
75 | "optional": true,
76 | "os": [
77 | "android"
78 | ],
79 | "engines": {
80 | "node": ">=18"
81 | }
82 | },
83 | "node_modules/@esbuild/darwin-arm64": {
84 | "version": "0.25.10",
85 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz",
86 | "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==",
87 | "cpu": [
88 | "arm64"
89 | ],
90 | "dev": true,
91 | "license": "MIT",
92 | "optional": true,
93 | "os": [
94 | "darwin"
95 | ],
96 | "engines": {
97 | "node": ">=18"
98 | }
99 | },
100 | "node_modules/@esbuild/darwin-x64": {
101 | "version": "0.25.10",
102 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz",
103 | "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==",
104 | "cpu": [
105 | "x64"
106 | ],
107 | "dev": true,
108 | "license": "MIT",
109 | "optional": true,
110 | "os": [
111 | "darwin"
112 | ],
113 | "engines": {
114 | "node": ">=18"
115 | }
116 | },
117 | "node_modules/@esbuild/freebsd-arm64": {
118 | "version": "0.25.10",
119 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz",
120 | "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==",
121 | "cpu": [
122 | "arm64"
123 | ],
124 | "dev": true,
125 | "license": "MIT",
126 | "optional": true,
127 | "os": [
128 | "freebsd"
129 | ],
130 | "engines": {
131 | "node": ">=18"
132 | }
133 | },
134 | "node_modules/@esbuild/freebsd-x64": {
135 | "version": "0.25.10",
136 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz",
137 | "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==",
138 | "cpu": [
139 | "x64"
140 | ],
141 | "dev": true,
142 | "license": "MIT",
143 | "optional": true,
144 | "os": [
145 | "freebsd"
146 | ],
147 | "engines": {
148 | "node": ">=18"
149 | }
150 | },
151 | "node_modules/@esbuild/linux-arm": {
152 | "version": "0.25.10",
153 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz",
154 | "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==",
155 | "cpu": [
156 | "arm"
157 | ],
158 | "dev": true,
159 | "license": "MIT",
160 | "optional": true,
161 | "os": [
162 | "linux"
163 | ],
164 | "engines": {
165 | "node": ">=18"
166 | }
167 | },
168 | "node_modules/@esbuild/linux-arm64": {
169 | "version": "0.25.10",
170 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz",
171 | "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==",
172 | "cpu": [
173 | "arm64"
174 | ],
175 | "dev": true,
176 | "license": "MIT",
177 | "optional": true,
178 | "os": [
179 | "linux"
180 | ],
181 | "engines": {
182 | "node": ">=18"
183 | }
184 | },
185 | "node_modules/@esbuild/linux-ia32": {
186 | "version": "0.25.10",
187 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz",
188 | "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==",
189 | "cpu": [
190 | "ia32"
191 | ],
192 | "dev": true,
193 | "license": "MIT",
194 | "optional": true,
195 | "os": [
196 | "linux"
197 | ],
198 | "engines": {
199 | "node": ">=18"
200 | }
201 | },
202 | "node_modules/@esbuild/linux-loong64": {
203 | "version": "0.25.10",
204 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz",
205 | "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==",
206 | "cpu": [
207 | "loong64"
208 | ],
209 | "dev": true,
210 | "license": "MIT",
211 | "optional": true,
212 | "os": [
213 | "linux"
214 | ],
215 | "engines": {
216 | "node": ">=18"
217 | }
218 | },
219 | "node_modules/@esbuild/linux-mips64el": {
220 | "version": "0.25.10",
221 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz",
222 | "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==",
223 | "cpu": [
224 | "mips64el"
225 | ],
226 | "dev": true,
227 | "license": "MIT",
228 | "optional": true,
229 | "os": [
230 | "linux"
231 | ],
232 | "engines": {
233 | "node": ">=18"
234 | }
235 | },
236 | "node_modules/@esbuild/linux-ppc64": {
237 | "version": "0.25.10",
238 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz",
239 | "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==",
240 | "cpu": [
241 | "ppc64"
242 | ],
243 | "dev": true,
244 | "license": "MIT",
245 | "optional": true,
246 | "os": [
247 | "linux"
248 | ],
249 | "engines": {
250 | "node": ">=18"
251 | }
252 | },
253 | "node_modules/@esbuild/linux-riscv64": {
254 | "version": "0.25.10",
255 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz",
256 | "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==",
257 | "cpu": [
258 | "riscv64"
259 | ],
260 | "dev": true,
261 | "license": "MIT",
262 | "optional": true,
263 | "os": [
264 | "linux"
265 | ],
266 | "engines": {
267 | "node": ">=18"
268 | }
269 | },
270 | "node_modules/@esbuild/linux-s390x": {
271 | "version": "0.25.10",
272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz",
273 | "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==",
274 | "cpu": [
275 | "s390x"
276 | ],
277 | "dev": true,
278 | "license": "MIT",
279 | "optional": true,
280 | "os": [
281 | "linux"
282 | ],
283 | "engines": {
284 | "node": ">=18"
285 | }
286 | },
287 | "node_modules/@esbuild/linux-x64": {
288 | "version": "0.25.10",
289 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz",
290 | "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==",
291 | "cpu": [
292 | "x64"
293 | ],
294 | "dev": true,
295 | "license": "MIT",
296 | "optional": true,
297 | "os": [
298 | "linux"
299 | ],
300 | "engines": {
301 | "node": ">=18"
302 | }
303 | },
304 | "node_modules/@esbuild/netbsd-arm64": {
305 | "version": "0.25.10",
306 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz",
307 | "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==",
308 | "cpu": [
309 | "arm64"
310 | ],
311 | "dev": true,
312 | "license": "MIT",
313 | "optional": true,
314 | "os": [
315 | "netbsd"
316 | ],
317 | "engines": {
318 | "node": ">=18"
319 | }
320 | },
321 | "node_modules/@esbuild/netbsd-x64": {
322 | "version": "0.25.10",
323 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz",
324 | "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==",
325 | "cpu": [
326 | "x64"
327 | ],
328 | "dev": true,
329 | "license": "MIT",
330 | "optional": true,
331 | "os": [
332 | "netbsd"
333 | ],
334 | "engines": {
335 | "node": ">=18"
336 | }
337 | },
338 | "node_modules/@esbuild/openbsd-arm64": {
339 | "version": "0.25.10",
340 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz",
341 | "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==",
342 | "cpu": [
343 | "arm64"
344 | ],
345 | "dev": true,
346 | "license": "MIT",
347 | "optional": true,
348 | "os": [
349 | "openbsd"
350 | ],
351 | "engines": {
352 | "node": ">=18"
353 | }
354 | },
355 | "node_modules/@esbuild/openbsd-x64": {
356 | "version": "0.25.10",
357 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz",
358 | "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==",
359 | "cpu": [
360 | "x64"
361 | ],
362 | "dev": true,
363 | "license": "MIT",
364 | "optional": true,
365 | "os": [
366 | "openbsd"
367 | ],
368 | "engines": {
369 | "node": ">=18"
370 | }
371 | },
372 | "node_modules/@esbuild/openharmony-arm64": {
373 | "version": "0.25.10",
374 | "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz",
375 | "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==",
376 | "cpu": [
377 | "arm64"
378 | ],
379 | "dev": true,
380 | "license": "MIT",
381 | "optional": true,
382 | "os": [
383 | "openharmony"
384 | ],
385 | "engines": {
386 | "node": ">=18"
387 | }
388 | },
389 | "node_modules/@esbuild/sunos-x64": {
390 | "version": "0.25.10",
391 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz",
392 | "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==",
393 | "cpu": [
394 | "x64"
395 | ],
396 | "dev": true,
397 | "license": "MIT",
398 | "optional": true,
399 | "os": [
400 | "sunos"
401 | ],
402 | "engines": {
403 | "node": ">=18"
404 | }
405 | },
406 | "node_modules/@esbuild/win32-arm64": {
407 | "version": "0.25.10",
408 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz",
409 | "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==",
410 | "cpu": [
411 | "arm64"
412 | ],
413 | "dev": true,
414 | "license": "MIT",
415 | "optional": true,
416 | "os": [
417 | "win32"
418 | ],
419 | "engines": {
420 | "node": ">=18"
421 | }
422 | },
423 | "node_modules/@esbuild/win32-ia32": {
424 | "version": "0.25.10",
425 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz",
426 | "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==",
427 | "cpu": [
428 | "ia32"
429 | ],
430 | "dev": true,
431 | "license": "MIT",
432 | "optional": true,
433 | "os": [
434 | "win32"
435 | ],
436 | "engines": {
437 | "node": ">=18"
438 | }
439 | },
440 | "node_modules/@esbuild/win32-x64": {
441 | "version": "0.25.10",
442 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz",
443 | "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==",
444 | "cpu": [
445 | "x64"
446 | ],
447 | "dev": true,
448 | "license": "MIT",
449 | "optional": true,
450 | "os": [
451 | "win32"
452 | ],
453 | "engines": {
454 | "node": ">=18"
455 | }
456 | },
457 | "node_modules/@rollup/rollup-android-arm-eabi": {
458 | "version": "4.52.4",
459 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz",
460 | "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==",
461 | "cpu": [
462 | "arm"
463 | ],
464 | "dev": true,
465 | "license": "MIT",
466 | "optional": true,
467 | "os": [
468 | "android"
469 | ]
470 | },
471 | "node_modules/@rollup/rollup-android-arm64": {
472 | "version": "4.52.4",
473 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz",
474 | "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==",
475 | "cpu": [
476 | "arm64"
477 | ],
478 | "dev": true,
479 | "license": "MIT",
480 | "optional": true,
481 | "os": [
482 | "android"
483 | ]
484 | },
485 | "node_modules/@rollup/rollup-darwin-arm64": {
486 | "version": "4.52.4",
487 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz",
488 | "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==",
489 | "cpu": [
490 | "arm64"
491 | ],
492 | "dev": true,
493 | "license": "MIT",
494 | "optional": true,
495 | "os": [
496 | "darwin"
497 | ]
498 | },
499 | "node_modules/@rollup/rollup-darwin-x64": {
500 | "version": "4.52.4",
501 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz",
502 | "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==",
503 | "cpu": [
504 | "x64"
505 | ],
506 | "dev": true,
507 | "license": "MIT",
508 | "optional": true,
509 | "os": [
510 | "darwin"
511 | ]
512 | },
513 | "node_modules/@rollup/rollup-freebsd-arm64": {
514 | "version": "4.52.4",
515 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz",
516 | "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==",
517 | "cpu": [
518 | "arm64"
519 | ],
520 | "dev": true,
521 | "license": "MIT",
522 | "optional": true,
523 | "os": [
524 | "freebsd"
525 | ]
526 | },
527 | "node_modules/@rollup/rollup-freebsd-x64": {
528 | "version": "4.52.4",
529 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz",
530 | "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==",
531 | "cpu": [
532 | "x64"
533 | ],
534 | "dev": true,
535 | "license": "MIT",
536 | "optional": true,
537 | "os": [
538 | "freebsd"
539 | ]
540 | },
541 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
542 | "version": "4.52.4",
543 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz",
544 | "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==",
545 | "cpu": [
546 | "arm"
547 | ],
548 | "dev": true,
549 | "license": "MIT",
550 | "optional": true,
551 | "os": [
552 | "linux"
553 | ]
554 | },
555 | "node_modules/@rollup/rollup-linux-arm-musleabihf": {
556 | "version": "4.52.4",
557 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz",
558 | "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==",
559 | "cpu": [
560 | "arm"
561 | ],
562 | "dev": true,
563 | "license": "MIT",
564 | "optional": true,
565 | "os": [
566 | "linux"
567 | ]
568 | },
569 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
570 | "version": "4.52.4",
571 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz",
572 | "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==",
573 | "cpu": [
574 | "arm64"
575 | ],
576 | "dev": true,
577 | "license": "MIT",
578 | "optional": true,
579 | "os": [
580 | "linux"
581 | ]
582 | },
583 | "node_modules/@rollup/rollup-linux-arm64-musl": {
584 | "version": "4.52.4",
585 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz",
586 | "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==",
587 | "cpu": [
588 | "arm64"
589 | ],
590 | "dev": true,
591 | "license": "MIT",
592 | "optional": true,
593 | "os": [
594 | "linux"
595 | ]
596 | },
597 | "node_modules/@rollup/rollup-linux-loong64-gnu": {
598 | "version": "4.52.4",
599 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz",
600 | "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==",
601 | "cpu": [
602 | "loong64"
603 | ],
604 | "dev": true,
605 | "license": "MIT",
606 | "optional": true,
607 | "os": [
608 | "linux"
609 | ]
610 | },
611 | "node_modules/@rollup/rollup-linux-ppc64-gnu": {
612 | "version": "4.52.4",
613 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz",
614 | "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==",
615 | "cpu": [
616 | "ppc64"
617 | ],
618 | "dev": true,
619 | "license": "MIT",
620 | "optional": true,
621 | "os": [
622 | "linux"
623 | ]
624 | },
625 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
626 | "version": "4.52.4",
627 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz",
628 | "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==",
629 | "cpu": [
630 | "riscv64"
631 | ],
632 | "dev": true,
633 | "license": "MIT",
634 | "optional": true,
635 | "os": [
636 | "linux"
637 | ]
638 | },
639 | "node_modules/@rollup/rollup-linux-riscv64-musl": {
640 | "version": "4.52.4",
641 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz",
642 | "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==",
643 | "cpu": [
644 | "riscv64"
645 | ],
646 | "dev": true,
647 | "license": "MIT",
648 | "optional": true,
649 | "os": [
650 | "linux"
651 | ]
652 | },
653 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
654 | "version": "4.52.4",
655 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz",
656 | "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==",
657 | "cpu": [
658 | "s390x"
659 | ],
660 | "dev": true,
661 | "license": "MIT",
662 | "optional": true,
663 | "os": [
664 | "linux"
665 | ]
666 | },
667 | "node_modules/@rollup/rollup-linux-x64-gnu": {
668 | "version": "4.52.4",
669 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz",
670 | "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==",
671 | "cpu": [
672 | "x64"
673 | ],
674 | "dev": true,
675 | "license": "MIT",
676 | "optional": true,
677 | "os": [
678 | "linux"
679 | ]
680 | },
681 | "node_modules/@rollup/rollup-linux-x64-musl": {
682 | "version": "4.52.4",
683 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz",
684 | "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==",
685 | "cpu": [
686 | "x64"
687 | ],
688 | "dev": true,
689 | "license": "MIT",
690 | "optional": true,
691 | "os": [
692 | "linux"
693 | ]
694 | },
695 | "node_modules/@rollup/rollup-openharmony-arm64": {
696 | "version": "4.52.4",
697 | "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz",
698 | "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==",
699 | "cpu": [
700 | "arm64"
701 | ],
702 | "dev": true,
703 | "license": "MIT",
704 | "optional": true,
705 | "os": [
706 | "openharmony"
707 | ]
708 | },
709 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
710 | "version": "4.52.4",
711 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz",
712 | "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==",
713 | "cpu": [
714 | "arm64"
715 | ],
716 | "dev": true,
717 | "license": "MIT",
718 | "optional": true,
719 | "os": [
720 | "win32"
721 | ]
722 | },
723 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
724 | "version": "4.52.4",
725 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz",
726 | "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==",
727 | "cpu": [
728 | "ia32"
729 | ],
730 | "dev": true,
731 | "license": "MIT",
732 | "optional": true,
733 | "os": [
734 | "win32"
735 | ]
736 | },
737 | "node_modules/@rollup/rollup-win32-x64-gnu": {
738 | "version": "4.52.4",
739 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz",
740 | "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==",
741 | "cpu": [
742 | "x64"
743 | ],
744 | "dev": true,
745 | "license": "MIT",
746 | "optional": true,
747 | "os": [
748 | "win32"
749 | ]
750 | },
751 | "node_modules/@rollup/rollup-win32-x64-msvc": {
752 | "version": "4.52.4",
753 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz",
754 | "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==",
755 | "cpu": [
756 | "x64"
757 | ],
758 | "dev": true,
759 | "license": "MIT",
760 | "optional": true,
761 | "os": [
762 | "win32"
763 | ]
764 | },
765 | "node_modules/@types/estree": {
766 | "version": "1.0.8",
767 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
768 | "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
769 | "dev": true,
770 | "license": "MIT"
771 | },
772 | "node_modules/esbuild": {
773 | "version": "0.25.10",
774 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz",
775 | "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
776 | "dev": true,
777 | "hasInstallScript": true,
778 | "license": "MIT",
779 | "bin": {
780 | "esbuild": "bin/esbuild"
781 | },
782 | "engines": {
783 | "node": ">=18"
784 | },
785 | "optionalDependencies": {
786 | "@esbuild/aix-ppc64": "0.25.10",
787 | "@esbuild/android-arm": "0.25.10",
788 | "@esbuild/android-arm64": "0.25.10",
789 | "@esbuild/android-x64": "0.25.10",
790 | "@esbuild/darwin-arm64": "0.25.10",
791 | "@esbuild/darwin-x64": "0.25.10",
792 | "@esbuild/freebsd-arm64": "0.25.10",
793 | "@esbuild/freebsd-x64": "0.25.10",
794 | "@esbuild/linux-arm": "0.25.10",
795 | "@esbuild/linux-arm64": "0.25.10",
796 | "@esbuild/linux-ia32": "0.25.10",
797 | "@esbuild/linux-loong64": "0.25.10",
798 | "@esbuild/linux-mips64el": "0.25.10",
799 | "@esbuild/linux-ppc64": "0.25.10",
800 | "@esbuild/linux-riscv64": "0.25.10",
801 | "@esbuild/linux-s390x": "0.25.10",
802 | "@esbuild/linux-x64": "0.25.10",
803 | "@esbuild/netbsd-arm64": "0.25.10",
804 | "@esbuild/netbsd-x64": "0.25.10",
805 | "@esbuild/openbsd-arm64": "0.25.10",
806 | "@esbuild/openbsd-x64": "0.25.10",
807 | "@esbuild/openharmony-arm64": "0.25.10",
808 | "@esbuild/sunos-x64": "0.25.10",
809 | "@esbuild/win32-arm64": "0.25.10",
810 | "@esbuild/win32-ia32": "0.25.10",
811 | "@esbuild/win32-x64": "0.25.10"
812 | }
813 | },
814 | "node_modules/fdir": {
815 | "version": "6.5.0",
816 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
817 | "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
818 | "dev": true,
819 | "license": "MIT",
820 | "engines": {
821 | "node": ">=12.0.0"
822 | },
823 | "peerDependencies": {
824 | "picomatch": "^3 || ^4"
825 | },
826 | "peerDependenciesMeta": {
827 | "picomatch": {
828 | "optional": true
829 | }
830 | }
831 | },
832 | "node_modules/fsevents": {
833 | "version": "2.3.3",
834 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
835 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
836 | "dev": true,
837 | "hasInstallScript": true,
838 | "license": "MIT",
839 | "optional": true,
840 | "os": [
841 | "darwin"
842 | ],
843 | "engines": {
844 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
845 | }
846 | },
847 | "node_modules/nanoid": {
848 | "version": "3.3.11",
849 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
850 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
851 | "dev": true,
852 | "funding": [
853 | {
854 | "type": "github",
855 | "url": "https://github.com/sponsors/ai"
856 | }
857 | ],
858 | "license": "MIT",
859 | "bin": {
860 | "nanoid": "bin/nanoid.cjs"
861 | },
862 | "engines": {
863 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
864 | }
865 | },
866 | "node_modules/picocolors": {
867 | "version": "1.1.1",
868 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
869 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
870 | "dev": true,
871 | "license": "ISC"
872 | },
873 | "node_modules/picomatch": {
874 | "version": "4.0.3",
875 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
876 | "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
877 | "dev": true,
878 | "license": "MIT",
879 | "engines": {
880 | "node": ">=12"
881 | },
882 | "funding": {
883 | "url": "https://github.com/sponsors/jonschlinkert"
884 | }
885 | },
886 | "node_modules/postcss": {
887 | "version": "8.5.6",
888 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
889 | "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
890 | "dev": true,
891 | "funding": [
892 | {
893 | "type": "opencollective",
894 | "url": "https://opencollective.com/postcss/"
895 | },
896 | {
897 | "type": "tidelift",
898 | "url": "https://tidelift.com/funding/github/npm/postcss"
899 | },
900 | {
901 | "type": "github",
902 | "url": "https://github.com/sponsors/ai"
903 | }
904 | ],
905 | "license": "MIT",
906 | "dependencies": {
907 | "nanoid": "^3.3.11",
908 | "picocolors": "^1.1.1",
909 | "source-map-js": "^1.2.1"
910 | },
911 | "engines": {
912 | "node": "^10 || ^12 || >=14"
913 | }
914 | },
915 | "node_modules/rollup": {
916 | "version": "4.52.4",
917 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
918 | "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==",
919 | "dev": true,
920 | "license": "MIT",
921 | "dependencies": {
922 | "@types/estree": "1.0.8"
923 | },
924 | "bin": {
925 | "rollup": "dist/bin/rollup"
926 | },
927 | "engines": {
928 | "node": ">=18.0.0",
929 | "npm": ">=8.0.0"
930 | },
931 | "optionalDependencies": {
932 | "@rollup/rollup-android-arm-eabi": "4.52.4",
933 | "@rollup/rollup-android-arm64": "4.52.4",
934 | "@rollup/rollup-darwin-arm64": "4.52.4",
935 | "@rollup/rollup-darwin-x64": "4.52.4",
936 | "@rollup/rollup-freebsd-arm64": "4.52.4",
937 | "@rollup/rollup-freebsd-x64": "4.52.4",
938 | "@rollup/rollup-linux-arm-gnueabihf": "4.52.4",
939 | "@rollup/rollup-linux-arm-musleabihf": "4.52.4",
940 | "@rollup/rollup-linux-arm64-gnu": "4.52.4",
941 | "@rollup/rollup-linux-arm64-musl": "4.52.4",
942 | "@rollup/rollup-linux-loong64-gnu": "4.52.4",
943 | "@rollup/rollup-linux-ppc64-gnu": "4.52.4",
944 | "@rollup/rollup-linux-riscv64-gnu": "4.52.4",
945 | "@rollup/rollup-linux-riscv64-musl": "4.52.4",
946 | "@rollup/rollup-linux-s390x-gnu": "4.52.4",
947 | "@rollup/rollup-linux-x64-gnu": "4.52.4",
948 | "@rollup/rollup-linux-x64-musl": "4.52.4",
949 | "@rollup/rollup-openharmony-arm64": "4.52.4",
950 | "@rollup/rollup-win32-arm64-msvc": "4.52.4",
951 | "@rollup/rollup-win32-ia32-msvc": "4.52.4",
952 | "@rollup/rollup-win32-x64-gnu": "4.52.4",
953 | "@rollup/rollup-win32-x64-msvc": "4.52.4",
954 | "fsevents": "~2.3.2"
955 | }
956 | },
957 | "node_modules/source-map-js": {
958 | "version": "1.2.1",
959 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
960 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
961 | "dev": true,
962 | "license": "BSD-3-Clause",
963 | "engines": {
964 | "node": ">=0.10.0"
965 | }
966 | },
967 | "node_modules/splatter-three": {
968 | "version": "0.10.0",
969 | "resolved": "git+ssh://git@github.com/splatter-app/splatter-three.git#ba95ceefb9d0b362a285412dc02d61402205a1ef"
970 | },
971 | "node_modules/three": {
972 | "version": "0.176.0",
973 | "resolved": "https://registry.npmjs.org/three/-/three-0.176.0.tgz",
974 | "integrity": "sha512-PWRKYWQo23ojf9oZSlRGH8K09q7nRSWx6LY/HF/UUrMdYgN9i1e2OwJYHoQjwc6HF/4lvvYLC5YC1X8UJL2ZpA==",
975 | "license": "MIT"
976 | },
977 | "node_modules/tinyglobby": {
978 | "version": "0.2.15",
979 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
980 | "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
981 | "dev": true,
982 | "license": "MIT",
983 | "dependencies": {
984 | "fdir": "^6.5.0",
985 | "picomatch": "^4.0.3"
986 | },
987 | "engines": {
988 | "node": ">=12.0.0"
989 | },
990 | "funding": {
991 | "url": "https://github.com/sponsors/SuperchupuDev"
992 | }
993 | },
994 | "node_modules/vite": {
995 | "version": "6.3.6",
996 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz",
997 | "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==",
998 | "dev": true,
999 | "license": "MIT",
1000 | "dependencies": {
1001 | "esbuild": "^0.25.0",
1002 | "fdir": "^6.4.4",
1003 | "picomatch": "^4.0.2",
1004 | "postcss": "^8.5.3",
1005 | "rollup": "^4.34.9",
1006 | "tinyglobby": "^0.2.13"
1007 | },
1008 | "bin": {
1009 | "vite": "bin/vite.js"
1010 | },
1011 | "engines": {
1012 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
1013 | },
1014 | "funding": {
1015 | "url": "https://github.com/vitejs/vite?sponsor=1"
1016 | },
1017 | "optionalDependencies": {
1018 | "fsevents": "~2.3.3"
1019 | },
1020 | "peerDependencies": {
1021 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
1022 | "jiti": ">=1.21.0",
1023 | "less": "*",
1024 | "lightningcss": "^1.21.0",
1025 | "sass": "*",
1026 | "sass-embedded": "*",
1027 | "stylus": "*",
1028 | "sugarss": "*",
1029 | "terser": "^5.16.0",
1030 | "tsx": "^4.8.1",
1031 | "yaml": "^2.4.2"
1032 | },
1033 | "peerDependenciesMeta": {
1034 | "@types/node": {
1035 | "optional": true
1036 | },
1037 | "jiti": {
1038 | "optional": true
1039 | },
1040 | "less": {
1041 | "optional": true
1042 | },
1043 | "lightningcss": {
1044 | "optional": true
1045 | },
1046 | "sass": {
1047 | "optional": true
1048 | },
1049 | "sass-embedded": {
1050 | "optional": true
1051 | },
1052 | "stylus": {
1053 | "optional": true
1054 | },
1055 | "sugarss": {
1056 | "optional": true
1057 | },
1058 | "terser": {
1059 | "optional": true
1060 | },
1061 | "tsx": {
1062 | "optional": true
1063 | },
1064 | "yaml": {
1065 | "optional": true
1066 | }
1067 | }
1068 | }
1069 | }
1070 | }
1071 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "splatter-three": "github:splatter-app/splatter-three",
4 | "three": "^0.176.0"
5 | },
6 | "devDependencies": {
7 | "vite": "^6.3.4"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------