diff --git a/craco.config.js b/craco.config.js index 67eadbf9..b22e710d 100644 --- a/craco.config.js +++ b/craco.config.js @@ -130,6 +130,19 @@ module.exports = { } } + /* Viv / Deck.gl / Luma ship modern JS; transpile for CRA 5 / webpack 5. */ + config.module.rules.push({ + test: /\.m?js$/, + include: /node_modules[\\/](@deck\.gl|@luma\.gl|@math\.gl|@probe\.gl|@vivjs)[\\/]/, + use: { + loader: require.resolve('babel-loader'), + options: { + presets: [require.resolve('babel-preset-react-app/dependencies')], + cacheDirectory: true + } + } + }) + return config } }, diff --git a/package.json b/package.json index 8ba01350..c9ac05d1 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,20 @@ ] }, "dependencies": { + "@deck.gl/core": "9.1.15", + "@deck.gl/extensions": "9.1.15", + "@deck.gl/geo-layers": "9.1.15", + "@deck.gl/layers": "9.1.15", + "@deck.gl/mesh-layers": "9.1.15", + "@deck.gl/react": "9.1.15", + "@deck.gl/widgets": "9.1.15", + "@vivjs/layers": "^0.20.0", + "@vivjs/loaders": "^0.20.0", + "@luma.gl/constants": "~9.1.10", + "@luma.gl/core": "~9.1.10", + "@luma.gl/engine": "~9.1.10", + "@luma.gl/shadertools": "~9.1.10", + "@luma.gl/webgl": "~9.1.10", "antd": "^4.22.8", "classnames": "^2.2.6", "dcmjs": "^0.35.0", @@ -83,5 +97,21 @@ "react-test-renderer": "^18.2.0", "sonarqube-scanner": "^4.3.0", "typescript": "^4.7.4" + }, + "overrides": { + "@types/minimatch": "5.1.2", + "@deck.gl/core": "9.1.15", + "@deck.gl/extensions": "9.1.15", + "@deck.gl/geo-layers": "9.1.15", + "@deck.gl/layers": "9.1.15", + "@deck.gl/mesh-layers": "9.1.15", + "@deck.gl/react": "9.1.15", + "@deck.gl/widgets": "9.1.15", + "nth-check": "2.0.1", + "wrap-ansi": "7.0.0", + "make-dir": "3.1.0", + "express": "4.21.0", + "rollup": "3.29.5", + "semver": "7.5.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50440e40..8697acac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,48 @@ importers: .: dependencies: + '@deck.gl/core': + specifier: 9.1.15 + version: 9.1.15 + '@deck.gl/extensions': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/geo-layers': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15)(@deck.gl/extensions@9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/mesh-layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/layers': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/mesh-layers': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/react': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15)(@deck.gl/widgets@9.1.15(@deck.gl/core@9.1.15))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@deck.gl/widgets': + specifier: 9.1.15 + version: 9.1.15(@deck.gl/core@9.1.15) + '@luma.gl/constants': + specifier: ~9.1.10 + version: 9.1.10 + '@luma.gl/core': + specifier: ~9.1.10 + version: 9.1.10 + '@luma.gl/engine': + specifier: ~9.1.10 + version: 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': + specifier: ~9.1.10 + version: 9.1.10(@luma.gl/core@9.1.10) + '@luma.gl/webgl': + specifier: ~9.1.10 + version: 9.1.10(@luma.gl/core@9.1.10) + '@vivjs/layers': + specifier: ^0.20.0 + version: 0.20.1(02606c62705f483b8e7762d60076ec24) + '@vivjs/loaders': + specifier: ^0.20.0 + version: 0.20.1 antd: specifier: ^4.22.8 version: 4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -977,20 +1019,20 @@ packages: cpu: [x64] os: [win32] - '@cornerstonejs/codec-charls@1.2.3': - resolution: {integrity: sha512-qKUe6DN0dnGzhhfZLYhH9UZacMcudjxcaLXCrpxJImT/M/PQvZCT2rllu6VGJbWKJWG+dMVV2zmmleZcdJ7/cA==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-charls/-/codec-charls-1.2.3.tgz} + '@cornerstonejs/codec-charls@1.2.5': + resolution: {integrity: sha512-BoENE2cXfzQ2RMxPfMMJxyv7E78iErTCB8b8lod/qv3dsYfCmSOUQKiRsuOZJM24JrjCFnyzbkxhAnF8gAKQnQ==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-charls/-/codec-charls-1.2.5.tgz} engines: {node: '>=0.14'} - '@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.2': - resolution: {integrity: sha512-aAUMK2958YNpOb/7G6e2/aG7hExTiFTASlMt/v90XA0pRHdWiNg5ny4S5SAju0FbIw4zcMnR0qfY+yW3VG2ivg==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-libjpeg-turbo-8bit/-/codec-libjpeg-turbo-8bit-1.2.2.tgz} + '@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.4': + resolution: {integrity: sha512-k5e2/EjE9gV7dkg2x3CzId6mp6P7tTya/AmnLzbN3fZTW6skTMrOTJfqowgGQBzX7styLdcsnjlqwEVqeqaaHQ==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-libjpeg-turbo-8bit/-/codec-libjpeg-turbo-8bit-1.2.4.tgz} engines: {node: '>=0.14'} - '@cornerstonejs/codec-openjpeg@1.3.0': - resolution: {integrity: sha512-hP8WAZ63AcaDYmHbBVTY04x424AglXsRHrI6VBdW4eTiJ76f0heWrEodT9Sb3sNwazzYuyMOIZNndJPeVSeHcw==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-openjpeg/-/codec-openjpeg-1.3.0.tgz} + '@cornerstonejs/codec-openjpeg@1.3.2': + resolution: {integrity: sha512-IsvhGRZ/3LzoNQFyAsKKzPw/S769b9JrKhpufU8uEEalOBn+D1OLetzZ48pvpbwxR4J7ZFrnK0FBIYtl8Hdt9Q==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-openjpeg/-/codec-openjpeg-1.3.2.tgz} engines: {node: '>=0.14'} - '@cornerstonejs/codec-openjph@2.4.7': - resolution: {integrity: sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.7.tgz} + '@cornerstonejs/codec-openjph@2.4.9': + resolution: {integrity: sha512-iUGvF8r4SMHFrHGjwhNsTlHDPm+fIcGw3fUYm4vzhsf2J6VR9DqHtynXwUVOCBMSG9YTyWkcsD4db++0kMffMw==, tarball: https://registry.npmjs.org/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.9.tgz} engines: {node: '>=0.14'} '@craco/craco@6.4.5': @@ -1101,6 +1143,55 @@ packages: resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} + '@deck.gl/core@9.1.15': + resolution: {integrity: sha512-2Tx2aKNskDS8SZ6EB7V53exo3SVntCJJGjrAnz3KhNj4fA4BVqOH++LSpjCFhuG9m4WOWDSDq9s7w4DQnTiT+Q==} + + '@deck.gl/extensions@9.1.15': + resolution: {integrity: sha512-pH3SArgiEibHwrYwbKTknUurgpUndUFa+O97in+zRVF6KFGNZSLm1AePERh1gQjcpuQ+GwrxJ/ijmVmuH2zOow==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@luma.gl/core': ~9.1.9 + '@luma.gl/engine': ~9.1.9 + + '@deck.gl/geo-layers@9.1.15': + resolution: {integrity: sha512-dehvciiUyCnklCfY5v0JgGAgJfbQ0Rn/ml55Maqdw5c5K6fIQzi4xMglu1NdgO3L+MOutWWA1eFD9WLT2X0mkA==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@deck.gl/extensions': ^9.1.0 + '@deck.gl/layers': ^9.1.0 + '@deck.gl/mesh-layers': ^9.1.0 + '@loaders.gl/core': ^4.2.0 + '@luma.gl/core': ~9.1.9 + '@luma.gl/engine': ~9.1.9 + + '@deck.gl/layers@9.1.15': + resolution: {integrity: sha512-4C8LaCXnd/cHGMGwuLu6YUqcf/4dyz82Im+C0IrY56OgJnVOKf2f75zwAKa1Uekq4XEsyPgqg9k5MWEohBzGYw==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@loaders.gl/core': ^4.2.0 + '@luma.gl/core': ~9.1.9 + '@luma.gl/engine': ~9.1.9 + + '@deck.gl/mesh-layers@9.1.15': + resolution: {integrity: sha512-/GuXxa2Y5Bv/6DSOA6sgPalCZAPN137cTE5SDbOH88yKAY0ggn5FmgcimhGNRcR28tGy+yOCy/PbtIDoba6dpw==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@luma.gl/core': ~9.1.9 + '@luma.gl/engine': ~9.1.9 + + '@deck.gl/react@9.1.15': + resolution: {integrity: sha512-QJuCWyX3mBzW/rzFs0Bq/53rDEMMFbP1wDBTpnAeDDda4QLJK3bLReWLKzM/p0Ewoil0re/OHAWnSf1w9ePhDA==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@deck.gl/widgets': ^9.1.0 + react: '>=16.3.0' + react-dom: '>=16.3.0' + + '@deck.gl/widgets@9.1.15': + resolution: {integrity: sha512-cSscNelsIlgjNrfVCmgXiXcYQbvJxmFv8iedpUPxTYLrW0hQq/ftZtLVZ8sWsNkn/EM8/KKysO5IXeEVj3iGbQ==} + peerDependencies: + '@deck.gl/core': ^9.1.0 + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1243,9 +1334,173 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + '@loaders.gl/3d-tiles@4.4.5': + resolution: {integrity: sha512-+W9ncpVw5+OX9pjhZFmpbK+pBqT1XNCAaUbUY/qItFlK1PcTSQdy34NVvAziRR7dFxJ0VmWPEu5Q75LcNCCX2A==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/compression@4.4.5': + resolution: {integrity: sha512-vsuvdIyn3xLqiJxXhK970ENO3T8bLPtmM0jka8/y0zVAEover6q3Vd8gVsaqgWGfc28cWx5RYI4zKhJzRcTHNg==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/core@4.4.5': + resolution: {integrity: sha512-hlpE200MinDAyU0kMjEM4yk+0TDxiB9nT+GcwOCrXc7buE0e0YwTn+Ynz2Q85dwDKvJZw3kNHTTBGvQwq9533A==} + + '@loaders.gl/crypto@4.4.5': + resolution: {integrity: sha512-P0n43KWN7GGsWF7+E094Nj1mwngN6ypfgts5tu2hSEroUS5dB01TgDa0Pr3sVeZ672jFSKKRgRuFDazRcITOFA==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/draco@4.4.5': + resolution: {integrity: sha512-J4DuzoUQNJhjxmErCArF5J1PC0LCMbhPkY/YdkTaDmUwxSQdh1M/VWg85AXKLAxUiwGkhmC8AUUaSyPxTpCUrQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/geoarrow@4.4.5': + resolution: {integrity: sha512-uUWp+5nZxQe6Sv/o36R6jcmCCNhguY0VhjougyMoH6FWqF6iJHrOnwx5UdEtvkw/zV9mHabs05Hv91dBvhfljQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/gis@4.4.5': + resolution: {integrity: sha512-r3klnZ6jjzaEZlUSCmGufPbH1pQpM5PCcGS70zLlGIFbpJPo80gaXDtZDVOSQvpWmqY8u8d7/6moAsogVoymzA==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/gltf@4.4.5': + resolution: {integrity: sha512-YIhgeoDYdRbfXQS+cpRWYbiRiiaajF5UCqpEoFpDEpOpcW6pKC2sfp5vZ1LiUIXu2CVv/HFJaDeLuQjeX5uVlQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/images@4.4.5': + resolution: {integrity: sha512-7/odHt5n67OVLHelTm1euNNw5gCwycezQI7Wg3NBUg7q3bHWmTPY++Z4uz2egiuzJNY3GLegfg8AI1c3fD64Jw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/loader-utils@4.4.5': + resolution: {integrity: sha512-c4h2RUMEru+hbfvgZEIy5cLQKyQka2TPQZW/2Wy+yIPr3FU7RKwfp+vLwIfir6Xkdn2zniWyWretZwE02aY/Ug==} + + '@loaders.gl/math@4.4.5': + resolution: {integrity: sha512-Az7rMw7oMNMzi1bXgPaabdkpPtk0safkWBr+I+dHjZHzny1RK5mFF4VjRkalw++DZBKbL0TskMw/OcdiRaL/Bw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/mvt@4.4.5': + resolution: {integrity: sha512-3c4ojvF6+Fb0XjX2xGeRKIUAshaNgBfi0VkszooFNCNvrVv7faGcn69jI9wh1Pjf2ge1PtsZnAoOuLQXLLzWSQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/schema-utils@4.4.5': + resolution: {integrity: sha512-vi6AROLWvoLIN609tVmchwotTaHK5rHv8SWjoVUWLhPCXmIc9npz0rCl7NJScCgr7UjYifZG1rWOnrAxaYTlyA==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/schema@4.4.5': + resolution: {integrity: sha512-q2XNquegw+hX+ZEshacKYL/+FKBUIS5FHA+2Ft3JWmcNiR6umGnYCdXQhDcFCqAm8Ks87fMCV+z/zTloxaIZgQ==} + + '@loaders.gl/terrain@4.4.5': + resolution: {integrity: sha512-H8BED2/0I1wrviE8mBr1ny/01nK1vqctMHBYSoAHS36JJm5m+Tt2JfKXIgnNY2TU3Ulfr9L9x1VfH9a/z9V1jw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/textures@4.4.5': + resolution: {integrity: sha512-zB9xMIKiU3tQN6q5/A6yaXw/DbodA+bqMDTVu7pzk4lw4zcBwWiGtD5LV0QjgtlTj2ZnwV8cCd1rYk9bwiX2Bw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/tiles@4.4.5': + resolution: {integrity: sha512-XO9NeUsukjj+90YN1GEJWOgt7rI5GIv20dCpPIYdgj299aa8iYB5DWcm1YGcOuNjGqdQNZXIgPSv6ocdN/X7Mw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/wms@4.4.5': + resolution: {integrity: sha512-0+nXHY017bAl3tELIefUa0FB3ptUpEVxtQD1imNqyUtRr1vrzhyc+kbBcc3uRIcDj/F6iW9pq2V6lBwcIGZXFw==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/worker-utils@4.4.5': + resolution: {integrity: sha512-ZQDoM6f/HpZ3Lzj6vjtPHXSvi+cUK0QG7yJz+MKWAokmeWa98WMZwswS8zkn/qNkY95rLcxh66N4Sl96+7hqAQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/xml@4.4.5': + resolution: {integrity: sha512-UsN7T9e67Sa1Q6Ra/u+j2mtaT9GTcFhH8iz8ba5QFU90YrRn3dwBEwq9SVxQiJrfC6dE4jFdMannW5mzeV5owg==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@loaders.gl/zip@4.4.5': + resolution: {integrity: sha512-vXlwnJ2QCCtXc8Pf55YJUNTJ0sjtjbUr34StDY91GPmoutdAXovqikuwzehrAlMDE69ldbnMtVATmNe4XeWGXQ==} + peerDependencies: + '@loaders.gl/core': ~4.4.0 + + '@luma.gl/constants@9.1.10': + resolution: {integrity: sha512-O4Nx8UbWmrHHZ7ihKB8WiscX1cz05l1KvKorYTgq+xeXwz2Beh3MkXBMnA46uuyEtimN945OEdYshZnbh80jyw==} + + '@luma.gl/core@9.1.10': + resolution: {integrity: sha512-izvT0DDjlVpchpTokXMNYJeyhgTdGuf21LHEpVa/3EtGFDAJESb3eH99Q3KfzgbqqIAwrTy+25TSStV/3r2svA==} + + '@luma.gl/engine@9.1.10': + resolution: {integrity: sha512-Og1cFpDGq8IUDI9Oaytnm08sdeitxcStsFrjiE4AejZQgx6OdHo+tE33M3WLAUzp6oQYQwl6r2USOhH4BuEiRg==} + peerDependencies: + '@luma.gl/core': ~9.1.0 + '@luma.gl/shadertools': ~9.1.0 + + '@luma.gl/gltf@9.1.10': + resolution: {integrity: sha512-xiLHbusWaPlPzpjs4G+y9/SudFKxv98nY9aSds19M0krISLARjisEVe2wr7HUeVYvNFcIsh/wX93Z8iYmG+ZVg==} + peerDependencies: + '@luma.gl/core': ~9.1.0 + '@luma.gl/engine': ~9.1.0 + '@luma.gl/shadertools': ~9.1.0 + + '@luma.gl/shadertools@9.1.10': + resolution: {integrity: sha512-ET2Vs9Vws5zkjSC07RWBVEFQ6EDP5yTiEZBnvblkb5y4wgjLHAgM5NBJw51Xb5BRBH0aC4piwP+2SnDA29dOlg==} + peerDependencies: + '@luma.gl/core': ~9.1.0 + + '@luma.gl/webgl@9.1.10': + resolution: {integrity: sha512-mwIsNEzxt6GW/fnCqBgJAorzFPi5c//3ZukKFHso+F1mvtHhTE4NQfA/pEvj4HBg/IdYkMvkoQsMrSn5+jko3A==} + peerDependencies: + '@luma.gl/core': ~9.1.0 + + '@mapbox/martini@0.2.0': + resolution: {integrity: sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==} + + '@mapbox/point-geometry@0.1.0': + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + + '@mapbox/tiny-sdf@2.2.0': + resolution: {integrity: sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==} + + '@mapbox/vector-tile@1.3.1': + resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + + '@math.gl/core@4.1.0': + resolution: {integrity: sha512-FrdHBCVG3QdrworwrUSzXIaK+/9OCRLscxI2OUy6sLOHyHgBMyfnEGs99/m3KNvs+95BsnQLWklVfpKfQzfwKA==} + + '@math.gl/culling@4.1.0': + resolution: {integrity: sha512-jFmjFEACnP9kVl8qhZxFNhCyd47qPfSVmSvvjR0/dIL6R9oD5zhR1ub2gN16eKDO/UM7JF9OHKU3EBIfeR7gtg==} + + '@math.gl/geospatial@4.1.0': + resolution: {integrity: sha512-BzsUhpVvnmleyYF6qdqJIip6FtIzJmnWuPTGhlBuPzh7VBHLonCFSPtQpbkRuoyAlbSyaGXcVt6p6lm9eK2vtg==} + + '@math.gl/polygon@4.1.0': + resolution: {integrity: sha512-YA/9PzaCRHbIP5/0E9uTYrqe+jsYTQoqoDWhf6/b0Ixz8bPZBaGDEafLg3z7ffBomZLacUty9U3TlPjqMtzPjA==} + + '@math.gl/sun@4.1.0': + resolution: {integrity: sha512-i3q6OCBLSZ5wgZVhXg+X7gsjY/TUtuFW/2KBiq/U1ypLso3S4sEykoU/MGjxUv1xiiGtr+v8TeMbO1OBIh/HmA==} + + '@math.gl/types@4.1.0': + resolution: {integrity: sha512-clYZdHcmRvMzVK5fjeDkQlHUzXQSNdZ7s4xOqC3nJPgz4C/TZkUecTo9YS4PruZqtDda/ag4erndP0MIn40dGA==} + + '@math.gl/web-mercator@4.1.0': + resolution: {integrity: sha512-HZo3vO5GCMkXJThxRJ5/QYUYRr3XumfT8CzNNCwoJfinxy5NtKUd7dusNTXn7yJ40UoB8FMIwkVwNlqaiRZZAw==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1287,6 +1542,15 @@ packages: webpack-plugin-serve: optional: true + '@probe.gl/env@4.1.1': + resolution: {integrity: sha512-+68seNDMVsEegRB47pFA/Ws1Fjy8agcFYXxzorKToyPcD6zd+gZ5uhwoLd7TzsSw6Ydns//2KEszWn+EnNHTbA==} + + '@probe.gl/log@4.1.1': + resolution: {integrity: sha512-kcZs9BT44pL7hS1OkRGKYRXI/SN9KejUlPD+BY40DguRLzdC5tLG/28WGMyfKdn/51GT4a0p+0P8xvDn1Ez+Kg==} + + '@probe.gl/stats@4.1.1': + resolution: {integrity: sha512-4VpAyMHOqydSvPlEyHwXaE+AkIdR03nX+Qhlxsk2D/IW4OVmDZgIsvJB1cDzyEEtcfKcnaEbfXeiPgejBceT6g==} + '@rc-component/portal@1.1.2': resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} engines: {node: '>=8.x'} @@ -1436,6 +1700,24 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@turf/boolean-clockwise@5.1.5': + resolution: {integrity: sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==} + + '@turf/clone@5.1.5': + resolution: {integrity: sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==} + + '@turf/helpers@5.1.5': + resolution: {integrity: sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==} + + '@turf/invariant@5.2.0': + resolution: {integrity: sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==} + + '@turf/meta@5.2.0': + resolution: {integrity: sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==} + + '@turf/rewind@5.1.5': + resolution: {integrity: sha512-Gdem7JXNu+G4hMllQHXRFRihJl3+pNl7qY+l4qhQFxq+hiU1cQoVFnyoleIqWKIrdK/i2YubaSwc3SCM7N5mMw==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1457,12 +1739,18 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/brotli@1.3.5': + resolution: {integrity: sha512-9xoNr+bcxT236/7ZgcWw/6Pb2RRetE13p4bFy1xYSckKwyOiRfmInay8baUWZgH7/284Wl6IPe7+nOI9+OQg/A==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + '@types/d3-dispatch@3.0.6': resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==} @@ -1484,6 +1772,9 @@ packages: '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1529,6 +1820,15 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + '@types/node@25.9.5': + resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==} + + '@types/offscreencanvas@2019.7.3': + resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} + + '@types/pako@1.0.7': + resolution: {integrity: sha512-YBtzT2ztNF6R/9+UXj2wTGFnC9NklAnASt3sC0h2m1bbH7G6FyBIkt4AN8ThZpNfxUo1b2iMVO0UawiJymEt8A==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1679,6 +1979,32 @@ packages: '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@vivjs/constants@0.20.1': + resolution: {integrity: sha512-VYtQnT/3bO/kVx2RTspTCzX7lrTyeYMojDBzVy1zgJ/4co8iBan3Xtnbz7HlhvFFGBe3AssFTjNwwb6XdA8Cbw==} + + '@vivjs/extensions@0.20.1': + resolution: {integrity: sha512-ZWTqVHosSc0NIrteAL0yjQj1CWqpOtsm2K3SK/w3L6nLA/HMCIfbBcgRfkYerLFcUb8hRD86BNkGgV9kN2Iejg==} + peerDependencies: + '@deck.gl/core': ~9.1.11 + + '@vivjs/layers@0.20.1': + resolution: {integrity: sha512-DrB68BgLCTymmX/3sKd0h11K/ubA4x3Vy6TRUUOK3sX83j3a+SAsx0RHr2g/b7ethc0C/ZnQFBFJX6hTXHYzsA==} + peerDependencies: + '@deck.gl/core': ~9.1.11 + '@deck.gl/geo-layers': ~9.1.11 + '@deck.gl/layers': ~9.1.11 + '@luma.gl/constants': ~9.1.9 + '@luma.gl/core': ~9.1.9 + '@luma.gl/engine': ~9.1.9 + '@luma.gl/shadertools': ~9.1.9 + '@luma.gl/webgl': ~9.1.9 + + '@vivjs/loaders@0.20.1': + resolution: {integrity: sha512-7F9uYXkoFPH945o+A+YO/2DIv2WO0LJYGFHiz0ZhO0THl1mBw8NaHO1YodwzM/sqoT4X+5oGCh+5E91YX87t7g==} + + '@vivjs/types@0.20.1': + resolution: {integrity: sha512-VfWhqv893UDHii3Lr4UbWiSafDtqjXp2zsojYDAiabnLA7n4Q7bSk/BCoTt6CaehwwI7t8o3J6m9Axb2cLH4nQ==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1730,6 +2056,9 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + '@zarrita/storage@0.1.4': + resolution: {integrity: sha512-qURfJAQcQGRfDQ4J9HaCjGaj3jlJKc66bnRk6G/IeLUsM7WKyG7Bzsuf1EZurSXyc0I4LVcu6HaeQQ4d3kZ16g==} + '@zarrita/storage@0.2.0': resolution: {integrity: sha512-855ZXqtnds7spnT8vNvD+MXa3QExP1m2GqShe8yt7uZXHnQLgJHgkpVwFjE1B0KDDRO0ki09hmk6OboTaIfPsQ==} @@ -1856,6 +2185,13 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + + apache-arrow@21.2.0: + resolution: {integrity: sha512-Hxe6Agq26gQOM954qpzYSllJBPJl+e16U5CkfuMUhLrNba+5nKkttIVlflaovN6oaTratqMGAO8H5u/aNhmHWQ==} + hasBin: true + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -1948,8 +2284,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - autoprefixer@10.5.0: - resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + autoprefixer@10.5.4: + resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2097,6 +2433,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.11.13: + resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==} + engines: {node: '>=6.0.0'} + hasBin: true + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -2134,6 +2475,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} @@ -2142,9 +2486,18 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.8: + resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buf-compare@1.0.1: + resolution: {integrity: sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==} + engines: {node: '>=0.10.0'} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2190,8 +2543,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001793: - resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001809: + resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==} case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -2213,6 +2566,9 @@ packages: resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} engines: {node: '>=12.20'} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + check-types@11.2.3: resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} @@ -2352,6 +2708,10 @@ packages: peerDependencies: webpack: ^5.1.0 + core-assert@0.2.1: + resolution: {integrity: sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==} + engines: {node: '>=0.10.0'} + core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} @@ -2393,6 +2753,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} deprecated: Active development of CryptoJS has been discontinued. This library is no longer maintained. @@ -2586,6 +2949,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deep-strict-equal@0.2.0: + resolution: {integrity: sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==} + engines: {node: '>=0.10.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2717,6 +3084,9 @@ packages: resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} engines: {node: '>=10'} + draco3d@1.5.7: + resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2724,6 +3094,9 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + earcut@2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + earcut@3.0.2: resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} @@ -2738,6 +3111,9 @@ packages: electron-to-chromium@1.5.367: resolution: {integrity: sha512-4Mk/mrynCNQ+atY40D3UpmhLWB6AHMbYMlIrPhHcMF6x0L7O0b052FCAsxw1LlaR++UFuNg3D/A6XCuGDa0guQ==} + electron-to-chromium@1.5.405: + resolution: {integrity: sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==} + email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -3063,6 +3439,13 @@ packages: fast-uri@3.1.5: resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} + fast-xml-builder@1.3.1: + resolution: {integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==} + + fast-xml-parser@5.11.0: + resolution: {integrity: sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -3082,6 +3465,9 @@ packages: picomatch: optional: true + fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + fflate@0.8.3: resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} @@ -3142,6 +3528,9 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flatbuffers@25.9.23: + resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==} + flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} @@ -3238,6 +3627,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + geotiff@2.1.3: + resolution: {integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==} + engines: {node: '>=10.19'} + geotiff@3.0.5: resolution: {integrity: sha512-OWcL9S9+yDZ6iAlXMt32T1iwUApJM8UiD47xbm6ZP1h33d10fqkPs14EG/ttT5EnefpZSx3G15iDFC5FxUNUwA==} engines: {node: '>=10.19'} @@ -3330,6 +3723,10 @@ packages: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} + h3-js@4.5.0: + resolution: {integrity: sha512-uKmdPc+DuarnR+XqZxEuWOMw7KzzKROrx3MLeJpFnMOs78S9M5eZ+X5RieS9UcSFQqbeXzbfWuX/W9Pyajinqw==} + engines: {node: '>=4', npm: '>=3', yarn: '>=1.3.0'} + handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -3473,6 +3870,9 @@ packages: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3482,10 +3882,18 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + image-size@0.7.5: + resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} + engines: {node: '>=6.9.0'} + hasBin: true + image-type@4.1.0: resolution: {integrity: sha512-CFJMJ8QK8lJvRlTCEgarL4ro6hfDQKif2HjSvYCdQZESaIPV4v9imrf7BQHK+sQeTeNeMpWciR9hyC/g8ybXEg==} engines: {node: '>=6'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -3582,6 +3990,9 @@ packages: engines: {node: '>=8'} hasBin: true + is-error@2.2.2: + resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3679,6 +4090,9 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unsafe@2.0.2: + resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -3964,6 +4378,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-with-bigint@3.5.12: + resolution: {integrity: sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w==} + json2mq@0.2.0: resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} @@ -3993,6 +4410,9 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4008,6 +4428,9 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + ktx-parse@0.7.1: + resolution: {integrity: sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -4044,6 +4467,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -4104,6 +4530,13 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} + long@3.2.0: + resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==} + engines: {node: '>=0.6'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4122,6 +4555,12 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + lz4js@0.2.0: + resolution: {integrity: sha512-gY2Ia9Lm7Ep8qMiuGRhvUq0Q7qUereeldZPP1PMEJxPtEWHJLqw9pgX68oHajBH0nzJK4MaZEA/YNV3jT8u8Bg==} + + lzw-tiff-decoder@0.1.1: + resolution: {integrity: sha512-RUiNDPLzKEhX3JM9BgnFneerJd/uLgV4TeaNnkNJ0eO/GdlPeX01PKDCUsob8jhWILxOl3dGlDbD98KGex39ig==} + magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -4139,11 +4578,17 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + math.gl@4.1.0: + resolution: {integrity: sha512-FtvCJuuAlvn4358e2SkepTv2gnV7VTvu0y/hwkkjS/urDk+nY9x/4Tsn19LmaJl1wqKaqn+QFZhbnjAsuMOkWA==} + mathjs@11.12.0: resolution: {integrity: sha512-UGhVw8rS1AyedyI55DGz9q1qZ0p98kyKPyc9vherBkoueLntPfKtPBh14x+V4cdUWK0NZV2TBwqRFlvadscSuw==} engines: {node: '>= 14'} hasBin: true + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -4165,6 +4610,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meshoptimizer@1.2.0: + resolution: {integrity: sha512-davRZeIJbxJrE24cwQle7ZDsxjdk/OphNOV83oX+efQinyoHY9Jcyz3MHbaoG0qySZajldGztNZ1RN/T19PZsg==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -4217,6 +4665,9 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mjolnir.js@3.1.0: + resolution: {integrity: sha512-fWcei0lo+xauQK0CVb5vwC8FaS9xeEBiNPd5vMIM89DchQAi6ENMq9itOjq+G8zAvhKmJu5UPnuEnU8kVrHzdg==} + moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} @@ -4281,6 +4732,10 @@ packages: resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} engines: {node: '>=18'} + node-releases@2.0.53: + resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==} + engines: {node: '>=18'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -4406,6 +4861,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} @@ -4445,6 +4903,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4463,6 +4925,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pbf@3.3.0: + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + hasBin: true + pbf@4.0.1: resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==} hasBin: true @@ -4941,6 +5407,14 @@ packages: resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} + preact@10.29.8: + resolution: {integrity: sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==} + peerDependencies: + preact-render-to-string: '>=5' + peerDependenciesMeta: + preact-render-to-string: + optional: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5011,6 +5485,9 @@ packages: resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} engines: {node: '>=12'} + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + quickselect@3.0.0: resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} @@ -5603,6 +6080,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -5655,6 +6135,9 @@ packages: resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} engines: {node: '>=8.0.0'} + snappyjs@0.6.1: + resolution: {integrity: sha512-YIK6I2lsH072UE0aOFxxY1dPDCS43I5ktqHpeAsuLNYWkE5pGxRGWfDM4/vSUfNzXjC1Ivzt3qx31PCLmc9yqg==} + sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} @@ -5822,6 +6305,9 @@ packages: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} + strnum@2.4.2: + resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} + style-loader@3.3.4: resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} engines: {node: '>= 12.13.0'} @@ -5955,6 +6441,10 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + texture-compressor@1.0.2: + resolution: {integrity: sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==} + hasBin: true + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -6106,6 +6596,9 @@ packages: underscore@1.13.8: resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -6142,6 +6635,10 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unzipit@1.4.3: + resolution: {integrity: sha512-gsq2PdJIWWGhx5kcdWStvNWit9FVdTewm4SEG7gFskWs+XCVaULt9+BwuoBtJiRE8eo3L1IPAOrbByNLtLtIlg==} + engines: {node: '>=12'} + unzipit@2.0.0: resolution: {integrity: sha512-DVeVIWUZCAQPNzm5sB0hpsG1GygTTdBnzNtYYEpInkttx5evkyqRgZi6rTczoySqp8hO5jHVKzrH0f23X8FZLg==} engines: {node: '>=18'} @@ -6156,6 +6653,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.3.1: + resolution: {integrity: sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6182,6 +6685,9 @@ packages: deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true + uzip-module@1.0.3: + resolution: {integrity: sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA==} + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -6282,6 +6788,9 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + wgsl_reflect@1.5.0: + resolution: {integrity: sha512-ntYNHZgzBHs+pzmVCsSiRqyye3Ey1xdKEX0Ls8PiDBKIiGFwUOef0PdBbYvUyGTGFwLKkqTZOGmPAed70mquTw==} + whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation @@ -6422,6 +6931,10 @@ packages: xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + xml-utils@1.10.2: resolution: {integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==} @@ -6458,9 +6971,21 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zarrita@0.5.4: + resolution: {integrity: sha512-i88iN2+HqIQ+uiCEWLfhjbYNXAJD7IrM4h3lFwFclfqEOOhxp10amRWtqmgN5jbuy3+h0LwdyLVVzk4y9rTLgg==} + zarrita@0.7.3: resolution: {integrity: sha512-wChTQ1Ox75INoQCzKAfLWAfB70JJ4KjdW8Sz5x4ZWrFB4Dw+YZdnxHTL0xSdsrB9EmKSeK7fS1Y+I2ibhfGbkw==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zstd-codec@0.1.5: + resolution: {integrity: sha512-v3fyjpK8S/dpY/X5WxqTK3IoCnp/ZOLxn144GZVlNUjtwAchzrVo03h+oMATFhCIiJ5KTr4V3vDQQYz4RU684g==} + + zstddec@0.1.0: + resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==} + zstddec@0.2.0: resolution: {integrity: sha512-oyPnDa1X5c13+Y7mA/FDMNJrn4S8UNBe0KCqtDmor40Re7ALrPN6npFwyYVRRh+PqozZQdeg23QtbcamZnG5rA==} @@ -6554,7 +7079,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.2 + browserslist: 4.28.8 lru-cache: 5.1.1 semver: 7.5.2 @@ -7446,13 +7971,13 @@ snapshots: '@biomejs/cli-win32-x64@2.4.16': optional: true - '@cornerstonejs/codec-charls@1.2.3': {} + '@cornerstonejs/codec-charls@1.2.5': {} - '@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.2': {} + '@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.4': {} - '@cornerstonejs/codec-openjpeg@1.3.0': {} + '@cornerstonejs/codec-openjpeg@1.3.2': {} - '@cornerstonejs/codec-openjph@2.4.7': {} + '@cornerstonejs/codec-openjph@2.4.9': {} '@craco/craco@6.4.5(@types/node@14.18.63)(react-scripts@5.0.0(@babel/plugin-syntax-flow@7.29.7(@babel/core@7.29.7))(@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7))(@types/babel__core@7.20.5)(eslint@8.57.1)(react@18.3.1)(ts-node@10.9.2(@types/node@14.18.63)(typescript@4.9.5))(type-fest@4.41.0)(typescript@4.9.5))(typescript@4.9.5)': dependencies: @@ -7555,6 +8080,101 @@ snapshots: '@ctrl/tinycolor@3.6.1': {} + '@deck.gl/core@9.1.15': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@luma.gl/constants': 9.1.10 + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@luma.gl/webgl': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + '@math.gl/sun': 4.1.0 + '@math.gl/types': 4.1.0 + '@math.gl/web-mercator': 4.1.0 + '@probe.gl/env': 4.1.1 + '@probe.gl/log': 4.1.1 + '@probe.gl/stats': 4.1.1 + '@types/offscreencanvas': 2019.7.3 + gl-matrix: 3.4.4 + mjolnir.js: 3.1.0 + + '@deck.gl/extensions@9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))': + dependencies: + '@deck.gl/core': 9.1.15 + '@luma.gl/constants': 9.1.10 + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + + '@deck.gl/geo-layers@9.1.15(@deck.gl/core@9.1.15)(@deck.gl/extensions@9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/mesh-layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))': + dependencies: + '@deck.gl/core': 9.1.15 + '@deck.gl/extensions': 9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/layers': 9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/mesh-layers': 9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@loaders.gl/3d-tiles': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/core': 4.4.5 + '@loaders.gl/gis': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/mvt': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/terrain': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/tiles': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/wms': 4.4.5(@loaders.gl/core@4.4.5) + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/gltf': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + '@math.gl/culling': 4.1.0 + '@math.gl/web-mercator': 4.1.0 + '@types/geojson': 7946.0.16 + h3-js: 4.5.0 + long: 3.2.0 + + '@deck.gl/layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))': + dependencies: + '@deck.gl/core': 9.1.15 + '@loaders.gl/core': 4.4.5 + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@mapbox/tiny-sdf': 2.2.0 + '@math.gl/core': 4.1.0 + '@math.gl/polygon': 4.1.0 + '@math.gl/web-mercator': 4.1.0 + earcut: 2.2.4 + + '@deck.gl/mesh-layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))': + dependencies: + '@deck.gl/core': 9.1.15 + '@loaders.gl/gltf': 4.4.5(@loaders.gl/core@4.4.5) + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/gltf': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + transitivePeerDependencies: + - '@loaders.gl/core' + + '@deck.gl/react@9.1.15(@deck.gl/core@9.1.15)(@deck.gl/widgets@9.1.15(@deck.gl/core@9.1.15))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@deck.gl/core': 9.1.15 + '@deck.gl/widgets': 9.1.15(@deck.gl/core@9.1.15) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@deck.gl/widgets@9.1.15(@deck.gl/core@9.1.15)': + dependencies: + '@deck.gl/core': 9.1.15 + preact: 10.29.8 + transitivePeerDependencies: + - preact-render-to-string + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -7814,10 +8434,279 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} + '@loaders.gl/3d-tiles@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/compression': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/core': 4.4.5 + '@loaders.gl/crypto': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/draco': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/gltf': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/math': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/tiles': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/zip': 4.4.5(@loaders.gl/core@4.4.5) + '@math.gl/core': 4.1.0 + '@math.gl/culling': 4.1.0 + '@math.gl/geospatial': 4.1.0 + '@probe.gl/log': 4.1.1 + long: 5.3.2 + + '@loaders.gl/compression@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@types/pako': 1.0.7 + fflate: 0.7.4 + pako: 1.0.11 + snappyjs: 0.6.1 + optionalDependencies: + '@types/brotli': 1.3.5 + brotli: 1.3.3 + lz4js: 0.2.0 + zstd-codec: 0.1.5 + + '@loaders.gl/core@4.4.5': + dependencies: + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/schema-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@probe.gl/log': 4.1.1 + + '@loaders.gl/crypto@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@types/crypto-js': 4.2.2 + + '@loaders.gl/draco@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/schema-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + draco3d: 1.5.7 + + '@loaders.gl/geoarrow@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@math.gl/polygon': 4.1.0 + apache-arrow: 21.2.0 + + '@loaders.gl/gis@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/geoarrow': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/schema-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@mapbox/vector-tile': 1.3.1 + '@math.gl/polygon': 4.1.0 + pbf: 3.3.0 + + '@loaders.gl/gltf@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/draco': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/textures': 4.4.5(@loaders.gl/core@4.4.5) + '@math.gl/core': 4.1.0 + meshoptimizer: 1.2.0 + + '@loaders.gl/images@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + + '@loaders.gl/loader-utils@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@probe.gl/log': 4.1.1 + '@probe.gl/stats': 4.1.1 + transitivePeerDependencies: + - '@loaders.gl/core' + + '@loaders.gl/math@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@math.gl/core': 4.1.0 + + '@loaders.gl/mvt@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/gis': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/schema-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@math.gl/polygon': 4.1.0 + '@probe.gl/stats': 4.1.1 + pbf: 3.3.0 + + '@loaders.gl/schema-utils@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/schema': 4.4.5 + '@math.gl/types': 4.1.0 + '@types/geojson': 7946.0.16 + apache-arrow: 21.2.0 + + '@loaders.gl/schema@4.4.5': + dependencies: + '@types/geojson': 7946.0.16 + apache-arrow: 21.2.0 + + '@loaders.gl/terrain@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@mapbox/martini': 0.2.0 + + '@loaders.gl/textures@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/worker-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@math.gl/types': 4.1.0 + ktx-parse: 0.7.1 + texture-compressor: 1.0.2 + + '@loaders.gl/tiles@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/math': 4.4.5(@loaders.gl/core@4.4.5) + '@math.gl/core': 4.1.0 + '@math.gl/culling': 4.1.0 + '@math.gl/geospatial': 4.1.0 + '@math.gl/web-mercator': 4.1.0 + '@probe.gl/stats': 4.1.1 + + '@loaders.gl/wms@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/images': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + '@loaders.gl/xml': 4.4.5(@loaders.gl/core@4.4.5) + '@turf/rewind': 5.1.5 + deep-strict-equal: 0.2.0 + + '@loaders.gl/worker-utils@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + + '@loaders.gl/xml@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/schema': 4.4.5 + fast-xml-parser: 5.11.0 + + '@loaders.gl/zip@4.4.5(@loaders.gl/core@4.4.5)': + dependencies: + '@loaders.gl/compression': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/core': 4.4.5 + '@loaders.gl/crypto': 4.4.5(@loaders.gl/core@4.4.5) + '@loaders.gl/loader-utils': 4.4.5(@loaders.gl/core@4.4.5) + jszip: 3.10.1 + md5: 2.3.0 + + '@luma.gl/constants@9.1.10': {} + + '@luma.gl/core@9.1.10': + dependencies: + '@math.gl/types': 4.1.0 + '@probe.gl/env': 4.1.1 + '@probe.gl/log': 4.1.1 + '@probe.gl/stats': 4.1.1 + '@types/offscreencanvas': 2019.7.3 + + '@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))': + dependencies: + '@luma.gl/core': 9.1.10 + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + '@math.gl/types': 4.1.0 + '@probe.gl/log': 4.1.1 + '@probe.gl/stats': 4.1.1 + + '@luma.gl/gltf@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)))(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))': + dependencies: + '@loaders.gl/core': 4.4.5 + '@loaders.gl/textures': 4.4.5(@loaders.gl/core@4.4.5) + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + + '@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)': + dependencies: + '@luma.gl/core': 9.1.10 + '@math.gl/core': 4.1.0 + '@math.gl/types': 4.1.0 + wgsl_reflect: 1.5.0 + + '@luma.gl/webgl@9.1.10(@luma.gl/core@9.1.10)': + dependencies: + '@luma.gl/constants': 9.1.10 + '@luma.gl/core': 9.1.10 + '@math.gl/types': 4.1.0 + '@probe.gl/env': 4.1.1 + + '@mapbox/martini@0.2.0': {} + + '@mapbox/point-geometry@0.1.0': {} + + '@mapbox/tiny-sdf@2.2.0': {} + + '@mapbox/vector-tile@1.3.1': + dependencies: + '@mapbox/point-geometry': 0.1.0 + + '@math.gl/core@4.1.0': + dependencies: + '@math.gl/types': 4.1.0 + + '@math.gl/culling@4.1.0': + dependencies: + '@math.gl/core': 4.1.0 + '@math.gl/types': 4.1.0 + + '@math.gl/geospatial@4.1.0': + dependencies: + '@math.gl/core': 4.1.0 + '@math.gl/types': 4.1.0 + + '@math.gl/polygon@4.1.0': + dependencies: + '@math.gl/core': 4.1.0 + + '@math.gl/sun@4.1.0': {} + + '@math.gl/types@4.1.0': {} + + '@math.gl/web-mercator@4.1.0': + dependencies: + '@math.gl/core': 4.1.0 + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 + '@nodable/entities@3.0.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7847,6 +8736,14 @@ snapshots: type-fest: 4.41.0 webpack-dev-server: 4.15.2(webpack@5.107.2(postcss@8.5.25)) + '@probe.gl/env@4.1.1': {} + + '@probe.gl/log@4.1.1': + dependencies: + '@probe.gl/env': 4.1.1 + + '@probe.gl/stats@4.1.1': {} + '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.29.7 @@ -8026,6 +8923,33 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@turf/boolean-clockwise@5.1.5': + dependencies: + '@turf/helpers': 5.1.5 + '@turf/invariant': 5.2.0 + + '@turf/clone@5.1.5': + dependencies: + '@turf/helpers': 5.1.5 + + '@turf/helpers@5.1.5': {} + + '@turf/invariant@5.2.0': + dependencies: + '@turf/helpers': 5.1.5 + + '@turf/meta@5.2.0': + dependencies: + '@turf/helpers': 5.1.5 + + '@turf/rewind@5.1.5': + dependencies: + '@turf/boolean-clockwise': 5.1.5 + '@turf/clone': 5.1.5 + '@turf/helpers': 5.1.5 + '@turf/invariant': 5.2.0 + '@turf/meta': 5.2.0 + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -8058,6 +8982,11 @@ snapshots: dependencies: '@types/node': 14.18.63 + '@types/brotli@1.3.5': + dependencies: + '@types/node': 14.18.63 + optional: true + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.1 @@ -8067,6 +8996,8 @@ snapshots: dependencies: '@types/node': 14.18.63 + '@types/crypto-js@4.2.2': {} + '@types/d3-dispatch@3.0.6': {} '@types/eslint@8.56.12': @@ -8099,6 +9030,8 @@ snapshots: '@types/qs': 6.15.1 '@types/serve-static': 1.15.10 + '@types/geojson@7946.0.16': {} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 14.18.63 @@ -8142,6 +9075,14 @@ snapshots: '@types/node@14.18.63': {} + '@types/node@25.9.5': + dependencies: + undici-types: 7.24.6 + + '@types/offscreencanvas@2019.7.3': {} + + '@types/pako@1.0.7': {} + '@types/parse-json@4.0.2': {} '@types/prettier@2.7.3': {} @@ -8325,6 +9266,46 @@ snapshots: '@ungap/structured-clone@1.3.1': {} + '@vivjs/constants@0.20.1': + dependencies: + '@luma.gl/constants': 9.1.10 + + '@vivjs/extensions@0.20.1(@deck.gl/core@9.1.15)': + dependencies: + '@deck.gl/core': 9.1.15 + '@vivjs/constants': 0.20.1 + + '@vivjs/layers@0.20.1(02606c62705f483b8e7762d60076ec24)': + dependencies: + '@deck.gl/core': 9.1.15 + '@deck.gl/geo-layers': 9.1.15(@deck.gl/core@9.1.15)(@deck.gl/extensions@9.1.15(@deck.gl/core@9.1.15)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@deck.gl/mesh-layers@9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))))(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@deck.gl/layers': 9.1.15(@deck.gl/core@9.1.15)(@loaders.gl/core@4.4.5)(@luma.gl/core@9.1.10)(@luma.gl/engine@9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10))) + '@luma.gl/constants': 9.1.10 + '@luma.gl/core': 9.1.10 + '@luma.gl/engine': 9.1.10(@luma.gl/core@9.1.10)(@luma.gl/shadertools@9.1.10(@luma.gl/core@9.1.10)) + '@luma.gl/shadertools': 9.1.10(@luma.gl/core@9.1.10) + '@luma.gl/webgl': 9.1.10(@luma.gl/core@9.1.10) + '@math.gl/core': 4.1.0 + '@math.gl/culling': 4.1.0 + '@vivjs/constants': 0.20.1 + '@vivjs/extensions': 0.20.1(@deck.gl/core@9.1.15) + '@vivjs/loaders': 0.20.1 + '@vivjs/types': 0.20.1 + + '@vivjs/loaders@0.20.1': + dependencies: + '@vivjs/types': 0.20.1 + geotiff: 2.1.3 + lzw-tiff-decoder: 0.1.1 + quickselect: 2.0.0 + zarrita: 0.5.4 + zod: 3.25.76 + + '@vivjs/types@0.20.1': + dependencies: + '@vivjs/constants': 0.20.1 + math.gl: 4.1.0 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -8405,6 +9386,11 @@ snapshots: '@xtuc/long@4.2.2': {} + '@zarrita/storage@0.1.4': + dependencies: + reference-spec-reader: 0.2.0 + unzipit: 1.4.3 + '@zarrita/storage@0.2.0': dependencies: reference-spec-reader: 0.2.0 @@ -8555,6 +9541,15 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 + anynum@1.0.1: {} + + apache-arrow@21.2.0: + dependencies: + '@types/node': 25.9.5 + flatbuffers: 25.9.23 + json-with-bigint: 3.5.12 + tslib: 2.8.1 + arg@4.1.3: {} arg@5.0.2: {} @@ -8664,10 +9659,10 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.5.0(postcss@8.5.25): + autoprefixer@10.5.4(postcss@8.5.25): dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + browserslist: 4.28.8 + caniuse-lite: 1.0.30001809 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.25 @@ -8862,6 +9857,8 @@ snapshots: baseline-browser-mapping@2.10.33: {} + baseline-browser-mapping@2.11.13: {} + batch@0.6.1: {} bfj@7.1.0: @@ -8915,20 +9912,35 @@ snapshots: dependencies: fill-range: 7.1.1 + brotli@1.3.3: + dependencies: + base64-js: 1.5.1 + optional: true + browser-process-hrtime@1.0.0: {} browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.33 - caniuse-lite: 1.0.30001793 + caniuse-lite: 1.0.30001809 electron-to-chromium: 1.5.367 node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) + browserslist@4.28.8: + dependencies: + baseline-browser-mapping: 2.11.13 + caniuse-lite: 1.0.30001809 + electron-to-chromium: 1.5.405 + node-releases: 2.0.53 + update-browserslist-db: 1.3.1(browserslist@4.28.8) + bser@2.1.1: dependencies: node-int64: 0.4.0 + buf-compare@1.0.1: {} + buffer-from@1.1.2: {} builtin-modules@3.3.0: {} @@ -8967,12 +9979,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + browserslist: 4.28.8 + caniuse-lite: 1.0.30001809 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001809: {} case-sensitive-paths-webpack-plugin@2.4.0: {} @@ -8990,6 +10002,8 @@ snapshots: char-regex@2.0.2: {} + charenc@0.0.2: {} + check-types@11.2.3: {} chokidar@3.6.0: @@ -9116,6 +10130,11 @@ snapshots: serialize-javascript: 7.0.5 webpack: 5.107.2(postcss@8.5.25) + core-assert@0.2.1: + dependencies: + buf-compare: 1.0.1 + is-error: 2.2.2 + core-js-compat@3.49.0: dependencies: browserslist: 4.28.2 @@ -9169,6 +10188,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + crypto-js@4.2.0: {} crypto-random-string@2.0.0: {} @@ -9384,6 +10405,10 @@ snapshots: deep-is@0.1.4: {} + deep-strict-equal@0.2.0: + dependencies: + core-assert: 0.2.1 + deepmerge@4.3.1: {} default-gateway@6.0.3: @@ -9427,10 +10452,10 @@ snapshots: dicom-microscopy-viewer@0.48.24: dependencies: - '@cornerstonejs/codec-charls': 1.2.3 - '@cornerstonejs/codec-libjpeg-turbo-8bit': 1.2.2 - '@cornerstonejs/codec-openjpeg': 1.3.0 - '@cornerstonejs/codec-openjph': 2.4.7 + '@cornerstonejs/codec-charls': 1.2.5 + '@cornerstonejs/codec-libjpeg-turbo-8bit': 1.2.4 + '@cornerstonejs/codec-openjpeg': 1.3.2 + '@cornerstonejs/codec-openjph': 2.4.9 '@imagingdatacommons/dicomicc': 0.2.3 colormap: 2.3.2 dcmjs: 0.41.0 @@ -9509,6 +10534,8 @@ snapshots: dotenv@10.0.0: {} + draco3d@1.5.7: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9517,6 +10544,8 @@ snapshots: duplexer@0.1.2: {} + earcut@2.2.4: {} + earcut@3.0.2: {} ee-first@1.1.1: {} @@ -9527,6 +10556,8 @@ snapshots: electron-to-chromium@1.5.367: {} + electron-to-chromium@1.5.405: {} + email-addresses@5.0.0: {} emittery@0.10.2: {} @@ -10036,6 +11067,20 @@ snapshots: fast-uri@3.1.5: {} + fast-xml-builder@1.3.1: + dependencies: + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 + + fast-xml-parser@5.11.0: + dependencies: + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.1 + is-unsafe: 2.0.2 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + xml-naming: 0.3.0 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -10052,6 +11097,8 @@ snapshots: optionalDependencies: picomatch: 4.0.4 + fflate@0.7.4: {} + fflate@0.8.3: {} file-entry-cache@6.0.1: @@ -10122,6 +11169,8 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flatbuffers@25.9.23: {} + flatted@3.4.2: {} follow-redirects@1.16.0: {} @@ -10219,6 +11268,17 @@ snapshots: gensync@1.0.0-beta.2: {} + geotiff@2.1.3: + dependencies: + '@petamoriken/float16': 3.9.3 + lerc: 3.0.0 + pako: 2.1.0 + parse-headers: 2.0.6 + quick-lru: 6.1.2 + web-worker: 1.5.0 + xml-utils: 1.10.2 + zstddec: 0.1.0 + geotiff@3.0.5: dependencies: '@petamoriken/float16': 3.9.3 @@ -10339,6 +11399,8 @@ snapshots: dependencies: duplexer: 0.1.2 + h3-js@4.5.0: {} + handle-thing@2.0.1: {} harmony-reflect@1.6.2: {} @@ -10490,15 +11552,21 @@ snapshots: dependencies: harmony-reflect: 1.6.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} image-size@0.5.5: optional: true + image-size@0.7.5: {} + image-type@4.1.0: dependencies: file-type: 10.11.0 + immediate@3.0.6: {} + immer@9.0.21: {} import-fresh@3.3.1: @@ -10591,6 +11659,8 @@ snapshots: is-docker@2.2.1: {} + is-error@2.2.2: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -10670,6 +11740,8 @@ snapshots: is-typedarray@1.0.0: {} + is-unsafe@2.0.2: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -11232,6 +12304,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-with-bigint@3.5.12: {} + json2mq@0.2.0: dependencies: string-convert: 0.2.1 @@ -11267,6 +12341,13 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -11277,6 +12358,8 @@ snapshots: klona@2.0.6: {} + ktx-parse@0.7.1: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -11320,6 +12403,10 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lilconfig@2.1.0: {} lilconfig@3.1.3: {} @@ -11365,6 +12452,10 @@ snapshots: loglevel@1.9.2: {} + long@3.2.0: {} + + long@5.3.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -11383,6 +12474,11 @@ snapshots: lz-string@1.5.0: {} + lz4js@0.2.0: + optional: true + + lzw-tiff-decoder@0.1.1: {} + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 @@ -11399,6 +12495,10 @@ snapshots: math-intrinsics@1.1.0: {} + math.gl@4.1.0: + dependencies: + '@math.gl/core': 4.1.0 + mathjs@11.12.0: dependencies: '@babel/runtime': 7.29.7 @@ -11411,6 +12511,12 @@ snapshots: tiny-emitter: 2.1.0 typed-function: 4.2.2 + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + mdn-data@2.0.14: {} media-typer@0.3.0: {} @@ -11425,6 +12531,8 @@ snapshots: merge2@1.4.1: {} + meshoptimizer@1.2.0: {} + methods@1.1.2: {} micromatch@4.0.8: @@ -11464,6 +12572,8 @@ snapshots: minimist@1.2.8: {} + mjolnir.js@3.1.0: {} + moment@2.30.1: {} ms@2.0.0: {} @@ -11522,6 +12632,8 @@ snapshots: node-releases@2.0.47: {} + node-releases@2.0.53: {} + normalize-path@3.0.0: {} normalize-url@6.1.0: {} @@ -11670,6 +12782,8 @@ snapshots: p-try@2.2.0: {} + pako@1.0.11: {} + pako@2.1.0: {} param-case@3.0.4: @@ -11705,6 +12819,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -11715,6 +12831,11 @@ snapshots: path-type@4.0.0: {} + pbf@3.3.0: + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + pbf@4.0.1: dependencies: resolve-protobuf-schema: 2.1.0 @@ -11785,7 +12906,7 @@ snapshots: postcss-colormin@5.3.1(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.25 @@ -11793,7 +12914,7 @@ snapshots: postcss-convert-values@5.1.3(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 postcss: 8.5.25 postcss-value-parser: 4.2.0 @@ -11924,7 +13045,7 @@ snapshots: postcss-merge-rules@5.1.4(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.5.25) postcss: 8.5.25 @@ -11944,7 +13065,7 @@ snapshots: postcss-minify-params@5.1.4(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 cssnano-utils: 3.1.0(postcss@8.5.25) postcss: 8.5.25 postcss-value-parser: 4.2.0 @@ -12017,7 +13138,7 @@ snapshots: postcss-normalize-unicode@5.1.1(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 postcss: 8.5.25 postcss-value-parser: 4.2.0 @@ -12080,8 +13201,8 @@ snapshots: '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.5.25) '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.5.25) '@csstools/postcss-unset-value': 1.0.2(postcss@8.5.25) - autoprefixer: 10.5.0(postcss@8.5.25) - browserslist: 4.28.2 + autoprefixer: 10.5.4(postcss@8.5.25) + browserslist: 4.28.8 css-blank-pseudo: 3.0.3(postcss@8.5.25) css-has-pseudo: 3.0.4(postcss@8.5.25) css-prefers-color-scheme: 6.0.3(postcss@8.5.25) @@ -12124,7 +13245,7 @@ snapshots: postcss-reduce-initial@5.1.2(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 caniuse-api: 3.0.0 postcss: 8.5.25 @@ -12171,6 +13292,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact@10.29.8: {} + prelude-ls@1.2.1: {} pretty-bytes@5.6.0: {} @@ -12240,6 +13363,8 @@ snapshots: quick-lru@6.1.2: {} + quickselect@2.0.0: {} + quickselect@3.0.0: {} raf@3.4.1: @@ -12608,7 +13733,7 @@ snapshots: dependencies: '@babel/code-frame': 7.29.7 address: 1.2.2 - browserslist: 4.28.2 + browserslist: 4.28.8 chalk: 4.1.2 cross-spawn: 7.0.6 detect-port-alt: 1.1.6 @@ -13096,6 +14221,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.2 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} shallowequal@1.1.0: {} @@ -13146,6 +14273,8 @@ snapshots: slugify@1.6.9: {} + snappyjs@0.6.1: {} + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 @@ -13360,13 +14489,17 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + strnum@2.4.2: + dependencies: + anynum: 1.0.1 + style-loader@3.3.4(webpack@5.107.2(postcss@8.5.25)): dependencies: webpack: 5.107.2(postcss@8.5.25) stylehacks@5.1.1(postcss@8.5.25): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.8 postcss: 8.5.25 postcss-selector-parser: 6.1.2 @@ -13504,6 +14637,11 @@ snapshots: text-table@0.2.0: {} + texture-compressor@1.0.2: + dependencies: + argparse: 1.0.10 + image-size: 0.7.5 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -13662,6 +14800,8 @@ snapshots: underscore@1.13.8: {} + undici-types@7.24.6: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -13685,6 +14825,10 @@ snapshots: unpipe@1.0.0: {} + unzipit@1.4.3: + dependencies: + uzip-module: 1.0.3 + unzipit@2.0.0: {} upath@1.2.0: {} @@ -13695,6 +14839,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.3.1(browserslist@4.28.8): + dependencies: + browserslist: 4.28.8 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -13714,6 +14864,8 @@ snapshots: uuid@9.0.1: {} + uzip-module@1.0.3: {} + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@8.1.1: @@ -13833,7 +14985,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 + browserslist: 4.28.8 chrome-trace-event: 1.0.4 enhanced-resolve: 5.22.2 es-module-lexer: 2.1.0 @@ -13871,6 +15023,8 @@ snapshots: websocket-extensions@0.1.4: {} + wgsl_reflect@1.5.0: {} + whatwg-encoding@1.0.5: dependencies: iconv-lite: 0.4.24 @@ -14088,6 +15242,8 @@ snapshots: xml-name-validator@3.0.0: {} + xml-naming@0.3.0: {} + xml-utils@1.10.2: {} xmlchars@2.2.0: {} @@ -14116,9 +15272,21 @@ snapshots: yocto-queue@0.1.0: {} + zarrita@0.5.4: + dependencies: + '@zarrita/storage': 0.1.4 + numcodecs: 0.3.2 + zarrita@0.7.3: dependencies: '@zarrita/storage': 0.2.0 numcodecs: 0.3.2 + zod@3.25.76: {} + + zstd-codec@0.1.5: + optional: true + + zstddec@0.1.0: {} + zstddec@0.2.0: {} diff --git a/src/App.tsx b/src/App.tsx index 7131bdc1..cceb4cb1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -73,6 +73,8 @@ function ParametrizedCaseViewer({ app={app} enableAnnotationTools={enableAnnotationTools} studyInstanceUID={studyInstanceUID} + useViv={config.useViv === true} + vivSettings={config.vivSettings} /> ) diff --git a/src/AppConfig.d.ts b/src/AppConfig.d.ts index 9e1d177c..4afdc906 100644 --- a/src/AppConfig.d.ts +++ b/src/AppConfig.d.ts @@ -98,6 +98,23 @@ export interface OidcSettings { endSessionEndpoint?: string } +export interface VivChannelSelection { + c: number + t?: number + z?: number +} + +export interface VivSettings { + selections?: VivChannelSelection[] + channelsVisible?: boolean[] + contrastLimits?: Array<[number, number]> + colors?: Array<[number, number, number]> + initialViewState?: { + target: [number, number, number] + zoom?: number + } +} + export default interface AppConfig { /** * Currently, only one server is supported. However, support for multiple @@ -128,4 +145,11 @@ export default interface AppConfig { enableInDevelopment?: boolean } enableMemoryMonitoring?: boolean + /** + * When true, the slide viewport uses Viv + Deck.gl (src/viv) + * instead of the default OpenLayers-based SlideViewer. Limited feature set. + */ + useViv?: boolean + /** Optional display overrides for the Viv viewer path (channels, contrast, etc.). */ + vivSettings?: VivSettings } diff --git a/src/DicomWebManager.ts b/src/DicomWebManager.ts index c4168b99..8bda0886 100644 --- a/src/DicomWebManager.ts +++ b/src/DicomWebManager.ts @@ -549,6 +549,20 @@ export default class DicomWebManager implements dwc.api.DICOMwebClient { return this.stores[0].client.headers } + /** + * Run a callback on the primary {@link dwc.api.DICOMwebClient} (the store used for reads). + * Used e.g. to append Viv tile {@link dwc.api.DICOMwebClientOptions.requestHooks} that must + * see the same XHR pipeline as {@link dmv.viewer.VolumeImageViewer}. + */ + applyToPrimaryDicomwebClient( + fn: (client: dwc.api.DICOMwebClient) => void, + ): void { + if (this.stores.length === 0) { + return + } + fn(this.stores[0].client) + } + /** * Store new instances in the first writable configured store. Picking the * first writable (rather than always store[0]) keeps backwards compatibility diff --git a/src/components/CaseViewer.tsx b/src/components/CaseViewer.tsx index 52d89e27..6029d095 100644 --- a/src/components/CaseViewer.tsx +++ b/src/components/CaseViewer.tsx @@ -1,41 +1,39 @@ import type { MenuProps } from 'antd' -import { Layout, Menu } from 'antd' +import { Layout, Menu, Select, Tag } from 'antd' // skipcq: JS-C1003 import * as dcmjs from 'dcmjs' -import { useEffect, useState } from 'react' +// skipcq: JS-C1003 +import type * as dmv from 'dicom-microscopy-viewer' import { - Route, - Routes, - useLocation, - useNavigate, - useParams, -} from 'react-router-dom' - -import type { AnnotationSettings } from '../AppConfig' + Fragment, + type ReactNode, + useCallback, + useEffect, + useState, +} from 'react' +import { Route, Routes, useLocation, useParams } from 'react-router-dom' + +import type { AnnotationSettings, VivSettings } from '../AppConfig' import type { User } from '../auth' import type DicomWebManager from '../DicomWebManager' import type { Slide } from '../data/slides' import { StorageClasses } from '../data/uids' import { useSlides } from '../hooks/useSlides' -import { - findSlideBySeriesInstanceUID, - seriesUidFromSlide, -} from '../utils/recoverSeriesInstanceUID' +import DicomMetadataStore from '../services/DICOMMetadataStore' import { type RouteComponentProps, withRouter } from '../utils/router' -import { - buildSeriesPath, - hasSeriesInPath, - isProjectsPath, - parseSeriesInstanceUID, - RoutePaths, - withSeriesInProjectPath, -} from '../utils/routes' +import type { VivBulkAnnotationCatalogPayload } from '../viv/loadBulkAnnotationLayers' +import VivSlideViewport from '../viv/VivSlideViewport' +import { EMPTY_VIV_BULK_LOAD_STATUS } from '../viv/vivBulkLoadStatus' +import { VIV_BULK_DEFAULT_OVERLAY_COLOR } from '../viv/vivDisplayDefaults' +import AnnotationGroupList from './AnnotationGroupList' import ClinicalTrial from './ClinicalTrial' import Patient from './Patient' import SlideList from './SlideList' // skipcq: JS-W1028 - SlideViewer has a default export import SlideViewer from './SlideViewer' import Study from './Study' +import VivBulkAnnotationLoadIndicator from './VivBulkAnnotationLoadIndicator' +import VivSettingsDrawer from './VivSettingsDrawer' const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary @@ -64,7 +62,83 @@ interface NaturalizedInstance { const findSeriesSlide = ( slides: Slide[], seriesInstanceUID: string, -): Slide | undefined => findSlideBySeriesInstanceUID(slides, seriesInstanceUID) +): Slide | undefined => { + return slides.find((slide: Slide) => { + return slide.seriesInstanceUIDs.find((uid: string) => { + return uid === seriesInstanceUID + }) + }) +} + +/** Non-interactive menu row for custom panel content (avoids invalid DOM props). */ +const menuPanelItemStyle: React.CSSProperties = { + height: 'auto', + cursor: 'default', + padding: 0, + lineHeight: 'normal', + color: 'rgba(0, 0, 0, 0.85)', +} + +/** + * antd v4 greys disabled items via `.ant-menu-item-disabled { color: ... !important }`, + * which beats the inline item style, so restore contrast on a child wrapper + * (same idea as `.slim-settings-content` in the classic settings drawer). + */ +const menuPanelContentStyle: React.CSSProperties = { + color: 'rgba(0, 0, 0, 0.85)', +} + +function menuPanelItem( + key: string, + label: ReactNode, +): NonNullable[number] { + return { + key, + label:
{label}
, + disabled: true, + style: menuPanelItemStyle, + } +} + +/** Viv path: main viewport + slim right rail (classic viewer uses ~300px sider). */ +const vivChrome = (main: JSX.Element, rightPanel?: ReactNode): JSX.Element => ( +
+
+ {main} +
+ +
+) function ParametrizedSlideViewer({ clients, @@ -74,6 +148,8 @@ function ParametrizedSlideViewer({ preload, enableAnnotationTools, annotations, + useViv, + vivSettings, }: { clients: { [key: string]: DicomWebManager } slides: Slide[] @@ -87,26 +163,152 @@ function ParametrizedSlideViewer({ preload: boolean enableAnnotationTools: boolean annotations: AnnotationSettings[] + useViv: boolean + vivSettings?: VivSettings }): JSX.Element | null { const { studyInstanceUID = '', seriesInstanceUID = '' } = useParams<{ studyInstanceUID: string seriesInstanceUID: string }>() const location = useLocation() - const navigate = useNavigate() const [selectedSlide, setSelectedSlide] = useState( findSeriesSlide(slides, seriesInstanceUID), ) const [derivedDataset, setDerivedDataset] = useState(null) + const [vivBulkCatalog, setVivBulkCatalog] = + useState(null) + const [vivVisibleAnnotationGroupUIDs, setVivVisibleAnnotationGroupUIDs] = + useState>(new Set()) + const [vivAnnotationGroupStyles, setVivAnnotationGroupStyles] = useState< + Record + >({}) + const [vivAnnGroupSeriesSelection, setVivAnnGroupSeriesSelection] = + useState('all') + const [vivIccProfilesAvailable, setVivIccProfilesAvailable] = useState(true) + const [vivBulkLoadStatus, setVivBulkLoadStatus] = useState( + EMPTY_VIV_BULK_LOAD_STATUS, + ) + + const getVivSeriesDescription = (seriesInstanceUID: string): string => { + const study = DicomMetadataStore.getStudy(studyInstanceUID) + if (study?.series != null && study !== undefined) { + const series = study.series.find( + (s) => s.SeriesInstanceUID === seriesInstanceUID, + ) + if ( + series?.SeriesDescription !== undefined && + series.SeriesDescription !== '' + ) { + return series.SeriesDescription + } + } + return `Series ${seriesInstanceUID.slice(0, 8)}…` + } + + const handleVivIccAvailability = useCallback((hasIccProfiles: boolean) => { + setVivIccProfilesAvailable(hasIccProfiles) + }, []) + + const handleVivBulkCatalogChange = useCallback( + (c: VivBulkAnnotationCatalogPayload | null) => { + setVivBulkCatalog(c) + if (c == null) { + setVivBulkLoadStatus(EMPTY_VIV_BULK_LOAD_STATUS) + } + if (c != null && c.annotationGroups.length > 0) { + setVivAnnGroupSeriesSelection('all') + setVivVisibleAnnotationGroupUIDs(new Set()) + setVivAnnotationGroupStyles({ ...c.defaultStylesByGroupUID }) + } else if (c != null) { + setVivVisibleAnnotationGroupUIDs(new Set()) + setVivAnnotationGroupStyles({}) + } else { + setVivVisibleAnnotationGroupUIDs(new Set()) + setVivAnnotationGroupStyles({}) + setVivAnnGroupSeriesSelection('all') + } + }, + [], + ) + + const handleVivAnnotationGroupVisibilityChange = useCallback( + ({ + annotationGroupUID, + isVisible, + }: { + annotationGroupUID: string + isVisible: boolean + }) => { + setVivVisibleAnnotationGroupUIDs((prev) => { + const next = new Set(prev) + if (isVisible) { + next.add(annotationGroupUID) + } else { + next.delete(annotationGroupUID) + } + return next + }) + }, + [], + ) + + const handleVivAnnotationGroupStyleChange = useCallback( + ({ + uid, + styleOptions, + }: { + uid: string + styleOptions: { + opacity?: number + color?: number[] + measurement?: dcmjs.sr.coding.CodedConcept + limitValues?: number[] + } + }) => { + setVivAnnotationGroupStyles((prev) => { + const base = prev[uid] ?? + vivBulkCatalog?.defaultStylesByGroupUID[uid] ?? { + opacity: 1, + color: [...VIV_BULK_DEFAULT_OVERLAY_COLOR], + } + return { + ...prev, + [uid]: { + opacity: styleOptions.opacity ?? base.opacity, + color: styleOptions.color ?? base.color, + }, + } + }) + }, + [vivBulkCatalog], + ) + + const handleVivAnnotationGroupSeriesSelect = useCallback((value: string) => { + setVivVisibleAnnotationGroupUIDs(new Set()) + setVivAnnGroupSeriesSelection(value) + }, []) + + const handleVivAnnotationGroupClick = useCallback((_uid: string) => { + /* Viv preview: no VolumeImageViewer.zoomToROI equivalent yet */ + }, []) useEffect(() => { + setVivIccProfilesAvailable(true) + /* Reset bulk-annotation UI so the previous series' groups/toggles don't + * linger while the new catalog loads (mirrors handleVivBulkCatalogChange + * for a null catalog). */ + setVivBulkCatalog(null) + setVivVisibleAnnotationGroupUIDs(new Set()) + setVivAnnotationGroupStyles({}) + setVivAnnGroupSeriesSelection('all') + setVivBulkLoadStatus(EMPTY_VIV_BULK_LOAD_STATUS) + const currentSlideMatchesSeries = - selectedSlide !== null && - selectedSlide !== undefined && - findSlideBySeriesInstanceUID([selectedSlide], seriesInstanceUID) === - selectedSlide + selectedSlide?.seriesInstanceUIDs.some( + (uid: string) => uid === seriesInstanceUID, + ) ?? false if ( selectedSlide === null || @@ -115,105 +317,69 @@ function ParametrizedSlideViewer({ ) { const imageSlide = findSeriesSlide(slides, seriesInstanceUID) if (imageSlide !== null && imageSlide !== undefined) { - const resolvedSeriesUID = seriesUidFromSlide( - imageSlide, - seriesInstanceUID, - ) setSelectedSlide(imageSlide) setDerivedDataset(null) - if (resolvedSeriesUID !== seriesInstanceUID) { - console.warn( - `Corrected mangled series UID in route: "${seriesInstanceUID}" → "${resolvedSeriesUID}"`, - ) - navigate( - { - pathname: location.pathname.replace( - `/series/${seriesInstanceUID}`, - `/series/${resolvedSeriesUID}`, - ), - search: location.search, - }, - { replace: true }, - ) - } return } const findReferencedSlide = async (): Promise => { - try { - const client = clients[StorageClasses.VL_WHOLE_SLIDE_MICROSCOPY_IMAGE] - const derivedSeriesMetadata = await client.retrieveSeriesMetadata({ - studyInstanceUID, - seriesInstanceUID, - }) - const naturalizedDerivedMetadata = naturalizeDataset( - derivedSeriesMetadata[0], - ) as NaturalizedInstance - if ( - naturalizedDerivedMetadata.ReferencedSeriesSequence != null && - naturalizedDerivedMetadata.ReferencedSeriesSequence.length > 0 - ) { - for (const referencedSeries of naturalizedDerivedMetadata.ReferencedSeriesSequence) { - const referencedImageSeriesUID = - referencedSeries.SeriesInstanceUID - const referencedSlide = slides.find((slide: Slide) => { - return slide.seriesInstanceUIDs.some( - (uid: string) => uid === referencedImageSeriesUID, - ) - }) - if (referencedSlide !== null && referencedSlide !== undefined) { - setSelectedSlide(referencedSlide) - setDerivedDataset(naturalizedDerivedMetadata) - return - } - } - } - const IMAGE_LIBRARY_CONCEPT_NAME_CODE = '111028' - const imageLibrary = naturalizedDerivedMetadata.ContentSequence?.find( - (contentItem) => - contentItem.ConceptNameCodeSequence[0].CodeValue === - IMAGE_LIBRARY_CONCEPT_NAME_CODE, - ) - if ( - imageLibrary?.ContentSequence?.[0]?.ContentSequence?.[0] - ?.ReferencedSOPSequence?.[0] !== undefined && - imageLibrary?.ContentSequence?.[0]?.ContentSequence?.[0] - ?.ReferencedSOPSequence?.[0] !== null - ) { - const referencedSOPInstanceUID = - imageLibrary.ContentSequence[0].ContentSequence[0] - .ReferencedSOPSequence[0].ReferencedSOPInstanceUID + const client = clients[StorageClasses.VL_WHOLE_SLIDE_MICROSCOPY_IMAGE] + const derivedSeriesMetadata = await client.retrieveSeriesMetadata({ + studyInstanceUID, + seriesInstanceUID, + }) + const naturalizedDerivedMetadata = naturalizeDataset( + derivedSeriesMetadata[0], + ) as NaturalizedInstance + if ( + naturalizedDerivedMetadata.ReferencedSeriesSequence != null && + naturalizedDerivedMetadata.ReferencedSeriesSequence.length > 0 + ) { + for (const referencedSeries of naturalizedDerivedMetadata.ReferencedSeriesSequence) { + const referencedImageSeriesUID = referencedSeries.SeriesInstanceUID const referencedSlide = slides.find((slide: Slide) => { - return slide.volumeImages.find( - (image: { SOPInstanceUID: string }) => { - return image.SOPInstanceUID === referencedSOPInstanceUID - }, + return slide.seriesInstanceUIDs.some( + (uid: string) => uid === referencedImageSeriesUID, ) }) - setSelectedSlide(referencedSlide) - setDerivedDataset(naturalizedDerivedMetadata) + if (referencedSlide !== null && referencedSlide !== undefined) { + setSelectedSlide(referencedSlide) + setDerivedDataset(naturalizedDerivedMetadata) + return + } } - } catch (error) { - console.warn( - `Failed to resolve referenced slide for series "${seriesInstanceUID}"`, - error, - ) + } + const IMAGE_LIBRARY_CONCEPT_NAME_CODE = '111028' + const imageLibrary = naturalizedDerivedMetadata.ContentSequence?.find( + (contentItem) => + contentItem.ConceptNameCodeSequence[0].CodeValue === + IMAGE_LIBRARY_CONCEPT_NAME_CODE, + ) + if ( + imageLibrary?.ContentSequence?.[0]?.ContentSequence?.[0] + ?.ReferencedSOPSequence?.[0] !== undefined && + imageLibrary?.ContentSequence?.[0]?.ContentSequence?.[0] + ?.ReferencedSOPSequence?.[0] !== null + ) { + const referencedSOPInstanceUID = + imageLibrary.ContentSequence[0].ContentSequence[0] + .ReferencedSOPSequence[0].ReferencedSOPInstanceUID + const referencedSlide = slides.find((slide: Slide) => { + return slide.volumeImages.find( + (image: { SOPInstanceUID: string }) => { + return image.SOPInstanceUID === referencedSOPInstanceUID + }, + ) + }) + setSelectedSlide(referencedSlide) + setDerivedDataset(naturalizedDerivedMetadata) } } // skipcq: JS-0098 - void operator intentionally discards the Promise void findReferencedSlide() } - }, [ - slides, - clients, - studyInstanceUID, - seriesInstanceUID, - selectedSlide, - navigate, - location.pathname, - location.search, - ]) + }, [slides, clients, studyInstanceUID, seriesInstanceUID, selectedSlide]) const searchParams = new URLSearchParams(location.search) let presentationStateUID: string | undefined @@ -224,25 +390,245 @@ function ParametrizedSlideViewer({ let viewer = null if (selectedSlide != null && selectedSlide !== undefined) { - const resolvedSeriesInstanceUID = seriesUidFromSlide( - selectedSlide, - seriesInstanceUID, - ) - viewer = ( - - ) + if (useViv) { + const microscopyClient = + clients[StorageClasses.VL_WHOLE_SLIDE_MICROSCOPY_IMAGE] ?? + clients.default + if (microscopyClient === undefined) { + return null + } + const bulkAnnotationClient = + clients[StorageClasses.MICROSCOPY_BULK_SIMPLE_ANNOTATION] ?? + microscopyClient + + let vivAnnotationGroupListSection: ReactNode = null + if ( + vivBulkCatalog != null && + vivBulkCatalog.annotationGroups.length > 0 + ) { + const annotationGroups = vivBulkCatalog.annotationGroups + const annotationGroupsBySeries: { + [seriesInstanceUID: string]: dmv.annotation.AnnotationGroup[] + } = {} + for (const ag of annotationGroups) { + const seriesUID = ag.seriesInstanceUID + if (!(seriesUID in annotationGroupsBySeries)) { + annotationGroupsBySeries[seriesUID] = [] + } + annotationGroupsBySeries[seriesUID]?.push(ag) + } + const dropdownOptions = [ + { value: 'all', label: 'All' }, + ...Object.keys(annotationGroupsBySeries).map((seriesUID) => ({ + value: seriesUID, + label: `${getVivSeriesDescription(seriesUID)} (${annotationGroupsBySeries[seriesUID]?.length ?? 0} groups)`, + })), + ] + const selectedSeriesAnnotationGroups = + vivAnnGroupSeriesSelection === 'all' + ? annotationGroups + : (annotationGroupsBySeries[vivAnnGroupSeriesSelection] ?? []) + + vivAnnotationGroupListSection = ( + <> +
+