diff --git a/web/package-lock.json b/web/package-lock.json
index b4919ba..9fc4e32 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1174,6 +1174,16 @@
"to-fast-properties": "^2.0.0"
}
},
+ "@chevrotain/types": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-9.1.0.tgz",
+ "integrity": "sha512-3hbCD1CThkv9gnaSIPq0GUXwKni68e0ph6jIHwCvcWiQ4JB2xi8bFxBain0RF04qHUWuDjgnZLj4rLgimuGO+g=="
+ },
+ "@chevrotain/utils": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-9.1.0.tgz",
+ "integrity": "sha512-llLJZ8OAlZrjGlBvamm6Zdo/HmGAcCLq5gx7cSwUX8No+n/8ip+oaC4x33IdZIif8+Rh5dQUIZXmfbSghiOmNQ=="
+ },
"@discoveryjs/json-ext": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
@@ -1242,6 +1252,78 @@
"@babel/runtime": "^7.6.2"
}
},
+ "@react-spring/animated": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.3.1.tgz",
+ "integrity": "sha512-23YaERZ++BwZ8F8PxPFqrpOwp/JZun1Pj6aHZtPAU42j5LycBRasT9XMw7Eyr7zNFhT+rl3R3wFfd4WX6Ax+UA==",
+ "requires": {
+ "@react-spring/shared": "~9.3.0",
+ "@react-spring/types": "~9.3.0"
+ }
+ },
+ "@react-spring/core": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.3.1.tgz",
+ "integrity": "sha512-8rmfmEHLHGtF1CUiXRn64YJqsXNxv2cGX8oNnBnsuoE33c48Zc34t2VIMB4R9q5zwIUCvDBGfiEenA8ZAPxqOQ==",
+ "requires": {
+ "@react-spring/animated": "~9.3.0",
+ "@react-spring/shared": "~9.3.0",
+ "@react-spring/types": "~9.3.0"
+ }
+ },
+ "@react-spring/rafz": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.3.1.tgz",
+ "integrity": "sha512-fEBMCarGVl+/2kdO+g6Zig4F+3ymwmcGN8S71gb1c7Cbbxb87kviPz8EhshfIHoiLeJPGlqwcuGbxNmZbBamvA=="
+ },
+ "@react-spring/shared": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.3.1.tgz",
+ "integrity": "sha512-jhPpxzURGo6Nty90ex1lkxmZae7w/VAbnGmb/nXcYoZwSoNR+W2aAd00iXsh2ZGz6MgoJOsc495JeG3uC7Am8A==",
+ "requires": {
+ "@react-spring/rafz": "~9.3.0",
+ "@react-spring/types": "~9.3.0"
+ }
+ },
+ "@react-spring/three": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.3.1.tgz",
+ "integrity": "sha512-40iRIX2DrY+a81hIliOog6TMg/ZAtHGeZr95r0vKAsl+iX1g9Hs8XCS4wTeQIUgydZpbpShk/JL6mkcstEfBdw==",
+ "requires": {
+ "@react-spring/animated": "~9.3.0",
+ "@react-spring/core": "~9.3.0",
+ "@react-spring/shared": "~9.3.0",
+ "@react-spring/types": "~9.3.0"
+ }
+ },
+ "@react-spring/types": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.3.1.tgz",
+ "integrity": "sha512-W/YMJMX35XgGGzX0gKORBTwnvQ+1loDOFN3XlZkW5fgpEY+7VkRUpPyqPWXQr3n6lHrsLmHIGdpznqZi54ACTQ=="
+ },
+ "@react-three/drei": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-8.3.0.tgz",
+ "integrity": "sha512-UFdWXUHCmucH2AGOIg/1/f46XF7TL7spIIiyqWId9Mp4Gz84BZkIQrHGU5vcMd7Ktmo3RWRTCTsR5MFOGK/qCw==",
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "@react-spring/three": "^9.3.1",
+ "@use-gesture/react": "^10.2.0",
+ "detect-gpu": "^3.1.28",
+ "glsl-noise": "^0.0.0",
+ "lodash.omit": "^4.5.0",
+ "lodash.pick": "^4.4.0",
+ "react-composer": "^5.0.2",
+ "react-merge-refs": "^1.1.0",
+ "stats.js": "^0.17.0",
+ "three-mesh-bvh": "^0.5.2",
+ "three-stdlib": "^2.6.1",
+ "troika-three-text": "^0.44.0",
+ "use-asset": "^1.0.4",
+ "utility-types": "^3.10.0",
+ "zustand": "^3.5.13"
+ }
+ },
"@react-three/fiber": {
"version": "7.0.24",
"resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-7.0.24.tgz",
@@ -1536,6 +1618,19 @@
"resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI="
},
+ "@use-gesture/core": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.4.tgz",
+ "integrity": "sha512-fk1LjCBj43BKb8NE05qkdtPOR0ngA7PwgvEqfFap/h+s7QHi+JTv4/mtDQ4wI9zzem+Ry5EKrHS/cVdBehI4wA=="
+ },
+ "@use-gesture/react": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.4.tgz",
+ "integrity": "sha512-CbqyRj+qNbRBOGmS8OWtaOa29fxEr7bKTYHvPuMQ1wsgQDh2/DqQxbp7cFxAg6WZ8oZjppDj/EkWnw22WpIIWQ==",
+ "requires": {
+ "@use-gesture/core": "10.2.4"
+ }
+ },
"@webassemblyjs/ast": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -1682,6 +1777,11 @@
"@xtuc/long": "4.2.2"
}
},
+ "@webgpu/glslang": {
+ "version": "0.0.15",
+ "resolved": "https://registry.npmjs.org/@webgpu/glslang/-/glslang-0.0.15.tgz",
+ "integrity": "sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q=="
+ },
"@webpack-cli/configtest": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz",
@@ -1703,6 +1803,11 @@
"integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==",
"dev": true
},
+ "@webxr-input-profiles/motion-controllers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@webxr-input-profiles/motion-controllers/-/motion-controllers-1.0.0.tgz",
+ "integrity": "sha512-Ppxde+G1/QZbU8ShCQg+eq5VtlcL/FPkerF1dkDOLlIml0LJD1tFqnCZYR0SrHzYleIQ2siRnOx7xbFLaCpExQ=="
+ },
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -2130,6 +2235,14 @@
"integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
"dev": true
},
+ "bidi-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.2.tgz",
+ "integrity": "sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw==",
+ "requires": {
+ "require-from-string": "^2.0.2"
+ }
+ },
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -2491,6 +2604,16 @@
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
"dev": true
},
+ "chevrotain": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-9.1.0.tgz",
+ "integrity": "sha512-A86/55so63HCfu0dgGg3j9u8uuuBOrSqly1OhBZxRu2x6sAKILLzfVjbGMw45kgier6lz45EzcjjWtTRgoT84Q==",
+ "requires": {
+ "@chevrotain/types": "^9.1.0",
+ "@chevrotain/utils": "^9.1.0",
+ "regexp-to-ast": "0.5.0"
+ }
+ },
"chokidar": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
@@ -3273,6 +3396,14 @@
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
"dev": true
},
+ "detect-gpu": {
+ "version": "3.1.30",
+ "resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-3.1.30.tgz",
+ "integrity": "sha512-WUOk8imHH56AWVt6iHry69qbNEFsPjtS6qsinurfxeI3bVYQZzFk8zECTaodLxfeRad7QspDjjkJWkp5vBo8WA==",
+ "requires": {
+ "webgl-constants": "^1.1.1"
+ }
+ },
"detect-node": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
@@ -3414,6 +3545,11 @@
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
"dev": true
},
+ "draco3d": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.0.tgz",
+ "integrity": "sha512-8ESjH7o5xju1nfSvcS2A9vIbwSRQ3yYY0Yv7SFhNszsq4FlN4LGZuxNc3YfAPcg0AddaK0dE5AES3w1JoGeViA=="
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -3716,6 +3852,11 @@
"websocket-driver": ">=0.5.1"
}
},
+ "fflate": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz",
+ "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="
+ },
"figures": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
@@ -4002,6 +4143,11 @@
"slash": "^3.0.0"
}
},
+ "glsl-noise": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz",
+ "integrity": "sha1-NndF86MzgsDu7Ey1S36Zz8HXZws="
+ },
"graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
@@ -4814,6 +4960,11 @@
"integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
"dev": true
},
+ "ktx-parse": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.2.1.tgz",
+ "integrity": "sha512-I+2mYJ6nQdWGmOlE3m9d9idKfhn2MCw04zaVpgtzyuc19uQ8OwRmmYLf/TP5ueVFfYmHbdpM8mPmId2X5PBLEw=="
+ },
"laravel-mix": {
"version": "6.0.29",
"resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.29.tgz",
@@ -5064,6 +5215,16 @@
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
+ "lodash.omit": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+ "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA="
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
+ },
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -5327,6 +5488,11 @@
"minimist": "^1.2.5"
}
},
+ "mmd-parser": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mmd-parser/-/mmd-parser-1.0.4.tgz",
+ "integrity": "sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg=="
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -5568,6 +5734,15 @@
"is-wsl": "^2.2.0"
}
},
+ "opentype.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.4.tgz",
+ "integrity": "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==",
+ "requires": {
+ "string.prototype.codepointat": "^0.2.1",
+ "tiny-inflate": "^1.0.3"
+ }
+ },
"os-browserify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
@@ -6346,6 +6521,11 @@
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
},
+ "potpack": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
+ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ=="
+ },
"pretty-time": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz",
@@ -6540,6 +6720,14 @@
"warning": "^4.0.3"
}
},
+ "react-composer": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/react-composer/-/react-composer-5.0.2.tgz",
+ "integrity": "sha512-6E2UNjUF0e7KRY+/faU2Hv7D9zagXnYdTfSSCGdYfuds6mRnVpN19vrbHXShaQzJNVXL4VOUb8qq6DvClDIG1g==",
+ "requires": {
+ "prop-types": "^15.6.0"
+ }
+ },
"react-dom": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
@@ -6738,6 +6926,11 @@
"integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
"dev": true
},
+ "regexp-to-ast": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz",
+ "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="
+ },
"regexp.prototype.flags": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
@@ -6803,6 +6996,11 @@
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
+ "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=="
+ },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -7318,6 +7516,11 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
"dev": true
},
+ "stats.js": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz",
+ "integrity": "sha1-scPcRtlEmLV4t/05hbgaznExzH0="
+ },
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -7372,6 +7575,11 @@
"strip-ansi": "^6.0.0"
}
},
+ "string.prototype.codepointat": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
+ "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
+ },
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -7572,6 +7780,29 @@
"resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz",
"integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ=="
},
+ "three-mesh-bvh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.5.2.tgz",
+ "integrity": "sha512-DAKWujkp8xpSBqGiIsZbZC1utxAbYBg0SShQk9LdOG/xWWl1/OLK76eXDGfov47trl3L7PUTHi0hhRvZdVro1Q=="
+ },
+ "three-stdlib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.6.1.tgz",
+ "integrity": "sha512-6GulvDfTnJ8KmJmhwrKnLWAepRysb+9mH6fiDGQnZVai9O1Pg/Gr8pYKOX3+GD9VVxyGqhsEbApcsRmRJaIsCQ==",
+ "requires": {
+ "@babel/runtime": "^7.14.6",
+ "@webgpu/glslang": "^0.0.15",
+ "@webxr-input-profiles/motion-controllers": "^1.0.0",
+ "chevrotain": "^9.0.2",
+ "draco3d": "^1.4.1",
+ "fflate": "^0.6.9",
+ "ktx-parse": "^0.2.1",
+ "mmd-parser": "^1.0.4",
+ "opentype.js": "^1.3.3",
+ "potpack": "^1.0.1",
+ "zstddec": "^0.0.2"
+ }
+ },
"thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -7593,6 +7824,11 @@
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
"dev": true
},
+ "tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
+ },
"tiny-invariant": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
@@ -7631,6 +7867,26 @@
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"dev": true
},
+ "troika-three-text": {
+ "version": "0.44.0",
+ "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.44.0.tgz",
+ "integrity": "sha512-YwqXczjXQ4yq2a2ufO9icOIjeJutE/ODS8PHmmt/WAzVFqoiqeemclp/Ewiqm0+sdI1KnWRm6lj8df/zmhU3Og==",
+ "requires": {
+ "bidi-js": "^1.0.2",
+ "troika-three-utils": "^0.44.0",
+ "troika-worker-utils": "^0.44.0"
+ }
+ },
+ "troika-three-utils": {
+ "version": "0.44.0",
+ "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.44.0.tgz",
+ "integrity": "sha512-gaEpqrlWnkrVU5UgUx+YZTC8NrhsA2Tt6zEIbn3WNuom7pLtrgjuHpAM72gif7DoYdOWEyFco3Zb6rpJh9Fodg=="
+ },
+ "troika-worker-utils": {
+ "version": "0.44.0",
+ "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.44.0.tgz",
+ "integrity": "sha512-/ETcH1rUoO9hVBL6Ifea2WOoGPw90ncrk8b8SJKTLtzcQvEWRIZ4eUxlVCtU93fLechCV+DWPs1y8+Bjh1WaJg=="
+ },
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -7868,6 +8124,11 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "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=="
+ },
"webpack": {
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.52.0.tgz",
@@ -8223,6 +8484,11 @@
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
},
+ "zstddec": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.0.2.tgz",
+ "integrity": "sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA=="
+ },
"zustand": {
"version": "3.6.7",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.6.7.tgz",
diff --git a/web/package.json b/web/package.json
index 9929f5a..a5ea7d0 100644
--- a/web/package.json
+++ b/web/package.json
@@ -29,6 +29,7 @@
"webpack-subresource-integrity": "^5.0.0"
},
"dependencies": {
+ "@react-three/drei": "^8.3.0",
"@react-three/fiber": "^7.0.24",
"@steveeeie/react-page-transition": "^1.2.1",
"laravel-mix-react-css-modules": "^2.0.0",
diff --git a/web/resources/js/pages/Maintenance.js b/web/resources/js/pages/Maintenance.js
index 5ebb995..5448158 100644
--- a/web/resources/js/pages/Maintenance.js
+++ b/web/resources/js/pages/Maintenance.js
@@ -4,44 +4,17 @@
import React, { useRef } from 'react';
import { Canvas, useFrame } from '@react-three/fiber';
+import { Instances, Instance, PerspectiveCamera } from '@react-three/drei'
import SetTitle from "../Helpers/Title.js";
+const randomVector = (r) => [r / 2 - Math.random() * r, r / 2 - Math.random() * r, r / 2 - Math.random() * r];
+const randomEuler = () => [Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI];
+const randomData = Array.from({ length: 500 }, (r = 100) => ({ random: Math.random(), position: randomVector(r), rotation: randomEuler() }));
+
let Buttons = [];
let ButtonsAlreadyTemplated = false;
-function Box(props) {
- const ref = useRef();
-
- const distanceFromCamera = Math.random() * 30
-
- const rotX = (Math.random() * 200 - 100)/300
- const rotZ = (Math.random() * 200 - 100)/300
-
- useFrame((state, delta) => {
- ref.current.position.y -= 0.6 * delta
- ref.current.rotation.x += rotX * delta
- ref.current.rotation.z += rotZ * delta
-
- if(ref.current.position.y < -30)
- {
- ref.current.position.y = 30;
- }
- });
-
- return (
-