From 805eb560a093eff935aca3e17801bbfc03ebfcf3 Mon Sep 17 00:00:00 2001 From: Rodrigo Bertoldo de Sousa Martins Date: Fri, 11 Sep 2026 16:52:49 -0300 Subject: [PATCH] modelo 3d tegumentar --- frontend/package-lock.json | 3626 +++++++++++++++++ .../public/tegumentar/skin-cross-section.jpg | Bin 56237 -> 0 bytes frontend/src/components/SkinDiagram.tsx | 69 - frontend/src/components/SkinDiagram3D.tsx | 330 ++ frontend/src/data/skinHotspots.ts | 28 - frontend/src/routes/AtlasPage.tsx | 4 +- frontend/tsconfig.tsbuildinfo | 1 + 7 files changed, 3959 insertions(+), 99 deletions(-) create mode 100644 frontend/package-lock.json delete mode 100644 frontend/public/tegumentar/skin-cross-section.jpg delete mode 100644 frontend/src/components/SkinDiagram.tsx create mode 100644 frontend/src/components/SkinDiagram3D.tsx delete mode 100644 frontend/src/data/skinHotspots.ts create mode 100644 frontend/tsconfig.tsbuildinfo diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..1490934 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3626 @@ +{ + "name": "anatomia-frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "anatomia-frontend", + "version": "1.0.0", + "dependencies": { + "@react-three/drei": "^9.114.3", + "@react-three/fiber": "^8.17.10", + "fuse.js": "^7.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.26.2", + "three": "^0.169.0", + "zustand": "^4.5.5" + }, + "devDependencies": { + "@types/react": "^18.3.5", + "@types/react-dom": "^18.3.0", + "@types/three": "^0.169.0", + "@vitejs/plugin-react": "^4.3.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.10", + "typescript": "^5.6.2", + "vite": "^5.4.6" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mediapipe/tasks-vision": { + "version": "0.10.17", + "resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.17.tgz", + "integrity": "sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==", + "license": "Apache-2.0" + }, + "node_modules/@monogrid/gainmap-js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.4.0.tgz", + "integrity": "sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==", + "license": "MIT", + "dependencies": { + "promise-worker-transferable": "^1.0.4" + }, + "peerDependencies": { + "three": ">= 0.159.0" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-spring/animated": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", + "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", + "license": "MIT", + "dependencies": { + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", + "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", + "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", + "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/three": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.5.tgz", + "integrity": "sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/core": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "three": ">=0.126" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", + "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", + "license": "MIT" + }, + "node_modules/@react-three/drei": { + "version": "9.122.0", + "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-9.122.0.tgz", + "integrity": "sha512-SEO/F/rBCTjlLez7WAlpys+iGe9hty4rNgjZvgkQeXFSiwqD4Hbk/wNHMAbdd8vprO2Aj81mihv4dF5bC7D0CA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mediapipe/tasks-vision": "0.10.17", + "@monogrid/gainmap-js": "^3.0.6", + "@react-spring/three": "~9.7.5", + "@use-gesture/react": "^10.3.1", + "camera-controls": "^2.9.0", + "cross-env": "^7.0.3", + "detect-gpu": "^5.0.56", + "glsl-noise": "^0.0.0", + "hls.js": "^1.5.17", + "maath": "^0.10.8", + "meshline": "^3.3.1", + "react-composer": "^5.0.3", + "stats-gl": "^2.2.8", + "stats.js": "^0.17.0", + "suspend-react": "^0.1.3", + "three-mesh-bvh": "^0.7.8", + "three-stdlib": "^2.35.6", + "troika-three-text": "^0.52.0", + "tunnel-rat": "^0.1.2", + "utility-types": "^3.11.0", + "zustand": "^5.0.1" + }, + "peerDependencies": { + "@react-three/fiber": "^8", + "react": "^18", + "react-dom": "^18", + "three": ">=0.137" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/@react-three/drei/node_modules/zustand": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.15.tgz", + "integrity": "sha512-MpSEjRiBkA9crSYeOUH32rJC7SVqAbm0Fqcqge/bUi2PPoLcBWKOsG+C8mevmpr8TwXHBVkChbbJiyvkE+i/3A==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + }, + "node_modules/@react-three/fiber": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.18.0.tgz", + "integrity": "sha512-FYZZqD0UUHUswKz3LQl2Z7H24AhD14XGTsIRw3SJaXUxyfVMi+1yiZGmqTcPt/CkPpdU7rrxqcyQ1zJE5DjvIQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/react-reconciler": "^0.26.7", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^1.0.6", + "react-reconciler": "^0.27.0", + "react-use-measure": "^2.1.7", + "scheduler": "^0.21.0", + "suspend-react": "^0.1.3", + "zustand": "^3.7.1" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=18 <19", + "react-dom": ">=18 <19", + "react-native": ">=0.64", + "three": ">=0.133" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@react-three/fiber/node_modules/zustand": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", + "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "license": "MIT", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.4", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.4.tgz", + "integrity": "sha512-q7j5geK7xs3UJSdm9/iytUNclBnLmYx1EnSeCFXHPeutdqgIMeFeHtUZgS3EhlKxdBEAu8OwtJCwmLrEzpSs7Q==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.1.tgz", + "integrity": "sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.1.tgz", + "integrity": "sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.1.tgz", + "integrity": "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.1.tgz", + "integrity": "sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.1.tgz", + "integrity": "sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.1.tgz", + "integrity": "sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.1.tgz", + "integrity": "sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.1.tgz", + "integrity": "sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.1.tgz", + "integrity": "sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.1.tgz", + "integrity": "sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.1.tgz", + "integrity": "sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.1.tgz", + "integrity": "sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.1.tgz", + "integrity": "sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.1.tgz", + "integrity": "sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.1.tgz", + "integrity": "sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.1.tgz", + "integrity": "sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.1.tgz", + "integrity": "sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.1.tgz", + "integrity": "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.1.tgz", + "integrity": "sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.1.tgz", + "integrity": "sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.1.tgz", + "integrity": "sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.1.tgz", + "integrity": "sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.1.tgz", + "integrity": "sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.1.tgz", + "integrity": "sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.1.tgz", + "integrity": "sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/draco3d": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.10.tgz", + "integrity": "sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-reconciler": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", + "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.169.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.169.0.tgz", + "integrity": "sha512-oan7qCgJBt03wIaK+4xPWclYRPG9wzcg7Z2f5T8xYTNEF95kh0t0lklxLLYBDo7gQiGLYzE6iF4ta7nXF2bcsw==", + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": "*", + "@webgpu/types": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" + }, + "node_modules/@use-gesture/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", + "license": "MIT" + }, + "node_modules/@use-gesture/react": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", + "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "license": "MIT", + "dependencies": { + "@use-gesture/core": "10.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@webgpu/types": { + "version": "0.1.72", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.72.tgz", + "integrity": "sha512-0cF7RFM2edNoiIS1ODJp0/Gzv4/xSXhwoR0YCza+OWpJWtn4wmo9DvK91aLlH9+uUnwIriP7ZiC3WitmyhuzBw==", + "license": "BSD-3-Clause" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.5.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.6.tgz", + "integrity": "sha512-HiH4oYNc5+DQEx/b8FPfMj+WHH/WWUBmbN5r1Uf/ixtfyFkk+wGIlfJT/RD5eAyzlwkeYRtZUCI8qrEi26pl2g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.9", + "caniuse-lite": "^1.0.30001810", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.22", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.22.tgz", + "integrity": "sha512-pWc4w51fBFd7mav43/zKRC+RI6f4yfzQoVlfvE8dECePyfkn1bzLp01Fj0QACcyCZyFhiEMyD2qScfKRWgWibA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", + "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", + "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.20", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.420", + "node-releases": "^2.0.54", + "update-browserslist-db": "^1.3.2" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camera-controls": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.10.1.tgz", + "integrity": "sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.126.1" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-gpu": { + "version": "5.0.70", + "resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.70.tgz", + "integrity": "sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==", + "license": "MIT", + "dependencies": { + "webgl-constants": "^1.1.1" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/draco3d": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz", + "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", + "license": "Apache-2.0" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz", + "integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.5.0.tgz", + "integrity": "sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/krisk" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glsl-noise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz", + "integrity": "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hls.js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.7.3.tgz", + "integrity": "sha512-MsPlx6yVW4Qv4C7mEVou4/gk/5cN2dVxOTnrNjPSmyH2f0Ln+/UkG10Ax1PE6OvrmTVPKgQYozTtBaPOuCzq7A==", + "license": "Apache-2.0" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/its-fine": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", + "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", + "license": "MIT", + "dependencies": { + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" + } + }, + "node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/maath": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.8.tgz", + "integrity": "sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==", + "license": "MIT", + "peerDependencies": { + "@types/three": ">=0.134.0", + "three": ">=0.134.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/meshline": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/meshline/-/meshline-3.3.1.tgz", + "integrity": "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.137" + } + }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", + "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" + }, + "node_modules/promise-worker-transferable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz", + "integrity": "sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==", + "license": "Apache-2.0", + "dependencies": { + "is-promise": "^2.1.0", + "lie": "^3.0.2" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-composer": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-composer/-/react-composer-5.0.3.tgz", + "integrity": "sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-reconciler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", + "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.21.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.6.tgz", + "integrity": "sha512-5HfK7k5im7LTOB0EqCQmfvy4C13G92Ssj1VTmouTK3AJvyjKTnFuCV0vcMAD/JS+JC4DvDIBRrlAeJIFjh5VWg==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.6.tgz", + "integrity": "sha512-0RHKZz7wwffvkU+2MFVT2NnjK44ssLEV+m0CAJaS2Ksmorrwj7WxH00jO0SOCW26/tINUnJHToXblDs33I38YQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.4", + "react-router": "6.30.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-use-measure": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz", + "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz", + "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.1.tgz", + "integrity": "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.1", + "@rollup/rollup-android-arm64": "4.63.1", + "@rollup/rollup-darwin-arm64": "4.63.1", + "@rollup/rollup-darwin-x64": "4.63.1", + "@rollup/rollup-freebsd-arm64": "4.63.1", + "@rollup/rollup-freebsd-x64": "4.63.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.1", + "@rollup/rollup-linux-arm-musleabihf": "4.63.1", + "@rollup/rollup-linux-arm64-gnu": "4.63.1", + "@rollup/rollup-linux-arm64-musl": "4.63.1", + "@rollup/rollup-linux-loong64-gnu": "4.63.1", + "@rollup/rollup-linux-loong64-musl": "4.63.1", + "@rollup/rollup-linux-ppc64-gnu": "4.63.1", + "@rollup/rollup-linux-ppc64-musl": "4.63.1", + "@rollup/rollup-linux-riscv64-gnu": "4.63.1", + "@rollup/rollup-linux-riscv64-musl": "4.63.1", + "@rollup/rollup-linux-s390x-gnu": "4.63.1", + "@rollup/rollup-linux-x64-gnu": "4.63.1", + "@rollup/rollup-linux-x64-musl": "4.63.1", + "@rollup/rollup-openbsd-x64": "4.63.1", + "@rollup/rollup-openharmony-arm64": "4.63.1", + "@rollup/rollup-win32-arm64-msvc": "4.63.1", + "@rollup/rollup-win32-ia32-msvc": "4.63.1", + "@rollup/rollup-win32-x64-gnu": "4.63.1", + "@rollup/rollup-win32-x64-msvc": "4.63.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", + "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stats-gl": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/stats-gl/-/stats-gl-2.4.2.tgz", + "integrity": "sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==", + "license": "MIT", + "dependencies": { + "@types/three": "*", + "three": "^0.170.0" + }, + "peerDependencies": { + "@types/three": "*", + "three": "*" + } + }, + "node_modules/stats-gl/node_modules/three": { + "version": "0.170.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.170.0.tgz", + "integrity": "sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==", + "license": "MIT" + }, + "node_modules/stats.js": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz", + "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=17.0" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/three": { + "version": "0.169.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.169.0.tgz", + "integrity": "sha512-Ed906MA3dR4TS5riErd4QBsRGPcx+HBDX2O5yYE5GqJeFQTPU+M56Va/f/Oph9X7uZo3W3o4l2ZhBZ6f6qUv0w==", + "license": "MIT" + }, + "node_modules/three-mesh-bvh": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.8.tgz", + "integrity": "sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==", + "deprecated": "Deprecated due to three.js version incompatibility. Please use v0.8.0, instead.", + "license": "MIT", + "peerDependencies": { + "three": ">= 0.151.0" + } + }, + "node_modules/three-stdlib": { + "version": "2.36.1", + "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.36.1.tgz", + "integrity": "sha512-XyGQrFmNQ5O/IoKm556ftwKsBg11TIb301MB5dWNicziQBEs2g3gtOYIf7pFiLa0zI2gUwhtCjv9fmjnxKZ1Cg==", + "license": "MIT", + "dependencies": { + "@types/draco3d": "^1.4.0", + "@types/offscreencanvas": "^2019.6.4", + "@types/webxr": "^0.5.2", + "draco3d": "^1.4.1", + "fflate": "^0.6.9", + "potpack": "^1.0.1" + }, + "peerDependencies": { + "three": ">=0.128.0" + } + }, + "node_modules/three-stdlib/node_modules/fflate": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.11.tgz", + "integrity": "sha512-3JyEFWGjFn7zHmoa9+zG1BmW7X2okcmAB+0Cnu9UFbVs/jCBnl2A8o065ZlXiw145K3eBM3uLuzrYXC0RK7eDg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/troika-three-text": { + "version": "0.52.5", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.5.tgz", + "integrity": "sha512-Ry3jRhic9pzcY4JduSvRRyDmVOSqEW19gT4vtK+aCiPNVcDlmkxvGG0YbFd36RTDq1wExOupXnvNF/j1oiHHDA==", + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.52.5", + "troika-worker-utils": "^0.52.0", + "webgl-sdf-generator": "1.1.1" + }, + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-three-utils": { + "version": "0.52.5", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.5.tgz", + "integrity": "sha512-WsePbcX8RtfidRfsxK1eCZCjF81ZDzAKHH/evLs0hdV2wpoCb0vArGZHdzdOJrSS3k4zfdtbKDaBh8+phkrYnw==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-worker-utils": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", + "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tunnel-rat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tunnel-rat/-/tunnel-rat-0.1.2.tgz", + "integrity": "sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==", + "license": "MIT", + "dependencies": { + "zustand": "^4.3.2" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz", + "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/webgl-constants": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz", + "integrity": "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==" + }, + "node_modules/webgl-sdf-generator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", + "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + } + } +} diff --git a/frontend/public/tegumentar/skin-cross-section.jpg b/frontend/public/tegumentar/skin-cross-section.jpg deleted file mode 100644 index cfba9cc6b4a264da8b88562738aef2561c7163ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56237 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 }) { - const selectedStructureId = useAtlasStore((s) => s.selectedStructureId); - const selectStructure = useAtlasStore((s) => s.selectStructure); - const toggleSystem = useAtlasStore((s) => s.toggleSystem); - - const tegumentar = [...bySlug.values()].filter((s) => s.system.slug === "tegumentar"); - if (tegumentar.length === 0) return null; - - return ( -
-
-
-

- Corte Transversal da Pele — clique nos pontos pra explorar -

- -
- -
- Corte transversal da pele mostrando epiderme, derme, hipoderme e seus anexos - {tegumentar.map((structure) => { - const hotspot = SKIN_HOTSPOTS[structure.slug]; - if (!hotspot) return null; - const isSelected = structure.id === selectedStructureId; - return ( -
- -

- Imagem de domínio público (National Cancer Institute / SEER Training Modules), legendas traduzidas para PT-BR. -

-
-
- ); -} diff --git a/frontend/src/components/SkinDiagram3D.tsx b/frontend/src/components/SkinDiagram3D.tsx new file mode 100644 index 0000000..3c37374 --- /dev/null +++ b/frontend/src/components/SkinDiagram3D.tsx @@ -0,0 +1,330 @@ +import { useMemo, type ReactNode } from "react"; +import { Canvas } from "@react-three/fiber"; +import { CameraControls } from "@react-three/drei"; +import * as THREE from "three"; +import { useAtlasStore } from "../store/useAtlasStore.js"; +import type { Structure } from "../lib/api.js"; + +// Histórico (ver data-pipeline/seed/build-manifest.mjs): tentamos duas vezes +// um bloco 3D esquemático pro tegumentar e nenhuma ficou boa o bastante, +// então virou diagrama 2D com hotspots. A pedido do usuário, tentamos de +// novo seguindo o MESMO princípio que funcionou pra citologia +// (CellDiagram3D.tsx): em vez de tentar esculpir uma "pele" realista, é um +// bloco de tecido em corte — como a ilustração clássica de livro-texto — +// com cada camada/anexo como uma forma geométrica simples e reconhecível, +// clicável, usando as MESMAS 20 estruturas (nomes/descrições reais) que já +// existiam no diagrama 2D. Ilustrativo, não derivado de dado real. +const HIGHLIGHT = new THREE.Color("#22d3ee"); +const BLACK = new THREE.Color(0x000000); + +// Função comum (NÃO hook) — chamada dentro de .map()/render-prop, onde um +// hook violaria as Regras de Hooks do React (ver mesmo padrão em +// CellDiagram3D.tsx). +function materialProps(baseColor: string, selected: boolean, opacity = 1) { + return { + color: baseColor, + transparent: opacity < 1, + opacity, + emissive: selected ? HIGHLIGHT : BLACK, + emissiveIntensity: selected ? 0.7 : 0, + }; +} + +function Part({ + slug, + bySlug, + onSelect, + children, +}: { + slug: string; + bySlug: Map; + onSelect: (id: string) => void; + children: (isSelected: boolean) => ReactNode; +}) { + const selectedStructureId = useAtlasStore((s) => s.selectedStructureId); + const structure = bySlug.get(slug); + const isSelected = !!structure && structure.id === selectedStructureId; + + return ( + { + e.stopPropagation(); + if (structure) onSelect(structure.id); + }} + > + {children(isSelected)} + + ); +} + +// Bloco de tecido: 2 x 2 (largura x profundidade), cortado ao meio pra +// expor as camadas de lado. Eixo Y é a profundidade da pele (0 = topo). +const BLOCK = 1.0; // meia-largura/profundidade do bloco (de -BLOCK a BLOCK) +const EPIDERME_TOP = 0; +const EPIDERME_BOT = -0.12; +const DERME_BOT = -0.55; +const HIPODERME_BOT = -1.0; + +// Vasos/nervos como tubos ao longo de uma curva — evita usar cylinderGeometry +// reto demais pra estruturas que na pele são ramificadas/sinuosas. +function tube(points: [number, number, number][], radius: number) { + const curve = new THREE.CatmullRomCurve3(points.map(([x, y, z]) => new THREE.Vector3(x, y, z))); + return new THREE.TubeGeometry(curve, 24, radius, 8, false); +} + +// Posições fixas (não aleatórias) dos glóbulos de gordura na hipoderme. +const FAT_CELLS: [number, number, number, number][] = [ + [-0.5, -0.72, -0.4, 0.09], [-0.2, -0.85, -0.55, 0.11], [0.15, -0.7, -0.35, 0.08], + [0.45, -0.88, -0.5, 0.1], [-0.55, -0.9, -0.15, 0.08], [0.1, -0.95, -0.6, 0.09], + [-0.15, -0.65, -0.6, 0.07], [0.5, -0.65, -0.25, 0.08], +]; + +export function SkinDiagram3D({ bySlug: bySlugAll }: { bySlug: Map }) { + const toggleSystem = useAtlasStore((s) => s.toggleSystem); + const selectStructure = useAtlasStore((s) => s.selectStructure); + + const bySlug = useMemo( + () => new Map([...bySlugAll.values()].filter((s) => s.system.slug === "tegumentar").map((s) => [s.slug, s])), + [bySlugAll], + ); + + const vesselTube = useMemo(() => tube([[0.75, -0.35, -0.75], [0.55, -0.5, -0.3], [0.3, -0.6, 0.1], [0.05, -0.65, 0.4]], 0.03), []); + const arteryTube = useMemo(() => tube([[0.85, -1.0, -0.85], [0.7, -0.7, -0.6], [0.55, -0.5, -0.3]], 0.035), []); + const veinTube = useMemo(() => tube([[0.9, -1.0, -0.6], [0.75, -0.68, -0.35], [0.55, -0.48, -0.15]], 0.035), []); + const nerveFiberTube = useMemo(() => tube([[-0.85, -0.95, 0.6], [-0.6, -0.6, 0.3], [-0.3, -0.3, 0.1], [-0.1, -0.15, 0]], 0.02), []); + + if (bySlug.size === 0) return null; + + return ( +
+
+
+

+ Sistema Tegumentar (Pele) — modelo ilustrativo, gire e clique nas estruturas +

+ +
+ +
+ + + + + + + {/* Hipoderme — camada mais funda, com glóbulos de gordura */} + + {(sel) => ( + + + + + )} + + + {/* Derme — camada intermediária */} + + {(sel) => ( + + + + + )} + + + {/* Papilas dérmicas — pequenas ondulações no topo da derme, contra a epiderme */} + + {(sel) => ( + <> + {[-0.6, -0.2, 0.2, 0.6].map((x, i) => ( + + + + + ))} + + )} + + + {/* Epiderme — camada mais fina, no topo, dividida em 3 sub-camadas visíveis */} + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {/* Complexo pilossebáceo — pelo + folículo + papila + eretor + sebácea, + cortado na metade frontal do bloco pra ficar visível por dentro. */} + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {(sel) => ( + + + + + )} + + + {/* Glândula sudorípara — tubo enovelado (coil) na derme profunda/hipoderme, + com ducto reto até a superfície e poro no topo. */} + + {(sel) => ( + + + + + + + )} + + + {(sel) => ( + + + + + )} + + + {/* Ducto reto ligando a glândula sudorípara ao poro — parte visual da + glândula, sem estrutura própria no banco (usa o mesmo slug). */} + null}> + + + + + {/* Corpúsculo de Pacini — receptor em camadas concêntricas ("cebola"), fundo da hipoderme */} + + {(sel) => ( + + {[0.16, 0.12, 0.08, 0.04].map((r, i) => ( + + + + + ))} + + )} + + + {/* Terminação nervosa de tato — pequeno disco na junção derme-epiderme */} + + {(sel) => ( + + + + + )} + + + {/* Fibra nervosa — filamento sinuoso subindo da hipoderme até a derme */} + + {(sel) => ( + + + + )} + + + {/* Vascularização — rede de vasos + ramo arterial + ramo venoso, tubos sinuosos */} + + {(sel) => ( + + + + )} + + + {(sel) => ( + + + + )} + + + {(sel) => ( + + + + )} + + + {/* Glóbulos de gordura na hipoderme — só decorativos (compõem a textura + da camada, sem estrutura própria no banco). */} + {FAT_CELLS.map(([x, y, z, r], i) => ( + null}> + + + + ))} + + + +
+ +

+ Modelo ilustrativo (não derivado de dado real) — bloco de pele em corte, proporções esquemáticas pensadas pra reconhecer cada camada e anexo. +

+
+
+ ); +} diff --git a/frontend/src/data/skinHotspots.ts b/frontend/src/data/skinHotspots.ts deleted file mode 100644 index ee821b2..0000000 --- a/frontend/src/data/skinHotspots.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Posição (em % da largura/altura da imagem) de cada marcador clicável -// sobre frontend/public/tegumentar/skin-cross-section.jpg — medidas -// diretamente sobre a imagem (domínio público, NCI/SEER Training Modules). -// Isso é só apresentação (onde desenhar o ponto em cima da figura); os -// dados da estrutura em si (nome, descrição) vêm do banco, como qualquer -// outra estrutura do atlas — ver data-pipeline/seed/build-manifest.mjs. -export const SKIN_HOTSPOTS: Record = { - "estrato-corneo": { x: 37.9, y: 15.0 }, - "camada-pigmentar": { x: 37.5, y: 18.6 }, - "papila-dermica": { x: 48.3, y: 27.2 }, - epiderme: { x: 75.0, y: 32.2 }, - "terminacao-nervosa-tato": { x: 74.6, y: 38.7 }, - derme: { x: 75.4, y: 45.8 }, - "glandula-sebacea": { x: 69.2, y: 47.3 }, - "foliculo-piloso": { x: 65.8, y: 53.7 }, - "papila-do-pelo": { x: 65.8, y: 58.7 }, - hipoderme: { x: 75.4, y: 65.9 }, - "estrato-germinativo": { x: 37.9, y: 33.7 }, - "musculo-eretor-do-pelo": { x: 42.1, y: 43.0 }, - "fibra-nervosa": { x: 38.8, y: 49.4 }, - "vasos-sanguineos-linfaticos": { x: 35.0, y: 78.1 }, - "glandula-sudoripara": { x: 47.1, y: 80.2 }, - "corpusculo-de-pacini": { x: 51.3, y: 71.6 }, - arteria: { x: 70.4, y: 78.1 }, - veia: { x: 75.0, y: 80.9 }, - pelo: { x: 65.8, y: 9.3 }, - "poro-sudoriparo": { x: 69.2, y: 27.9 }, -}; diff --git a/frontend/src/routes/AtlasPage.tsx b/frontend/src/routes/AtlasPage.tsx index 3282351..afaffee 100644 --- a/frontend/src/routes/AtlasPage.tsx +++ b/frontend/src/routes/AtlasPage.tsx @@ -7,7 +7,7 @@ import { ClippingControls } from "../components/ClippingControls.js"; import { SearchNav } from "../components/SearchNav.js"; import { StructureInfoPanel } from "../components/StructureInfoPanel.js"; import { QuickRegionNav } from "../components/QuickRegionNav.js"; -import { SkinDiagram } from "../components/SkinDiagram.js"; +import { SkinDiagram3D } from "../components/SkinDiagram3D.js"; import { MicroscopyDiagram } from "../components/MicroscopyDiagram.js"; import { CellDiagram3D } from "../components/CellDiagram3D.js"; import { trackVisit } from "../lib/analytics.js"; @@ -73,7 +73,7 @@ export default function AtlasPage() {
- + diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo new file mode 100644 index 0000000..bc6168c --- /dev/null +++ b/frontend/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/components/celldiagram3d.tsx","./src/components/clippingcontrols.tsx","./src/components/cookieconsent.tsx","./src/components/feedbackwidget.tsx","./src/components/layertoggle.tsx","./src/components/layout.tsx","./src/components/microscopydiagram.tsx","./src/components/onlinecounter.tsx","./src/components/quickregionnav.tsx","./src/components/searchnav.tsx","./src/components/skindiagram3d.tsx","./src/components/structureinfopanel.tsx","./src/components/viewer/exammarkers.tsx","./src/components/viewer/mannequin.tsx","./src/components/viewer/scene.tsx","./src/components/viewer/systemmodel.tsx","./src/data/microscopycredits.ts","./src/data/microscopyhotspots.ts","./src/data/physicalexam.ts","./src/hooks/usestructures.ts","./src/hooks/usesystemstructures.ts","./src/lib/analytics.ts","./src/lib/api.ts","./src/routes/adminstatspage.tsx","./src/routes/atlaspage.tsx","./src/routes/physicalexampage.tsx","./src/routes/planespage.tsx","./src/routes/quizpage.tsx","./src/store/useatlasstore.ts"],"version":"5.9.3"} \ No newline at end of file