From 6e9be6cf4d9ed61dc425b98a1572d285d9aa517e Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Mon, 17 Nov 2025 16:57:47 -0500 Subject: [PATCH 01/57] Fix saving colormap/color limits when switching datasets Currently the colors are forgotten as you flip between datasets (e.g. switching to Magma when viewing temporal coherence overrides what you were using for the `timeseries` viewing --- src/bowser/dist/index.js | 2 +- src/components/ControlPanel.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bowser/dist/index.js b/src/bowser/dist/index.js index cb6b9c0..e513ef0 100644 --- a/src/bowser/dist/index.js +++ b/src/bowser/dist/index.js @@ -17446,7 +17446,7 @@ function ControlPanel() { localStorage.setItem(`${datasetName}-colormap_name`, state.colormap); localStorage.setItem(`${datasetName}-vmin`, safeNumToString(state.vmin)); localStorage.setItem(`${datasetName}-vmax`, safeNumToString(state.vmax)); - }, [state.currentDataset, state.colormap, state.vmin, state.vmax]); + }, [state.colormap, state.vmin, state.vmax]); reactExports.useEffect(() => { const datasetName = state.currentDataset; if (!datasetName) return; diff --git a/src/components/ControlPanel.tsx b/src/components/ControlPanel.tsx index 9bffd7d..68788a6 100644 --- a/src/components/ControlPanel.tsx +++ b/src/components/ControlPanel.tsx @@ -40,7 +40,7 @@ export default function ControlPanel() { localStorage.setItem(`${datasetName}-colormap_name`, state.colormap); localStorage.setItem(`${datasetName}-vmin`, safeNumToString(state.vmin)); localStorage.setItem(`${datasetName}-vmax`, safeNumToString(state.vmax)); - }, [state.currentDataset, state.colormap, state.vmin, state.vmax]); + }, [state.colormap, state.vmin, state.vmax]); // On first load / dataset change, read preferences and push into state once useEffect(() => { From 998e6a16c88a9d21231ca67ae8df8b2456a76624 Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Sat, 7 Feb 2026 15:11:13 -0500 Subject: [PATCH 02/57] Update the npm build --- package-lock.json | 1362 ++++++++++++++++++++++++++++++++++++++++- package.json | 7 +- src/bowser/cli.py | 4 + src/bowser/titiler.py | 9 +- 4 files changed, 1369 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77e02bf..dac43af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,9 @@ "react-leaflet": "^4.2.1" }, "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", "@types/leaflet": "^1.9.8", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", @@ -26,10 +29,19 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^27.0.1", "typescript": "^5.2.2", - "vite": "^5.2.0" + "vite": "^5.2.0", + "vitest": "^3.2.4" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true, + "license": "MIT" + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -44,6 +56,61 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.0.5.tgz", + "integrity": "sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "lru-cache": "^11.2.1" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.4.tgz", + "integrity": "sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.2" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -288,6 +355,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", @@ -336,6 +413,141 @@ "node": ">=6.9.0" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.16.tgz", + "integrity": "sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -928,9 +1140,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, @@ -1287,6 +1499,104 @@ "win32" ] }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1332,6 +1642,24 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", @@ -1605,6 +1933,121 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -1628,6 +2071,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1678,6 +2131,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1688,6 +2151,16 @@ "node": ">=8" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1695,6 +2168,16 @@ "dev": true, "license": "MIT" }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1751,14 +2234,24 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/caniuse-lite": { @@ -1782,6 +2275,23 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1821,6 +2331,16 @@ "date-fns": ">=2.0.0" } }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1870,6 +2390,42 @@ "node": ">= 8" } }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.3.tgz", + "integrity": "sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^4.0.3", + "@csstools/css-syntax-patches-for-csstree": "^1.0.14", + "css-tree": "^3.1.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -1877,6 +2433,20 @@ "dev": true, "license": "MIT" }, + "node_modules/data-urls": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/date-fns": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", @@ -1906,6 +2476,23 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1913,6 +2500,16 @@ "dev": true, "license": "MIT" }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1939,6 +2536,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/electron-to-chromium": { "version": "1.5.165", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", @@ -1946,6 +2551,26 @@ "dev": true, "license": "ISC" }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -2212,6 +2837,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2222,6 +2857,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2487,6 +3132,60 @@ "node": ">=8" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2524,6 +3223,16 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2586,6 +3295,13 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2612,6 +3328,46 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.0.1.tgz", + "integrity": "sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^6.7.2", + "cssstyle": "^5.3.1", + "data-urls": "^6.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.1.0", + "ws": "^8.18.3", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -2724,6 +3480,13 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2734,6 +3497,34 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2758,6 +3549,16 @@ "node": ">=8.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -2887,6 +3688,19 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2927,6 +3741,23 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2986,6 +3817,36 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3052,6 +3913,14 @@ "react": "^18.3.1" } }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/react-leaflet": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", @@ -3076,6 +3945,30 @@ "node": ">=0.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3154,6 +4047,13 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3178,6 +4078,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -3223,6 +4143,13 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3243,6 +4170,20 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3256,6 +4197,19 @@ "node": ">=8" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3269,6 +4223,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3282,6 +4256,13 @@ "node": ">=8" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3289,6 +4270,118 @@ "dev": true, "license": "MIT" }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.18.tgz", + "integrity": "sha512-lCcgTAgMxQ1JKOWrVGo6E69Ukbnx4Gc1wiYLRf6J5NN4HRYJtCby1rPF8rkQ4a6qqoFBK5dvjJ1zJ0F7VfDSvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.18" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.18.tgz", + "integrity": "sha512-jqJC13oP4FFAahv4JT/0WTDrCF9Okv7lpKtOZUGPLiAnNbACcSg8Y8T+Z9xthOmRBqi/Sob4yi0TE0miRCvF7Q==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3302,6 +4395,32 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -3456,6 +4575,175 @@ } } }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3472,6 +4760,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -3489,6 +4794,45 @@ "dev": true, "license": "ISC" }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 39ddbc4..109ffe9 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,9 @@ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", "@types/leaflet": "^1.9.8", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", @@ -21,8 +24,10 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^27.0.1", "typescript": "^5.2.2", - "vite": "^5.2.0" + "vite": "^5.2.0", + "vitest": "^3.2.4" }, "dependencies": { "chart.js": "^4.4.1", diff --git a/src/bowser/cli.py b/src/bowser/cli.py index b5a8f0d..386ed44 100644 --- a/src/bowser/cli.py +++ b/src/bowser/cli.py @@ -297,6 +297,10 @@ def _glob(g): "name": "Nonzero connected component counts", "file_list": _glob(f"{wd}/timeseries/nonzero_conncomp_count_*.tif"), }, + { + "name": "Multi-looked coherence", + "file_list": _glob(f"{wd}/interferograms/multilooked_coh*.tif"), + }, { "name": "Re-wrapped phase", "file_list": _glob(f"{wd}/unwrapped/2*[0-9].unw.tif"), diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index ef39d45..817af3f 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -146,11 +146,14 @@ def x_values(self) -> list[str | int]: """Vales to use for the x axis of a time series plot.""" # if len(self.file_list) == 1: dates = self._reader.dates - if not dates or any(d is None for d in dates): + # Check if all dates are valid and non-empty + if not dates or any((d is None or not d) for d in dates): # otherwise, use indexes x_values = np.arange(len(self.file_list)).tolist() else: - x_values = [_format_dates(*k) for k in dates] # type: ignore[misc] + # For time series plotting, use only the last date (secondary/end date) + # For interferograms: first date is reference, second is secondary + x_values = [k[-1].strftime("%Y-%m-%d") for k in dates] # type: ignore[misc] return x_values @@ -190,7 +193,7 @@ def _find_files(glob_str: str) -> list[str]: return file_list -def _format_dates(*dates, fmt="%Y%m%d") -> str: +def _format_dates(*dates, fmt="%Y-%m-%d") -> str: return "_".join(f"{d.strftime(fmt)}" for d in dates) From 66da9f2dba954b677de0da305ab50163c4ad628f Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 17 Feb 2026 15:19:59 +0000 Subject: [PATCH 03/57] Fix COG datetime parsing for Chart.js TimeScale The _format_dates function was producing "%Y%m%d"-formatted strings joined by underscores (e.g. "20250310_20250313"), which chartjs-adapter-date-fns cannot parse. This caused all data points to collapse to the same x position on the time series chart. Changed to output ISO date strings ("2025-03-13") using the last date from multi-date filenames, consistent with how Zarr mode already works. https://claude.ai/code/session_01Gs7FnDKQu95PpxXRkpLCiB --- src/bowser/titiler.py | 9 +++++++-- src/bowser/utils.py | 3 +-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index ef39d45..dcf87df 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -190,8 +190,13 @@ def _find_files(glob_str: str) -> list[str]: return file_list -def _format_dates(*dates, fmt="%Y%m%d") -> str: - return "_".join(f"{d.strftime(fmt)}" for d in dates) +def _format_dates(*dates) -> str: + """Format date(s) as an ISO date string for Chart.js TimeScale. + + For multi-date filenames (e.g. interferograms with reference_secondary), + uses the last date as the temporal x-axis position. + """ + return dates[-1].strftime("%Y-%m-%d") # https://github.com/developmentseed/titiler/blob/0fddd7ed268557e82a5e1520cdd7fdf084afa1b8/src/titiler/core/titiler/core/resources/responses.py#L15 diff --git a/src/bowser/utils.py b/src/bowser/utils.py index 5c66f13..0cf1a68 100644 --- a/src/bowser/utils.py +++ b/src/bowser/utils.py @@ -24,8 +24,7 @@ def _parse_x_values(x_values: list[str | int]) -> np.ndarray: x_values : list[str | int] List of x values which can be: - integers (no time information) - - datetime strings in "%Y-%m-%d" format (xarray mode) - - datetime strings in "%Y%m%d" or "%Y%m%d_%Y%m%d" format (COG mode) + - datetime strings in "%Y-%m-%d" format (both xarray and COG modes) Returns ------- From d33c3b18b7692617e1b3fd1ff228766222f5a47b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 17 Feb 2026 15:30:22 +0000 Subject: [PATCH 04/57] Add reference_date detection for COG datasets with shared first date When all COG files share the same first date (common for interferogram stacks), detect it and surface it to the frontend. The chart x-axis title shows "Time (ref: 2025-03-10)" so users know the reference date. https://claude.ai/code/session_01Gs7FnDKQu95PpxXRkpLCiB --- src/bowser/dist/index.js | 8 +++++--- src/bowser/main.py | 1 + src/bowser/titiler.py | 14 ++++++++++++++ src/components/TimeSeriesChart.tsx | 5 ++++- src/types.ts | 1 + 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/bowser/dist/index.js b/src/bowser/dist/index.js index e513ef0..8af4456 100644 --- a/src/bowser/dist/index.js +++ b/src/bowser/dist/index.js @@ -32288,7 +32288,7 @@ function TimeSeriesChart() { return; } setIsLoading(true); - const currentDatasetInfo = state.datasetInfo[state.currentDataset]; + const currentDatasetInfo2 = state.datasetInfo[state.currentDataset]; const visiblePoints = state.timeSeriesPoints.filter((p2) => p2.visible); if (visiblePoints.length === 0) { setChartData(null); @@ -32304,7 +32304,7 @@ function TimeSeriesChart() { name: point.name })); let refLon, refLat; - if (currentDatasetInfo == null ? void 0 : currentDatasetInfo.uses_spatial_ref) { + if (currentDatasetInfo2 == null ? void 0 : currentDatasetInfo2.uses_spatial_ref) { [refLat, refLon] = state.refMarkerPosition; } const tsData = await fetchMultiPointTimeSeries( @@ -32407,6 +32407,8 @@ function TimeSeriesChart() { link.click(); document.body.removeChild(link); }, [chartData, state.showTrends, state.currentDataset]); + const currentDatasetInfo = state.currentDataset ? state.datasetInfo[state.currentDataset] : null; + const referenceDate = currentDatasetInfo == null ? void 0 : currentDatasetInfo.reference_date; const chartOptions = { responsive: true, maintainAspectRatio: false, @@ -32467,7 +32469,7 @@ function TimeSeriesChart() { }, title: { display: true, - text: "Time" + text: referenceDate ? `Time (ref: ${referenceDate})` : "Time" } }, y: { diff --git a/src/bowser/main.py b/src/bowser/main.py index e773677..405a2fc 100644 --- a/src/bowser/main.py +++ b/src/bowser/main.py @@ -169,6 +169,7 @@ def create_rastergroup_dataset_info(raster_groups: dict) -> dict: "bounds": list(rg.bounds), "latlon_bounds": list(rg.latlon_bounds), "x_values": rg.x_values, + "reference_date": rg.reference_date, } return dataset_info diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index dcf87df..117125a 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -154,6 +154,20 @@ def x_values(self) -> list[str | int]: return x_values + @computed_field + def reference_date(self) -> str | None: + """Common reference date if all files share the same first date.""" + dates = self._reader.dates + if not dates or any(d is None for d in dates): + return None + # Check for multi-date filenames (e.g., interferograms) + if not all(len(d) > 1 for d in dates): + return None + first_dates = {d[0] for d in dates} + if len(first_dates) == 1: + return first_dates.pop().strftime("%Y-%m-%d") + return None + @classmethod def from_glob( cls, diff --git a/src/components/TimeSeriesChart.tsx b/src/components/TimeSeriesChart.tsx index bef519d..f2412f2 100644 --- a/src/components/TimeSeriesChart.tsx +++ b/src/components/TimeSeriesChart.tsx @@ -170,6 +170,9 @@ export default function TimeSeriesChart() { document.body.removeChild(link); }, [chartData, state.showTrends, state.currentDataset]); + const currentDatasetInfo = state.currentDataset ? state.datasetInfo[state.currentDataset] : null; + const referenceDate = currentDatasetInfo?.reference_date; + const chartOptions = { responsive: true, maintainAspectRatio: false, @@ -232,7 +235,7 @@ export default function TimeSeriesChart() { }, title: { display: true, - text: 'Time', + text: referenceDate ? `Time (ref: ${referenceDate})` : 'Time', }, }, y: { diff --git a/src/types.ts b/src/types.ts index 6ff72ae..6514875 100644 --- a/src/types.ts +++ b/src/types.ts @@ -8,6 +8,7 @@ export interface RasterGroup { algorithm: string | null; latlon_bounds: [number, number, number, number]; x_values: Array; + reference_date?: string | null; } export interface TimeSeriesPoint { From 882e1a5eaf6b999d8dc006951f42b88f2dd2024c Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 17 Feb 2026 17:34:45 +0000 Subject: [PATCH 05/57] Fix empty date tuple crash and add tests for date formatting The x_values check `any(d is None for d in dates)` didn't catch empty tuples from get_dates() on files without dates (e.g. velocity.tif). Changed to `any(not d for d in dates)` which handles both None and (). Added test_titiler.py with unit tests for _format_dates and integration tests for RasterGroup.x_values and .reference_date using test data. https://claude.ai/code/session_01Gs7FnDKQu95PpxXRkpLCiB --- src/bowser/titiler.py | 4 +- tests/test_titiler.py | 91 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 tests/test_titiler.py diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index 117125a..7ccd394 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -146,7 +146,7 @@ def x_values(self) -> list[str | int]: """Vales to use for the x axis of a time series plot.""" # if len(self.file_list) == 1: dates = self._reader.dates - if not dates or any(d is None for d in dates): + if not dates or any(not d for d in dates): # otherwise, use indexes x_values = np.arange(len(self.file_list)).tolist() else: @@ -158,7 +158,7 @@ def x_values(self) -> list[str | int]: def reference_date(self) -> str | None: """Common reference date if all files share the same first date.""" dates = self._reader.dates - if not dates or any(d is None for d in dates): + if not dates or any(not d for d in dates): return None # Check for multi-date filenames (e.g., interferograms) if not all(len(d) > 1 for d in dates): diff --git a/tests/test_titiler.py b/tests/test_titiler.py new file mode 100644 index 0000000..34c11d2 --- /dev/null +++ b/tests/test_titiler.py @@ -0,0 +1,91 @@ +"""Tests for bowser.titiler date formatting and reference date detection.""" + +from datetime import datetime + +import pytest + +from bowser.titiler import _format_dates + + +class TestFormatDates: + def test_single_date(self): + d = datetime(2025, 3, 13) + assert _format_dates(d) == "2025-03-13" + + def test_two_dates_uses_last(self): + ref = datetime(2025, 3, 10) + sec = datetime(2025, 3, 13) + assert _format_dates(ref, sec) == "2025-03-13" + + def test_three_dates_uses_last(self): + d1 = datetime(2025, 1, 1) + d2 = datetime(2025, 6, 15) + d3 = datetime(2025, 12, 31) + assert _format_dates(d1, d2, d3) == "2025-12-31" + + def test_no_dates_raises(self): + with pytest.raises((IndexError, TypeError)): + _format_dates() + + +class TestRasterGroupReferenceDate: + """Test reference_date via the integration test data. + + Uses the displacement COG files in tests/data/geotiffs/ which have + filenames like displacement_20160708_20160801.tif (shared ref date). + """ + + @pytest.fixture() + def raster_group_shared_ref(self): + """RasterGroup with a shared reference date across all files.""" + import os + import subprocess + import tempfile + from pathlib import Path + + from bowser.titiler import RasterGroup + + data_dir = Path(__file__).parent / "data/geotiffs" + disp_files = sorted(data_dir.glob("displacement_*.tif")) + assert len(disp_files) > 1, "Need displacement test files" + + rg = RasterGroup( + name="test_displacement", + file_list=[str(f) for f in disp_files], + file_date_fmt="%Y%m%d", + ) + return rg + + @pytest.fixture() + def raster_group_no_dates(self): + """RasterGroup with date parsing disabled.""" + from pathlib import Path + + from bowser.titiler import RasterGroup + + data_dir = Path(__file__).parent / "data/geotiffs" + disp_file = sorted(data_dir.glob("displacement_*.tif"))[0] + + rg = RasterGroup( + name="test_no_dates", + file_list=[str(disp_file)], + file_date_fmt=None, + ) + return rg + + def test_x_values_are_iso_dates(self, raster_group_shared_ref): + x = raster_group_shared_ref.x_values + assert all(isinstance(v, str) for v in x) + # Should be ISO format like "2016-08-01" + assert all("-" in v for v in x) + assert x[0] == "2016-08-01" + + def test_reference_date_detected(self, raster_group_shared_ref): + assert raster_group_shared_ref.reference_date == "2016-07-08" + + def test_no_dates_falls_back_to_indexes(self, raster_group_no_dates): + x = raster_group_no_dates.x_values + assert x == [0] + + def test_no_dates_reference_date_is_none(self, raster_group_no_dates): + assert raster_group_no_dates.reference_date is None From d3486570ead6eea71424503cd186c0a3df0e1754 Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Wed, 25 Feb 2026 15:38:34 -0500 Subject: [PATCH 06/57] fix ci --- src/bowser/titiler.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index 006bae0..3ff8088 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -153,7 +153,7 @@ def x_values(self) -> list[str | int]: else: # For time series plotting, use only the last date (secondary/end date) # For interferograms: first date is reference, second is secondary - x_values = [k[-1].strftime("%Y-%m-%d") for k in dates] # noqa: ignore[misc] + x_values = [k[-1].strftime("%Y-%m-%d") for k in dates] # type: ignore[index] return x_values @@ -164,9 +164,9 @@ def reference_date(self) -> str | None: if not dates or any(not d for d in dates): return None # Check for multi-date filenames (e.g., interferograms) - if not all(len(d) > 1 for d in dates): + if not all(len(d) > 1 for d in dates): # type: ignore[arg-type] return None - first_dates = {d[0] for d in dates} + first_dates = {d[0] for d in dates} # type: ignore[index] if len(first_dates) == 1: return first_dates.pop().strftime("%Y-%m-%d") return None From f61a3f5f84dd1c04f396e28c95da6d0632d8df70 Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Thu, 26 Feb 2026 18:08:05 -0500 Subject: [PATCH 07/57] Fix chart for interferograms with varying reference dates When multi-date files (unwrapped phase, coherence) have different reference dates, the secondary dates can repeat. Instead of using only the secondary date (which caused duplicate x-values and zigzag charts), use full "ref_secondary" date pair labels and render with a Chart.js category scale. - Remove unused _format_dates function and its tests - Detect duplicate secondary dates in x_values and fall back to date pairs - Add CategoryScale to Chart.js, auto-select scale type from label format - Clean up unused imports in test fixtures Co-Authored-By: Claude Opus 4.6 --- src/bowser/titiler.py | 29 ++++---- src/components/TimeSeriesChart.tsx | 65 ++++++++++++++---- tests/test_titiler.py | 107 ++++++++++++++++++++++------- 3 files changed, 144 insertions(+), 57 deletions(-) diff --git a/src/bowser/titiler.py b/src/bowser/titiler.py index 3ff8088..25a5b42 100644 --- a/src/bowser/titiler.py +++ b/src/bowser/titiler.py @@ -144,16 +144,22 @@ def latlon_bounds(self) -> tuple[float, float, float, float]: @computed_field def x_values(self) -> list[str | int]: """Vales to use for the x axis of a time series plot.""" - # if len(self.file_list) == 1: dates = self._reader.dates # Check if all dates are valid and non-empty if not dates or any((d is None or not d) for d in dates): - # otherwise, use indexes - x_values = np.arange(len(self.file_list)).tolist() - else: - # For time series plotting, use only the last date (secondary/end date) - # For interferograms: first date is reference, second is secondary - x_values = [k[-1].strftime("%Y-%m-%d") for k in dates] # type: ignore[index] + return np.arange(len(self.file_list)).tolist() + + # For time series plotting, use the last date (secondary/end date) + x_values = [k[-1].strftime("%Y-%m-%d") for k in dates] # type: ignore[index] + + # If secondary dates have duplicates (e.g., interferograms with varying + # reference dates), use full "ref_secondary" date pair labels instead. + # The frontend renders these with a category scale. + if len(set(x_values)) != len(x_values): + return [ + "_".join(d.strftime("%Y-%m-%d") for d in k) # type: ignore[union-attr] + for k in dates + ] return x_values @@ -207,15 +213,6 @@ def _find_files(glob_str: str) -> list[str]: return file_list -def _format_dates(*dates, fmt: str = "%Y-%m-%d") -> str: - """Format date(s) as an ISO date string for Chart.js TimeScale. - - For multi-date filenames (e.g. interferograms with reference_secondary), - uses the last date as the temporal x-axis position. - """ - return dates[-1].strftime(fmt) - - # https://github.com/developmentseed/titiler/blob/0fddd7ed268557e82a5e1520cdd7fdf084afa1b8/src/titiler/core/titiler/core/resources/responses.py#L15 class JSONResponse(responses.JSONResponse): """Custom JSON Response.""" diff --git a/src/components/TimeSeriesChart.tsx b/src/components/TimeSeriesChart.tsx index f2412f2..c472b5f 100644 --- a/src/components/TimeSeriesChart.tsx +++ b/src/components/TimeSeriesChart.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useCallback } from 'react'; -import { Chart as ChartJS, TimeScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, InteractionItem } from 'chart.js'; +import { Chart as ChartJS, TimeScale, LinearScale, CategoryScale, PointElement, LineElement, Title, Tooltip, Legend, InteractionItem } from 'chart.js'; import { Line } from 'react-chartjs-2'; import 'chartjs-adapter-date-fns'; import { useAppContext } from '../context/AppContext'; @@ -7,7 +7,7 @@ import { useApi } from '../hooks/useApi'; import { MultiPointTimeSeriesData } from '../types'; // Register Chart.js components -ChartJS.register(TimeScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend); +ChartJS.register(TimeScale, LinearScale, CategoryScale, PointElement, LineElement, Title, Tooltip, Legend); export default function TimeSeriesChart() { const { state, dispatch } = useAppContext(); @@ -173,6 +173,53 @@ export default function TimeSeriesChart() { const currentDatasetInfo = state.currentDataset ? state.datasetInfo[state.currentDataset] : null; const referenceDate = currentDatasetInfo?.reference_date; + // Determine x-axis scale type based on label format: + // - "2016-01-01" (ISO date string) → time scale + // - "2016-01-01_2016-02-01" (date pair) → category scale + // - 0, 1, 2 (integers) → linear scale + const firstLabel = chartData?.labels?.[0]; + const labelType: 'time' | 'category' | 'linear' = + typeof firstLabel === 'number' ? 'linear' + : typeof firstLabel === 'string' && firstLabel.includes('_') ? 'category' + : 'time'; + + const xScale = labelType === 'time' + ? { + type: 'time' as const, + time: { + displayFormats: { + month: 'MMM yyyy', + year: 'yyyy', + }, + }, + title: { + display: true, + text: referenceDate ? `Time (ref: ${referenceDate})` : 'Time', + }, + } + : labelType === 'category' + ? { + type: 'category' as const, + title: { + display: true, + text: 'Date pair (reference_secondary)', + }, + ticks: { + maxRotation: 45, + autoSkip: true, + }, + } + : { + type: 'linear' as const, + title: { + display: true, + text: 'Image index', + }, + ticks: { + stepSize: 1, + }, + }; + const chartOptions = { responsive: true, maintainAspectRatio: false, @@ -225,19 +272,7 @@ export default function TimeSeriesChart() { }, }, scales: { - x: { - type: 'time' as const, - time: { - displayFormats: { - month: 'MMM yyyy', - year: 'yyyy', - }, - }, - title: { - display: true, - text: referenceDate ? `Time (ref: ${referenceDate})` : 'Time', - }, - }, + x: xScale, y: { title: { display: true, diff --git a/tests/test_titiler.py b/tests/test_titiler.py index 34c11d2..c6fe31e 100644 --- a/tests/test_titiler.py +++ b/tests/test_titiler.py @@ -4,29 +4,6 @@ import pytest -from bowser.titiler import _format_dates - - -class TestFormatDates: - def test_single_date(self): - d = datetime(2025, 3, 13) - assert _format_dates(d) == "2025-03-13" - - def test_two_dates_uses_last(self): - ref = datetime(2025, 3, 10) - sec = datetime(2025, 3, 13) - assert _format_dates(ref, sec) == "2025-03-13" - - def test_three_dates_uses_last(self): - d1 = datetime(2025, 1, 1) - d2 = datetime(2025, 6, 15) - d3 = datetime(2025, 12, 31) - assert _format_dates(d1, d2, d3) == "2025-12-31" - - def test_no_dates_raises(self): - with pytest.raises((IndexError, TypeError)): - _format_dates() - class TestRasterGroupReferenceDate: """Test reference_date via the integration test data. @@ -38,9 +15,6 @@ class TestRasterGroupReferenceDate: @pytest.fixture() def raster_group_shared_ref(self): """RasterGroup with a shared reference date across all files.""" - import os - import subprocess - import tempfile from pathlib import Path from bowser.titiler import RasterGroup @@ -89,3 +63,84 @@ def test_no_dates_falls_back_to_indexes(self, raster_group_no_dates): def test_no_dates_reference_date_is_none(self, raster_group_no_dates): assert raster_group_no_dates.reference_date is None + + +class TestDuplicateSecondaryDates: + """Test that varying reference dates with duplicate secondary dates fall back.""" + + def test_duplicate_secondary_dates_fall_back_to_indices(self): + """Interferograms with different reference dates can share secondary dates. + + E.g., unwrapped_20160101_20160201.tif and unwrapped_20160115_20160201.tif + both have secondary date 2016-02-01. Using only the secondary date as + x_value produces duplicates, so we should fall back to integer indices. + """ + from unittest.mock import PropertyMock, patch + + from bowser.titiler import RasterGroup + + # Simulate 4 interferograms: 2 reference dates x 2 secondary dates + # ref1_sec1, ref2_sec1, ref1_sec2, ref2_sec2 + fake_dates = [ + (datetime(2016, 1, 1), datetime(2016, 2, 1)), + (datetime(2016, 1, 15), datetime(2016, 2, 1)), # dup secondary + (datetime(2016, 1, 1), datetime(2016, 2, 15)), + (datetime(2016, 1, 15), datetime(2016, 2, 15)), # dup secondary + ] + from pathlib import Path + + data_dir = Path(__file__).parent / "data/geotiffs" + disp_files = sorted(data_dir.glob("displacement_*.tif"))[:4] + + rg = RasterGroup( + name="test_varying_ref", + file_list=[str(f) for f in disp_files], + file_date_fmt="%Y%m%d", + ) + # Patch the reader's dates to simulate varying reference dates + with patch.object( + type(rg._reader), + "dates", + new_callable=PropertyMock, + return_value=fake_dates, + ): + x = rg.x_values + # Should use full "ref_secondary" date pair labels + assert x == [ + "2016-01-01_2016-02-01", + "2016-01-15_2016-02-01", + "2016-01-01_2016-02-15", + "2016-01-15_2016-02-15", + ] + # reference_date should be None (varying first dates) + assert rg.reference_date is None + + def test_unique_secondary_dates_use_dates(self): + """When secondary dates are all unique, they should be used as x_values.""" + from unittest.mock import PropertyMock, patch + + from bowser.titiler import RasterGroup + + fake_dates = [ + (datetime(2016, 1, 1), datetime(2016, 2, 1)), + (datetime(2016, 1, 1), datetime(2016, 2, 15)), + (datetime(2016, 1, 1), datetime(2016, 3, 1)), + ] + from pathlib import Path + + data_dir = Path(__file__).parent / "data/geotiffs" + disp_files = sorted(data_dir.glob("displacement_*.tif"))[:3] + + rg = RasterGroup( + name="test_unique_sec", + file_list=[str(f) for f in disp_files], + file_date_fmt="%Y%m%d", + ) + with patch.object( + type(rg._reader), + "dates", + new_callable=PropertyMock, + return_value=fake_dates, + ): + x = rg.x_values + assert x == ["2016-02-01", "2016-02-15", "2016-03-01"] From e83d65af9e9d33c818dfe8adef9793d2684abe7b Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Fri, 27 Feb 2026 10:46:52 -0500 Subject: [PATCH 08/57] Fix float16, add tests --- src/bowser/dist/index.js | 192 +++++++++++++++++++++++---- src/bowser/readers.py | 21 +++ src/components/ControlPanel.test.tsx | 115 ++++++++++++++++ src/components/MapContainer.tsx | 4 +- src/test/setup.ts | 1 + vitest.config.ts | 11 ++ 6 files changed, 318 insertions(+), 26 deletions(-) create mode 100644 src/components/ControlPanel.test.tsx create mode 100644 src/test/setup.ts create mode 100644 vitest.config.ts diff --git a/src/bowser/dist/index.js b/src/bowser/dist/index.js index 8af4456..1f76e12 100644 --- a/src/bowser/dist/index.js +++ b/src/bowser/dist/index.js @@ -17271,7 +17271,7 @@ function RasterTileLayer() { { url: tileUrl, opacity: state.opacity, - maxZoom: 19 + maxZoom: 22 }, tileUrl ); @@ -17406,7 +17406,7 @@ function MapContainer() { { url: selectedBasemap.url, attribution: selectedBasemap.attribution, - maxZoom: 19 + maxZoom: 22 } ), /* @__PURE__ */ jsxRuntimeExports.jsx(RasterTileLayer, {}), @@ -22856,11 +22856,11 @@ function sample(arr, numItems) { } function getPixelForGridLine(scale, index, offsetGridLines) { const length = scale.ticks.length; - const validIndex = Math.min(index, length - 1); + const validIndex2 = Math.min(index, length - 1); const start = scale._startPixel; const end = scale._endPixel; const epsilon = 1e-6; - let lineValue = scale.getPixelForTick(validIndex); + let lineValue = scale.getPixelForTick(validIndex2); let offset; if (offsetGridLines) { if (length === 1) { @@ -22868,9 +22868,9 @@ function getPixelForGridLine(scale, index, offsetGridLines) { } else if (index === 0) { offset = (scale.getPixelForTick(1) - lineValue) / 2; } else { - offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2; + offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2; } - lineValue += validIndex < index ? offset : -offset; + lineValue += validIndex2 < index ? offset : -offset; if (lineValue < start - epsilon || lineValue > end + epsilon) { return; } @@ -27668,6 +27668,127 @@ var plugin_tooltip = { "interaction" ] }; +const addIfString = (labels, raw, index, addedLabels) => { + if (typeof raw === "string") { + index = labels.push(raw) - 1; + addedLabels.unshift({ + index, + label: raw + }); + } else if (isNaN(raw)) { + index = null; + } + return index; +}; +function findOrAddLabel(labels, raw, index, addedLabels) { + const first = labels.indexOf(raw); + if (first === -1) { + return addIfString(labels, raw, index, addedLabels); + } + const last = labels.lastIndexOf(raw); + return first !== last ? index : first; +} +const validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max); +function _getLabelForValue(value) { + const labels = this.getLabels(); + if (value >= 0 && value < labels.length) { + return labels[value]; + } + return value; +} +class CategoryScale extends Scale { + constructor(cfg) { + super(cfg); + this._startValue = void 0; + this._valueRange = 0; + this._addedLabels = []; + } + init(scaleOptions) { + const added = this._addedLabels; + if (added.length) { + const labels = this.getLabels(); + for (const { index, label } of added) { + if (labels[index] === label) { + labels.splice(index, 1); + } + } + this._addedLabels = []; + } + super.init(scaleOptions); + } + parse(raw, index) { + if (isNullOrUndef(raw)) { + return null; + } + const labels = this.getLabels(); + index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels); + return validIndex(index, labels.length - 1); + } + determineDataLimits() { + const { minDefined, maxDefined } = this.getUserBounds(); + let { min, max } = this.getMinMax(true); + if (this.options.bounds === "ticks") { + if (!minDefined) { + min = 0; + } + if (!maxDefined) { + max = this.getLabels().length - 1; + } + } + this.min = min; + this.max = max; + } + buildTicks() { + const min = this.min; + const max = this.max; + const offset = this.options.offset; + const ticks = []; + let labels = this.getLabels(); + labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1); + this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); + this._startValue = this.min - (offset ? 0.5 : 0); + for (let value = min; value <= max; value++) { + ticks.push({ + value + }); + } + return ticks; + } + getLabelForValue(value) { + return _getLabelForValue.call(this, value); + } + configure() { + super.configure(); + if (!this.isHorizontal()) { + this._reversePixels = !this._reversePixels; + } + } + getPixelForValue(value) { + if (typeof value !== "number") { + value = this.parse(value); + } + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getPixelForTick(index) { + const ticks = this.ticks; + if (index < 0 || index > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index].value); + } + getValueForPixel(pixel) { + return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); + } + getBasePixel() { + return this.bottom; + } +} +__publicField(CategoryScale, "id", "category"); +__publicField(CategoryScale, "defaults", { + ticks: { + callback: _getLabelForValue + } +}); function generateTicks$1(generationOptions, dataRange) { const ticks = []; const MIN_SPACING = 1e-14; @@ -32276,8 +32397,9 @@ adapters._date.override({ } } }); -Chart$1.register(TimeScale, LinearScale, PointElement, LineElement, plugin_title, plugin_tooltip, plugin_legend); +Chart$1.register(TimeScale, LinearScale, CategoryScale, PointElement, LineElement, plugin_title, plugin_tooltip, plugin_legend); function TimeSeriesChart() { + var _a2; const { state, dispatch } = useAppContext(); const { fetchMultiPointTimeSeries } = useApi(); const [chartData, setChartData] = reactExports.useState(null); @@ -32409,6 +32531,40 @@ function TimeSeriesChart() { }, [chartData, state.showTrends, state.currentDataset]); const currentDatasetInfo = state.currentDataset ? state.datasetInfo[state.currentDataset] : null; const referenceDate = currentDatasetInfo == null ? void 0 : currentDatasetInfo.reference_date; + const firstLabel = (_a2 = chartData == null ? void 0 : chartData.labels) == null ? void 0 : _a2[0]; + const labelType = typeof firstLabel === "number" ? "linear" : typeof firstLabel === "string" && firstLabel.includes("_") ? "category" : "time"; + const xScale = labelType === "time" ? { + type: "time", + time: { + displayFormats: { + month: "MMM yyyy", + year: "yyyy" + } + }, + title: { + display: true, + text: referenceDate ? `Time (ref: ${referenceDate})` : "Time" + } + } : labelType === "category" ? { + type: "category", + title: { + display: true, + text: "Date pair (reference_secondary)" + }, + ticks: { + maxRotation: 45, + autoSkip: true + } + } : { + type: "linear", + title: { + display: true, + text: "Image index" + }, + ticks: { + stepSize: 1 + } + }; const chartOptions = { responsive: true, maintainAspectRatio: false, @@ -32442,12 +32598,12 @@ function TimeSeriesChart() { tooltip: { callbacks: { title: (context) => { - var _a2; - return `Time: ${((_a2 = context[0]) == null ? void 0 : _a2.label) || ""}`; + var _a3; + return `Time: ${((_a3 = context[0]) == null ? void 0 : _a3.label) || ""}`; }, label: (context) => { - var _a2; - const dataset = (_a2 = chartData == null ? void 0 : chartData.datasets) == null ? void 0 : _a2[context.datasetIndex]; + var _a3; + const dataset = (_a3 = chartData == null ? void 0 : chartData.datasets) == null ? void 0 : _a3[context.datasetIndex]; if (!dataset) return ""; let label = `${dataset.label}: ${context.parsed.y.toFixed(3)}`; if (dataset.trend && dataset.trend.mmPerYear !== void 0 && state.showTrends) { @@ -32459,19 +32615,7 @@ function TimeSeriesChart() { } }, scales: { - x: { - type: "time", - time: { - displayFormats: { - month: "MMM yyyy", - year: "yyyy" - } - }, - title: { - display: true, - text: referenceDate ? `Time (ref: ${referenceDate})` : "Time" - } - }, + x: xScale, y: { title: { display: true, diff --git a/src/bowser/readers.py b/src/bowser/readers.py index 4a498a2..f0f9dad 100644 --- a/src/bowser/readers.py +++ b/src/bowser/readers.py @@ -26,6 +26,7 @@ from opera_utils import get_dates from pyproj import Transformer from rasterio.crs import CRS +from rasterio.dtypes import dtype_fwd from rio_tiler.constants import WEB_MERCATOR_TMS, WGS84_CRS from rio_tiler.io import BaseReader, Reader from rio_tiler.models import BandStatistics, ImageData, Info, PointData @@ -34,6 +35,26 @@ PathOrStr = Path | str +# GDAL 3.11+ interprets NBITS=16 on float32 GeoTIFFs as native Float16 +# (datatype code 15). Rasterio builds that lack a mapping for code 15 +# raise KeyError on open. Patch the mapping so these files can be read. +_GDAL_FLOAT16_CODE = 15 +if _GDAL_FLOAT16_CODE not in dtype_fwd: + dtype_fwd[_GDAL_FLOAT16_CODE] = "float32" + + +def _can_use_nbits16() -> bool: + """Check whether NBITS=16 can be used safely with the current GDAL/rasterio. + + Returns False when GDAL >= 3.11 would reinterpret NBITS=16 float32 as + Float16 but rasterio has no native Float16 support. Callers that create + GeoTIFFs should skip the NBITS=16 creation option when this returns False. + """ + return ( + _GDAL_FLOAT16_CODE in dtype_fwd and dtype_fwd[_GDAL_FLOAT16_CODE] != "float32" + ) + + __all__ = [ "DatasetReader", "StackReader", diff --git a/src/components/ControlPanel.test.tsx b/src/components/ControlPanel.test.tsx new file mode 100644 index 0000000..e1739b9 --- /dev/null +++ b/src/components/ControlPanel.test.tsx @@ -0,0 +1,115 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import ControlPanel from './ControlPanel'; +import { AppProvider } from '../context/AppContext'; + +// Mock the useApi hook since we don't need actual API calls +vi.mock('../hooks/useApi', () => ({ + useApi: () => ({ + fetchPointTimeSeries: vi.fn(), + }), +})); + +describe('ControlPanel localStorage', () => { + beforeEach(() => { + // Clear localStorage before each test + localStorage.clear(); + vi.clearAllMocks(); + }); + + it('saves colormap settings to localStorage when changed', async () => { + const user = userEvent.setup(); + + render( + + + + ); + + // Find and change the colormap selector + const colormapSelect = screen.getByDisplayValue('Blue-Red'); + await user.selectOptions(colormapSelect, 'viridis'); + + // Wait for the effect to save to localStorage + await waitFor(() => { + expect(localStorage.getItem('dataset-a-colormap_name')).toBe('viridis'); + }); + }); + + it('does not overwrite new dataset settings when switching datasets', async () => { + const user = userEvent.setup(); + + // Pre-populate localStorage with saved settings for both datasets + localStorage.setItem('dataset-a-colormap_name', 'viridis'); + localStorage.setItem('dataset-b-colormap_name', 'magma'); + + render( + + + + ); + + // Initially on dataset-a, should load viridis + await waitFor(() => { + const colormapSelect = screen.getByRole('combobox', { name: /color map/i }); + expect(colormapSelect).toHaveValue('viridis'); + }); + + // Switch to dataset-b + const datasetSelect = screen.getByRole('combobox', { name: /layers/i }); + await user.selectOptions(datasetSelect, 'dataset-b'); + + // Should load magma (dataset-b's saved colormap) + await waitFor(() => { + const colormapSelect = screen.getByRole('combobox', { name: /color map/i }); + expect(colormapSelect).toHaveValue('magma'); + }); + + // Verify that dataset-b's localStorage was NOT overwritten with dataset-a's value + expect(localStorage.getItem('dataset-b-colormap_name')).toBe('magma'); + }); + + it('preserves color limits when switching between datasets', async () => { + const user = userEvent.setup(); + + localStorage.setItem('dataset-a-vmin', '-10'); + localStorage.setItem('dataset-a-vmax', '10'); + localStorage.setItem('dataset-b-vmin', '-5'); + localStorage.setItem('dataset-b-vmax', '5'); + + render( + + + + ); + + // On dataset-a, should load -10/10 + await waitFor(() => { + const vminInputs = screen.getAllByRole('textbox', { name: '' }); + expect(vminInputs[0]).toHaveValue('-10'); + expect(vminInputs[1]).toHaveValue('10'); + }); + + // Switch to dataset-b + const datasetSelect = screen.getByRole('combobox', { name: /layers/i }); + await user.selectOptions(datasetSelect, 'dataset-b'); + + // Should load -5/5 (dataset-b's saved limits) + await waitFor(() => { + const vminInputs = screen.getAllByRole('textbox', { name: '' }); + expect(vminInputs[0]).toHaveValue('-5'); + expect(vminInputs[1]).toHaveValue('5'); + }); + + // Switch back to dataset-a + await user.selectOptions(datasetSelect, 'dataset-a'); + + // Should load -10/10 again (dataset-a's saved limits) + await waitFor(() => { + const vminInputs = screen.getAllByRole('textbox', { name: '' }); + expect(vminInputs[0]).toHaveValue('-10'); + expect(vminInputs[1]).toHaveValue('10'); + }); + }); +}); diff --git a/src/components/MapContainer.tsx b/src/components/MapContainer.tsx index 3c0b08c..f586ca9 100644 --- a/src/components/MapContainer.tsx +++ b/src/components/MapContainer.tsx @@ -150,7 +150,7 @@ function RasterTileLayer() { key={tileUrl} // force refresh if URL changes url={tileUrl} opacity={state.opacity} - maxZoom={19} + maxZoom={22} /> ); } @@ -307,7 +307,7 @@ export default function MapContainer() { diff --git a/src/test/setup.ts b/src/test/setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/src/test/setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..73a02f3 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vitest/config'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + test: { + environment: 'jsdom', + globals: true, + setupFiles: './src/test/setup.ts', + }, +}); From 4e3a1b6cb92cfd957518c87e1f9dba00bc0aa879 Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Fri, 13 Mar 2026 13:14:10 -0400 Subject: [PATCH 09/57] Add new optional post-processed results --- src/bowser/cli.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/bowser/cli.py b/src/bowser/cli.py index 386ed44..eb6b098 100644 --- a/src/bowser/cli.py +++ b/src/bowser/cli.py @@ -263,21 +263,37 @@ def _glob(g): dolphin_outputs = [ { - "name": "time series", + "name": "Time series", "file_list": _glob(f"{wd}/timeseries/2*[0-9].tif"), "uses_spatial_ref": True, "algorithm": Algorithm.SHIFT.value, }, { - "name": "velocity", + "name": "Velocity", "file_list": [f"{wd}/timeseries/velocity.tif"], "uses_spatial_ref": True, "algorithm": Algorithm.SHIFT.value, }, + { + "name": "Velocity Std. Err.", + "file_list": [f"{wd}/timeseries/velocity_stderr.tif"], + "uses_spatial_ref": True, + "algorithm": Algorithm.SHIFT.value, + }, + { + "name": "Velocity Confidence Interval Margin", + "file_list": [f"{wd}/timeseries/velocity_ci_margin.tif"], + }, { "name": "Filtered time series", "file_list": _glob(f"{wd}/filtered_timeseries*/2*[0-9].tif"), }, + { + "name": "Filtered time series (deramped)", + "file_list": _glob(f"{wd}/filtered_timeseries*/2*[0-9]_deramped.tif"), + "uses_spatial_ref": True, + "algorithm": Algorithm.SHIFT.value, + }, { "name": "Filtered velocity", "file_list": [f"{wd}/filtered_timeseries*/velocity.tif"], @@ -356,6 +372,14 @@ def _glob(g): "name": "Time series residuals", "file_list": _glob(f"{wd}/timeseries/residuals_2*[0-9].tif"), }, + { + "name": "Point height correction", + "file_list": _glob(f"{wd}/timeseries/point_height_correction.tif"), + }, + { + "name": "Point height correction std. err.", + "file_list": _glob(f"{wd}/timeseries/point_height_correction_stderr.tif"), + }, { "name": "Time series residuals (total sum)", "file_list": _glob(f"{wd}/timeseries/unw_inversion_residuals.tif"), From 2a1886198cc1e3de8c0f8aa05f5f0d06f04e4b2f Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Sun, 22 Mar 2026 15:00:59 -0400 Subject: [PATCH 10/57] Add V2 foundation: GeoParquet point cloud support with DuckDB backend - Design doc (BOWSER_V2_DESIGN.md) covering data model, architecture, UX, and implementation plan for raster + vector viewing - Pydantic manifest schema (bowser_manifest.json) for unified dataset config - Dolphin raster-to-GeoParquet converter with quality masking, spatial sorting (Morton curve), and proper row group layout - DuckDB-backed FastAPI router for point queries: bbox filtering, attribute filtering, single/multi-point time series, stats, Arrow IPC transport - CLI: `bowser convert dolphin` command, `--manifest` flag on `bowser run` - 11 passing tests covering converter and endpoint functionality Co-Authored-By: Claude Opus 4.6 (1M context) --- BOWSER_V2_DESIGN.md | 988 +++++++++++++++++++++++++++++++++ pyproject.toml | 11 +- src/bowser/_convert_dolphin.py | 413 ++++++++++++++ src/bowser/cli.py | 63 ++- src/bowser/main.py | 51 +- src/bowser/manifest.py | 107 ++++ src/bowser/points.py | 437 +++++++++++++++ tests/test_convert_dolphin.py | 142 +++++ tests/test_points.py | 186 +++++++ 9 files changed, 2389 insertions(+), 9 deletions(-) create mode 100644 BOWSER_V2_DESIGN.md create mode 100644 src/bowser/_convert_dolphin.py create mode 100644 src/bowser/manifest.py create mode 100644 src/bowser/points.py create mode 100644 tests/test_convert_dolphin.py create mode 100644 tests/test_points.py diff --git a/BOWSER_V2_DESIGN.md b/BOWSER_V2_DESIGN.md new file mode 100644 index 0000000..87c9bbf --- /dev/null +++ b/BOWSER_V2_DESIGN.md @@ -0,0 +1,988 @@ +# Bowser V2: Design Document + +> **Status:** Draft +> **Date:** 2026-03-22 +> **Authors:** Scott Staniewicz + Claude + +--- + +## Table of Contents + +1. [Motivation](#1-motivation) +2. [Competitive Landscape](#2-competitive-landscape) +3. [V2 Vision & Principles](#3-v2-vision--principles) +4. [Data Model](#4-data-model) +5. [Architecture Overview](#5-architecture-overview) +6. [Backend Design](#6-backend-design) +7. [Frontend Design](#7-frontend-design) +8. [UX Design](#8-ux-design) +9. [Technology Choices](#9-technology-choices) +10. [Migration from V1](#10-migration-from-v1) +11. [Implementation Phases](#11-implementation-phases) +12. [Open Questions](#12-open-questions) + +--- + +## 1. Motivation + +Bowser V1 is a raster-first tool: every pixel on the map is a tile rendered from COGs or xarray datasets. This works well for continuous fields (unwrapped phase, coherence maps, displacement grids), but InSAR increasingly produces **point-based outputs** that don't fit the raster model: + +- **Persistent Scatterer (PS) points** — sparse, irregularly-spaced measurement points with per-point time series and attributes (velocity, coherence, height, etc.) +- **Distributed Scatterer (DS) points** — similar to PS but from different processing pipelines +- **SBAS pixel subsets** — not every pixel survives temporal coherence thresholds; the result is a sparse point cloud, not a full grid +- **GPS/GNSS stations** — ground truth reference points with their own time series +- **OPERA DISP-S1 post-processed results** — velocity, amplitude dispersion, etc. that are per-point + +Commercial platforms (IRIS, TRE-MAPS) already handle this well. TRE-MAPS in particular is entirely point-based — users filter, color, select, and export individual measurement points. IRIS offers raster views with point-level inspection. Neither is open source, and both are tightly coupled to their respective processing pipelines. + +**Bowser V2 should be the open-source answer**: a viewer that handles both rasters AND points natively, leveraging the huge recent improvements in cloud-native vector data (GeoParquet, DuckDB, deck.gl, PMTiles). + +--- + +## 2. Competitive Landscape + +### IRIS (EarthDaily Analytics) + +**Strengths:** +- Multi-panel map comparison (reference image / InSAR overlay / amplitude) +- Processing sandbox — users can trigger re-processing from the UI +- Anomaly detection layer +- Clean dark-themed UI with well-integrated time series chart +- GPS ground monitoring overlay + +**Weaknesses:** +- Raster-only visualization — no point-level attribute filtering +- Three-panel layout wastes screen space when you only need one view +- Heavy, proprietary platform tied to EarthDaily's processing pipeline +- No export capabilities visible in the UI + +**Key takeaway:** The multi-panel comparison and anomaly detection are powerful ideas. The tight integration between spatial view and time series chart is table-stakes. + +### TRE-MAPS (TRE-ALTAMIRA) + +**Strengths:** +- Point-based data model with rich per-point attributes (velocity, height, displacement, effective area, perimeter) +- Three-tier filtering: by attribute, by date range, by symbology +- Cross-section / profile tool — draw a transect line, see displacement along it +- Polygon selection for area averaging (up to 10k points) +- Multi-format export (CSV, Geodatabase, Shapefile, KMZ) +- Multiple time series in one chart (shift+click) + +**Weaknesses:** +- Dated UI (ArcGIS/ESRI-era design) +- Limited to 1,000 points per export +- Data archived after 3 months of inactivity +- Only Chrome/Firefox supported +- No raster layer support — can't overlay coherence or amplitude maps + +**Key takeaway:** The attribute filtering, symbology control, and cross-section tool are essential for point data. The 300-column CSV problem (like EGMS) shows the need for a clean, opinionated data model. + +### EGMS (European Ground Motion Service) + +**Relevant context:** EGMS distributes PS/DS point data as massive CSVs with ~300 columns (one per acquisition date for displacement values, plus metadata columns). This is the "data model anti-pattern" we want to avoid. + +--- + +## 3. V2 Vision & Principles + +### Vision + +Bowser V2 is a **dual-mode InSAR viewer** that treats rasters and point clouds as first-class citizens. A researcher should be able to: + +1. Load a displacement raster stack AND a set of PS points over the same AOI +2. See both layers simultaneously on the map +3. Click a PS point to see its time series, or click the raster to sample pixel values +4. Filter points by velocity, coherence, or any attribute +5. Draw a transect and see a cross-section profile +6. Export selected points with their full time series + +### Design Principles + +1. **Rasters + Vectors, unified** — One app, one map, both data types. No mode switching. +2. **GeoParquet as the canonical point format** — Columnar, cloud-native, typed, self-describing. No 300-column CSVs. +3. **Server does the heavy lifting, client does the rendering** — DuckDB handles filtering/aggregation on the server; the browser renders the result via WebGL. +4. **Progressive disclosure** — Simple view by default (map + time series). Power features (filtering, cross-sections, export) available but not in your face. +5. **URL-driven state** — Every view should be shareable via URL. Dataset, viewport, active filters, selected points — all encoded in the URL. +6. **Open formats, open source** — No vendor lock-in. Standard formats in, standard formats out. + +--- + +## 4. Data Model + +### 4.1 The Problem with Wide CSVs + +EGMS and similar services distribute point data as wide-format CSVs: + +``` +lon, lat, velocity, coherence, 2016-01-01, 2016-01-13, 2016-01-25, ... +-118.25, 34.05, -12.3, 0.85, 0.0, -1.2, -2.1, ... +``` + +Problems: hundreds of date columns, no type information, no metadata, can't efficiently query a subset of dates, enormous file sizes, hard to extend with new attributes. + +### 4.2 Bowser V2 Point Data Model + +We adopt a **normalized, long-form model** stored as GeoParquet. The data is split into two logical tables that can live in one or two files: + +#### Points Table (`points.parquet`) + +One row per measurement point. Stores spatial location and static attributes. + +| Column | Type | Required | Description | +|--------|------|----------|-------------| +| `point_id` | `uint64` | yes | Unique identifier | +| `geometry` | `POINT` | yes | WGS84 lon/lat (GeoParquet native) | +| `velocity` | `float32` | no | Mean velocity (mm/yr), LOS | +| `velocity_std` | `float32` | no | Velocity uncertainty | +| `temporal_coherence` | `float32` | no | Temporal coherence [0, 1] | +| `height` | `float32` | no | Estimated height (m) above reference DEM | +| `amplitude_dispersion` | `float32` | no | Amplitude dispersion index | +| `reference_point_id` | `uint64` | no | Which point is the spatial reference | + +Design choices: +- **`point_id` as uint64** rather than a compound key. Simple, fast joins, small index. +- **Static attributes only** in this table. Anything that varies per date goes in the time series table. +- **Optional columns are truly optional** — GeoParquet handles missing columns gracefully. A PS dataset might have `amplitude_dispersion`; a SBAS dataset might not. The frontend dynamically discovers available columns via the `/points/{layer}/attributes` endpoint. +- **No CRS column** — GeoParquet metadata carries the CRS (EPSG:4326 by default). Projections happen at query/render time. +- **Units stored in Parquet column metadata** — Each column carries a `units` key in its Parquet metadata (e.g., `{"units": "mm/yr"}` for velocity). The backend reads these and passes them to the frontend for axis labels and tooltips. + +#### Time Series Table (`timeseries.parquet`) + +One row per (point, date) pair. Long-form — the number of columns is fixed regardless of how many dates exist. + +| Column | Type | Required | Description | +|--------|------|----------|-------------| +| `point_id` | `uint64` | yes | FK to points table | +| `date` | `date32` | yes | Acquisition date | +| `displacement` | `float32` | yes | Cumulative displacement (mm), LOS | +| `displacement_std` | `float32` | no | Per-epoch uncertainty | + +Design choices: +- **Long-form is non-negotiable.** Adding a new acquisition date is appending rows, not adding columns. Queries like "all displacements between 2020-01-01 and 2021-01-01" are a simple `WHERE` clause, not selecting 50 columns by name. +- **`date32`** not a string. Enables native date arithmetic, range queries, sorting. +- **Row group layout is critical for performance.** See section 4.5. + +#### Why Two Tables? + +Joining is cheap (especially in DuckDB). The alternative — embedding the full time series as a nested array column — makes point-level metadata queries fast but time-range queries slow, and prevents columnar compression of the displacement values. + +For datasets where separate files are inconvenient, both tables can be stored in a single GeoParquet file using row groups or a single Parquet file with a `table` discriminator column. But logically, they are two relations. + +### 4.3 Dataset Manifest + +A Bowser V2 dataset is described by a JSON manifest that references both raster and vector sources: + +```json +{ + "name": "LA Basin PS Analysis", + "description": "Sentinel-1 descending, 2016-2023", + "satellite": "Sentinel-1", + "orbit": "descending", + "track": 71, + "reference_date": "2016-07-01", + + "layers": { + "displacement": { + "type": "raster", + "source": "s3://bucket/displacement_stack.zarr", + "colormap": "RdBu_r", + "units": "mm", + "vmin": -50, + "vmax": 50 + }, + "coherence": { + "type": "raster", + "source": "s3://bucket/temporal_coherence.tif", + "colormap": "inferno", + "units": "", + "vmin": 0, + "vmax": 1 + }, + "ps_points": { + "type": "points", + "points_source": "s3://bucket/ps_points.parquet", + "timeseries_source": "s3://bucket/ps_timeseries.parquet", + "default_color_by": "velocity", + "default_colormap": "RdBu_r", + "default_vmin": -30, + "default_vmax": 30 + }, + "gps_stations": { + "type": "points", + "points_source": "s3://bucket/gps_stations.parquet", + "timeseries_source": "s3://bucket/gps_timeseries.parquet", + "default_color_by": "velocity", + "marker_style": "triangle" + } + }, + + "bounds": [-118.8, 33.5, -117.5, 34.3] +} +``` + +This is deliberately simple: +- **Flat, no nesting beyond `layers`** — easy to hand-write, easy to generate programmatically +- **Each layer declares its type** — `raster` or `points` — so the frontend knows how to render it +- **Defaults are suggestions** — the user can change colormap/range in the UI +- **Sources can be local paths or S3 URIs** — the backend resolves them + +### 4.4 Conversion Utilities + +Converters are prioritized by what we can test immediately: + +#### Priority 1: Dolphin raster → point cloud (`bowser convert dolphin`) + +This is the primary early use case. A dolphin workflow directory contains: +- `timeseries/YYYYMMDD.tif` — displacement rasters (one per date) +- `timeseries/velocity.tif` — velocity map +- `timeseries/velocity_stderr.tif` — velocity uncertainty +- `interferograms/temporal_coherence_*.tif` — temporal coherence +- `interferograms/amp_dispersion_looked*.tif` — amplitude dispersion +- `interferograms/similarity_*.tif` — phase similarity +- `interferograms/ps_mask_looked*.tif` — PS mask + +The converter: +1. Reads the quality rasters (temporal coherence, amplitude dispersion, etc.) +2. Applies a mask to select "good" pixels (e.g., `temporal_coherence > threshold`) +3. Extracts lon/lat for surviving pixels +4. Reads displacement values at those pixel locations across all dates +5. Writes `points.parquet` (point_id, geometry, velocity, temporal_coherence, amplitude_dispersion, ...) and `timeseries.parquet` (point_id, date, displacement) +6. Generates a `bowser_manifest.json` referencing both the original rasters and the new point layers + +```bash +bowser convert dolphin /path/to/dolphin_work_dir \ + --coherence-threshold 0.5 \ + --output-dir ./dolphin_points/ +``` + +#### Priority 2: MintPy HDF5 + +```bash +bowser convert mintpy --input timeseries.h5 --output-dir ./mintpy_points/ +``` + +#### Priority 3 (future): Generic CSV, EGMS, StaMPS + +```bash +# Generic long-form CSV +bowser convert csv --input points.csv \ + --lon-col longitude --lat-col latitude \ + --date-col date --displacement-col disp_mm \ + --output-dir ./custom/ + +# EGMS wide-format CSV (someday) +bowser convert egms --input egms_l3.csv --output-dir ./la_basin/ +``` + +Each converter produces `points.parquet` + `timeseries.parquet` + a `bowser_manifest.json`. + +### 4.5 Parquet Row Group Strategy + +Row groups are the unit of I/O in Parquet — each row group is read independently, and column chunks within a row group are contiguous on disk. Row group layout has a major impact on query performance. + +#### Points table + +Row groups of ~50,000-100,000 points each. Since the points table is relatively small (one row per point, ~10 columns), a single row group often suffices for datasets under 1M points. For larger datasets, row groups sorted by a spatial key (e.g., H3 cell index or Hilbert curve) cluster nearby points together, improving bbox query performance. + +```python +# Write with spatial sorting for bbox query efficiency +import h3 +points["h3_cell"] = points.geometry.apply(lambda g: h3.latlng_to_cell(g.y, g.x, 6)) +points = points.sort_values("h3_cell").drop(columns=["h3_cell"]) +points.to_parquet("points.parquet", row_group_size=100_000) +``` + +#### Time series table + +This is where row groups matter most. The time series table can be enormous (1M points × 200 dates = 200M rows). Two layout strategies: + +**Option A: Group by point_id (point-access pattern)** +Each row group contains all dates for a contiguous range of point IDs. This makes "fetch one point's full time series" a single row group read. + +```python +# Sort by point_id, then date within each point +ts = ts.sort_values(["point_id", "date"]) +# Row group size = num_dates × points_per_group +# For 200 dates and ~500 points per group: row_group_size = 100_000 +ts.to_parquet("timeseries.parquet", row_group_size=num_dates * 500) +``` + +**Option B: Group by date (spatial-access pattern)** +Each row group contains all points for one or a few dates. This makes "fetch displacement at date X for all points in bbox" fast, which is what the map view needs. + +For our use case, **Option A (group by point_id) is the default** because: +- The most common query is "give me the time series for these N clicked points" +- DuckDB can still efficiently filter by date within a row group (columnar scan) +- The map view fetches static attributes (velocity) from the points table, not from the time series table + +We may revisit this or support both layouts if the date-access pattern becomes a bottleneck. + +--- + +## 5. Architecture Overview + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Frontend (React + TypeScript) │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────────┐ │ +│ │ MapLibre GL │ │ deck.gl │ │ Chart.js / Plotly │ │ +│ │ (basemaps, │ │ (point │ │ (time series, │ │ +│ │ raster │ │ cloud │ │ cross-sections, │ │ +│ │ tiles) │ │ rendering) │ │ histograms) │ │ +│ └──────┬───────┘ └──────┬───────┘ └───────────┬───────────┘ │ +│ │ │ │ │ +│ └──────────────────┼───────────────────────┘ │ +│ │ HTTP / WebSocket │ +└────────────────────────────┼────────────────────────────────────┘ + │ +┌────────────────────────────┼────────────────────────────────────┐ +│ Backend (FastAPI) │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────────┐ │ +│ │ Raster │ │ Vector │ │ Analysis │ │ +│ │ Server │ │ Server │ │ Engine │ │ +│ │ (titiler) │ │ (DuckDB + │ │ (trend fitting, │ │ +│ │ │ │ GeoParquet) │ │ cross-sections, │ │ +│ │ COGs, Zarr │ │ │ │ area averaging) │ │ +│ └──────────────┘ └──────────────┘ └───────────────────────┘ │ +│ │ +│ ┌──────────────────────────────────────────────────────────────┤ +│ │ Data Layer │ +│ │ - Cloud Optimized GeoTIFFs (existing V1) │ +│ │ - Zarr / NetCDF xarray datasets (existing V1) │ +│ │ - GeoParquet point files (NEW) │ +│ │ - Local filesystem first, S3 later │ +│ └──────────────────────────────────────────────────────────────┘ +└─────────────────────────────────────────────────────────────────┘ +``` + +### What stays from V1 + +- **titiler** for raster tile serving (COGs, Zarr, xarray) — battle-tested, no reason to replace +- **FastAPI** as the web framework +- **React + TypeScript** frontend +- **CLI for dataset setup** (`bowser run`, `bowser setup-*`) + +### What's new in V2 + +- **DuckDB** as an embedded analytical query engine for point data +- **GeoParquet** as the canonical point data format +- **deck.gl** (via `@deck.gl/maplibre`) for WebGL point rendering on the client +- **MapLibre GL JS** replacing Leaflet for the map (WebGL-native, vector tile support, smoother interaction) +- **Analysis engine** for cross-sections, area statistics, and trend analysis on point data + +--- + +## 6. Backend Design + +### 6.1 Vector Server (New) + +The vector server is the centerpiece of V2. It uses DuckDB to query GeoParquet files and returns results as GeoJSON or binary Arrow IPC for large responses. + +#### Endpoints + +``` +GET /points/{layer_name} + ?bbox=-118.5,33.8,-117.8,34.2 # viewport bounding box + &color_by=velocity # attribute for coloring + &filter=temporal_coherence>0.7 # attribute filter expression + &max_points=50000 # client-requested limit + → Returns: GeoJSON or Arrow IPC (based on Accept header) + Point geometries + requested attribute columns only + +GET /points/{layer_name}/{point_id}/timeseries + ?start_date=2020-01-01 + &end_date=2023-12-31 + → Returns: JSON array of {date, displacement, displacement_std} + +POST /points/{layer_name}/timeseries + Body: {"point_ids": [123, 456, 789]} + → Returns: Multi-point time series for charting + +GET /points/{layer_name}/stats + ?bbox=...&filter=... + → Returns: {count, velocity_mean, velocity_std, velocity_min, velocity_max, ...} + Summary statistics for filtered points in viewport + +POST /points/{layer_name}/cross_section + Body: { + "line": [[lon1, lat1], [lon2, lat2]], + "width_m": 200, + "attribute": "velocity" + } + → Returns: Array of {distance_along_profile, attribute_value, point_id} + +POST /points/{layer_name}/area_average + Body: { + "polygon": [[lon1, lat1], ...], + "max_points": 10000 + } + → Returns: Averaged time series + individual point count + +GET /points/{layer_name}/attributes + → Returns: List of available columns with types and value ranges + Used by the frontend to build filter UI dynamically + +POST /export + Body: { + "layer_name": "ps_points", + "format": "csv" | "geojson" | "geoparquet", + "bbox": [...], + "filter": "...", + "include_timeseries": true + } + → Returns: File download +``` + +#### DuckDB Query Engine + +DuckDB runs **in-process** (no separate database server). On startup, the backend registers GeoParquet files as DuckDB views: + +```python +import duckdb + +conn = duckdb.connect() +conn.install_extension("spatial") +conn.load_extension("spatial") + +# Register point sources as views +conn.execute(""" + CREATE VIEW ps_points AS + SELECT * FROM read_parquet('s3://bucket/ps_points.parquet', spatial=true) +""") +conn.execute(""" + CREATE VIEW ps_timeseries AS + SELECT * FROM read_parquet('s3://bucket/ps_timeseries.parquet') +""") +``` + +Filtering translates directly to SQL: + +```python +def query_points( + layer: str, + bbox: tuple[float, float, float, float], + color_by: str, + filters: list[str], + max_points: int, +) -> pa.Table: + where_clauses = [ + f"ST_Within(geometry, ST_MakeEnvelope({bbox[0]}, {bbox[1]}, {bbox[2]}, {bbox[3]}))" + ] + for f in filters: + where_clauses.append(sanitize_filter(f)) # parameterized to prevent injection + + sql = f""" + SELECT point_id, ST_X(geometry) as lon, ST_Y(geometry) as lat, {color_by} + FROM {layer} + WHERE {' AND '.join(where_clauses)} + LIMIT {max_points} + """ + return conn.execute(sql).fetch_arrow_table() +``` + +#### Progressive Loading Strategy + +For datasets with millions of points, we can't send them all to the browser at once. Strategy: + +1. **Viewport-based loading**: Only query points within the current map bbox + a small buffer +2. **Zoom-dependent density**: At low zoom, use DuckDB `SAMPLE` or spatial grid aggregation. At high zoom, send individual points. +3. **Attribute-aware thinning**: When zoomed out, prioritize high-|velocity| points (they're what the user cares about) +4. **Client-side budget**: The frontend requests at most N points (e.g., 100k). The backend respects this and downsamples if needed. + +``` +Zoom level Strategy Approx points sent +──────────────────────────────────────────────────────── +< 10 Grid aggregation ~1,000 cells +10-14 Sampled points ~10,000-50,000 +> 14 All points in bbox Up to 100,000 +``` + +### 6.2 Raster Server (Enhanced V1) + +The existing titiler-based raster server stays largely unchanged. Enhancements: + +- **Unified dataset registry**: Both raster and vector layers registered through the manifest +- **Raster point sampling**: `GET /raster/{layer_name}/point?lon=...&lat=...` for clicking on raster pixels (existing V1 behavior, new URL prefix) +- **COG + Zarr**: Continue supporting both modes + +### 6.3 Analysis Engine (New) + +Server-side computations that operate on point data: + +- **Trend fitting**: Linear, piecewise-linear, seasonal decomposition +- **Cross-section profiles**: Query points within a buffer of a transect line, project onto the line, return distance-vs-attribute +- **Area averaging**: Mean time series within a polygon, with uncertainty propagation +- **Spatial reference adjustment**: Subtract a reference point's time series from all others +- **Anomaly detection**: Flag points with velocity significantly different from neighbors (future) + +These are exposed as POST endpoints (see 6.1) and computed on-demand via DuckDB queries + NumPy/SciPy. + +--- + +## 7. Frontend Design + +### 7.1 Map Engine: MapLibre GL JS + deck.gl + +**Why replace Leaflet with MapLibre:** +- WebGL-native rendering (Leaflet is DOM-based, struggles past ~10k markers) +- Native vector tile support +- Smooth fractional zooming, 3D tilt, rotation +- deck.gl integrates directly as a MapLibre custom layer + +**deck.gl for point rendering:** +- `ScatterplotLayer` renders 1M+ points at 60fps via WebGL +- Built-in picking (hover/click identification without spatial index on client) +- GPU-accelerated color mapping — send attribute values + colormap, GPU does the rest +- Binary data transport (Arrow IPC → GPU buffer) avoids JSON parsing overhead + +```typescript +import { MapboxOverlay } from '@deck.gl/mapbox'; +import { ScatterplotLayer } from '@deck.gl/layers'; + +const pointLayer = new ScatterplotLayer({ + id: 'ps-points', + data: arrowTable, // binary Arrow from backend + getPosition: d => [d.lon, d.lat], + getFillColor: d => colorScale(d.velocity), + getRadius: 3, + radiusMinPixels: 2, + radiusMaxPixels: 8, + pickable: true, + onClick: info => selectPoint(info.object.point_id), +}); + +map.addControl(new MapboxOverlay({ layers: [pointLayer] })); +``` + +### 7.2 Charting: Plotly.js + +**Why switch from Chart.js to Plotly:** +- Better for scientific data: error bars, subplots, annotations built-in +- Linked brushing (select time range on chart → highlight on map) +- Better zoom/pan within charts +- WebGL renderer for large time series (`scattergl` trace type) +- Export to PNG/SVG built-in +- Widely used in scientific Python (familiar to our users) + +### 7.3 State Management + +V1 uses React Context + useReducer. For V2, keep this pattern but formalize URL-driven state: + +```typescript +interface AppState { + // Dataset + datasetManifest: DatasetManifest; + activeLayers: string[]; + + // Map viewport + center: [number, number]; + zoom: number; + bearing: number; + pitch: number; + + // Point layer state + colorBy: string; + colormap: string; + vmin: number; + vmax: number; + filters: Filter[]; + + // Selection + selectedPointIds: number[]; + referencePointId: number | null; + hoveredPointId: number | null; + + // Raster layer state + rasterTimeIndex: number; + rasterColormap: string; + rasterVmin: number; + rasterVmax: number; + rasterOpacity: number; + + // Analysis + crossSectionLine: [number, number][] | null; + areaSelectionPolygon: [number, number][] | null; + + // UI + chartVisible: boolean; + panelVisible: boolean; + activeTab: 'layers' | 'filter' | 'export'; +} +``` + +All of this serializes to URL search params, so `https://bowser.app/?dataset=la_basin&color_by=velocity&filter=coherence>0.7&zoom=12¢er=-118.2,34.0` is a shareable, reproducible view. + +### 7.4 Component Architecture + +``` +App +├── MapView +│ ├── MapLibreMap (basemap, raster tile layers) +│ ├── DeckGLOverlay (point cloud layers) +│ ├── CrossSectionTool (draw transect line) +│ ├── AreaSelectTool (draw polygon) +│ └── MapControls (zoom, basemap picker, 3D tilt) +│ +├── Sidebar +│ ├── LayerPanel +│ │ ├── LayerToggle (per-layer visibility, opacity) +│ │ ├── RasterControls (time slider, colormap, vmin/vmax) +│ │ └── PointControls (color-by dropdown, colormap, vmin/vmax) +│ ├── FilterPanel +│ │ ├── AttributeFilter (field + operator + value) +│ │ ├── DateRangeFilter (start/end date pickers) +│ │ └── ActiveFilters (chips showing current filters) +│ └── ExportPanel +│ ├── FormatPicker (CSV, GeoJSON, GeoParquet) +│ ├── ScopeToggle (viewport / selection / all) +│ └── ExportButton +│ +├── BottomPanel (resizable) +│ ├── TimeSeriesChart (selected points' displacement vs time) +│ ├── CrossSectionChart (displacement vs distance along profile) +│ ├── HistogramChart (attribute distribution in viewport) +│ └── StatsBar (point count, mean velocity, etc.) +│ +└── Toolbar + ├── SelectTool (click to select points) + ├── MultiSelectTool (shift+click or box select) + ├── CrossSectionTool (draw line) + ├── AreaAverageTool (draw polygon) + ├── ReferenceTool (set reference point) + └── MeasureTool (distance/area) +``` + +--- + +## 8. UX Design + +### 8.1 What We Take from IRIS + +- **Tight spatial-temporal coupling**: Clicking the map immediately updates the time series chart. This is non-negotiable. +- **Multiple basemap options**: Satellite, terrain, dark, and OSM. +- **Colorbar always visible**: Anchored to the map, not buried in a menu. + +### 8.2 What We Take from TRE-MAPS + +- **Attribute filtering** is the killer feature for point data. Users need to quickly filter to "show me only points with velocity < -10 mm/yr and coherence > 0.7." +- **Cross-section profiles**: Draw a line, see displacement along it. Essential for visualizing subsidence bowls, fault offsets, etc. +- **Multi-point time series**: Shift+click to add more points to the chart. Compare trends across locations. +- **Area averaging**: Select a polygon, get the mean time series with uncertainty. Critical for comparing against GPS. +- **Export with time series**: Not just point locations — include the full displacement history. + +### 8.3 What We Do Differently + +**Progressive disclosure instead of modal dialogs:** +TRE-MAPS uses modal dialog boxes for filtering and symbology. We use an inline sidebar panel that stays open while you interact with the map. No context switches. + +**Unified raster + point view:** +Neither IRIS nor TRE-MAPS does this well. IRIS is raster-only; TRE-MAPS is point-only. Bowser V2 overlays both. Use case: view the displacement raster for spatial context, with PS points on top colored by velocity, to see where the raster and point estimates agree/disagree. + +**URL-driven state for collaboration:** +"Look at this" should be a link, not a screenshot. Every filter, selection, and viewport state encoded in the URL. + +**Smart defaults, explicit overrides:** +- Auto-detect colormap range from data percentiles (not hardcoded) +- Auto-detect which attribute to color by (velocity if available, else first float column) +- Auto-detect time series mode (single-ref vs multi-ref, carrying forward V1's hybrid approach) +- Everything overridable in the manifest or the UI + +**Keyboard-driven power user workflow:** +- `F` — toggle filter panel +- `T` — toggle time series chart +- `R` — set reference point mode +- `C` — cross-section tool +- `Escape` — clear selection +- Number keys — switch between layers + +### 8.4 Layout + +``` +┌──────────────────────────────────────────────────────────────┐ +│ [Bowser] dataset-name | tools: [🔍] [📏] [📐] [📌] │ +├────────────┬─────────────────────────────────────────────────┤ +│ │ │ +│ Sidebar │ │ +│ (280px) │ Map View │ +│ │ (MapLibre + deck.gl) │ +│ Layers │ │ +│ ├ Disp. │ ┌─────────┐ │ +│ ├ Coh. │ │ Colorbar│ │ +│ └ PS Pts │ └─────────┘ │ +│ │ │ +│ Filters │ │ +│ ┌────────┐│ │ +│ │vel<-10 ││ │ +│ │coh>0.7 ││ │ +│ └────────┘│ │ +│ │ │ +│ Stats ├─────────────────────────────────────────────────┤ +│ N: 42,301 │ Time Series Chart [minimize] │ +│ v̄: -8.2 │ ╭─────────────────────────────╮ │ +│ │ │ • • │ ← Point 1 │ +│ │ │ • • • │ ← Point 2 │ +│ │ │ • • • │ │ +│ │ ╰─────────────────────────────╯ │ +│ │ 2016 2018 2020 2022 │ +└────────────┴─────────────────────────────────────────────────┘ +``` + +Key layout decisions: +- **Sidebar on the left** (not right) — matches file-browser mental model, keeps the most-used controls close to the eye's starting position +- **Bottom panel for charts** — resizable, can be minimized. Charts expand horizontally (time axis benefits from width). +- **No floating panels** — everything docked. Prevents the "lost dialog box" problem. +- **Stats summary always visible** in the sidebar — point count and mean velocity update live as you filter/pan. + +--- + +## 9. Technology Choices + +### 9.1 Strict Choices (High Conviction) + +| Component | Choice | Why | +|-----------|--------|-----| +| Point data format | **GeoParquet** | Columnar, cloud-native, typed, self-describing. Industry momentum (Overture, STAC, Planetary Computer). Parquet ecosystem (DuckDB, Polars, Arrow) is mature. | +| Server query engine | **DuckDB** | In-process (no infra), reads Parquet natively, spatial extension for bbox queries, fast analytical queries, Arrow output for zero-copy to client. | +| Map renderer | **MapLibre GL JS** | WebGL-native, open-source (no Mapbox token), vector tile support, smooth interaction, active community. | +| Point renderer | **deck.gl** | 1M+ points via WebGL, binary Arrow data path, picking built-in, MapLibre integration via `@deck.gl/mapbox`. | +| Backend framework | **FastAPI** | Already used in V1, async, OpenAPI docs, Pydantic integration. | +| Raster tiles | **titiler** | Already used in V1, COG + Zarr support, battle-tested. | + +### 9.2 Flexible Choices (Open to Alternatives) + +| Component | Current Pick | Alternative | Decision Criteria | +|-----------|-------------|-------------|-------------------| +| Charting | Plotly.js | Chart.js (V1), Apache ECharts, Observable Plot | Plotly if we need error bars + linked brushing. Chart.js if we want minimal bundle size. | +| State management | React Context + URL params | Zustand, Jotai | Upgrade only if Context becomes painful with many consumers. Zustand is lightweight and would be a natural step up. | +| CSS | Tailwind CSS | CSS Modules (V1), Styled Components | Tailwind for rapid iteration and consistent design tokens. | +| Bundler | Vite | (keep from V1) | No change needed. | +| Data transport | Arrow IPC for large responses, JSON for small | All JSON, All Arrow | Arrow IPC for >1k points (avoid JSON parse cost). JSON for metadata endpoints. | + +### 9.3 Future Considerations (Not for V2.0) + +| Technology | When | Why wait | +|------------|------|----------| +| **PMTiles** (pre-tiled vector) | V2.1+ | Useful for static datasets (e.g., EGMS). But V2.0 focuses on dynamic DuckDB-served data. Add PMTiles as an alternative source type later. | +| **DuckDB-WASM** (client-side queries) | V2.2+ | Run DuckDB in the browser for offline/local analysis. Exciting but adds complexity. Start server-side, move to hybrid later. | +| **WebGPU** (next-gen rendering) | When browser support is >90% | deck.gl already has WebGPU support. MapLibre is working on it. | +| **GeoArrow** | When spec stabilizes | Native Arrow geometry type. Currently GeoParquet uses WKB in Arrow, which requires a decode step. GeoArrow would eliminate this. | +| **3D visualization** | V2.1+ | PS points have estimated heights. 3D view (deck.gl supports this) would let users see the point cloud in 3D. Nice to have, not essential. | + +--- + +## 10. Migration from V1 + +### What Breaks + +Nothing. V2 is a **superset** of V1. + +- V1 raster-only datasets (`bowser_rasters.json` or `--stack-file`) continue to work exactly as before +- V1 URLs continue to work +- V1 CLI commands (`bowser run`, `bowser setup-*`) are unchanged + +### What Changes + +- Leaflet → MapLibre GL JS (visual change, same tile sources) +- Chart.js → Plotly.js (visual change, same data) +- New `bowser_manifest.json` format for V2 datasets (V1 JSON config still supported via auto-upgrade) +- New CLI commands: `bowser convert`, `bowser setup-points` +- New `/points/` endpoints for vector data + +### Upgrade Path + +1. Existing V1 users: `pip install --upgrade bowser-insar` → everything works, map looks slightly different (MapLibre vs Leaflet) +2. Users with point data: create a `bowser_manifest.json`, run `bowser convert` to get GeoParquet, `bowser run --manifest bowser_manifest.json` +3. No data migration required for raster datasets + +--- + +## 11. Implementation Phases + +### Phase 1: Foundation + +**Goal:** MapLibre + deck.gl rendering a GeoParquet point cloud from a dolphin export, with point click → time series. + +- [ ] **Converter:** `bowser convert dolphin` — read dolphin raster stack, mask by quality, export to GeoParquet +- [ ] **Backend:** DuckDB reads GeoParquet, serves points via `/points/` endpoint +- [ ] **Backend:** Single-point and multi-point time series endpoints +- [ ] **Backend:** Point attributes endpoint (discover available columns) +- [ ] **Frontend:** Replace Leaflet with MapLibre GL JS +- [ ] **Frontend:** Add deck.gl overlay for point rendering (ScatterplotLayer, colored by velocity) +- [ ] **Frontend:** Click point → fetch + display time series in Plotly chart +- [ ] **Data model:** Define `bowser_manifest.json` schema (Pydantic model) +- [ ] **Data model:** Implement row-group-aware Parquet writing in converter + +**Demo:** Run `bowser convert dolphin /path/to/work_dir`, then `bowser run --manifest bowser_manifest.json`. See 1M+ points on map colored by velocity, click one, see its displacement time series. + +### Phase 2: Filtering & Interaction (Weeks 4-6) + +**Goal:** Attribute filtering, multi-point selection, reference point. + +- [ ] Sidebar filter panel (attribute + operator + value) +- [ ] Backend: Filter expressions in DuckDB queries +- [ ] Multi-point selection (shift+click, box select) +- [ ] Multi-point time series chart +- [ ] Reference point subtraction (spatial referencing) +- [ ] Dynamic colormap + vmin/vmax controls for point layer +- [ ] Stats bar (point count, mean velocity in viewport) +- [ ] URL-driven state (serialize filters, viewport, selection to URL params) + +**Demo:** Filter to high-velocity points, select several, compare their time series, set a reference point. + +### Phase 3: Analysis Tools (Weeks 7-9) + +**Goal:** Cross-sections, area averaging, trend analysis, export. + +- [ ] Cross-section tool: draw line on map, server computes profile, display in chart +- [ ] Area averaging tool: draw polygon, server computes mean time series +- [ ] Trend fitting (linear + seasonal) on selected point time series +- [ ] Export panel: CSV, GeoJSON, GeoParquet download with time series +- [ ] Histogram of attribute values in viewport +- [ ] Date range filter (restrict time series to a window) + +**Demo:** Draw a transect across a subsidence bowl, see the displacement profile. Select an area near a GPS station, compare averaged InSAR time series to GPS. + +### Phase 4: Raster + Vector Unification (Weeks 10-12) + +**Goal:** Both rasters and points in one view, polish, converters. + +- [ ] Unified layer panel (raster + point layers togglable independently) +- [ ] Raster opacity / point opacity independent controls +- [ ] Click behavior: if point layer active, click selects point. If only raster, click samples raster. +- [ ] CLI converter: `bowser convert mintpy` +- [ ] `bowser setup-points` — interactive CLI for creating point layer config +- [ ] Performance testing with 1M+ point datasets +- [ ] Polish: keyboard shortcuts, responsive layout, loading states, error handling + +**Demo:** Load a full OPERA DISP-S1 raster stack + PS points from the same area. Toggle between raster and point views. Export a subset of points with time series as GeoParquet. + +### Phase 5: Stretch Goals (Post-V2.0) + +- [ ] PMTiles support for pre-tiled static point datasets +- [ ] DuckDB-WASM for client-side queries (offline mode) +- [ ] 3D point cloud view (deck.gl PointCloudLayer with estimated heights) +- [ ] Anomaly detection layer (flag outlier points) +- [ ] GPS time series overlay on InSAR time series chart +- [ ] Multi-dataset comparison (two PS datasets from different orbits/processors) +- [ ] Temporal animation (play through time steps) +- [ ] Collaborative annotations (pin a comment to a location) + +--- + +## 12. Design Decisions (Resolved) + +1. **Two-table format** for points + timeseries. Revisit if single-file convenience becomes a pain point. +2. **Flexible schema** — `velocity`, `temporal_coherence`, etc. are recommended but not enforced. Frontend dynamically discovers available columns. Datasets with recognized columns get better defaults. Early testing will mostly have temporal_coherence; other quality metrics will vary. +3. **Points only** — no polygon footprints for DS data. Everything renders as points. +4. **Units in Parquet column metadata** — each column carries `{"units": "mm/yr"}` etc. in its Parquet metadata. +5. **Local-first for early development** — DuckDB reads local Parquet files. S3 access will be tested later; if cold-start latency is bad, we'll add caching then. +6. **Client-side point budget** — needs empirical testing with deck.gl. Start without a hard cap, observe performance with 1-10M point datasets. +7. **Default to Arrow IPC** for point data responses — we'll almost always have >1k points (typically 1-10M from raster export). JSON only for metadata/timeseries endpoints. +8. **Click prefers points** — when both raster and point layers are visible, clicks prefer nearby points (pixel-distance threshold). Falls back to raster sampling if no point is close. +9. **No mobile** — desktop-first, no effort on responsive mobile layout. +10. **Dark mode default** — support both light and dark themes if not a huge lift. Default to dark (satellite basemaps look better on dark backgrounds). + +--- + +## Appendix A: Example DuckDB Queries + +```sql +-- Points in viewport with velocity filter +SELECT point_id, ST_X(geometry) as lon, ST_Y(geometry) as lat, velocity +FROM ps_points +WHERE ST_Within(geometry, ST_MakeEnvelope(-118.5, 33.8, -117.8, 34.2)) + AND temporal_coherence > 0.7 + AND velocity < -10 +LIMIT 50000; + +-- Time series for selected points +SELECT t.point_id, t.date, t.displacement +FROM ps_timeseries t +WHERE t.point_id IN (123, 456, 789) +ORDER BY t.point_id, t.date; + +-- Cross-section: points within 200m of a transect line +SELECT + point_id, + velocity, + ST_Distance( + geometry, + ST_Point(-118.3, 34.0) -- start of line + ) as distance_along, +FROM ps_points +WHERE ST_DWithin( + geometry, + ST_MakeLine(ST_Point(-118.3, 34.0), ST_Point(-118.1, 34.1)), + 0.002 -- ~200m in degrees at this latitude +) +ORDER BY distance_along; + +-- Area average time series +SELECT t.date, AVG(t.displacement) as mean_disp, STDDEV(t.displacement) as std_disp, COUNT(*) as n +FROM ps_timeseries t +JOIN ps_points p ON t.point_id = p.point_id +WHERE ST_Within(p.geometry, ST_GeomFromText('POLYGON((...))')) +GROUP BY t.date +ORDER BY t.date; + +-- Attribute statistics for filter panel +SELECT + MIN(velocity) as vel_min, MAX(velocity) as vel_max, + PERCENTILE_CONT(0.05) WITHIN GROUP (ORDER BY velocity) as vel_p05, + PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY velocity) as vel_p95, + MIN(temporal_coherence) as coh_min, MAX(temporal_coherence) as coh_max, + COUNT(*) as total_points +FROM ps_points; +``` + +## Appendix B: GeoParquet File Example + +```python +import geopandas as gpd +import pandas as pd +import numpy as np + +# Create points table +n_points = 100_000 +points = gpd.GeoDataFrame({ + 'point_id': np.arange(n_points, dtype=np.uint64), + 'velocity': np.random.normal(-5, 15, n_points).astype(np.float32), + 'velocity_std': np.random.uniform(0.5, 3.0, n_points).astype(np.float32), + 'temporal_coherence': np.random.uniform(0.3, 1.0, n_points).astype(np.float32), + 'height': np.random.normal(0, 5, n_points).astype(np.float32), + 'amplitude_dispersion': np.random.uniform(0.1, 0.4, n_points).astype(np.float32), +}, geometry=gpd.points_from_xy( + np.random.uniform(-118.5, -117.8, n_points), + np.random.uniform(33.8, 34.2, n_points), +), crs="EPSG:4326") + +points.to_parquet("ps_points.parquet") + +# Create time series table +dates = pd.date_range("2016-01-01", "2023-12-31", freq="12D") +ts_rows = [] +for pid in range(n_points): + vel = points.loc[pid, 'velocity'] + days = (dates - dates[0]).days.values + disp = vel / 365.25 * days + np.random.normal(0, 2, len(dates)) + for d, v in zip(dates, disp): + ts_rows.append({'point_id': np.uint64(pid), 'date': d, 'displacement': np.float32(v)}) + +ts = pd.DataFrame(ts_rows) +ts.to_parquet("ps_timeseries.parquet", row_group_size=len(dates)) # one row group per point +``` + +## Appendix C: Technology Reference Links + +- GeoParquet spec: https://geoparquet.org/ +- DuckDB spatial: https://duckdb.org/docs/extensions/spatial +- MapLibre GL JS: https://maplibre.org/maplibre-gl-js/docs/ +- deck.gl: https://deck.gl/ +- deck.gl + MapLibre: https://deck.gl/docs/get-started/using-with-maplibre +- Arrow IPC: https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format +- Plotly.js: https://plotly.com/javascript/ +- titiler: https://developmentseed.org/titiler/ +- Lonboard (reference for Arrow→deck.gl pattern): https://developmentseed.org/lonboard/ +- PMTiles: https://protomaps.com/docs/pmtiles diff --git a/pyproject.toml b/pyproject.toml index 9917360..3d91190 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,11 @@ dependencies = [ "rioxarray", "matplotlib", "pydantic-settings", + # V2: point cloud support + "geopandas", + "pyarrow", + "duckdb", + "shapely>=2", ] classifiers = [ @@ -144,4 +149,8 @@ plugins = ["pydantic.mypy"] [tool.pytest.ini_options] addopts = "-W ignore::PendingDeprecationWarning " -filterwarnings = ["error"] +filterwarnings = [ + "error", + "default::DeprecationWarning:shapely", + "default::DeprecationWarning:geopandas", +] diff --git a/src/bowser/_convert_dolphin.py b/src/bowser/_convert_dolphin.py new file mode 100644 index 0000000..286f9dc --- /dev/null +++ b/src/bowser/_convert_dolphin.py @@ -0,0 +1,413 @@ +"""Convert dolphin raster outputs to GeoParquet point cloud format. + +Reads a dolphin workflow directory, masks by quality metrics, and exports +surviving pixels as two GeoParquet files (points + timeseries) plus a +bowser_manifest.json. +""" + +from __future__ import annotations + +from datetime import datetime +from glob import glob +from pathlib import Path +from typing import TYPE_CHECKING + +import numpy as np +import pyarrow as pa +import pyarrow.parquet as pq +import rasterio as rio +import rasterio.transform +from pyproj import Transformer +from shapely.geometry import Point + +if TYPE_CHECKING: + from rasterio.crs import CRS + from rasterio.transform import Affine + +from .manifest import DatasetManifest, PointLayerConfig + + +def _find_dolphin_files(work_dir: str) -> dict[str, list[str]]: + """Discover dolphin output files in a workflow directory. + + Parameters + ---------- + work_dir : str + Path to dolphin workflow directory. + + Returns + ------- + dict[str, list[str]] + Mapping of dataset name to list of file paths. + """ + wd = work_dir.rstrip("/") + candidates = { + "timeseries": sorted(glob(f"{wd}/timeseries/2*[0-9].tif")), + "velocity": glob(f"{wd}/timeseries/velocity.tif"), + "velocity_stderr": glob(f"{wd}/timeseries/velocity_stderr.tif"), + "temporal_coherence": sorted( + glob(f"{wd}/interferograms/temporal_coherence_[0-9]*.tif") + ), + "temporal_coherence_average": glob( + f"{wd}/interferograms/temporal_coherence_average*.tif" + ), + "amplitude_dispersion": glob(f"{wd}/interferograms/amp_dispersion_looked*.tif"), + "phase_similarity": sorted(glob(f"{wd}/interferograms/similarity_[0-9]*.tif")), + "ps_mask": glob(f"{wd}/interferograms/ps_mask_looked*.tif"), + } + return {k: v for k, v in candidates.items() if v} + + +def _read_single_band(path: str) -> tuple[np.ndarray, Affine, CRS]: + """Read a single-band raster, returning data + georeference info.""" + with rio.open(path) as src: + data = src.read(1) + return data, src.transform, src.crs + + +def _build_mask( + dolphin_files: dict[str, list[str]], + coherence_threshold: float, + amplitude_dispersion_threshold: float | None, +) -> tuple[np.ndarray, Affine, CRS]: + """Build a boolean mask of pixels that pass quality thresholds. + + Parameters + ---------- + dolphin_files : dict + Output of `_find_dolphin_files`. + coherence_threshold : float + Minimum temporal coherence to keep a pixel. + amplitude_dispersion_threshold : float or None + Maximum amplitude dispersion to keep a pixel (lower = more stable). + + Returns + ------- + mask : np.ndarray + Boolean array, True = keep this pixel. + transform : Affine + Georeferencing transform. + crs : CRS + Coordinate reference system. + """ + # Use temporal coherence (average if available, else last single-date) + if "temporal_coherence_average" in dolphin_files: + coh_path = dolphin_files["temporal_coherence_average"][0] + elif "temporal_coherence" in dolphin_files: + coh_path = dolphin_files["temporal_coherence"][-1] + else: + msg = ( + "No temporal coherence file found. " + "Cannot build quality mask without coherence data." + ) + raise FileNotFoundError(msg) + + coh_data, transform, crs = _read_single_band(coh_path) + mask = (coh_data > coherence_threshold) & np.isfinite(coh_data) + + if ( + amplitude_dispersion_threshold is not None + and "amplitude_dispersion" in dolphin_files + ): + amp_data, _, _ = _read_single_band(dolphin_files["amplitude_dispersion"][0]) + amp_mask = (amp_data < amplitude_dispersion_threshold) & (amp_data > 0) + mask &= amp_mask + + return mask, transform, crs + + +def _pixel_coords_to_lonlat( + rows: np.ndarray, + cols: np.ndarray, + transform: rio.transform.Affine, + crs: rio.crs.CRS, +) -> tuple[np.ndarray, np.ndarray]: + """Convert pixel row/col indices to WGS84 lon/lat arrays.""" + # Pixel center coordinates in the raster's CRS + xs, ys = rio.transform.xy(transform, rows, cols) + xs = np.asarray(xs, dtype=np.float64) + ys = np.asarray(ys, dtype=np.float64) + + if crs.to_epsg() == 4326: + return xs, ys + + transformer = Transformer.from_crs(crs, "EPSG:4326", always_xy=True) + lons, lats = transformer.transform(xs, ys) + return np.asarray(lons), np.asarray(lats) + + +def _read_static_attribute(path: str, mask: np.ndarray) -> np.ndarray: + """Read a single-band raster and extract values at masked pixel locations.""" + data, _, _ = _read_single_band(path) + return data[mask].astype(np.float32) + + +def _parse_dates_from_filenames(file_list: list[str]) -> list[datetime]: + """Extract dates from dolphin timeseries filenames like '20210606.tif'.""" + from opera_utils import get_dates + + dates = [] + for f in file_list: + d = get_dates(f) + assert d, f"Could not parse date from {f}" + # For timeseries files, take the last date (secondary) + dates.append(d[-1]) + return dates + + +def convert_dolphin( + work_dir: str, + output_dir: str, + coherence_threshold: float = 0.5, + amplitude_dispersion_threshold: float | None = None, +) -> Path: + """Convert a dolphin workflow directory to GeoParquet point cloud. + + Parameters + ---------- + work_dir : str + Path to dolphin workflow directory. + output_dir : str + Directory to write output files. + coherence_threshold : float + Minimum temporal coherence to include a pixel. Default 0.5. + amplitude_dispersion_threshold : float or None + Maximum amplitude dispersion to include a pixel. None to skip. + + Returns + ------- + Path + Path to the generated bowser_manifest.json. + """ + import geopandas as gpd + + output_path = Path(output_dir) + output_path.mkdir(parents=True, exist_ok=True) + + print(f"Scanning dolphin outputs in {work_dir}...") + dolphin_files = _find_dolphin_files(work_dir) + + assert ( + "timeseries" in dolphin_files + ), f"No timeseries files found in {work_dir}/timeseries/" + + # Build quality mask + print(f"Building quality mask (coherence > {coherence_threshold})...") + mask, transform, crs = _build_mask( + dolphin_files, coherence_threshold, amplitude_dispersion_threshold + ) + n_points = int(mask.sum()) + print(f" {n_points:,} pixels pass quality threshold") + + if n_points == 0: + print("No pixels pass quality threshold. Writing empty outputs.") + # Write empty GeoParquet files + import geopandas as gpd + + empty_gdf = gpd.GeoDataFrame( + {"point_id": np.array([], dtype=np.uint64)}, + geometry=[], + crs="EPSG:4326", + ) + points_path = output_path / "points.parquet" + empty_gdf.to_parquet(points_path) + + ts_table = pa.table( + { + "point_id": pa.array([], type=pa.uint64()), + "date": pa.array([], type=pa.date32()), + "displacement": pa.array([], type=pa.float32()), + } + ) + ts_path = output_path / "timeseries.parquet" + pq.write_table(ts_table, ts_path) + + manifest = DatasetManifest( + name=Path(work_dir).name, + layers={ + "ps_points": PointLayerConfig( + points_source=str(points_path), + timeseries_source=str(ts_path), + ), + }, + ) + manifest_path = output_path / "bowser_manifest.json" + manifest.save(manifest_path) + return manifest_path + + # Get pixel coordinates of surviving points + rows, cols = np.where(mask) + lons, lats = _pixel_coords_to_lonlat(rows, cols, transform, crs) + + # Assign point IDs + point_ids = np.arange(n_points, dtype=np.uint64) + + # Build points table + print("Reading static attributes...") + points_data: dict[str, np.ndarray] = { + "point_id": point_ids, + } + + # Column metadata for units + col_metadata: dict[str, dict[str, str]] = { + "point_id": {}, + } + + if "velocity" in dolphin_files: + points_data["velocity"] = _read_static_attribute( + dolphin_files["velocity"][0], mask + ) + col_metadata["velocity"] = {"units": "mm/yr"} + + if "velocity_stderr" in dolphin_files: + points_data["velocity_std"] = _read_static_attribute( + dolphin_files["velocity_stderr"][0], mask + ) + col_metadata["velocity_std"] = {"units": "mm/yr"} + + if "temporal_coherence_average" in dolphin_files: + points_data["temporal_coherence"] = _read_static_attribute( + dolphin_files["temporal_coherence_average"][0], mask + ) + elif "temporal_coherence" in dolphin_files: + points_data["temporal_coherence"] = _read_static_attribute( + dolphin_files["temporal_coherence"][-1], mask + ) + + if "amplitude_dispersion" in dolphin_files: + points_data["amplitude_dispersion"] = _read_static_attribute( + dolphin_files["amplitude_dispersion"][0], mask + ) + + # Create GeoDataFrame and write as GeoParquet + geometry = [Point(lon, lat) for lon, lat in zip(lons, lats)] + gdf = gpd.GeoDataFrame(points_data, geometry=geometry, crs="EPSG:4326") + + # Sort by spatial locality for better bbox query performance + # Use a simple Morton/Z-order approximation: interleave quantized lon/lat bits + gdf = gdf.sort_values( + by=["point_id"], + key=lambda _: _morton_key(lons, lats), + ) + + points_path = output_path / "points.parquet" + print(f"Writing {points_path} ({n_points:,} points)...") + gdf.to_parquet(points_path, row_group_size=100_000) + + # Build time series table + ts_files = dolphin_files["timeseries"] + dates = _parse_dates_from_filenames(ts_files) + n_dates = len(dates) + print(f"Reading displacement time series ({n_dates} dates)...") + + # Pre-allocate arrays for the long-form table + total_rows = n_points * n_dates + ts_point_ids = np.repeat(point_ids, n_dates) + date_list = [d.date() for d in dates] + ts_dates = date_list * n_points + ts_displacement = np.empty(total_rows, dtype=np.float32) + + # Read each date's raster and extract values at masked pixels + for i, ts_file in enumerate(ts_files): + data, _, _ = _read_single_band(ts_file) + values = data[mask].astype(np.float32) + # Place values: for each point p, the i-th date goes at index p * n_dates + i + ts_displacement[i::n_dates] = values + + # Write timeseries as Parquet with row groups organized by point_id + # Each row group holds `points_per_group * n_dates` rows + points_per_group = max(1, 500) + row_group_size = points_per_group * n_dates + + ts_table = pa.table( + { + "point_id": pa.array(ts_point_ids, type=pa.uint64()), + "date": pa.array(ts_dates, type=pa.date32()), + "displacement": pa.array(ts_displacement, type=pa.float32()), + } + ) + + ts_path = output_path / "timeseries.parquet" + print(f"Writing {ts_path} ({total_rows:,} rows, ~{row_group_size:,} rows/group)...") + + # Add column metadata for units + ts_col_metadata = {"displacement": {"units": "mm"}} + ts_schema = ts_table.schema + new_fields = [] + for field in ts_schema: + if field.name in ts_col_metadata: + md = { + k.encode(): v.encode() for k, v in ts_col_metadata[field.name].items() + } + new_fields.append(field.with_metadata(md)) + else: + new_fields.append(field) + ts_table = ts_table.cast(pa.schema(new_fields)) + + pq.write_table(ts_table, ts_path, row_group_size=row_group_size) + + # Compute bounds + bounds = [ + float(lons.min()), + float(lats.min()), + float(lons.max()), + float(lats.max()), + ] + + # Generate manifest + manifest = DatasetManifest( + name=Path(work_dir).name, + description=f"Dolphin output converted from {work_dir}", + layers={ + "ps_points": PointLayerConfig( + points_source=str(points_path), + timeseries_source=str(ts_path), + default_color_by="velocity", + default_colormap="RdBu_r", + ), + }, + bounds=bounds, + ) + + manifest_path = output_path / "bowser_manifest.json" + manifest.save(manifest_path) + print(f"Manifest written to {manifest_path}") + + return manifest_path + + +def _morton_key(lons: np.ndarray, lats: np.ndarray, bits: int = 16) -> np.ndarray: + """Compute approximate Morton/Z-order curve index for spatial sorting. + + Interleaves quantized longitude and latitude bits to produce a sort key + that clusters spatially nearby points together. + + Parameters + ---------- + lons, lats : np.ndarray + Coordinate arrays. + bits : int + Quantization precision. + + Returns + ------- + np.ndarray + Integer sort keys (uint64). + """ + # Normalize to [0, 2^bits) + lon_min, lon_max = lons.min(), lons.max() + lat_min, lat_max = lats.min(), lats.max() + lon_range = lon_max - lon_min if lon_max > lon_min else 1.0 + lat_range = lat_max - lat_min if lat_max > lat_min else 1.0 + max_val = (1 << bits) - 1 + + qlon = ((lons - lon_min) / lon_range * max_val).astype(np.uint32) + qlat = ((lats - lat_min) / lat_range * max_val).astype(np.uint32) + + # Simple bit interleave for 16 bits + result = np.zeros(len(lons), dtype=np.uint64) + for i in range(bits): + result |= ((qlon >> i) & 1).astype(np.uint64) << (2 * i) + result |= ((qlat >> i) & 1).astype(np.uint64) << (2 * i + 1) + + return result diff --git a/src/bowser/cli.py b/src/bowser/cli.py index eb6b098..513def7 100644 --- a/src/bowser/cli.py +++ b/src/bowser/cli.py @@ -23,6 +23,13 @@ def cli_app(): default="bowser_rasters.json", help="Name of JSON file from `bowser set-data`.", ) +@click.option( + "-m", + "--manifest", + "manifest_file", + default=None, + help="Path to bowser_manifest.json (V2 mode with point layer support).", +) @click.option( "--port", "-p", @@ -75,6 +82,7 @@ def cli_app(): def run( stack_file, rasters_file, + manifest_file, port, reload, workers, @@ -89,7 +97,9 @@ def run( if port is None: port = _find_available_port(8000) _setup_gdal_env(ignore_sidecar_files) - if stack_file: + if manifest_file: + os.environ["BOWSER_MANIFEST_FILE"] = manifest_file + elif stack_file: os.environ["BOWSER_STACK_DATA_FILE"] = stack_file else: os.environ["BOWSER_DATASET_CONFIG_FILE"] = rasters_file @@ -277,8 +287,6 @@ def _glob(g): { "name": "Velocity Std. Err.", "file_list": [f"{wd}/timeseries/velocity_stderr.tif"], - "uses_spatial_ref": True, - "algorithm": Algorithm.SHIFT.value, }, { "name": "Velocity Confidence Interval Margin", @@ -685,3 +693,52 @@ def setup_nisar_gunw(nisar_dir: str, output: str): raster_groups.append(rg) _dump_raster_groups(raster_groups, output=output) + + +@cli_app.group() +def convert(): + """Convert InSAR data to GeoParquet point cloud format.""" + + +@convert.command() +@click.argument( + "dolphin_work_dir", + type=click.Path(exists=True, file_okay=False, dir_okay=True), +) +@click.option( + "-o", + "--output-dir", + required=True, + help="Directory to write output GeoParquet and manifest files.", +) +@click.option( + "--coherence-threshold", + default=0.5, + type=float, + show_default=True, + help="Minimum temporal coherence to include a pixel.", +) +@click.option( + "--amplitude-dispersion-threshold", + default=None, + type=float, + help="Maximum amplitude dispersion to include a pixel (lower = more stable).", +) +def dolphin( + dolphin_work_dir, output_dir, coherence_threshold, amplitude_dispersion_threshold +): + """Convert dolphin workflow outputs to GeoParquet point cloud. + + Reads raster time series and quality layers from DOLPHIN_WORK_DIR, + masks by quality thresholds, and writes points.parquet + + timeseries.parquet + bowser_manifest.json to OUTPUT_DIR. + """ + from ._convert_dolphin import convert_dolphin + + manifest_path = convert_dolphin( + work_dir=dolphin_work_dir, + output_dir=output_dir, + coherence_threshold=coherence_threshold, + amplitude_dispersion_threshold=amplitude_dispersion_threshold, + ) + click.echo(f"\nDone! To view:\n bowser run --manifest {manifest_path}") diff --git a/src/bowser/main.py b/src/bowser/main.py index 405a2fc..cd90f3d 100644 --- a/src/bowser/main.py +++ b/src/bowser/main.py @@ -23,6 +23,7 @@ from titiler.core.factory import TilerFactory from .config import settings +from .manifest import DatasetManifest from .readers import CustomReader from .titiler import Amplitude, JSONResponse, Phase, RasterGroup, Rewrap, Shift from .utils import calculate_trend, desensitize_mpl_case, generate_colorbar @@ -62,6 +63,31 @@ def load_data_sources(): """Load data sources and determine which mode to use (MD or COG).""" + # Check for manifest file first (V2 mode with potential point layers) + manifest_file = os.environ.get("BOWSER_MANIFEST_FILE", "") + if manifest_file and Path(manifest_file).exists(): + logger.info(f"Loading V2 manifest from {manifest_file}") + manifest = DatasetManifest.load(manifest_file) + + # Initialize point layers if any + point_layers = manifest.get_point_layers() + if point_layers: + from .points import init_point_layers + + init_point_layers(point_layers) + logger.info(f"Loaded {len(point_layers)} point layer(s)") + + # Also load raster layers as RasterGroups if any + raster_layers = manifest.get_raster_layers() + raster_groups = {} + for name, rl in raster_layers.items(): + rg = RasterGroup(name=name, file_list=[rl.source]) + raster_groups[name] = rg + + if raster_groups: + return "cog", None, raster_groups, None, manifest + return "points", None, None, None, manifest + # Check for xarray stack file first (MD mode) if settings.BOWSER_STACK_DATA_FILE: stack_file = os.environ["BOWSER_STACK_DATA_FILE"] @@ -74,7 +100,7 @@ def load_data_sources(): crs = CRS.from_wkt(ds.spatial_ref.crs_wkt) ds.rio.write_crs(crs, inplace=True) transformer = Transformer.from_crs(4326, ds.rio.crs, always_xy=True) - return "md", ds, None, transformer + return "md", ds, None, transformer, None # Check for RasterGroup JSON config (COG mode) elif Path(settings.BOWSER_DATASET_CONFIG_FILE).exists(): @@ -92,16 +118,22 @@ def load_data_sources(): " {list(raster_groups.keys())}" ) ) - return "cog", None, raster_groups, None + return "cog", None, raster_groups, None, None else: raise ValueError( - "No data files specified - need either stack file or JSON config" + "No data files specified - need either manifest, stack file, or JSON config" ) # Global data sources - load once at startup -DATA_MODE, XARRAY_DATASET, RASTER_GROUPS, transformer_from_lonlat = load_data_sources() +( + DATA_MODE, + XARRAY_DATASET, + RASTER_GROUPS, + transformer_from_lonlat, + MANIFEST, +) = load_data_sources() print(f"Data loading complete in {time.time() - t0:.1f} sec. Mode: {DATA_MODE}") @@ -346,7 +378,9 @@ async def multi_point( try: # Get values at the point - values = await _get_point_values(dataset_name, float(lon), float(lat)) + _lon: float = float(lon) # type: ignore[arg-type] + _lat: float = float(lat) # type: ignore[arg-type] + values = await _get_point_values(dataset_name, _lon, _lat) # Apply reference subtraction if provided if ref_values is not None: @@ -578,6 +612,13 @@ def XarrayPathDependency( app.include_router(md_endpoints.router, prefix="/md", tags=["Xarray Multi Dimensional"]) logger.info("Configured MD endpoints at /md/*") +# Add point layer endpoints if available +if MANIFEST and MANIFEST.get_point_layers(): + from .points import router as points_router + + app.include_router(points_router) + logger.info("Configured point layer endpoints at /points/*") + # Add exception handlers add_exception_handlers(app, DEFAULT_STATUS_CODES) diff --git a/src/bowser/manifest.py b/src/bowser/manifest.py new file mode 100644 index 0000000..5c045b2 --- /dev/null +++ b/src/bowser/manifest.py @@ -0,0 +1,107 @@ +"""Pydantic models for the Bowser V2 dataset manifest. + +A manifest describes a collection of raster and point layers for a single +InSAR analysis area. It is the entry point for Bowser V2's unified +raster + vector viewing. +""" + +from __future__ import annotations + +from pathlib import Path +from typing import Literal, Union + +from pydantic import BaseModel, Field + + +class RasterLayerConfig(BaseModel): + """Configuration for a raster tile layer (COG or Zarr).""" + + type: Literal["raster"] = "raster" + source: str = Field(description="Path or URI to raster file/stack (COG, Zarr, VRT)") + colormap: str = "RdBu_r" + units: str = "" + vmin: float | None = None + vmax: float | None = None + + +class PointLayerConfig(BaseModel): + """Configuration for a vector point layer backed by GeoParquet.""" + + type: Literal["points"] = "points" + points_source: str = Field(description="Path or URI to points GeoParquet file") + timeseries_source: str = Field( + description="Path or URI to timeseries GeoParquet file" + ) + default_color_by: str = "velocity" + default_colormap: str = "RdBu_r" + default_vmin: float | None = None + default_vmax: float | None = None + + +LayerConfig = Union[RasterLayerConfig, PointLayerConfig] + + +class DatasetManifest(BaseModel): + """Top-level manifest describing a Bowser V2 dataset. + + Parameters + ---------- + name : str + Human-readable dataset name. + layers : dict[str, LayerConfig] + Named layers, each either a raster or point layer. + description : str + Optional description of the dataset. + satellite : str + Satellite name (e.g., "Sentinel-1"). + orbit : str + Orbit direction (e.g., "descending"). + track : int + Relative orbit / track number. + reference_date : str + Reference date for displacement time series. + bounds : list[float] + Spatial bounds [west, south, east, north] in EPSG:4326. + """ + + name: str + layers: dict[str, LayerConfig] = Field( + description="Named layers (raster or points)" + ) + description: str = "" + satellite: str = "" + orbit: str = "" + track: int | None = None + reference_date: str | None = None + bounds: list[float] | None = None + + def get_point_layers(self) -> dict[str, PointLayerConfig]: + """Return only the point layers from the manifest.""" + return { + name: layer + for name, layer in self.layers.items() + if isinstance(layer, PointLayerConfig) + } + + def get_raster_layers(self) -> dict[str, RasterLayerConfig]: + """Return only the raster layers from the manifest.""" + return { + name: layer + for name, layer in self.layers.items() + if isinstance(layer, RasterLayerConfig) + } + + @classmethod + def load(cls, path: str | Path) -> DatasetManifest: + """Load a manifest from a JSON file.""" + import json + + with open(path) as f: + return cls.model_validate(json.load(f)) + + def save(self, path: str | Path) -> None: + """Write the manifest to a JSON file.""" + import json + + with open(path, "w") as f: + json.dump(self.model_dump(), f, indent=2) diff --git a/src/bowser/points.py b/src/bowser/points.py new file mode 100644 index 0000000..f236ba0 --- /dev/null +++ b/src/bowser/points.py @@ -0,0 +1,437 @@ +"""FastAPI router for vector point data, backed by DuckDB + GeoParquet. + +Provides endpoints for querying, filtering, and retrieving time series +from GeoParquet point cloud datasets. +""" + +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING + +import duckdb +import numpy as np +import pyarrow as pa +import pyarrow.ipc as ipc +from fastapi import APIRouter, HTTPException, Query, Response +from pydantic import BaseModel + +if TYPE_CHECKING: + from .manifest import PointLayerConfig + +logger = logging.getLogger("bowser.points") + +router = APIRouter(prefix="/points", tags=["Vector Points"]) + +# Module-level DuckDB connection, initialized by `init_point_layers` +_conn: duckdb.DuckDBPyConnection | None = None +_layers: dict[str, PointLayerConfig] = {} + + +def init_point_layers(layers: dict[str, PointLayerConfig]) -> None: + """Initialize DuckDB connection and register GeoParquet files as views. + + Parameters + ---------- + layers : dict[str, PointLayerConfig] + Mapping of layer name to point layer config from the manifest. + """ + global _conn, _layers + _conn = duckdb.connect() + _conn.install_extension("spatial") + _conn.load_extension("spatial") + _layers = layers + + for name, layer in layers.items(): + safe_name = _safe_identifier(name) + _conn.execute( + f""" + CREATE VIEW {safe_name}_points AS + SELECT * FROM read_parquet('{layer.points_source}') + """ + ) + _conn.execute( + f""" + CREATE VIEW {safe_name}_timeseries AS + SELECT * FROM read_parquet('{layer.timeseries_source}') + """ + ) + logger.info(f"Registered point layer '{name}' from {layer.points_source}") + + +def _safe_identifier(name: str) -> str: + """Convert a layer name to a safe SQL identifier.""" + return name.replace(" ", "_").replace("-", "_").lower() + + +def _get_conn() -> duckdb.DuckDBPyConnection: + assert ( + _conn is not None + ), "Point layers not initialized. Call init_point_layers first." + return _conn + + +def _require_layer(layer_name: str) -> PointLayerConfig: + if layer_name not in _layers: + raise HTTPException( + status_code=404, detail=f"Point layer '{layer_name}' not found" + ) + return _layers[layer_name] + + +# --- Request/Response Models --- + + +class TimeseriesRequest(BaseModel): + """Request body for multi-point time series.""" + + point_ids: list[int] + + +class CrossSectionRequest(BaseModel): + """Request body for cross-section profile.""" + + line: list[list[float]] # [[lon1, lat1], [lon2, lat2]] + width_m: float = 200.0 + attribute: str = "velocity" + + +class AreaAverageRequest(BaseModel): + """Request body for area averaging.""" + + polygon: list[list[float]] # [[lon1, lat1], [lon2, lat2], ...] + max_points: int = 10000 + + +# --- Endpoints --- + + +@router.get("/layers") +async def list_layers() -> dict: + """List available point layers and their configuration.""" + return { + name: { + "default_color_by": layer.default_color_by, + "default_colormap": layer.default_colormap, + "default_vmin": layer.default_vmin, + "default_vmax": layer.default_vmax, + } + for name, layer in _layers.items() + } + + +@router.get("/{layer_name}/attributes") +async def get_attributes(layer_name: str) -> dict: + """Get available columns with types and value ranges for a point layer. + + Used by the frontend to dynamically build filter UI and color-by dropdown. + """ + _require_layer(layer_name) + conn = _get_conn() + safe = _safe_identifier(layer_name) + + # Get column info + cols = conn.execute(f"DESCRIBE {safe}_points").fetchall() + + attributes = {} + for col_name, col_type, *_ in cols: + if col_name == "geometry": + continue + + attr_info: dict = {"type": col_type} + + # Get value range for numeric columns + if ( + "FLOAT" in col_type.upper() + or "INT" in col_type.upper() + or "DOUBLE" in col_type.upper() + ): + try: + stats = conn.execute( + f""" + SELECT + MIN({col_name}) as min_val, + MAX({col_name}) as max_val, + AVG({col_name}) as mean_val, + COUNT({col_name}) as count + FROM {safe}_points + """ + ).fetchone() + attr_info["min"] = stats[0] + attr_info["max"] = stats[1] + attr_info["mean"] = stats[2] + attr_info["count"] = stats[3] + except duckdb.Error: + pass + + attributes[col_name] = attr_info + + return {"layer": layer_name, "attributes": attributes} + + +@router.get("/{layer_name}") +async def get_points( + layer_name: str, + bbox: str | None = Query(None, description="Bounding box: west,south,east,north"), + color_by: str = Query("velocity", description="Attribute to include for coloring"), + point_filter: str | None = Query( + None, alias="filter", description="Filter expression, e.g. 'velocity<-10'" + ), + max_points: int = Query(100_000, description="Maximum number of points to return"), +) -> Response: + """Get points within a bounding box, returned as Arrow IPC. + + The response contains columns: point_id, lon, lat, and the color_by attribute. + """ + _require_layer(layer_name) + conn = _get_conn() + safe = _safe_identifier(layer_name) + + # Build WHERE clause + where_parts: list[str] = [] + + if bbox: + parts = [float(x) for x in bbox.split(",")] + assert len(parts) == 4, f"bbox must have 4 values, got {len(parts)}" + west, south, east, north = parts + where_parts.append( + f"ST_X(geometry) BETWEEN {west} AND {east} " + f"AND ST_Y(geometry) BETWEEN {south} AND {north}" + ) + + if point_filter: + # Sanitize: only allow simple expressions on known columns + sanitized = _sanitize_filter(point_filter, safe, conn) + where_parts.append(sanitized) + + where_clause = " AND ".join(where_parts) if where_parts else "TRUE" + + # Validate color_by column exists + valid_cols = { + row[0] + for row in conn.execute(f"DESCRIBE {safe}_points").fetchall() + if row[0] != "geometry" + } + if color_by not in valid_cols: + color_by = "point_id" # fallback + + sql = f""" + SELECT + point_id, + ST_X(geometry) as lon, + ST_Y(geometry) as lat, + {color_by} + FROM {safe}_points + WHERE {where_clause} + LIMIT {max_points} + """ + + try: + arrow_table = conn.execute(sql).fetch_arrow_table() + except duckdb.Error as e: + raise HTTPException(status_code=400, detail=f"Query error: {e}") + + # Serialize as Arrow IPC + sink = pa.BufferOutputStream() + writer = ipc.new_stream(sink, arrow_table.schema) + writer.write_table(arrow_table) + writer.close() + + return Response( + content=sink.getvalue().to_pybytes(), + media_type="application/vnd.apache.arrow.stream", + headers={"X-Point-Count": str(len(arrow_table))}, + ) + + +@router.get("/{layer_name}/{point_id}/timeseries") +async def get_point_timeseries( + layer_name: str, + point_id: int, + start_date: str | None = Query(None, description="Start date filter (YYYY-MM-DD)"), + end_date: str | None = Query(None, description="End date filter (YYYY-MM-DD)"), +) -> list[dict]: + """Get time series for a single point.""" + _require_layer(layer_name) + conn = _get_conn() + safe = _safe_identifier(layer_name) + + where_parts = [f"point_id = {int(point_id)}"] + if start_date: + where_parts.append(f"date >= '{start_date}'") + if end_date: + where_parts.append(f"date <= '{end_date}'") + + sql = f""" + SELECT date, displacement + FROM {safe}_timeseries + WHERE {' AND '.join(where_parts)} + ORDER BY date + """ + + try: + result = conn.execute(sql).fetchall() + except duckdb.Error as e: + raise HTTPException(status_code=400, detail=f"Query error: {e}") + + return [ + {"date": str(row[0]), "displacement": float(row[1])} + for row in result + if not np.isnan(row[1]) + ] + + +@router.post("/{layer_name}/timeseries") +async def get_multi_point_timeseries( + layer_name: str, + request: TimeseriesRequest, +) -> dict: + """Get time series for multiple points at once.""" + _require_layer(layer_name) + conn = _get_conn() + safe = _safe_identifier(layer_name) + + point_ids = [int(p) for p in request.point_ids] + ids_str = ",".join(str(p) for p in point_ids) + + sql = f""" + SELECT point_id, date, displacement + FROM {safe}_timeseries + WHERE point_id IN ({ids_str}) + ORDER BY point_id, date + """ + + try: + result = conn.execute(sql).fetchall() + except duckdb.Error as e: + raise HTTPException(status_code=400, detail=f"Query error: {e}") + + # Group by point_id + series: dict[int, list[dict]] = {pid: [] for pid in point_ids} + for point_id, date, displacement in result: + if np.isnan(displacement): + continue + series[point_id].append( + { + "date": str(date), + "displacement": float(displacement), + } + ) + + return {"series": series} + + +@router.get("/{layer_name}/stats") +async def get_stats( + layer_name: str, + bbox: str | None = Query(None, description="Bounding box: west,south,east,north"), + point_filter: str | None = Query( + None, alias="filter", description="Filter expression" + ), +) -> dict: + """Get summary statistics for points in the current view.""" + _require_layer(layer_name) + conn = _get_conn() + safe = _safe_identifier(layer_name) + + where_parts: list[str] = [] + if bbox: + parts = [float(x) for x in bbox.split(",")] + west, south, east, north = parts + where_parts.append( + f"ST_X(geometry) BETWEEN {west} AND {east} " + f"AND ST_Y(geometry) BETWEEN {south} AND {north}" + ) + if point_filter: + sanitized = _sanitize_filter(point_filter, safe, conn) + where_parts.append(sanitized) + + where_clause = " AND ".join(where_parts) if where_parts else "TRUE" + + # Build dynamic stats query for all numeric columns + cols = conn.execute(f"DESCRIBE {safe}_points").fetchall() + numeric_cols = [ + row[0] + for row in cols + if row[0] != "geometry" + and ("FLOAT" in row[1].upper() or "DOUBLE" in row[1].upper()) + ] + + agg_parts = ["COUNT(*) as count"] + for col in numeric_cols: + agg_parts.extend( + [ + f"AVG({col}) as {col}_mean", + f"STDDEV({col}) as {col}_std", + f"MIN({col}) as {col}_min", + f"MAX({col}) as {col}_max", + ] + ) + + sql = f""" + SELECT {', '.join(agg_parts)} + FROM {safe}_points + WHERE {where_clause} + """ + + try: + result = conn.execute(sql).fetchone() + col_names = [desc[0] for desc in conn.execute(sql).description] + except duckdb.Error as e: + raise HTTPException(status_code=400, detail=f"Query error: {e}") + + stats = {} + for name, val in zip(col_names, result): + if val is not None and not (isinstance(val, float) and np.isnan(val)): + stats[name] = val + + return stats + + +# --- Filter Sanitization --- + +# Allowed operators in filter expressions +_ALLOWED_OPS = {"<", ">", "<=", ">=", "=", "!=", "<>"} + + +def _sanitize_filter( + filter_expr: str, + safe_layer: str, + conn: duckdb.DuckDBPyConnection, +) -> str: + """Sanitize a user-provided filter expression. + + Only allows simple `column op value` expressions joined by AND. + Validates that column names exist in the table. + """ + valid_cols = { + row[0] + for row in conn.execute(f"DESCRIBE {safe_layer}_points").fetchall() + if row[0] != "geometry" + } + + parts = [] + for clause in filter_expr.split(","): + clause = clause.strip() + if not clause: + continue + + # Parse: column_name operator value + found = False + for op in sorted(_ALLOWED_OPS, key=len, reverse=True): + if op in clause: + col, val = clause.split(op, 1) + col = col.strip() + val = val.strip() + + assert col in valid_cols, f"Unknown column: {col}" + # Validate value is numeric + float(val) # raises ValueError if not numeric + + parts.append(f"{col} {op} {val}") + found = True + break + + assert found, f"Invalid filter clause: {clause}" + + return " AND ".join(parts) diff --git a/tests/test_convert_dolphin.py b/tests/test_convert_dolphin.py new file mode 100644 index 0000000..cc50898 --- /dev/null +++ b/tests/test_convert_dolphin.py @@ -0,0 +1,142 @@ +"""Tests for the dolphin-to-GeoParquet converter.""" + +import json +from pathlib import Path + +import geopandas as gpd +import numpy as np +import pyarrow.parquet as pq +import rasterio as rio +from rasterio.transform import from_bounds + +from bowser._convert_dolphin import convert_dolphin + + +def _make_synthetic_dolphin_dir(tmp_path: Path, n_dates: int = 5) -> Path: + """Create a minimal synthetic dolphin workflow directory for testing.""" + work_dir = tmp_path / "dolphin_work" + ts_dir = work_dir / "timeseries" + ifg_dir = work_dir / "interferograms" + ts_dir.mkdir(parents=True) + ifg_dir.mkdir(parents=True) + + # Small 10x10 raster, EPSG:4326 for simplicity + nrows, ncols = 10, 10 + west, south, east, north = -118.5, 33.8, -118.4, 33.9 + transform = from_bounds(west, south, east, north, ncols, nrows) + crs = rio.crs.CRS.from_epsg(4326) + profile = { + "driver": "GTiff", + "height": nrows, + "width": ncols, + "count": 1, + "dtype": "float32", + "crs": crs, + "transform": transform, + "nodata": 0.0, + } + + # Temporal coherence: top half > 0.7, bottom half < 0.3 + coh = np.zeros((nrows, ncols), dtype=np.float32) + coh[:5, :] = 0.8 + coh[5:, :] = 0.2 + coh_path = ifg_dir / "temporal_coherence_average_20200101_20201231.tif" + with rio.open(coh_path, "w", **profile) as dst: + dst.write(coh, 1) + + # Velocity: linear gradient + vel = np.linspace(-20, 20, nrows * ncols).reshape(nrows, ncols).astype(np.float32) + vel_path = ts_dir / "velocity.tif" + with rio.open(vel_path, "w", **profile) as dst: + dst.write(vel, 1) + + # Amplitude dispersion + amp = np.full((nrows, ncols), 0.3, dtype=np.float32) + amp_path = ifg_dir / "amp_dispersion_looked.tif" + with rio.open(amp_path, "w", **profile) as dst: + dst.write(amp, 1) + + # Time series: n_dates rasters with linear trend + from datetime import date, timedelta + + start = date(2020, 1, 1) + for i in range(n_dates): + d = start + timedelta(days=i * 12) + date_str = d.strftime("%Y%m%d") + ts_data = (vel * (i + 1) / 365.25).astype(np.float32) + ts_path = ts_dir / f"{date_str}.tif" + with rio.open(ts_path, "w", **profile) as dst: + dst.write(ts_data, 1) + + return work_dir + + +def test_convert_dolphin_basic(tmp_path): + """Test that converter produces valid GeoParquet files and manifest.""" + n_dates = 5 + work_dir = _make_synthetic_dolphin_dir(tmp_path, n_dates=n_dates) + output_dir = tmp_path / "output" + + manifest_path = convert_dolphin( + work_dir=str(work_dir), + output_dir=str(output_dir), + coherence_threshold=0.5, + ) + + # Check output files exist + assert manifest_path.exists() + assert (output_dir / "points.parquet").exists() + assert (output_dir / "timeseries.parquet").exists() + + # Check manifest + with open(manifest_path) as f: + manifest = json.load(f) + assert "ps_points" in manifest["layers"] + assert manifest["layers"]["ps_points"]["type"] == "points" + assert manifest["bounds"] is not None + + # Check points table + points_gdf = gpd.read_parquet(output_dir / "points.parquet") + # Only top 5 rows (coherence > 0.5) should survive: 5 rows * 10 cols = 50 points + assert len(points_gdf) == 50 + assert "point_id" in points_gdf.columns + assert "velocity" in points_gdf.columns + assert "temporal_coherence" in points_gdf.columns + assert "amplitude_dispersion" in points_gdf.columns + assert points_gdf.crs.to_epsg() == 4326 + + # Check all temporal coherence values are > threshold + assert (points_gdf["temporal_coherence"] > 0.5).all() + + # Check timeseries table + ts_table = pq.read_table(output_dir / "timeseries.parquet") + ts_df = ts_table.to_pandas() + assert len(ts_df) == 50 * n_dates # 50 points * 5 dates + assert set(ts_df.columns) == {"point_id", "date", "displacement"} + + # Check that each point has exactly n_dates entries + counts = ts_df.groupby("point_id").size() + assert (counts == n_dates).all() + + # Check column metadata for units + displacement_field = ts_table.schema.field("displacement") + assert displacement_field.metadata is not None + assert displacement_field.metadata[b"units"] == b"mm" + + +def test_convert_dolphin_amplitude_filter(tmp_path): + """Test that amplitude dispersion filter works.""" + work_dir = _make_synthetic_dolphin_dir(tmp_path) + output_dir = tmp_path / "output" + + # Use amplitude threshold that should reject all points (threshold < 0.3) + convert_dolphin( + work_dir=str(work_dir), + output_dir=str(output_dir), + coherence_threshold=0.5, + amplitude_dispersion_threshold=0.1, + ) + + points_gdf = gpd.read_parquet(output_dir / "points.parquet") + # All points have amp_disp=0.3, threshold is 0.1 → none pass + assert len(points_gdf) == 0 diff --git a/tests/test_points.py b/tests/test_points.py new file mode 100644 index 0000000..95627b8 --- /dev/null +++ b/tests/test_points.py @@ -0,0 +1,186 @@ +"""Tests for the DuckDB-backed point query endpoints.""" + + +import geopandas as gpd +import numpy as np +import pyarrow as pa +import pyarrow.ipc as ipc +import pyarrow.parquet as pq +import pytest + +# Use httpx for testing FastAPI +from fastapi import FastAPI +from fastapi.testclient import TestClient +from shapely.geometry import Point + +from bowser.manifest import PointLayerConfig +from bowser.points import init_point_layers, router + + +@pytest.fixture +def synthetic_point_data(tmp_path): + """Create synthetic point + timeseries GeoParquet files.""" + n_points = 100 + n_dates = 10 + + # Points table + lons = np.random.uniform(-118.5, -118.0, n_points) + lats = np.random.uniform(33.5, 34.0, n_points) + gdf = gpd.GeoDataFrame( + { + "point_id": np.arange(n_points, dtype=np.uint64), + "velocity": np.random.normal(-5, 10, n_points).astype(np.float32), + "temporal_coherence": np.random.uniform(0.3, 1.0, n_points).astype( + np.float32 + ), + }, + geometry=[Point(lon, lat) for lon, lat in zip(lons, lats)], + crs="EPSG:4326", + ) + + points_path = tmp_path / "points.parquet" + gdf.to_parquet(points_path) + + # Timeseries table + from datetime import date, timedelta + + dates = [date(2020, 1, 1) + timedelta(days=i * 12) for i in range(n_dates)] + rows = [] + for pid in range(n_points): + vel = gdf.loc[pid, "velocity"] + for i, d in enumerate(dates): + disp = float(vel) / 365.25 * (i * 12) + np.random.normal(0, 1) + rows.append((np.uint64(pid), d, np.float32(disp))) + + ts_table = pa.table( + { + "point_id": pa.array([r[0] for r in rows], type=pa.uint64()), + "date": pa.array([r[1] for r in rows], type=pa.date32()), + "displacement": pa.array([r[2] for r in rows], type=pa.float32()), + } + ) + ts_path = tmp_path / "timeseries.parquet" + pq.write_table(ts_table, ts_path) + + return { + "points_path": str(points_path), + "ts_path": str(ts_path), + "n_points": n_points, + "n_dates": n_dates, + "gdf": gdf, + } + + +@pytest.fixture +def test_app(synthetic_point_data): + """Create a test FastAPI app with point endpoints.""" + app = FastAPI() + app.include_router(router) + + layers = { + "test_layer": PointLayerConfig( + points_source=synthetic_point_data["points_path"], + timeseries_source=synthetic_point_data["ts_path"], + ) + } + init_point_layers(layers) + + return TestClient(app) + + +def test_list_layers(test_app): + """Test listing available point layers.""" + response = test_app.get("/points/layers") + assert response.status_code == 200 + data = response.json() + assert "test_layer" in data + + +def test_get_attributes(test_app): + """Test getting attribute metadata for a layer.""" + response = test_app.get("/points/test_layer/attributes") + assert response.status_code == 200 + data = response.json() + attrs = data["attributes"] + assert "velocity" in attrs + assert "temporal_coherence" in attrs + assert "point_id" in attrs + assert "min" in attrs["velocity"] + assert "max" in attrs["velocity"] + + +def test_get_points_no_filter(test_app, synthetic_point_data): + """Test fetching all points without filters.""" + response = test_app.get("/points/test_layer") + assert response.status_code == 200 + assert response.headers["content-type"] == "application/vnd.apache.arrow.stream" + + # Decode Arrow IPC + reader = ipc.open_stream(response.content) + table = reader.read_all() + assert len(table) == synthetic_point_data["n_points"] + assert "point_id" in table.column_names + assert "lon" in table.column_names + assert "lat" in table.column_names + assert "velocity" in table.column_names + + +def test_get_points_with_bbox(test_app): + """Test fetching points within a bounding box.""" + # Very small bbox that should contain fewer points + response = test_app.get("/points/test_layer?bbox=-118.3,-118.2,33.7,33.8") + assert response.status_code == 200 + reader = ipc.open_stream(response.content) + table = reader.read_all() + # Should have fewer points than total (or possibly zero, that's ok) + assert len(table) <= 100 + + +def test_get_points_with_filter(test_app): + """Test fetching points with an attribute filter.""" + response = test_app.get("/points/test_layer?filter=velocity<-10") + assert response.status_code == 200 + reader = ipc.open_stream(response.content) + table = reader.read_all() + # All returned velocities should be < -10 + velocities = table.column("velocity").to_pylist() + for v in velocities: + assert v < -10 + + +def test_get_point_timeseries(test_app, synthetic_point_data): + """Test fetching time series for a single point.""" + response = test_app.get("/points/test_layer/0/timeseries") + assert response.status_code == 200 + data = response.json() + assert len(data) == synthetic_point_data["n_dates"] + assert "date" in data[0] + assert "displacement" in data[0] + + +def test_get_multi_point_timeseries(test_app): + """Test fetching time series for multiple points.""" + response = test_app.post( + "/points/test_layer/timeseries", + json={"point_ids": [0, 1, 2]}, + ) + assert response.status_code == 200 + data = response.json() + assert "series" in data + assert "0" in data["series"] or 0 in data["series"] + + +def test_get_stats(test_app, synthetic_point_data): + """Test getting summary statistics.""" + response = test_app.get("/points/test_layer/stats") + assert response.status_code == 200 + data = response.json() + assert "count" in data + assert data["count"] == synthetic_point_data["n_points"] + assert "velocity_mean" in data + + +def test_unknown_layer_404(test_app): + """Test that requesting an unknown layer returns 404.""" + response = test_app.get("/points/nonexistent/attributes") + assert response.status_code == 404 From 0df8d992b813ed15a9e97c17a21a0c209eb1b6ff Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Sun, 22 Mar 2026 15:03:29 -0400 Subject: [PATCH 11/57] Add wide-form parquet converter with float16 upcast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `bowser convert wide-parquet` command for sarlet-style point clouds where displacement dates are stored as wide columns (YYYYMMDD_YYYYMMDD) - Auto-detects date columns, separates static attrs from time series - Upcasts float16 → float32 for DuckDB compatibility - Tested against real 193k-point Mexico City dataset (16 dates) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/bowser/_convert_wide_parquet.py | 246 ++++++++++++++++++++++++++++ src/bowser/cli.py | 34 ++++ 2 files changed, 280 insertions(+) create mode 100644 src/bowser/_convert_wide_parquet.py diff --git a/src/bowser/_convert_wide_parquet.py b/src/bowser/_convert_wide_parquet.py new file mode 100644 index 0000000..ccfed2c --- /dev/null +++ b/src/bowser/_convert_wide_parquet.py @@ -0,0 +1,246 @@ +"""Convert wide-form point cloud parquet to Bowser V2 two-table format. + +Handles parquet files where displacement time series are stored as +wide-form date columns (e.g., from sarlet's export_points_to_parquet). +""" + +from __future__ import annotations + +import re +from datetime import datetime +from pathlib import Path + +import numpy as np +import pyarrow as pa +import pyarrow.parquet as pq + +from .manifest import DatasetManifest, PointLayerConfig + +# Pattern for date-pair columns like "20240626_20240629" +_DATE_PAIR_RE = re.compile(r"^(\d{8})_(\d{8})$") +# Pattern for single-date columns like "20240626" +_SINGLE_DATE_RE = re.compile(r"^(\d{8})$") + + +def _identify_date_columns( + columns: list[str], +) -> tuple[list[str], list[tuple[datetime, datetime | None]]]: + """Identify which columns are date/date-pair displacement values. + + Parameters + ---------- + columns : list[str] + All column names in the parquet file. + + Returns + ------- + date_cols : list[str] + Column names that match date patterns. + parsed_dates : list[tuple[datetime, datetime | None]] + Parsed (reference_date, secondary_date) pairs. + For single-date columns, secondary_date is None. + """ + date_cols: list[str] = [] + parsed_dates: list[tuple[datetime, datetime | None]] = [] + + for col in columns: + m = _DATE_PAIR_RE.match(col) + if m: + ref = datetime.strptime(m.group(1), "%Y%m%d") + sec = datetime.strptime(m.group(2), "%Y%m%d") + date_cols.append(col) + parsed_dates.append((ref, sec)) + continue + + m = _SINGLE_DATE_RE.match(col) + if m: + d = datetime.strptime(m.group(1), "%Y%m%d") + date_cols.append(col) + parsed_dates.append((d, None)) + + return date_cols, parsed_dates + + +# Columns that are NOT date columns and NOT geometry/coordinate columns +# These are static point attributes to keep in the points table +_COORDINATE_COLS = {"longitude", "latitude", "geometry", "lon", "lat"} + + +def convert_wide_parquet( + input_file: str, + output_dir: str, + layer_name: str = "ps_points", +) -> Path: + """Convert a wide-form point cloud parquet to Bowser V2 two-table format. + + Parameters + ---------- + input_file : str + Path to the wide-form GeoParquet file. + output_dir : str + Directory to write output files. + layer_name : str + Name for the point layer in the manifest. + + Returns + ------- + Path + Path to the generated bowser_manifest.json. + """ + output_path = Path(output_dir) + output_path.mkdir(parents=True, exist_ok=True) + + print(f"Reading {input_file}...") + table = pq.read_table(input_file) + all_columns = table.column_names + n_points = len(table) + print(f" {n_points:,} points, {len(all_columns)} columns") + + # Identify date columns vs static attribute columns + date_cols, parsed_dates = _identify_date_columns(all_columns) + assert date_cols, f"No date columns found in {all_columns}" + + n_dates = len(date_cols) + print(f" {n_dates} date columns: {date_cols[0]} ... {date_cols[-1]}") + + # Check if all date pairs share a reference date (single-reference time series) + ref_dates = {d[0] for d in parsed_dates} + if len(ref_dates) == 1: + ref_date = ref_dates.pop() + print(f" Single reference date: {ref_date.strftime('%Y-%m-%d')}") + # For display, use secondary dates + display_dates = [] + for _, sec in parsed_dates: + display_dates.append(sec if sec is not None else _) + else: + ref_date = None + # Use the first date in each pair + display_dates = [d[0] for d in parsed_dates] + + # Separate static attributes from date columns + static_cols = [ + c for c in all_columns if c not in date_cols and c not in _COORDINATE_COLS + ] + print(f" Static attributes: {static_cols}") + + # --- Build points table --- + # Add point_id + point_ids = np.arange(n_points, dtype=np.uint64) + + # Extract geometry info from the GeoParquet + # Try to get lon/lat from explicit columns first, then from geometry + if "longitude" in all_columns and "latitude" in all_columns: + lons = table.column("longitude").to_numpy() + lats = table.column("latitude").to_numpy() + elif "lon" in all_columns and "lat" in all_columns: + lons = table.column("lon").to_numpy() + lats = table.column("lat").to_numpy() + else: + # Extract from WKB geometry column + import geopandas as gpd + + gdf = gpd.read_parquet(input_file, columns=["geometry"]) + lons = gdf.geometry.x.to_numpy() + lats = gdf.geometry.y.to_numpy() + + # Build points Arrow table + points_columns = { + "point_id": pa.array(point_ids, type=pa.uint64()), + } + # Add static attributes, upcasting float16 to float32 for DuckDB compatibility + for col in static_cols: + arr = table.column(col) + if pa.types.is_float16(arr.type): + arr = arr.cast(pa.float32()) + points_columns[col] = arr + + # Add geometry as lon/lat (DuckDB will use these for spatial queries) + points_columns["longitude"] = pa.array(lons, type=pa.float64()) + points_columns["latitude"] = pa.array(lats, type=pa.float64()) + + # Also preserve the WKB geometry column if present + if "geometry" in all_columns: + points_columns["geometry"] = table.column("geometry") + + points_table = pa.table(points_columns) + points_path = output_path / "points.parquet" + + # Preserve GeoParquet metadata if present + geo_meta = table.schema.metadata.get(b"geo") if table.schema.metadata else None + if geo_meta: + existing_meta = points_table.schema.metadata or {} + points_table = points_table.replace_schema_metadata( + {**existing_meta, b"geo": geo_meta} + ) + + print( + f"Writing {points_path} ({n_points:,} points, {len(static_cols)} attributes)..." + ) + pq.write_table(points_table, points_path, row_group_size=100_000) + + # --- Build time series table --- + # Melt wide format to long format: (point_id, date, displacement) + print(f"Melting {n_dates} date columns to long format...") + + total_rows = n_points * n_dates + ts_point_ids = np.repeat(point_ids, n_dates) + ts_dates = [d.date() for d in display_dates] * n_points + ts_displacement = np.empty(total_rows, dtype=np.float32) + + for i, col_name in enumerate(date_cols): + arr = table.column(col_name) + # float16 → float32 for DuckDB compatibility + if pa.types.is_float16(arr.type): + arr = arr.cast(pa.float32()) + col_data = arr.to_numpy() + ts_displacement[i::n_dates] = col_data + + # Row group size: ~500 points worth of dates per group + points_per_group = 500 + row_group_size = points_per_group * n_dates + + ts_table = pa.table( + { + "point_id": pa.array(ts_point_ids, type=pa.uint64()), + "date": pa.array(ts_dates, type=pa.date32()), + "displacement": pa.array(ts_displacement, type=pa.float32()), + } + ) + + ts_path = output_path / "timeseries.parquet" + print( + f"Writing {ts_path} ({total_rows:,} rows, " + f"~{row_group_size:,} rows/group)..." + ) + pq.write_table(ts_table, ts_path, row_group_size=row_group_size) + + # --- Build manifest --- + bounds = [ + float(lons.min()), + float(lats.min()), + float(lons.max()), + float(lats.max()), + ] + + default_color_by = "velocity" if "velocity" in static_cols else static_cols[0] + + manifest = DatasetManifest( + name=Path(input_file).stem, + description=f"Converted from {input_file}", + reference_date=(ref_date.strftime("%Y-%m-%d") if ref_date else None), + layers={ + layer_name: PointLayerConfig( + points_source=str(points_path.resolve()), + timeseries_source=str(ts_path.resolve()), + default_color_by=default_color_by, + default_colormap="RdBu_r", + ), + }, + bounds=bounds, + ) + + manifest_path = output_path / "bowser_manifest.json" + manifest.save(manifest_path) + print(f"Manifest written to {manifest_path}") + + return manifest_path diff --git a/src/bowser/cli.py b/src/bowser/cli.py index 513def7..68e1a1d 100644 --- a/src/bowser/cli.py +++ b/src/bowser/cli.py @@ -742,3 +742,37 @@ def dolphin( amplitude_dispersion_threshold=amplitude_dispersion_threshold, ) click.echo(f"\nDone! To view:\n bowser run --manifest {manifest_path}") + + +@convert.command() +@click.argument( + "input_file", + type=click.Path(exists=True, file_okay=True, dir_okay=False), +) +@click.option( + "-o", + "--output-dir", + required=True, + help="Directory to write output GeoParquet and manifest files.", +) +@click.option( + "--layer-name", + default="ps_points", + show_default=True, + help="Name for the point layer in the manifest.", +) +def wide_parquet(input_file, output_dir, layer_name): + """Convert a wide-form point cloud parquet to Bowser V2 format. + + Handles parquet files where displacement time series are stored as + date-named columns (e.g., '20240626_20240629'). Splits into separate + points.parquet + timeseries.parquet files. + """ + from ._convert_wide_parquet import convert_wide_parquet + + manifest_path = convert_wide_parquet( + input_file=input_file, + output_dir=output_dir, + layer_name=layer_name, + ) + click.echo(f"\nDone! To view:\n bowser run --manifest {manifest_path}") From faa39e5b7859928a9d3ca84d491d9886b2f6afc9 Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Sun, 22 Mar 2026 16:46:56 -0400 Subject: [PATCH 12/57] Replace frontend with MapLibre GL + deck.gl + Plotly - MapContainer: MapLibre GL JS replaces Leaflet, deck.gl ScatterplotLayer renders point clouds with WebGL, RdBu_r color scale, click-to-inspect - TimeSeriesChart: Plotly.js replaces Chart.js, dark theme, scattergl renderer for clicked point displacement time series - App: Auto-detects V2 point layer mode, fetches attributes for bounds - New usePointsApi hook: Arrow IPC decoding for point data, timeseries - AppContext: New state for activePointLayer, pointLayerBounds, clickedPoints - Raster tile layer support preserved in MapContainer for V1 compatibility - Removed Leaflet CDN dependency from index.html Co-Authored-By: Claude Opus 4.6 (1M context) --- index.html | 3 - package-lock.json | 4147 +- package.json | 12 +- src/bowser/dist/index.css | 663 +- src/bowser/dist/index.html | 3 - src/bowser/dist/index.js | 363808 ++++++++++++++++++++++++-- src/components/App.tsx | 70 +- src/components/MapContainer.tsx | 517 +- src/components/TimeSeriesChart.tsx | 442 +- src/context/AppContext.tsx | 21 + src/hooks/usePointsApi.ts | 130 + src/plotly.d.ts | 20 + src/types.ts | 16 +- 13 files changed, 340246 insertions(+), 29606 deletions(-) create mode 100644 src/hooks/usePointsApi.ts create mode 100644 src/plotly.d.ts diff --git a/index.html b/index.html index 33c0f99..e06b4f9 100644 --- a/index.html +++ b/index.html @@ -11,9 +11,6 @@ - - Bowser diff --git a/package-lock.json b/package-lock.json index dac43af..48350c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,23 @@ "name": "bowser-js", "version": "0.0.0", "dependencies": { + "@deck.gl/core": "^9.2.11", + "@deck.gl/layers": "^9.2.11", + "@deck.gl/mapbox": "^9.2.11", + "@loaders.gl/arrow": "^4.3.4", + "@types/react-plotly.js": "^2.6.4", + "apache-arrow": "^21.1.0", "chart.js": "^4.4.1", "chartjs-adapter-date-fns": "^3.0.0", "leaflet": "^1.9.4", + "maplibre-gl": "^5.21.0", + "plotly.js-dist-min": "^3.4.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", - "react-leaflet": "^4.2.1" + "react-leaflet": "^4.2.1", + "react-map-gl": "^8.1.0", + "react-plotly.js": "^2.6.0" }, "devDependencies": { "@testing-library/jest-dom": "^6.9.1", @@ -413,6 +423,19 @@ "node": ">=6.9.0" } }, + "node_modules/@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "license": "MIT", + "peer": true, + "dependencies": { + "commander": "^2.15.1" + }, + "bin": { + "findup": "bin/findup.js" + } + }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", @@ -548,6 +571,69 @@ "node": ">=18" } }, + "node_modules/@deck.gl/core": { + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-9.2.11.tgz", + "integrity": "sha512-lpdxXQuFSkd6ET7M6QxPI8QMhsLRY6vzLyk83sPGFb7JSb4OhrNHYt9sfIhcA/hxJW7bdBSMWWphf2GvQetVuA==", + "license": "MIT", + "dependencies": { + "@loaders.gl/core": "~4.3.4", + "@loaders.gl/images": "~4.3.4", + "@luma.gl/constants": "~9.2.6", + "@luma.gl/core": "~9.2.6", + "@luma.gl/engine": "~9.2.6", + "@luma.gl/shadertools": "~9.2.6", + "@luma.gl/webgl": "~9.2.6", + "@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.6.4", + "gl-matrix": "^3.0.0", + "mjolnir.js": "^3.0.0" + } + }, + "node_modules/@deck.gl/layers": { + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-9.2.11.tgz", + "integrity": "sha512-2FSb0Qa6YR+Rg6GWhYOGTUug3vtZ4uKcFdnrdiJoVXGyibKJMScKZIsivY0r/yQQZsaBjYqty5QuVJvdtEHxSA==", + "license": "MIT", + "dependencies": { + "@loaders.gl/images": "~4.3.4", + "@loaders.gl/schema": "~4.3.4", + "@luma.gl/shadertools": "~9.2.6", + "@mapbox/tiny-sdf": "^2.0.5", + "@math.gl/core": "^4.1.0", + "@math.gl/polygon": "^4.1.0", + "@math.gl/web-mercator": "^4.1.0", + "earcut": "^2.2.4" + }, + "peerDependencies": { + "@deck.gl/core": "~9.2.0", + "@loaders.gl/core": "~4.3.4", + "@luma.gl/core": "~9.2.6", + "@luma.gl/engine": "~9.2.6" + } + }, + "node_modules/@deck.gl/mapbox": { + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/@deck.gl/mapbox/-/mapbox-9.2.11.tgz", + "integrity": "sha512-5OaFZgjyA4Vq6WjHUdcEdl0Phi8dwj8hSCErej0NetW90mctdbxwMt0gSbqcvWBowwhyj2QAhH0P2FcITjKG/A==", + "license": "MIT", + "dependencies": { + "@luma.gl/constants": "~9.2.6", + "@math.gl/web-mercator": "^4.1.0" + }, + "peerDependencies": { + "@deck.gl/core": "~9.2.0", + "@luma.gl/constants": "~9.2.6", + "@luma.gl/core": "~9.2.6", + "@math.gl/web-mercator": "^4.1.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -1163,6 +1249,378 @@ "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", "license": "MIT" }, + "node_modules/@loaders.gl/arrow": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/arrow/-/arrow-4.3.4.tgz", + "integrity": "sha512-TDEEwsW50/7KTf/Ld3S8+pTqULxznZsoKBmul6cNNDe7ZlOsxeURtJ31FE2V8R/VI0RwkCiJetePWHJ9RCaRww==", + "license": "MIT", + "dependencies": { + "@loaders.gl/gis": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/wkt": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@math.gl/polygon": "^4.1.0", + "apache-arrow": ">= 15.0.0" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/core": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.3.4.tgz", + "integrity": "sha512-cG0C5fMZ1jyW6WCsf4LoHGvaIAJCEVA/ioqKoYRwoSfXkOf+17KupK1OUQyUCw5XoRn+oWA1FulJQOYlXnb9Gw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@probe.gl/log": "^4.0.2" + } + }, + "node_modules/@loaders.gl/gis": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-4.3.4.tgz", + "integrity": "sha512-8xub38lSWW7+ZXWuUcggk7agRHJUy6RdipLNKZ90eE0ZzLNGDstGD1qiBwkvqH0AkG+uz4B7Kkiptyl7w2Oa6g==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^4.1.0", + "pbf": "^3.2.1" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/gis/node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@loaders.gl/gis/node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@loaders.gl/gis/node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/@loaders.gl/images": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.3.4.tgz", + "integrity": "sha512-qgc33BaNsqN9cWa/xvcGvQ50wGDONgQQdzHCKDDKhV2w/uptZoR5iofJfuG8UUV2vUMMd82Uk9zbopRx2rS4Ag==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/loader-utils": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-4.3.4.tgz", + "integrity": "sha512-tjMZvlKQSaMl2qmYTAxg+ySR6zd6hQn5n3XaU8+Ehp90TD3WzxvDKOMNDqOa72fFmIV+KgPhcmIJTpq4lAdC4Q==", + "license": "MIT", + "dependencies": { + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@probe.gl/log": "^4.0.2", + "@probe.gl/stats": "^4.0.2" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/schema": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-4.3.4.tgz", + "integrity": "sha512-1YTYoatgzr/6JTxqBLwDiD3AVGwQZheYiQwAimWdRBVB0JAzych7s1yBuE0CVEzj4JDPKOzVAz8KnU1TiBvJGw==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.7" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/wkt": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/wkt/-/wkt-4.3.4.tgz", + "integrity": "sha512-9ahN3KPSrmLvYU1cn6WkPy4z9CRb9oUzzmojIRhZhZQumHiTwoE4FI/Xffl6ZZEb078JkSzlNX6mEMzChR4Fxg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/gis": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/worker-utils": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-4.3.4.tgz", + "integrity": "sha512-EbsszrASgT85GH3B7jkx7YXfQyIYo/rlobwMx6V3ewETapPUwdSAInv+89flnk5n2eu2Lpdeh+2zS6PvqbL2RA==", + "license": "MIT", + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@luma.gl/constants": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-9.2.6.tgz", + "integrity": "sha512-rvFFrJuSm5JIWbDHFuR4Q2s4eudO3Ggsv0TsGKn9eqvO7bBiPm/ANugHredvh3KviEyYuMZZxtfJvBdr3kzldg==", + "license": "MIT" + }, + "node_modules/@luma.gl/core": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.2.6.tgz", + "integrity": "sha512-d8KcH8ZZcjDAodSN/G2nueA9YE2X8kMz7Q0OxDGpCww6to1MZXM3Ydate/Jqsb5DDKVgUF6yD6RL8P5jOki9Yw==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "^4.1.0", + "@probe.gl/env": "^4.0.8", + "@probe.gl/log": "^4.0.8", + "@probe.gl/stats": "^4.0.8", + "@types/offscreencanvas": "^2019.6.4" + } + }, + "node_modules/@luma.gl/engine": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.2.6.tgz", + "integrity": "sha512-1AEDs2AUqOWh7Wl4onOhXmQF+Rz1zNdPXF+Kxm4aWl92RQ42Sh2CmTvRt2BJku83VQ91KFIEm/v3qd3Urzf+Uw==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "^4.1.0", + "@math.gl/types": "^4.1.0", + "@probe.gl/log": "^4.0.8", + "@probe.gl/stats": "^4.0.8" + }, + "peerDependencies": { + "@luma.gl/core": "~9.2.0", + "@luma.gl/shadertools": "~9.2.0" + } + }, + "node_modules/@luma.gl/shadertools": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-9.2.6.tgz", + "integrity": "sha512-4+uUbynqPUra9d/z1nQChyHmhLgmKfSMjS7kOwLB6exSnhKnpHL3+Hu9fv55qyaX50nGH3oHawhGtJ6RRvu65w==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "^4.1.0", + "@math.gl/types": "^4.1.0", + "wgsl_reflect": "^1.2.0" + }, + "peerDependencies": { + "@luma.gl/core": "~9.2.0" + } + }, + "node_modules/@luma.gl/webgl": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-9.2.6.tgz", + "integrity": "sha512-NGBTdxJMk7j8Ygr1zuTyAvr1Tw+EpupMIQo7RelFjEsZXg6pujFqiDMM+rgxex8voCeuhWBJc7Rs+MoSqd46UQ==", + "license": "MIT", + "dependencies": { + "@luma.gl/constants": "9.2.6", + "@math.gl/types": "^4.1.0", + "@probe.gl/env": "^4.0.8" + }, + "peerDependencies": { + "@luma.gl/core": "~9.2.0" + } + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", + "peer": true, + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", + "license": "ISC", + "peer": true + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz", + "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true + }, + "node_modules/@mapbox/point-geometry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz", + "integrity": "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==", + "license": "ISC" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz", + "integrity": "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/vector-tile": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz", + "integrity": "sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~1.1.0", + "@types/geojson": "^7946.0.16", + "pbf": "^4.0.1" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/geojson-vt": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@maplibre/geojson-vt/-/geojson-vt-6.0.4.tgz", + "integrity": "sha512-HYv3POhMRCdhP3UPPATM/hfcy6/WuVIf5FKboH8u/ZuFMTnAIcSVlq5nfOqroLokd925w2QtE7YwquFOIacwVQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-24.7.0.tgz", + "integrity": "sha512-Ed7rcKYU5iELfablg9Mj+TVCsXsPBgdMyXPRAxb2v7oWg9YJnpQdZ5msDs1LESu/mtXy3Z48Vdppv2t/x5kAhw==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^3.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/mlt": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@maplibre/mlt/-/mlt-1.1.8.tgz", + "integrity": "sha512-8vtfYGidr1rNkv5IwIoU2lfe3Oy+Wa8HluzQYcQi9cveU9K3pweAal/poQj4GJ0K/EW4bTQp2wVAs09g2yDRZg==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@mapbox/point-geometry": "^1.1.0" + } + }, + "node_modules/@maplibre/vt-pbf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@maplibre/vt-pbf/-/vt-pbf-4.3.0.tgz", + "integrity": "sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "^1.1.0", + "@mapbox/vector-tile": "^2.0.4", + "@maplibre/geojson-vt": "^5.0.4", + "@types/geojson": "^7946.0.16", + "@types/supercluster": "^7.1.3", + "pbf": "^4.0.1", + "supercluster": "^8.0.1" + } + }, + "node_modules/@maplibre/vt-pbf/node_modules/@maplibre/geojson-vt": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@maplibre/geojson-vt/-/geojson-vt-5.0.4.tgz", + "integrity": "sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==", + "license": "ISC" + }, + "node_modules/@math.gl/core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.1.0.tgz", + "integrity": "sha512-FrdHBCVG3QdrworwrUSzXIaK+/9OCRLscxI2OUy6sLOHyHgBMyfnEGs99/m3KNvs+95BsnQLWklVfpKfQzfwKA==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "4.1.0" + } + }, + "node_modules/@math.gl/polygon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-4.1.0.tgz", + "integrity": "sha512-YA/9PzaCRHbIP5/0E9uTYrqe+jsYTQoqoDWhf6/b0Ixz8bPZBaGDEafLg3z7ffBomZLacUty9U3TlPjqMtzPjA==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "4.1.0" + } + }, + "node_modules/@math.gl/sun": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-4.1.0.tgz", + "integrity": "sha512-i3q6OCBLSZ5wgZVhXg+X7gsjY/TUtuFW/2KBiq/U1ypLso3S4sEykoU/MGjxUv1xiiGtr+v8TeMbO1OBIh/HmA==", + "license": "MIT" + }, + "node_modules/@math.gl/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-4.1.0.tgz", + "integrity": "sha512-clYZdHcmRvMzVK5fjeDkQlHUzXQSNdZ7s4xOqC3nJPgz4C/TZkUecTo9YS4PruZqtDda/ag4erndP0MIn40dGA==", + "license": "MIT" + }, + "node_modules/@math.gl/web-mercator": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-4.1.0.tgz", + "integrity": "sha512-HZo3vO5GCMkXJThxRJ5/QYUYRr3XumfT8CzNNCwoJfinxy5NtKUd7dusNTXn7yJ40UoB8FMIwkVwNlqaiRZZAw==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "4.1.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1201,70 +1659,310 @@ "node": ">= 8" } }, - "node_modules/@react-leaflet/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", - "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", - "license": "Hippocratic-2.1", - "peerDependencies": { - "leaflet": "^1.9.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - } + "node_modules/@plotly/d3": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz", + "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==", + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.9", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", - "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", - "dev": true, - "license": "MIT" + "node_modules/@plotly/d3-sankey": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", + "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", - "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@plotly/d3-sankey-circular": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", + "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "peer": true, + "dependencies": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", - "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "node_modules/@plotly/mapbox-gl": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz", + "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "license": "BSD-3-Clause", + "peer": true, + "peerDependencies": { + "mapbox-gl": ">=0.32.1 <2.0.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", - "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC", + "peer": true }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", - "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@plotly/mapbox-gl/node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC", + "peer": true + }, + "node_modules/@plotly/mapbox-gl/node_modules/mapbox-gl": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz", + "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/@plotly/mapbox-gl/node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/@plotly/mapbox-gl/node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC", + "peer": true + }, + "node_modules/@plotly/mapbox-gl/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC", + "peer": true + }, + "node_modules/@plotly/mapbox-gl/node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", + "peer": true, + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/@plotly/mapbox-gl/node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC", + "peer": true + }, + "node_modules/@plotly/point-cluster": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", + "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/@plotly/regl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==", + "license": "MIT", + "peer": true + }, + "node_modules/@probe.gl/env": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.1.1.tgz", + "integrity": "sha512-+68seNDMVsEegRB47pFA/Ws1Fjy8agcFYXxzorKToyPcD6zd+gZ5uhwoLd7TzsSw6Ydns//2KEszWn+EnNHTbA==", + "license": "MIT" + }, + "node_modules/@probe.gl/log": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.1.1.tgz", + "integrity": "sha512-kcZs9BT44pL7hS1OkRGKYRXI/SN9KejUlPD+BY40DguRLzdC5tLG/28WGMyfKdn/51GT4a0p+0P8xvDn1Ez+Kg==", + "license": "MIT", + "dependencies": { + "@probe.gl/env": "4.1.1" + } + }, + "node_modules/@probe.gl/stats": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.1.1.tgz", + "integrity": "sha512-4VpAyMHOqydSvPlEyHwXaE+AkIdR03nX+Qhlxsk2D/IW4OVmDZgIsvJB1cDzyEEtcfKcnaEbfXeiPgejBceT6g==", + "license": "MIT" + }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", + "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", "cpu": [ "x64" ], @@ -1499,6 +2197,15 @@ "win32" ] }, + "node_modules/@swc/helpers": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.19.tgz", + "integrity": "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@testing-library/dom": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", @@ -1589,6 +2296,83 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@turf/area": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.3.4.tgz", + "integrity": "sha512-UEQQFw2XwHpozSBAMEtZI3jDsAad4NnHL/poF7/S6zeDCjEBCkt3MYd6DSGH/cvgcOozxH/ky3/rIVSMZdx4vA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.4", + "@turf/meta": "7.3.4", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.4.tgz", + "integrity": "sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.4", + "@turf/meta": "7.3.4", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.3.4.tgz", + "integrity": "sha512-6c3kyTSKBrmiPMe75UkHw6MgedroZ6eR5usEvdlDhXgA3MudFPXIZkMFmMd1h9XeJ9xFfkmq+HPCdF0cOzvztA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.4", + "@turf/meta": "7.3.4", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.4.tgz", + "integrity": "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.4.tgz", + "integrity": "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.4", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -1653,6 +2437,18 @@ "assertion-error": "^2.0.1" } }, + "node_modules/@types/command-line-args": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", + "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", + "license": "MIT" + }, + "node_modules/@types/command-line-usage": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", + "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", + "license": "MIT" + }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -1671,9 +2467,18 @@ "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "dev": true, "license": "MIT" }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/leaflet": { "version": "1.9.18", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.18.tgz", @@ -1684,18 +2489,63 @@ "@types/geojson": "*" } }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" + }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/plotly.js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-3.0.10.tgz", + "integrity": "sha512-q+MgO4aajC2HrO7FllTYWzrpdfbTjboSMfjkz/aXKjg1v7HNo1zMEFfAW7quKfk6SL+bH74A5ThBEps/7hZxOA==", + "license": "MIT" + }, "node_modules/@types/prop-types": { "version": "15.7.14", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.23", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "dev": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -1712,6 +2562,25 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/react-plotly.js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/react-plotly.js/-/react-plotly.js-2.6.4.tgz", + "integrity": "sha512-AU6w1u3qEGM0NmBA69PaOgNc0KPFA/+qkH6Uu9EBTJ45/WYOUoXi9AF5O15PRM2klpHSiHAAs4WnlI+OZAFmUA==", + "license": "MIT", + "dependencies": { + "@types/plotly.js": "*", + "@types/react": "*" + } + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", @@ -1912,6 +2781,66 @@ "dev": true, "license": "ISC" }, + "node_modules/@vis.gl/react-mapbox": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vis.gl/react-mapbox/-/react-mapbox-8.1.0.tgz", + "integrity": "sha512-FwvH822oxEjWYOr+pP2L8hpv+7cZB2UsQbHHHT0ryrkvvqzmTgt7qHDhamv0EobKw86e1I+B4ojENdJ5G5BkyQ==", + "license": "MIT", + "peerDependencies": { + "mapbox-gl": ">=3.5.0", + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + }, + "peerDependenciesMeta": { + "mapbox-gl": { + "optional": true + } + } + }, + "node_modules/@vis.gl/react-maplibre": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vis.gl/react-maplibre/-/react-maplibre-8.1.0.tgz", + "integrity": "sha512-PkAK/gp3mUfhCLhUuc+4gc3PN9zCtVGxTF2hB6R5R5yYUw+hdg84OZ770U5MU4tPMTCG6fbduExuIW6RRKN6qQ==", + "license": "MIT", + "dependencies": { + "@maplibre/maplibre-gl-style-spec": "^19.2.1" + }, + "peerDependencies": { + "maplibre-gl": ">=4.0.0", + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + }, + "peerDependenciesMeta": { + "maplibre-gl": { + "optional": true + } + } + }, + "node_modules/@vis.gl/react-maplibre/node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "19.3.3", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz", + "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^3.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@vis.gl/react-maplibre/node_modules/json-stringify-pretty-compact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", + "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-react": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.1.tgz", @@ -2048,6 +2977,13 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", + "license": "MIT", + "peer": true + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -2112,7 +3048,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2124,6 +3059,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/apache-arrow": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.1.0.tgz", + "integrity": "sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/command-line-args": "^5.2.3", + "@types/command-line-usage": "^5.0.4", + "@types/node": "^24.0.3", + "command-line-args": "^6.0.1", + "command-line-usage": "^7.0.1", + "flatbuffers": "^25.1.24", + "json-bignum": "^0.0.3", + "tslib": "^2.6.2" + }, + "bin": { + "arrow2csv": "bin/arrow2csv.js" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2141,19 +3096,78 @@ "dequal": "^2.0.3" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "node_modules/array-back": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.3.tgz", + "integrity": "sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/array-bounds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==", + "license": "MIT", + "peer": true + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-normalize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", + "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.0" + } + }, + "node_modules/array-range": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==", + "license": "MIT", + "peer": true + }, + "node_modules/array-rearrange": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", + "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==", + "license": "MIT", + "peer": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", @@ -2161,6 +3175,15 @@ "node": ">=12" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2168,6 +3191,16 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/bidi-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", @@ -2178,6 +3211,38 @@ "require-from-string": "^2.0.2" } }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", + "license": "MIT", + "peer": true + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", + "license": "MIT", + "peer": true + }, + "node_modules/bitmap-sdf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", + "license": "MIT", + "peer": true + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -2234,6 +3299,32 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT", + "peer": true + }, + "node_modules/bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", + "license": "MIT", + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2" + } + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -2275,6 +3366,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvas-fit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", + "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "element-size": "^1.1.1" + } + }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -2296,7 +3397,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2309,6 +3409,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, "node_modules/chart.js": { "version": "4.4.9", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz", @@ -2331,6 +3446,14 @@ "date-fns": ">=2.0.0" } }, + "node_modules/cheap-ruler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-4.0.0.tgz", + "integrity": "sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw==", + "license": "ISC", + "optional": true, + "peer": true + }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -2341,11 +3464,37 @@ "node": ">= 16" } }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==", + "license": "MIT", + "peer": true + }, + "node_modules/color-alpha": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", + "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.3.8" + } + }, + "node_modules/color-alpha/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2354,13 +3503,128 @@ "node": ">=7.0.0" } }, + "node_modules/color-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", + "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1" + } + }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, + "node_modules/color-normalize": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/color-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz", + "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.2.tgz", + "integrity": "sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA==", + "license": "Unlicense", + "peer": true + }, + "node_modules/command-line-args": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "find-replace": "^5.0.2", + "lodash.camelcase": "^4.3.0", + "typical": "^7.2.0" + }, + "engines": { + "node": ">=12.20" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } + } + }, + "node_modules/command-line-usage": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.4.tgz", + "integrity": "sha512-85UdvzTNx/+s5CkSgBm/0hzP80RFHAa7PsfeADE5ezZF3uHz3/Tqj9gIKGT9PTtpycc3Ua64T0oVulGfKxzfqg==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^4.1.1", + "typical": "^7.3.0" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2368,6 +3632,22 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2375,6 +3655,20 @@ "dev": true, "license": "MIT" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT", + "peer": true + }, + "node_modules/country-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==", + "license": "MIT", + "peer": true + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2390,6 +3684,66 @@ "node": ">= 8" } }, + "node_modules/css-font": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", + "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", + "license": "MIT", + "peer": true + }, + "node_modules/css-global-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==", + "license": "MIT", + "peer": true + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", + "license": "MIT", + "peer": true + }, "node_modules/css-tree": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", @@ -2411,6 +3765,13 @@ "dev": true, "license": "MIT" }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT", + "peer": true + }, "node_modules/cssstyle": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.3.tgz", @@ -2430,36 +3791,198 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, - "node_modules/data-urls": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", - "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", - "dev": true, - "license": "MIT", + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "peer": true, "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.0.0" + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, "engines": { - "node": ">=20" + "node": ">=0.12" } }, - "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } + "node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/debug": { - "version": "4.4.1", + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-geo-projection": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", + "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "peer": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/data-urls": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, @@ -2500,6 +4023,16 @@ "dev": true, "license": "MIT" }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2510,6 +4043,13 @@ "node": ">=6" } }, + "node_modules/detect-kerning": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==", + "license": "MIT", + "peer": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2544,6 +4084,53 @@ "license": "MIT", "peer": true }, + "node_modules/draw-svg-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", + "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "node_modules/dtype": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==", + "license": "MIT", + "peer": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, "node_modules/electron-to-chromium": { "version": "1.5.165", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", @@ -2551,6 +4138,33 @@ "dev": true, "license": "ISC" }, + "node_modules/element-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", + "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==", + "license": "MIT", + "peer": true + }, + "node_modules/elementary-circuits-directed-graph": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", + "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "strongly-connected-components": "^1.0.1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -2571,6 +4185,62 @@ "dev": true, "license": "MIT" }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -2633,6 +4303,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", @@ -2783,6 +4475,22 @@ "node": "*" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -2801,6 +4509,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -2831,7 +4553,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -2851,12 +4572,32 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expect-type": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", @@ -2867,6 +4608,55 @@ "node": ">=12.0.0" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "peer": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2904,10 +4694,20 @@ "node": ">= 6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/fast-isnumeric": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", + "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-string-blank": "^1.0.1" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, @@ -2954,6 +4754,23 @@ "node": ">=8" } }, + "node_modules/find-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2986,6 +4803,12 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flatbuffers": { + "version": "25.9.23", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz", + "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", + "license": "Apache-2.0" + }, "node_modules/flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", @@ -2993,6 +4816,47 @@ "dev": true, "license": "ISC" }, + "node_modules/flatten-vertex-data": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", + "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "license": "MIT", + "peer": true, + "dependencies": { + "dtype": "^2.0.0" + } + }, + "node_modules/font-atlas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", + "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.0.0" + } + }, + "node_modules/font-measure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", + "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.2.0" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3015,6 +4879,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3025,6 +4899,97 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC", + "peer": true + }, + "node_modules/get-canvas-context": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==", + "license": "MIT", + "peer": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==", + "license": "Zlib", + "peer": true + }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT" + }, + "node_modules/gl-text": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz", + "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "node_modules/gl-util": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", + "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3084,6 +5049,47 @@ "node": "*" } }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3115,6 +5121,235 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glsl-inject-defines": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", + "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "node_modules/glsl-resolve": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", + "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "license": "MIT", + "peer": true, + "dependencies": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + } + }, + "node_modules/glsl-resolve/node_modules/resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-resolve/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/glsl-token-assignments": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-defines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", + "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-tokenizer": "^2.0.0" + } + }, + "node_modules/glsl-token-depth": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-descope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", + "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "node_modules/glsl-token-inject-block": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-properties": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-whitespace-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "license": "MIT", + "peer": true, + "dependencies": { + "through2": "^0.6.3" + } + }, + "node_modules/glsl-tokenizer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glsl-tokenizer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/glslify": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", + "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" + }, + "bin": { + "glslify": "bin.js" + } + }, + "node_modules/glslify-bundle": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", + "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "node_modules/glslify-deps": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", + "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "license": "ISC", + "peer": true, + "dependencies": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC", + "peer": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3122,16 +5357,55 @@ "dev": true, "license": "MIT" }, + "node_modules/grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC", + "peer": true + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/has-hover": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", + "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -3186,6 +5460,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3249,9 +5543,50 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==", + "license": "MIT", + "peer": true + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "peer": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3262,6 +5597,29 @@ "node": ">=0.10.0" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-firefox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", + "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3275,6 +5633,23 @@ "node": ">=0.10.0" } }, + "node_modules/is-iexplorer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", + "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-mobile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==", + "license": "MIT", + "peer": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3282,7 +5657,17 @@ "dev": true, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-path-inside": { @@ -3295,6 +5680,28 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -3302,6 +5709,27 @@ "dev": true, "license": "MIT" }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", + "license": "MIT", + "peer": true + }, + "node_modules/is-svg-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==", + "license": "MIT", + "peer": true + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT", + "peer": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3309,6 +5737,15 @@ "dev": true, "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3381,6 +5818,14 @@ "node": ">=6" } }, + "node_modules/json-bignum": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", + "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3402,6 +5847,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3415,6 +5866,12 @@ "node": ">=6" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3425,6 +5882,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/leaflet": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", @@ -3461,11 +5928,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, "license": "MIT" }, "node_modules/loose-envify": { @@ -3518,6 +5990,145 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/mapbox-gl": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-3.20.0.tgz", + "integrity": "sha512-+rVQkf6ymUlAEJiQBZy0OiamJvQN4Uk15mRHI98PRUSmRS40GOoLJyEZEG39LEUtvmzc7qGh+4ygZfJ//O5VnQ==", + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "peer": true, + "workspaces": [ + "src/style-spec", + "test/build/vite", + "test/build/webpack", + "test/build/typings" + ], + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^3.0.0", + "@mapbox/point-geometry": "^1.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^2.0.4", + "@types/geojson": "^7946.0.16", + "@types/geojson-vt": "^3.2.5", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "cheap-ruler": "^4.0.0", + "csscolorparser": "~1.0.3", + "earcut": "^3.0.1", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.4", + "grid-index": "^1.1.0", + "kdbush": "^4.0.2", + "martinez-polygon-clipping": "^0.8.1", + "murmurhash-js": "^1.0.0", + "pbf": "^4.0.1", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0" + } + }, + "node_modules/mapbox-gl/node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/mapbox-gl/node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/maplibre-gl": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.21.0.tgz", + "integrity": "sha512-n0v4J/Ge0EG8ix/z3TY3ragtJYMqzbtSnj1riOC0OwQbzwp0lUF2maS1ve1z8HhitQCKtZZiZJhb8to36aMMfQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^1.1.0", + "@mapbox/tiny-sdf": "^2.0.7", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^2.0.4", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/geojson-vt": "^6.0.4", + "@maplibre/maplibre-gl-style-spec": "^24.7.0", + "@maplibre/mlt": "^1.1.8", + "@maplibre/vt-pbf": "^4.3.0", + "@types/geojson": "^7946.0.16", + "earcut": "^3.0.2", + "gl-matrix": "^3.4.4", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^4.0.1", + "potpack": "^2.1.0", + "quickselect": "^3.0.0", + "tinyqueue": "^3.0.0" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC" + }, + "node_modules/martinez-polygon-clipping": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.8.1.tgz", + "integrity": "sha512-9PLLMzMPI6ihHox4Ns6LpVBLpRc7sbhULybZ/wyaY8sY3ECNe2+hxm1hA2/9bEEpRrdpjoeduBuZLg2aq1cSIQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "3.0.0" + } + }, + "node_modules/math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -3575,11 +6186,67 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mjolnir.js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.0.0.tgz", + "integrity": "sha512-siX3YCG7N2HnmN1xMH3cK4JkUZJhbkhRFJL+G5N1vH0mh1t5088rJknIoqDFWDIU6NPGvRRgLnYW3ZHjSMEBLA==", + "license": "MIT" + }, + "node_modules/mouse-change": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", + "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "mouse-event": "^1.0.0" + } + }, + "node_modules/mouse-event": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", + "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==", + "license": "MIT", + "peer": true + }, + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==", + "license": "MIT", + "peer": true + }, + "node_modules/mouse-wheel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", + "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", + "license": "MIT", + "peer": true, + "dependencies": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, + "license": "MIT" + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", "license": "MIT" }, "node_modules/nanoid": { @@ -3601,6 +6268,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "license": "MIT", + "peer": true + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3608,6 +6282,54 @@ "dev": true, "license": "MIT" }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC", + "peer": true + }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -3615,11 +6337,39 @@ "dev": true, "license": "MIT" }, + "node_modules/normalize-svg-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==", + "license": "MIT", + "peer": true + }, + "node_modules/number-is-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", + "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-finite": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -3688,6 +6438,37 @@ "node": ">=6" } }, + "node_modules/parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", + "license": "MIT", + "peer": true + }, + "node_modules/parse-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", + "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "license": "MIT", + "peer": true, + "dependencies": { + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", + "license": "MIT", + "peer": true + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==", + "license": "MIT", + "peer": true + }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", @@ -3731,6 +6512,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT", + "peer": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -3758,6 +6546,32 @@ "node": ">= 14.16" } }, + "node_modules/pbf": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz", + "integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==", + "license": "BSD-3-Clause", + "dependencies": { + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "peer": true + }, + "node_modules/pick-by-alias": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==", + "license": "MIT", + "peer": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3775,9 +6589,206 @@ "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plotly.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-3.4.0.tgz", + "integrity": "sha512-jdWfHLB8AxlGUmVhqJTGEKdwjCKGn9Yi8yg16067/JyqseuSado7F6IOM1XPZspdZyO/cf8IPuy7ROlVhqZZNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/d3": "3.8.2", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@plotly/mapbox-gl": "1.13.4", + "@plotly/regl": "^2.1.2", + "@turf/area": "^7.1.0", + "@turf/bbox": "^7.1.0", + "@turf/centroid": "^7.1.0", + "base64-arraybuffer": "^1.0.2", + "canvas-fit": "^1.5.0", + "color-alpha": "1.0.4", + "color-normalize": "1.5.0", + "color-parse": "2.0.0", + "color-rgba": "3.0.0", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^3.0.1", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.4.0", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^4.0.0", + "maplibre-gl": "^4.7.1", + "mouse-change": "^1.4.0", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.2.0", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.2", + "probe-image-size": "^7.2.3", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.3", + "regl-scatter2d": "^3.3.1", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "superscript-text": "^1.0.0", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "to-px": "1.0.1", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/plotly.js-dist-min": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/plotly.js-dist-min/-/plotly.js-dist-min-3.4.0.tgz", + "integrity": "sha512-eo7xh7oyE9fFoE/wintgmvfOjvTKwCb3wRf9ShQv90du4n+EVkOY7w5qEkmUS9SSkHRnAw8sk/0QI7wEc5U+8Q==", + "license": "MIT" + }, + "node_modules/plotly.js/node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC", + "peer": true + }, + "node_modules/plotly.js/node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/plotly.js/node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", + "peer": true, + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/plotly.js/node_modules/@maplibre/maplibre-gl-style-spec/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC", + "peer": true + }, + "node_modules/plotly.js/node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC", + "peer": true + }, + "node_modules/plotly.js/node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC", + "peer": true + }, + "node_modules/plotly.js/node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/plotly.js/node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" } }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT", + "peer": true + }, + "node_modules/polybooljs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz", + "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==", + "license": "MIT", + "peer": true + }, "node_modules/postcss": { "version": "8.5.4", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", @@ -3807,6 +6818,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/potpack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3847,6 +6864,48 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "license": "MIT", + "peer": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT", + "peer": true + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3878,6 +6937,22 @@ ], "license": "MIT" }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "peer": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3935,6 +7010,43 @@ "react-dom": "^18.0.0" } }, + "node_modules/react-map-gl": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-8.1.0.tgz", + "integrity": "sha512-vDx/QXR3Tb+8/ap/z6gdMjJQ8ZEyaZf6+uMSPz7jhWF5VZeIsKsGfPvwHVPPwGF43Ryn+YR4bd09uEFNR5OPdg==", + "license": "MIT", + "dependencies": { + "@vis.gl/react-mapbox": "8.1.0", + "@vis.gl/react-maplibre": "8.1.0" + }, + "peerDependencies": { + "mapbox-gl": ">=1.13.0", + "maplibre-gl": ">=1.13.0", + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + }, + "peerDependenciesMeta": { + "mapbox-gl": { + "optional": true + }, + "maplibre-gl": { + "optional": true + } + } + }, + "node_modules/react-plotly.js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-2.6.0.tgz", + "integrity": "sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "plotly.js": ">1.34.0", + "react": ">0.13.0" + } + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -3945,6 +7057,36 @@ "node": ">=0.10.0" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "peer": true + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "peer": true + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -3959,6 +7101,111 @@ "node": ">=8" } }, + "node_modules/regl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.1.tgz", + "integrity": "sha512-+IOGrxl3FZ8ZM9ixCWQZzFRiRn7Rzn9bu3iFHwg/yz4tlOUQgbO4PHLgG+1ZT60zcIV8tief6Qrmyl8qcoJP0g==", + "license": "MIT", + "peer": true + }, + "node_modules/regl-error2d": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", + "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-line2d": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz", + "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "node_modules/regl-scatter2d": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.3.1.tgz", + "integrity": "sha512-seOmMIVwaCwemSYz/y4WE0dbSO9svNFSqtTh5RE57I7PjGo3tcUYKtH0MTSoshcAsreoqN8HoCtnn8wfHXXfKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/point-cluster": "^3.1.9", + "array-range": "^1.0.1", + "array-rearrange": "^2.2.2", + "clamp": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "color-rgba": "^2.1.1", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "is-iexplorer": "^1.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-scatter2d/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/regl-scatter2d/node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/regl-splom": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", + "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -3969,6 +7216,27 @@ "node": ">=0.10.0" } }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3979,6 +7247,15 @@ "node": ">=4" } }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -3990,6 +7267,13 @@ "node": ">=0.10.0" } }, + "node_modules/right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==", + "license": "MIT", + "peer": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4007,6 +7291,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robust-predicates": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", + "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==", + "license": "Unlicense", + "optional": true, + "peer": true + }, "node_modules/rollup": { "version": "4.41.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", @@ -4078,13 +7370,49 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, "license": "MIT" }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -4120,6 +7448,28 @@ "node": ">=10" } }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "license": "MIT", + "peer": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4130,44 +7480,151 @@ "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", + "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==", + "license": "MIT", + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-asc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", + "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", + "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", + "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", + "license": "MIT", + "dependencies": { + "bytewise": "^1.1.0", + "get-value": "^2.0.2", + "is-extendable": "^0.1.1", + "sort-asc": "^0.2.0", + "sort-desc": "^0.2.0", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/splaytree": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, "node_modules/stackback": { @@ -4177,6 +7634,16 @@ "dev": true, "license": "MIT" }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "escodegen": "^2.1.0" + } + }, "node_modules/std-env": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", @@ -4184,6 +7651,67 @@ "dev": true, "license": "MIT" }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT", + "peer": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "peer": true + }, + "node_modules/string-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "license": "MIT", + "peer": true, + "dependencies": { + "parenthesis": "^3.1.5" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4243,11 +7771,33 @@ "dev": true, "license": "MIT" }, + "node_modules/strongly-connected-components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==", + "license": "MIT", + "peer": true + }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/superscript-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", + "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==", + "license": "MIT", + "peer": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -4256,6 +7806,63 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", + "license": "ISC", + "peer": true + }, + "node_modules/svg-path-bounds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", + "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "license": "MIT", + "peer": true, + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/svg-path-sdf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", + "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -4263,6 +7870,19 @@ "dev": true, "license": "MIT" }, + "node_modules/table-layout": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", + "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "wordwrapjs": "^5.1.0" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4270,6 +7890,17 @@ "dev": true, "license": "MIT" }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -4277,6 +7908,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT", + "peer": true + }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -4342,6 +7980,12 @@ "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, "node_modules/tinyrainbow": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", @@ -4382,6 +8026,23 @@ "dev": true, "license": "MIT" }, + "node_modules/to-float32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==", + "license": "MIT", + "peer": true + }, + "node_modules/to-px": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", + "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "parse-unit": "^1.0.1" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4395,6 +8056,21 @@ "node": ">=8.0" } }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", + "peer": true, + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, "node_modules/tough-cookie": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", @@ -4434,6 +8110,19 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC", + "peer": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -4460,6 +8149,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT", + "peer": true + }, + "node_modules/typedarray-pool": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -4474,6 +8181,58 @@ "node": ">=14.17" } }, + "node_modules/typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", + "license": "MIT" + }, + "node_modules/typical": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", + "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT", + "peer": true + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -4505,6 +8264,13 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==", + "license": "MIT", + "peer": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4515,6 +8281,13 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT", + "peer": true + }, "node_modules/vite": { "version": "5.4.19", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", @@ -4684,6 +8457,49 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/vt-pbf/node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC", + "peer": true + }, + "node_modules/vt-pbf/node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/vt-pbf/node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -4697,6 +8513,23 @@ "node": ">=18" } }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/webgl-context": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", + "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "get-canvas-context": "^1.0.1" + } + }, "node_modules/webidl-conversions": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", @@ -4707,6 +8540,12 @@ "node": ">=20" } }, + "node_modules/wgsl_reflect": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/wgsl_reflect/-/wgsl_reflect-1.2.3.tgz", + "integrity": "sha512-BQWBIsOn411M+ffBxmA6QRLvAOVbuz3Uk4NusxnqC1H7aeQcVLhdA3k2k/EFFFtqVjhz3z7JOOZF1a9hj2tv4Q==", + "license": "MIT" + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -4787,11 +8626,29 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/world-calendars": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.4.tgz", + "integrity": "sha512-VGRnLJS+xJmGDPodgJRnGIDwGu0s+Cr9V2HB3EzlDZ5n0qb8h5SJtGUEkjrphZYAglEiXZ6kiXdmk0H/h/uu/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/ws": { @@ -4833,6 +8690,16 @@ "dev": true, "license": "MIT" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 109ffe9..93923db 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,22 @@ "vitest": "^3.2.4" }, "dependencies": { + "@deck.gl/core": "^9.2.11", + "@deck.gl/layers": "^9.2.11", + "@deck.gl/mapbox": "^9.2.11", + "@loaders.gl/arrow": "^4.3.4", + "@types/react-plotly.js": "^2.6.4", + "apache-arrow": "^21.1.0", "chart.js": "^4.4.1", "chartjs-adapter-date-fns": "^3.0.0", "leaflet": "^1.9.4", + "maplibre-gl": "^5.21.0", + "plotly.js-dist-min": "^3.4.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", - "react-leaflet": "^4.2.1" + "react-leaflet": "^4.2.1", + "react-map-gl": "^8.1.0", + "react-plotly.js": "^2.6.0" } } diff --git a/src/bowser/dist/index.css b/src/bowser/dist/index.css index 723d266..f2c4463 100644 --- a/src/bowser/dist/index.css +++ b/src/bowser/dist/index.css @@ -1,665 +1,4 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Prevents IE11 from highlighting tiles in blue */ -.leaflet-tile::selection { - background: transparent; -} -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg { - max-width: none !important; - max-height: none !important; - } -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer, -.leaflet-container .leaflet-tile { - max-width: none !important; - max-height: none !important; - width: auto; - padding: 0; - } - -.leaflet-container img.leaflet-tile { - /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */ - mix-blend-mode: plus-lighter; -} - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - /* Fallback for FF which doesn't support pinch-zoom */ - touch-action: none; - touch-action: pinch-zoom; -} -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -svg.leaflet-zoom-animated { - will-change: transform; -} - -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - cursor: grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - cursor: grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive, -svg.leaflet-image-layer.leaflet-interactive path { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline-offset: 1px; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover, -.leaflet-bar a:focus { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - overflow-x: hidden; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - font-size: 13px; - font-size: 1.08333em; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */ - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.8); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - line-height: 1.4; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover, -.leaflet-control-attribution a:focus { - text-decoration: underline; - } -.leaflet-attribution-flag { - display: inline !important; - vertical-align: baseline !important; - width: 1em; - height: 0.6669em; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - white-space: nowrap; - -moz-box-sizing: border-box; - box-sizing: border-box; - background: rgba(255, 255, 255, 0.8); - text-shadow: 1px 1px #fff; - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 24px 13px 20px; - line-height: 1.3; - font-size: 13px; - font-size: 1.08333em; - min-height: 1px; - } -.leaflet-popup-content p { - margin: 17px 0; - margin: 1.3em 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-top: -1px; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - pointer-events: auto; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - border: none; - text-align: center; - width: 24px; - height: 24px; - font: 16px/24px Tahoma, Verdana, sans-serif; - color: #757575; - text-decoration: none; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover, -.leaflet-container a.leaflet-popup-close-button:focus { - color: #585858; - } -.leaflet-popup-scrolled { - overflow: auto; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - -ms-zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-interactive { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } - -/* Printing */ - -@media print { - /* Prevent printers from removing background-images of controls. */ - .leaflet-control { - -webkit-print-color-adjust: exact; - print-color-adjust: exact; - } - } -:root { +.maplibregl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0,0,0,0)}.maplibregl-canvas{left:0;position:absolute;top:0}.maplibregl-map:fullscreen{height:100%;width:100%}.maplibregl-ctrl-group button.maplibregl-ctrl-compass{touch-action:none}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures,.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.maplibregl-ctrl-top-left{left:0;top:0}.maplibregl-ctrl-top-right{right:0;top:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{bottom:0;right:0}.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{float:left;margin:10px 0 0 10px}.maplibregl-ctrl-top-right .maplibregl-ctrl{float:right;margin:10px 10px 0 0}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{float:left;margin:0 0 10px 10px}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{float:right;margin:0 10px 10px 0}.maplibregl-ctrl-group{background:#fff;border-radius:4px}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (forced-colors:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media (forced-colors:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}@media (hover:hover){.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}}.maplibregl-ctrl button:not(:disabled):active{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5'/%3E%3C/svg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5'/%3E%3C/svg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1z'/%3E%3C/svg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1z'/%3E%3C/svg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8z'/%3E%3C/svg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8z'/%3E%3C/svg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-globe .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='none' stroke='%23333' viewBox='0 0 22 22'%3E%3Ccircle cx='11' cy='11' r='8.5'/%3E%3Cpath d='M17.5 11c0 4.819-3.02 8.5-6.5 8.5S4.5 15.819 4.5 11 7.52 2.5 11 2.5s6.5 3.681 6.5 8.5Z'/%3E%3Cpath d='M13.5 11c0 2.447-.331 4.64-.853 6.206-.262.785-.562 1.384-.872 1.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831 15.64 8.5 13.446 8.5 11s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872 1.777.522 1.565.853 3.76.853 6.206Z'/%3E%3Cpath d='M11 7.5c-1.909 0-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3 1.3 0 0 1-.224-.138q.07-.058.224-.138c.299-.151.763-.302 1.379-.434C7.378 5.666 9.091 5.5 11 5.5s3.622.166 4.845.428c.616.132 1.08.283 1.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428ZM4.486 6.436ZM11 16.5c-1.909 0-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3 1.3 0 0 1-.224-.138 1.3 1.3 0 0 1 .224-.138c.299-.151.763-.302 1.379-.434C7.378 14.666 9.091 14.5 11 14.5s3.622.166 4.845.428c.616.132 1.08.283 1.379.434.105.053.177.1.224.138a1.3 1.3 0 0 1-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm-6.514-1.064ZM11 12.5c-2.46 0-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5 1.5 0 0 1-.39-.272.3.3 0 0 1-.047-.064.3.3 0 0 1 .048-.064c.066-.073.189-.167.389-.272.399-.21 1.009-.413 1.805-.59C6.328 9.722 8.54 9.5 11 9.5s4.672.222 6.256.574c.795.177 1.405.38 1.804.59.2.105.323.2.39.272a.3.3 0 0 1 .047.064.3.3 0 0 1-.048.064 1.4 1.4 0 0 1-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0 .018v.002zm17.002.002v-.002zm0-.018v-.002z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-globe-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='none' stroke='%2333b5e5' viewBox='0 0 22 22'%3E%3Ccircle cx='11' cy='11' r='8.5'/%3E%3Cpath d='M17.5 11c0 4.819-3.02 8.5-6.5 8.5S4.5 15.819 4.5 11 7.52 2.5 11 2.5s6.5 3.681 6.5 8.5Z'/%3E%3Cpath d='M13.5 11c0 2.447-.331 4.64-.853 6.206-.262.785-.562 1.384-.872 1.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831 15.64 8.5 13.446 8.5 11s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872 1.777.522 1.565.853 3.76.853 6.206Z'/%3E%3Cpath d='M11 7.5c-1.909 0-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3 1.3 0 0 1-.224-.138q.07-.058.224-.138c.299-.151.763-.302 1.379-.434C7.378 5.666 9.091 5.5 11 5.5s3.622.166 4.845.428c.616.132 1.08.283 1.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428ZM4.486 6.436ZM11 16.5c-1.909 0-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3 1.3 0 0 1-.224-.138 1.3 1.3 0 0 1 .224-.138c.299-.151.763-.302 1.379-.434C7.378 14.666 9.091 14.5 11 14.5s3.622.166 4.845.428c.616.132 1.08.283 1.379.434.105.053.177.1.224.138a1.3 1.3 0 0 1-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm-6.514-1.064ZM11 12.5c-2.46 0-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5 1.5 0 0 1-.39-.272.3.3 0 0 1-.047-.064.3.3 0 0 1 .048-.064c.066-.073.189-.167.389-.272.399-.21 1.009-.413 1.805-.59C6.328 9.722 8.54 9.5 11 9.5s4.672.222 6.256.574c.795.177 1.405.38 1.804.59.2.105.323.2.39.272a.3.3 0 0 1 .047.064.3.3 0 0 1-.048.064 1.4 1.4 0 0 1-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0 .018v.002zm17.002.002v-.002zm0-.018v-.002z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23333' viewBox='0 0 22 22'%3E%3Cpath d='m1.754 13.406 4.453-4.851 3.09 3.09 3.281 3.277.969-.969-3.309-3.312 3.844-4.121 6.148 6.886h1.082v-.855l-7.207-8.07-4.84 5.187L6.169 6.57l-5.48 5.965v.871ZM.688 16.844h20.625v1.375H.688Zm0 0'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%2333b5e5' viewBox='0 0 22 22'%3E%3Cpath d='m1.754 13.406 4.453-4.851 3.09 3.09 3.281 3.277.969-.969-3.309-3.312 3.844-4.121 6.148 6.886h1.082v-.855l-7.207-8.07-4.84 5.187L6.169 6.57l-5.48 5.965v.871ZM.688 16.844h20.625v1.375H.688Zm0 0'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23aaa' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23999' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3C/svg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23666' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1m0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1z'/%3E%3C/svg%3E")}}@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.25 1.25 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.25 1.25 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5 5 0 0 1 .314-.787l.009-.016a4.6 4.6 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.6 4.6 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4q.47.48.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42 2.42 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.45 2.45 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675q.318.302.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.8 4.8 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.4 3.4 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.25 1.25 0 0 1 .689 1.004 4.7 4.7 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528q-.001.515-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8 5.8 0 0 1-.548-2.512q0-.429.053-.843a1.3 1.3 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.8 4.8 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.5 4.5 0 0 1-1.935-.424 1.25 1.25 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.4 2.4 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.7 4.7 0 0 1-1.782 1.884 4.77 4.77 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.5 4.5 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a5 5 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.25 1.25 0 0 1-1.115.676h-.098a1.25 1.25 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267q-.133-.329-.526-.658l-.032-.028a3.2 3.2 0 0 0-.668-.428l-.27-.12a3.3 3.3 0 0 0-1.235-.23q-1.136-.001-1.974.493a3.36 3.36 0 0 0-1.3 1.382q-.445.89-.444 2.074 0 1.2.51 2.107a3.8 3.8 0 0 0 1.382 1.381 3.9 3.9 0 0 0 1.893.477q.795 0 1.455-.33zm-2.789-5.38q-.576.675-.575 1.762 0 1.102.559 1.794.576.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.2 2.2 0 0 0 .468-.29l.178-.161a2.2 2.2 0 0 0 .397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2 2.2 0 0 0-.633-.709l-.13-.086-.047-.028a2.1 2.1 0 0 0-1.073-.285q-1.052 0-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96 0 0 0-.353-.389.85.85 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.6 2.6 0 0 0 .331.423q.319.33.755.548l.173.074q.65.255 1.49.255 1.02 0 1.844-.493a3.45 3.45 0 0 0 1.316-1.4q.493-.904.493-2.089 0-1.909-.988-2.913-.988-1.02-2.584-1.02-.898 0-1.575.347a3 3 0 0 0-.415.262l-.199.166a3.4 3.4 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296 1.119.297 1.07 0 1.645-.675.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.435 0-.835.16a2 2 0 0 0-.284.136 2 2 0 0 0-.363.254 2.2 2.2 0 0 0-.46.569l-.082.162a2.6 2.6 0 0 0-.213 1.072v.115q0 .707.296 1.267l.135.211zm.964-.818a1.1 1.1 0 0 0 .367.385.94.94 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1 1 0 0 0-.503.135l-.012.007a.86.86 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.4 1.4 0 0 0 .14.66zm15.7-6.222q.347-.346.346-.856a1.05 1.05 0 0 0-.345-.79 1.18 1.18 0 0 0-.84-.329q-.51 0-.855.33a1.05 1.05 0 0 0-.346.79q0 .51.346.855.345.346.856.346.51 0 .839-.346zm4.337 9.314.033-1.332q.191.403.59.747l.098.081a4 4 0 0 0 .316.224l.223.122a3.2 3.2 0 0 0 1.44.322 3.8 3.8 0 0 0 1.875-.477 3.5 3.5 0 0 0 1.382-1.366q.527-.89.526-2.09 0-1.184-.444-2.073a3.24 3.24 0 0 0-1.283-1.399q-.823-.51-1.942-.51a3.5 3.5 0 0 0-1.527.344l-.086.043-.165.09a3 3 0 0 0-.33.214q-.432.315-.656.707a2 2 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5 2.5 0 0 0 .566.7q.117.098.245.18l.144.08a2.1 2.1 0 0 0 .975.232q1.07 0 1.645-.675.576-.69.576-1.778 0-1.102-.576-1.777-.56-.691-1.645-.692a2.2 2.2 0 0 0-1.015.235q-.22.113-.415.282l-.15.142a2.1 2.1 0 0 0-.42.594q-.223.479-.223 1.1v.115q0 .705.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.1 1.1 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493 0 .642.099l.247-1.794q-.196-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2 2 0 0 0-.411.148 2.2 2.2 0 0 0-.4.249 2.5 2.5 0 0 0-.485.499 2.7 2.7 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5 1.5 0 0 1 .466-.636 2.5 2.5 0 0 1 .399-.253 2 2 0 0 1 .224-.099zm9.784 2.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46 3.46 0 0 0-1.4 1.382q-.493.906-.493 2.106 0 1.07.428 1.975.428.89 1.332 1.432.906.526 2.255.526.973 0 1.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954 0-1.497-.444a1.6 1.6 0 0 1-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1 1 0 0 0-.156-.176q-.46-.428-1.316-.428-.986 0-1.494.604-.379.45-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81q-1.02 0-1.893-.478a3.8 3.8 0 0 1-1.381-1.382q-.51-.906-.51-2.106 0-1.185.444-2.074a3.36 3.36 0 0 1 1.3-1.382q.839-.494 1.974-.494a3.3 3.3 0 0 1 1.234.231 3.3 3.3 0 0 1 .97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02 1.053a3.17 3.17 0 0 1-1.662.444zm.296-1.482q.938 0 1.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2 2.2 0 0 0-.807-.872 2.1 2.1 0 0 0-1.119-.313q-1.053 0-1.629.692-.575.675-.575 1.76 0 1.103.559 1.795.577.675 1.645.675zm6.521-6.237h1.711v1.4q.906-1.597 2.83-1.597 1.596 0 2.584 1.02.988 1.005.988 2.914 0 1.185-.493 2.09a3.46 3.46 0 0 1-1.316 1.399 3.5 3.5 0 0 1-1.844.493q-.954 0-1.662-.329a2.67 2.67 0 0 1-1.086-.97l.017 5.134h-1.728zm4.048 6.22q1.07 0 1.645-.674.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.592 0-1.12.296-.51.28-.822.823-.296.527-.296 1.234v.115q0 .708.296 1.267.313.543.823.855.51.296 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.16 1.16 0 0 1-.856-.346 1.17 1.17 0 0 1-.346-.856 1.05 1.05 0 0 1 .346-.79q.346-.329.856-.329.494 0 .839.33a1.05 1.05 0 0 1 .345.79 1.16 1.16 0 0 1-.345.855q-.33.346-.84.346zm7.875 9.133a3.17 3.17 0 0 1-1.662-.444q-.723-.46-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283q.279-.658 1.086-1.119a3.5 3.5 0 0 1 1.778-.477q1.119 0 1.942.51a3.24 3.24 0 0 1 1.283 1.4q.445.888.444 2.072 0 1.201-.526 2.09a3.5 3.5 0 0 1-1.382 1.366 3.8 3.8 0 0 1-1.876.477zm-.296-1.481q1.069 0 1.645-.675.577-.69.577-1.778 0-1.102-.577-1.776-.56-.691-1.645-.692a2.12 2.12 0 0 0-1.58.659q-.642.641-.642 1.694v.115q0 .71.296 1.267a2.4 2.4 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14 2.14 0 0 1 1.349-.46q.527 0 .724.098l-.247 1.794q-.149-.099-.642-.099-.774 0-1.416.494-.626.493-.626 1.58v3.883h-1.777V9.242zm9.534 7.718q-1.35 0-2.255-.526-.904-.543-1.332-1.432a4.6 4.6 0 0 1-.428-1.975q0-1.2.493-2.106a3.46 3.46 0 0 1 1.4-1.382q.889-.495 2.007-.494 1.744 0 2.584.97.855.956.856 2.7 0 .444-.05.92h-5.43q.18 1.005.708 1.45.542.443 1.497.443.79 0 1.3-.131a4 4 0 0 0 .938-.362l.542 1.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728 0-1.991 1.86z'/%3E%3Cpath d='M5.074 15.948a.484.657 0 0 0-.486.659v1.84a.484.657 0 0 0 .486.659h4.101a.484.657 0 0 0 .486-.659v-1.84a.484.657 0 0 0-.486-.659zm3.56 1.16H5.617v.838h3.017z' style='fill:%23fff;fill-rule:evenodd;stroke-width:1.03600001'/%3E%3Cg style='stroke-width:1.12603545'%3E%3Cpath d='M-9.408-1.416c-3.833-.025-7.056 2.912-7.08 6.615-.02 3.08 1.653 4.832 3.107 6.268.903.892 1.721 1.74 2.32 2.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87 1.87 0 0 0-.362 1.121l-.011 1.877c-.003.402.104.787.347 1.125.244.338.688.653 1.23.656l4.142.028c.542.003.99-.306 1.238-.641a1.87 1.87 0 0 0 .363-1.121l.012-1.875a1.87 1.87 0 0 0-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145 1.425-1.983 2.348-2.87 1.473-1.414 3.18-3.149 3.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006 1.1v.002c3.274.02 5.92 2.532 5.9 5.6-.017 2.706-1.39 4.026-2.863 5.44-1.034.994-2.118 2.033-2.814 3.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34 0 0 1-.226.084.34.34 0 0 1-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067 2.7-5.545 5.975-5.523m-.02 2.826c-1.62-.01-2.944 1.315-2.955 2.96-.01 1.646 1.295 2.988 2.916 2.999h.002c1.621.01 2.943-1.316 2.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005 1.1c1.017.006 1.829.83 1.822 1.89s-.83 1.874-1.848 1.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874 1.848-1.868m-2.155 11.857 4.14.025c.271.002.49.305.487.676l-.013 1.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668' style='color:%23000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:%23000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:%23000;solid-opacity:1;vector-effect:none;fill:%23000;fill-opacity:.4;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-9.415-.316C-12.69-.338-15.37 2.14-15.39 5.207c-.017 2.716 1.326 4.041 2.78 5.477 1.013 1 2.081 2.055 2.78 3.67l.092.076a.34.34 0 0 0 .225.086.34.34 0 0 0 .227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6 1.78-2.64 2.814-3.634 1.473-1.414 2.847-2.733 2.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057 8.784c1.621.011 2.944-1.315 2.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945 1.315-2.955 2.96s1.295 2.989 2.916 3' style='clip-rule:evenodd;fill:%23e1e3e9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-11.594 15.465c-.27-.002-.492.297-.494.668l-.012 1.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z' style='clip-rule:evenodd;fill:%23fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (forced-colors:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.25 1.25 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.25 1.25 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5 5 0 0 1 .314-.787l.009-.016a4.6 4.6 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.6 4.6 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4q.47.48.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42 2.42 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.45 2.45 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675q.318.302.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.8 4.8 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.4 3.4 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.25 1.25 0 0 1 .689 1.004 4.7 4.7 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528q-.001.515-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8 5.8 0 0 1-.548-2.512q0-.429.053-.843a1.3 1.3 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.8 4.8 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.5 4.5 0 0 1-1.935-.424 1.25 1.25 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.4 2.4 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.7 4.7 0 0 1-1.782 1.884 4.77 4.77 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.5 4.5 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a5 5 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.25 1.25 0 0 1-1.115.676h-.098a1.25 1.25 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267q-.133-.329-.526-.658l-.032-.028a3.2 3.2 0 0 0-.668-.428l-.27-.12a3.3 3.3 0 0 0-1.235-.23q-1.136-.001-1.974.493a3.36 3.36 0 0 0-1.3 1.382q-.445.89-.444 2.074 0 1.2.51 2.107a3.8 3.8 0 0 0 1.382 1.381 3.9 3.9 0 0 0 1.893.477q.795 0 1.455-.33zm-2.789-5.38q-.576.675-.575 1.762 0 1.102.559 1.794.576.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.2 2.2 0 0 0 .468-.29l.178-.161a2.2 2.2 0 0 0 .397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2 2.2 0 0 0-.633-.709l-.13-.086-.047-.028a2.1 2.1 0 0 0-1.073-.285q-1.052 0-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96 0 0 0-.353-.389.85.85 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.6 2.6 0 0 0 .331.423q.319.33.755.548l.173.074q.65.255 1.49.255 1.02 0 1.844-.493a3.45 3.45 0 0 0 1.316-1.4q.493-.904.493-2.089 0-1.909-.988-2.913-.988-1.02-2.584-1.02-.898 0-1.575.347a3 3 0 0 0-.415.262l-.199.166a3.4 3.4 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296 1.119.297 1.07 0 1.645-.675.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.435 0-.835.16a2 2 0 0 0-.284.136 2 2 0 0 0-.363.254 2.2 2.2 0 0 0-.46.569l-.082.162a2.6 2.6 0 0 0-.213 1.072v.115q0 .707.296 1.267l.135.211zm.964-.818a1.1 1.1 0 0 0 .367.385.94.94 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1 1 0 0 0-.503.135l-.012.007a.86.86 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.4 1.4 0 0 0 .14.66zm15.7-6.222q.347-.346.346-.856a1.05 1.05 0 0 0-.345-.79 1.18 1.18 0 0 0-.84-.329q-.51 0-.855.33a1.05 1.05 0 0 0-.346.79q0 .51.346.855.345.346.856.346.51 0 .839-.346zm4.337 9.314.033-1.332q.191.403.59.747l.098.081a4 4 0 0 0 .316.224l.223.122a3.2 3.2 0 0 0 1.44.322 3.8 3.8 0 0 0 1.875-.477 3.5 3.5 0 0 0 1.382-1.366q.527-.89.526-2.09 0-1.184-.444-2.073a3.24 3.24 0 0 0-1.283-1.399q-.823-.51-1.942-.51a3.5 3.5 0 0 0-1.527.344l-.086.043-.165.09a3 3 0 0 0-.33.214q-.432.315-.656.707a2 2 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5 2.5 0 0 0 .566.7q.117.098.245.18l.144.08a2.1 2.1 0 0 0 .975.232q1.07 0 1.645-.675.576-.69.576-1.778 0-1.102-.576-1.777-.56-.691-1.645-.692a2.2 2.2 0 0 0-1.015.235q-.22.113-.415.282l-.15.142a2.1 2.1 0 0 0-.42.594q-.223.479-.223 1.1v.115q0 .705.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.1 1.1 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493 0 .642.099l.247-1.794q-.196-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2 2 0 0 0-.411.148 2.2 2.2 0 0 0-.4.249 2.5 2.5 0 0 0-.485.499 2.7 2.7 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5 1.5 0 0 1 .466-.636 2.5 2.5 0 0 1 .399-.253 2 2 0 0 1 .224-.099zm9.784 2.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46 3.46 0 0 0-1.4 1.382q-.493.906-.493 2.106 0 1.07.428 1.975.428.89 1.332 1.432.906.526 2.255.526.973 0 1.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954 0-1.497-.444a1.6 1.6 0 0 1-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1 1 0 0 0-.156-.176q-.46-.428-1.316-.428-.986 0-1.494.604-.379.45-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81q-1.02 0-1.893-.478a3.8 3.8 0 0 1-1.381-1.382q-.51-.906-.51-2.106 0-1.185.444-2.074a3.36 3.36 0 0 1 1.3-1.382q.839-.494 1.974-.494a3.3 3.3 0 0 1 1.234.231 3.3 3.3 0 0 1 .97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02 1.053a3.17 3.17 0 0 1-1.662.444zm.296-1.482q.938 0 1.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2 2.2 0 0 0-.807-.872 2.1 2.1 0 0 0-1.119-.313q-1.053 0-1.629.692-.575.675-.575 1.76 0 1.103.559 1.795.577.675 1.645.675zm6.521-6.237h1.711v1.4q.906-1.597 2.83-1.597 1.596 0 2.584 1.02.988 1.005.988 2.914 0 1.185-.493 2.09a3.46 3.46 0 0 1-1.316 1.399 3.5 3.5 0 0 1-1.844.493q-.954 0-1.662-.329a2.67 2.67 0 0 1-1.086-.97l.017 5.134h-1.728zm4.048 6.22q1.07 0 1.645-.674.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.592 0-1.12.296-.51.28-.822.823-.296.527-.296 1.234v.115q0 .708.296 1.267.313.543.823.855.51.296 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.16 1.16 0 0 1-.856-.346 1.17 1.17 0 0 1-.346-.856 1.05 1.05 0 0 1 .346-.79q.346-.329.856-.329.494 0 .839.33a1.05 1.05 0 0 1 .345.79 1.16 1.16 0 0 1-.345.855q-.33.346-.84.346zm7.875 9.133a3.17 3.17 0 0 1-1.662-.444q-.723-.46-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283q.279-.658 1.086-1.119a3.5 3.5 0 0 1 1.778-.477q1.119 0 1.942.51a3.24 3.24 0 0 1 1.283 1.4q.445.888.444 2.072 0 1.201-.526 2.09a3.5 3.5 0 0 1-1.382 1.366 3.8 3.8 0 0 1-1.876.477zm-.296-1.481q1.069 0 1.645-.675.577-.69.577-1.778 0-1.102-.577-1.776-.56-.691-1.645-.692a2.12 2.12 0 0 0-1.58.659q-.642.641-.642 1.694v.115q0 .71.296 1.267a2.4 2.4 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14 2.14 0 0 1 1.349-.46q.527 0 .724.098l-.247 1.794q-.149-.099-.642-.099-.774 0-1.416.494-.626.493-.626 1.58v3.883h-1.777V9.242zm9.534 7.718q-1.35 0-2.255-.526-.904-.543-1.332-1.432a4.6 4.6 0 0 1-.428-1.975q0-1.2.493-2.106a3.46 3.46 0 0 1 1.4-1.382q.889-.495 2.007-.494 1.744 0 2.584.97.855.956.856 2.7 0 .444-.05.92h-5.43q.18 1.005.708 1.45.542.443 1.497.443.79 0 1.3-.131a4 4 0 0 0 .938-.362l.542 1.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728 0-1.991 1.86z'/%3E%3Cpath d='M5.074 15.948a.484.657 0 0 0-.486.659v1.84a.484.657 0 0 0 .486.659h4.101a.484.657 0 0 0 .486-.659v-1.84a.484.657 0 0 0-.486-.659zm3.56 1.16H5.617v.838h3.017z' style='fill:%23fff;fill-rule:evenodd;stroke-width:1.03600001'/%3E%3Cg style='stroke-width:1.12603545'%3E%3Cpath d='M-9.408-1.416c-3.833-.025-7.056 2.912-7.08 6.615-.02 3.08 1.653 4.832 3.107 6.268.903.892 1.721 1.74 2.32 2.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87 1.87 0 0 0-.362 1.121l-.011 1.877c-.003.402.104.787.347 1.125.244.338.688.653 1.23.656l4.142.028c.542.003.99-.306 1.238-.641a1.87 1.87 0 0 0 .363-1.121l.012-1.875a1.87 1.87 0 0 0-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145 1.425-1.983 2.348-2.87 1.473-1.414 3.18-3.149 3.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006 1.1v.002c3.274.02 5.92 2.532 5.9 5.6-.017 2.706-1.39 4.026-2.863 5.44-1.034.994-2.118 2.033-2.814 3.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34 0 0 1-.226.084.34.34 0 0 1-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067 2.7-5.545 5.975-5.523m-.02 2.826c-1.62-.01-2.944 1.315-2.955 2.96-.01 1.646 1.295 2.988 2.916 2.999h.002c1.621.01 2.943-1.316 2.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005 1.1c1.017.006 1.829.83 1.822 1.89s-.83 1.874-1.848 1.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874 1.848-1.868m-2.155 11.857 4.14.025c.271.002.49.305.487.676l-.013 1.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668' style='color:%23000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:%23000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:%23000;solid-opacity:1;vector-effect:none;fill:%23000;fill-opacity:.4;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-9.415-.316C-12.69-.338-15.37 2.14-15.39 5.207c-.017 2.716 1.326 4.041 2.78 5.477 1.013 1 2.081 2.055 2.78 3.67l.092.076a.34.34 0 0 0 .225.086.34.34 0 0 0 .227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6 1.78-2.64 2.814-3.634 1.473-1.414 2.847-2.733 2.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057 8.784c1.621.011 2.944-1.315 2.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945 1.315-2.955 2.96s1.295 2.989 2.916 3' style='clip-rule:evenodd;fill:%23e1e3e9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-11.594 15.465c-.27-.002-.492.297-.494.668l-.012 1.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z' style='clip-rule:evenodd;fill:%23fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3C/g%3E%3C/svg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.25 1.25 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.25 1.25 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5 5 0 0 1 .314-.787l.009-.016a4.6 4.6 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.6 4.6 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4q.47.48.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42 2.42 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.45 2.45 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675q.318.302.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.8 4.8 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.4 3.4 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.25 1.25 0 0 1 .689 1.004 4.7 4.7 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528q-.001.515-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8 5.8 0 0 1-.548-2.512q0-.429.053-.843a1.3 1.3 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.8 4.8 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.5 4.5 0 0 1-1.935-.424 1.25 1.25 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.4 2.4 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.7 4.7 0 0 1-1.782 1.884 4.77 4.77 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.5 4.5 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a5 5 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.25 1.25 0 0 1-1.115.676h-.098a1.25 1.25 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267q-.133-.329-.526-.658l-.032-.028a3.2 3.2 0 0 0-.668-.428l-.27-.12a3.3 3.3 0 0 0-1.235-.23q-1.136-.001-1.974.493a3.36 3.36 0 0 0-1.3 1.382q-.445.89-.444 2.074 0 1.2.51 2.107a3.8 3.8 0 0 0 1.382 1.381 3.9 3.9 0 0 0 1.893.477q.795 0 1.455-.33zm-2.789-5.38q-.576.675-.575 1.762 0 1.102.559 1.794.576.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.2 2.2 0 0 0 .468-.29l.178-.161a2.2 2.2 0 0 0 .397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2 2.2 0 0 0-.633-.709l-.13-.086-.047-.028a2.1 2.1 0 0 0-1.073-.285q-1.052 0-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96 0 0 0-.353-.389.85.85 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.6 2.6 0 0 0 .331.423q.319.33.755.548l.173.074q.65.255 1.49.255 1.02 0 1.844-.493a3.45 3.45 0 0 0 1.316-1.4q.493-.904.493-2.089 0-1.909-.988-2.913-.988-1.02-2.584-1.02-.898 0-1.575.347a3 3 0 0 0-.415.262l-.199.166a3.4 3.4 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296 1.119.297 1.07 0 1.645-.675.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.435 0-.835.16a2 2 0 0 0-.284.136 2 2 0 0 0-.363.254 2.2 2.2 0 0 0-.46.569l-.082.162a2.6 2.6 0 0 0-.213 1.072v.115q0 .707.296 1.267l.135.211zm.964-.818a1.1 1.1 0 0 0 .367.385.94.94 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1 1 0 0 0-.503.135l-.012.007a.86.86 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.4 1.4 0 0 0 .14.66zm15.7-6.222q.347-.346.346-.856a1.05 1.05 0 0 0-.345-.79 1.18 1.18 0 0 0-.84-.329q-.51 0-.855.33a1.05 1.05 0 0 0-.346.79q0 .51.346.855.345.346.856.346.51 0 .839-.346zm4.337 9.314.033-1.332q.191.403.59.747l.098.081a4 4 0 0 0 .316.224l.223.122a3.2 3.2 0 0 0 1.44.322 3.8 3.8 0 0 0 1.875-.477 3.5 3.5 0 0 0 1.382-1.366q.527-.89.526-2.09 0-1.184-.444-2.073a3.24 3.24 0 0 0-1.283-1.399q-.823-.51-1.942-.51a3.5 3.5 0 0 0-1.527.344l-.086.043-.165.09a3 3 0 0 0-.33.214q-.432.315-.656.707a2 2 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5 2.5 0 0 0 .566.7q.117.098.245.18l.144.08a2.1 2.1 0 0 0 .975.232q1.07 0 1.645-.675.576-.69.576-1.778 0-1.102-.576-1.777-.56-.691-1.645-.692a2.2 2.2 0 0 0-1.015.235q-.22.113-.415.282l-.15.142a2.1 2.1 0 0 0-.42.594q-.223.479-.223 1.1v.115q0 .705.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.1 1.1 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493 0 .642.099l.247-1.794q-.196-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2 2 0 0 0-.411.148 2.2 2.2 0 0 0-.4.249 2.5 2.5 0 0 0-.485.499 2.7 2.7 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5 1.5 0 0 1 .466-.636 2.5 2.5 0 0 1 .399-.253 2 2 0 0 1 .224-.099zm9.784 2.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46 3.46 0 0 0-1.4 1.382q-.493.906-.493 2.106 0 1.07.428 1.975.428.89 1.332 1.432.906.526 2.255.526.973 0 1.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954 0-1.497-.444a1.6 1.6 0 0 1-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1 1 0 0 0-.156-.176q-.46-.428-1.316-.428-.986 0-1.494.604-.379.45-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81q-1.02 0-1.893-.478a3.8 3.8 0 0 1-1.381-1.382q-.51-.906-.51-2.106 0-1.185.444-2.074a3.36 3.36 0 0 1 1.3-1.382q.839-.494 1.974-.494a3.3 3.3 0 0 1 1.234.231 3.3 3.3 0 0 1 .97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02 1.053a3.17 3.17 0 0 1-1.662.444zm.296-1.482q.938 0 1.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2 2.2 0 0 0-.807-.872 2.1 2.1 0 0 0-1.119-.313q-1.053 0-1.629.692-.575.675-.575 1.76 0 1.103.559 1.795.577.675 1.645.675zm6.521-6.237h1.711v1.4q.906-1.597 2.83-1.597 1.596 0 2.584 1.02.988 1.005.988 2.914 0 1.185-.493 2.09a3.46 3.46 0 0 1-1.316 1.399 3.5 3.5 0 0 1-1.844.493q-.954 0-1.662-.329a2.67 2.67 0 0 1-1.086-.97l.017 5.134h-1.728zm4.048 6.22q1.07 0 1.645-.674.577-.69.576-1.762 0-1.119-.576-1.777-.558-.675-1.645-.675-.592 0-1.12.296-.51.28-.822.823-.296.527-.296 1.234v.115q0 .708.296 1.267.313.543.823.855.51.296 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.16 1.16 0 0 1-.856-.346 1.17 1.17 0 0 1-.346-.856 1.05 1.05 0 0 1 .346-.79q.346-.329.856-.329.494 0 .839.33a1.05 1.05 0 0 1 .345.79 1.16 1.16 0 0 1-.345.855q-.33.346-.84.346zm7.875 9.133a3.17 3.17 0 0 1-1.662-.444q-.723-.46-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283q.279-.658 1.086-1.119a3.5 3.5 0 0 1 1.778-.477q1.119 0 1.942.51a3.24 3.24 0 0 1 1.283 1.4q.445.888.444 2.072 0 1.201-.526 2.09a3.5 3.5 0 0 1-1.382 1.366 3.8 3.8 0 0 1-1.876.477zm-.296-1.481q1.069 0 1.645-.675.577-.69.577-1.778 0-1.102-.577-1.776-.56-.691-1.645-.692a2.12 2.12 0 0 0-1.58.659q-.642.641-.642 1.694v.115q0 .71.296 1.267a2.4 2.4 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14 2.14 0 0 1 1.349-.46q.527 0 .724.098l-.247 1.794q-.149-.099-.642-.099-.774 0-1.416.494-.626.493-.626 1.58v3.883h-1.777V9.242zm9.534 7.718q-1.35 0-2.255-.526-.904-.543-1.332-1.432a4.6 4.6 0 0 1-.428-1.975q0-1.2.493-2.106a3.46 3.46 0 0 1 1.4-1.382q.889-.495 2.007-.494 1.744 0 2.584.97.855.956.856 2.7 0 .444-.05.92h-5.43q.18 1.005.708 1.45.542.443 1.497.443.79 0 1.3-.131a4 4 0 0 0 .938-.362l.542 1.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728 0-1.991 1.86z'/%3E%3Cpath d='M5.074 15.948a.484.657 0 0 0-.486.659v1.84a.484.657 0 0 0 .486.659h4.101a.484.657 0 0 0 .486-.659v-1.84a.484.657 0 0 0-.486-.659zm3.56 1.16H5.617v.838h3.017z' style='fill:%23fff;fill-rule:evenodd;stroke-width:1.03600001'/%3E%3Cg style='stroke-width:1.12603545'%3E%3Cpath d='M-9.408-1.416c-3.833-.025-7.056 2.912-7.08 6.615-.02 3.08 1.653 4.832 3.107 6.268.903.892 1.721 1.74 2.32 2.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87 1.87 0 0 0-.362 1.121l-.011 1.877c-.003.402.104.787.347 1.125.244.338.688.653 1.23.656l4.142.028c.542.003.99-.306 1.238-.641a1.87 1.87 0 0 0 .363-1.121l.012-1.875a1.87 1.87 0 0 0-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145 1.425-1.983 2.348-2.87 1.473-1.414 3.18-3.149 3.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006 1.1v.002c3.274.02 5.92 2.532 5.9 5.6-.017 2.706-1.39 4.026-2.863 5.44-1.034.994-2.118 2.033-2.814 3.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34 0 0 1-.226.084.34.34 0 0 1-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067 2.7-5.545 5.975-5.523m-.02 2.826c-1.62-.01-2.944 1.315-2.955 2.96-.01 1.646 1.295 2.988 2.916 2.999h.002c1.621.01 2.943-1.316 2.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005 1.1c1.017.006 1.829.83 1.822 1.89s-.83 1.874-1.848 1.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874 1.848-1.868m-2.155 11.857 4.14.025c.271.002.49.305.487.676l-.013 1.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668' style='color:%23000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:%23000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:%23000;solid-opacity:1;vector-effect:none;fill:%23000;fill-opacity:.4;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-9.415-.316C-12.69-.338-15.37 2.14-15.39 5.207c-.017 2.716 1.326 4.041 2.78 5.477 1.013 1 2.081 2.055 2.78 3.67l.092.076a.34.34 0 0 0 .225.086.34.34 0 0 0 .227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6 1.78-2.64 2.814-3.634 1.473-1.414 2.847-2.733 2.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057 8.784c1.621.011 2.944-1.315 2.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945 1.315-2.955 2.96s1.295 2.989 2.916 3' style='clip-rule:evenodd;fill:%23e1e3e9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3Cpath d='M-11.594 15.465c-.27-.002-.492.297-.494.668l-.012 1.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z' style='clip-rule:evenodd;fill:%23fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.47727823;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:.4' transform='translate(15.553 2.85)scale(.88807)'/%3E%3C/g%3E%3C/svg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{background-color:#fff;border-radius:12px;box-sizing:content-box;color:#000;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;list-style:none}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{right:0;top:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{left:0;top:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (forced-colors:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px;white-space:nowrap}.maplibregl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-left-color:#fff;border-right:none}[dir=rtl] .maplibregl-popup-anchor-left{flex-direction:row-reverse}[dir=rtl] .maplibregl-popup-anchor-right{flex-direction:row}[dir=rtl] .maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-start}[dir=rtl] .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-start}.maplibregl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto;position:relative}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{left:0;position:absolute;top:0;transition:opacity .2s;will-change:transform}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.maplibregl-user-location-dot:before{animation:maplibregl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.maplibregl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}@media (prefers-reduced-motion:reduce){.maplibregl-user-location-dot:before{animation:none}}@keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(1)}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;border-radius:100%;height:1px;width:1px}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0}.maplibregl-cooperative-gesture-screen{align-items:center;background:rgba(0,0,0,.4);color:#fff;display:flex;font-size:1.4em;inset:0;justify-content:center;line-height:1.2;opacity:0;padding:1rem;pointer-events:none;position:absolute;transition:opacity 1s ease 1s;z-index:99999}.maplibregl-cooperative-gesture-screen.maplibregl-show{opacity:1;transition:opacity .05s}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:none}@media (hover:none),(pointer:coarse){.maplibregl-cooperative-gesture-screen .maplibregl-desktop-message{display:none}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:block}}.maplibregl-pseudo-fullscreen{height:100%!important;left:0!important;position:fixed!important;top:0!important;width:100%!important;z-index:99999}:root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; font-weight: 400; diff --git a/src/bowser/dist/index.html b/src/bowser/dist/index.html index e9f8785..6d5f7eb 100644 --- a/src/bowser/dist/index.html +++ b/src/bowser/dist/index.html @@ -11,9 +11,6 @@ - - Bowser diff --git a/src/bowser/dist/index.js b/src/bowser/dist/index.js index 1f76e12..20c34df 100644 --- a/src/bowser/dist/index.js +++ b/src/bowser/dist/index.js @@ -1,7 +1,7 @@ var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); -var _a, _b; +var _a2, _b2, _c2; (function polyfill() { const relList = document.createElement("link").relList; if (relList && relList.supports && relList.supports("modulepreload")) { @@ -56,252 +56,252 @@ var react_production_min = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var l$1 = Symbol.for("react.element"), n$1 = Symbol.for("react.portal"), p$2 = Symbol.for("react.fragment"), q$1 = Symbol.for("react.strict_mode"), r = Symbol.for("react.profiler"), t = Symbol.for("react.provider"), u = Symbol.for("react.context"), v$1 = Symbol.for("react.forward_ref"), w = Symbol.for("react.suspense"), x = Symbol.for("react.memo"), y = Symbol.for("react.lazy"), z$1 = Symbol.iterator; -function A$1(a) { - if (null === a || "object" !== typeof a) return null; - a = z$1 && a[z$1] || a["@@iterator"]; - return "function" === typeof a ? a : null; +var l$2 = Symbol.for("react.element"), n$2 = Symbol.for("react.portal"), p$3 = Symbol.for("react.fragment"), q$2 = Symbol.for("react.strict_mode"), r$1 = Symbol.for("react.profiler"), t$1 = Symbol.for("react.provider"), u$1 = Symbol.for("react.context"), v$2 = Symbol.for("react.forward_ref"), w$1 = Symbol.for("react.suspense"), x$1 = Symbol.for("react.memo"), y$1 = Symbol.for("react.lazy"), z$2 = Symbol.iterator; +function A$2(a2) { + if (null === a2 || "object" !== typeof a2) return null; + a2 = z$2 && a2[z$2] || a2["@@iterator"]; + return "function" === typeof a2 ? a2 : null; } -var B$1 = { isMounted: function() { +var B$2 = { isMounted: function() { return false; }, enqueueForceUpdate: function() { }, enqueueReplaceState: function() { }, enqueueSetState: function() { -} }, C$1 = Object.assign, D$1 = {}; -function E$1(a, b, e) { - this.props = a; - this.context = b; - this.refs = D$1; - this.updater = e || B$1; -} -E$1.prototype.isReactComponent = {}; -E$1.prototype.setState = function(a, b) { - if ("object" !== typeof a && "function" !== typeof a && null != a) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); - this.updater.enqueueSetState(this, a, b, "setState"); -}; -E$1.prototype.forceUpdate = function(a) { - this.updater.enqueueForceUpdate(this, a, "forceUpdate"); -}; -function F() { -} -F.prototype = E$1.prototype; -function G$1(a, b, e) { - this.props = a; - this.context = b; - this.refs = D$1; - this.updater = e || B$1; -} -var H$1 = G$1.prototype = new F(); -H$1.constructor = G$1; -C$1(H$1, E$1.prototype); -H$1.isPureReactComponent = true; -var I$1 = Array.isArray, J = Object.prototype.hasOwnProperty, K$1 = { current: null }, L$3 = { key: true, ref: true, __self: true, __source: true }; -function M$1(a, b, e) { - var d, c = {}, k2 = null, h = null; - if (null != b) for (d in void 0 !== b.ref && (h = b.ref), void 0 !== b.key && (k2 = "" + b.key), b) J.call(b, d) && !L$3.hasOwnProperty(d) && (c[d] = b[d]); - var g = arguments.length - 2; - if (1 === g) c.children = e; - else if (1 < g) { - for (var f2 = Array(g), m2 = 0; m2 < g; m2++) f2[m2] = arguments[m2 + 2]; - c.children = f2; - } - if (a && a.defaultProps) for (d in g = a.defaultProps, g) void 0 === c[d] && (c[d] = g[d]); - return { $$typeof: l$1, type: a, key: k2, ref: h, props: c, _owner: K$1.current }; -} -function N$1(a, b) { - return { $$typeof: l$1, type: a.type, key: b, ref: a.ref, props: a.props, _owner: a._owner }; -} -function O$1(a) { - return "object" === typeof a && null !== a && a.$$typeof === l$1; -} -function escape(a) { - var b = { "=": "=0", ":": "=2" }; - return "$" + a.replace(/[=:]/g, function(a2) { - return b[a2]; +} }, C$2 = Object.assign, D$2 = {}; +function E$2(a2, b2, e2) { + this.props = a2; + this.context = b2; + this.refs = D$2; + this.updater = e2 || B$2; +} +E$2.prototype.isReactComponent = {}; +E$2.prototype.setState = function(a2, b2) { + if ("object" !== typeof a2 && "function" !== typeof a2 && null != a2) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); + this.updater.enqueueSetState(this, a2, b2, "setState"); +}; +E$2.prototype.forceUpdate = function(a2) { + this.updater.enqueueForceUpdate(this, a2, "forceUpdate"); +}; +function F$1() { +} +F$1.prototype = E$2.prototype; +function G$2(a2, b2, e2) { + this.props = a2; + this.context = b2; + this.refs = D$2; + this.updater = e2 || B$2; +} +var H$2 = G$2.prototype = new F$1(); +H$2.constructor = G$2; +C$2(H$2, E$2.prototype); +H$2.isPureReactComponent = true; +var I$2 = Array.isArray, J$1 = Object.prototype.hasOwnProperty, K$2 = { current: null }, L$2 = { key: true, ref: true, __self: true, __source: true }; +function M$2(a2, b2, e2) { + var d2, c2 = {}, k2 = null, h2 = null; + if (null != b2) for (d2 in void 0 !== b2.ref && (h2 = b2.ref), void 0 !== b2.key && (k2 = "" + b2.key), b2) J$1.call(b2, d2) && !L$2.hasOwnProperty(d2) && (c2[d2] = b2[d2]); + var g2 = arguments.length - 2; + if (1 === g2) c2.children = e2; + else if (1 < g2) { + for (var f2 = Array(g2), m2 = 0; m2 < g2; m2++) f2[m2] = arguments[m2 + 2]; + c2.children = f2; + } + if (a2 && a2.defaultProps) for (d2 in g2 = a2.defaultProps, g2) void 0 === c2[d2] && (c2[d2] = g2[d2]); + return { $$typeof: l$2, type: a2, key: k2, ref: h2, props: c2, _owner: K$2.current }; +} +function N$2(a2, b2) { + return { $$typeof: l$2, type: a2.type, key: b2, ref: a2.ref, props: a2.props, _owner: a2._owner }; +} +function O$2(a2) { + return "object" === typeof a2 && null !== a2 && a2.$$typeof === l$2; +} +function escape$1(a2) { + var b2 = { "=": "=0", ":": "=2" }; + return "$" + a2.replace(/[=:]/g, function(a3) { + return b2[a3]; }); } -var P$1 = /\/+/g; -function Q$1(a, b) { - return "object" === typeof a && null !== a && null != a.key ? escape("" + a.key) : b.toString(36); +var P$2 = /\/+/g; +function Q$2(a2, b2) { + return "object" === typeof a2 && null !== a2 && null != a2.key ? escape$1("" + a2.key) : b2.toString(36); } -function R$1(a, b, e, d, c) { - var k2 = typeof a; - if ("undefined" === k2 || "boolean" === k2) a = null; - var h = false; - if (null === a) h = true; +function R$2(a2, b2, e2, d2, c2) { + var k2 = typeof a2; + if ("undefined" === k2 || "boolean" === k2) a2 = null; + var h2 = false; + if (null === a2) h2 = true; else switch (k2) { case "string": case "number": - h = true; + h2 = true; break; case "object": - switch (a.$$typeof) { - case l$1: - case n$1: - h = true; + switch (a2.$$typeof) { + case l$2: + case n$2: + h2 = true; } } - if (h) return h = a, c = c(h), a = "" === d ? "." + Q$1(h, 0) : d, I$1(c) ? (e = "", null != a && (e = a.replace(P$1, "$&/") + "/"), R$1(c, b, e, "", function(a2) { - return a2; - })) : null != c && (O$1(c) && (c = N$1(c, e + (!c.key || h && h.key === c.key ? "" : ("" + c.key).replace(P$1, "$&/") + "/") + a)), b.push(c)), 1; - h = 0; - d = "" === d ? "." : d + ":"; - if (I$1(a)) for (var g = 0; g < a.length; g++) { - k2 = a[g]; - var f2 = d + Q$1(k2, g); - h += R$1(k2, b, e, f2, c); - } - else if (f2 = A$1(a), "function" === typeof f2) for (a = f2.call(a), g = 0; !(k2 = a.next()).done; ) k2 = k2.value, f2 = d + Q$1(k2, g++), h += R$1(k2, b, e, f2, c); - else if ("object" === k2) throw b = String(a), Error("Objects are not valid as a React child (found: " + ("[object Object]" === b ? "object with keys {" + Object.keys(a).join(", ") + "}" : b) + "). If you meant to render a collection of children, use an array instead."); - return h; -} -function S$1(a, b, e) { - if (null == a) return a; - var d = [], c = 0; - R$1(a, d, "", "", function(a2) { - return b.call(e, a2, c++); + if (h2) return h2 = a2, c2 = c2(h2), a2 = "" === d2 ? "." + Q$2(h2, 0) : d2, I$2(c2) ? (e2 = "", null != a2 && (e2 = a2.replace(P$2, "$&/") + "/"), R$2(c2, b2, e2, "", function(a3) { + return a3; + })) : null != c2 && (O$2(c2) && (c2 = N$2(c2, e2 + (!c2.key || h2 && h2.key === c2.key ? "" : ("" + c2.key).replace(P$2, "$&/") + "/") + a2)), b2.push(c2)), 1; + h2 = 0; + d2 = "" === d2 ? "." : d2 + ":"; + if (I$2(a2)) for (var g2 = 0; g2 < a2.length; g2++) { + k2 = a2[g2]; + var f2 = d2 + Q$2(k2, g2); + h2 += R$2(k2, b2, e2, f2, c2); + } + else if (f2 = A$2(a2), "function" === typeof f2) for (a2 = f2.call(a2), g2 = 0; !(k2 = a2.next()).done; ) k2 = k2.value, f2 = d2 + Q$2(k2, g2++), h2 += R$2(k2, b2, e2, f2, c2); + else if ("object" === k2) throw b2 = String(a2), Error("Objects are not valid as a React child (found: " + ("[object Object]" === b2 ? "object with keys {" + Object.keys(a2).join(", ") + "}" : b2) + "). If you meant to render a collection of children, use an array instead."); + return h2; +} +function S$2(a2, b2, e2) { + if (null == a2) return a2; + var d2 = [], c2 = 0; + R$2(a2, d2, "", "", function(a3) { + return b2.call(e2, a3, c2++); }); - return d; -} -function T$1(a) { - if (-1 === a._status) { - var b = a._result; - b = b(); - b.then(function(b2) { - if (0 === a._status || -1 === a._status) a._status = 1, a._result = b2; - }, function(b2) { - if (0 === a._status || -1 === a._status) a._status = 2, a._result = b2; + return d2; +} +function T$2(a2) { + if (-1 === a2._status) { + var b2 = a2._result; + b2 = b2(); + b2.then(function(b3) { + if (0 === a2._status || -1 === a2._status) a2._status = 1, a2._result = b3; + }, function(b3) { + if (0 === a2._status || -1 === a2._status) a2._status = 2, a2._result = b3; }); - -1 === a._status && (a._status = 0, a._result = b); + -1 === a2._status && (a2._status = 0, a2._result = b2); } - if (1 === a._status) return a._result.default; - throw a._result; + if (1 === a2._status) return a2._result.default; + throw a2._result; } -var U$1 = { current: null }, V$1 = { transition: null }, W$1 = { ReactCurrentDispatcher: U$1, ReactCurrentBatchConfig: V$1, ReactCurrentOwner: K$1 }; -function X$1() { +var U$2 = { current: null }, V$2 = { transition: null }, W$2 = { ReactCurrentDispatcher: U$2, ReactCurrentBatchConfig: V$2, ReactCurrentOwner: K$2 }; +function X$2() { throw Error("act(...) is not supported in production builds of React."); } -react_production_min.Children = { map: S$1, forEach: function(a, b, e) { - S$1(a, function() { - b.apply(this, arguments); - }, e); -}, count: function(a) { - var b = 0; - S$1(a, function() { - b++; +react_production_min.Children = { map: S$2, forEach: function(a2, b2, e2) { + S$2(a2, function() { + b2.apply(this, arguments); + }, e2); +}, count: function(a2) { + var b2 = 0; + S$2(a2, function() { + b2++; }); - return b; -}, toArray: function(a) { - return S$1(a, function(a2) { - return a2; + return b2; +}, toArray: function(a2) { + return S$2(a2, function(a3) { + return a3; }) || []; -}, only: function(a) { - if (!O$1(a)) throw Error("React.Children.only expected to receive a single React element child."); - return a; +}, only: function(a2) { + if (!O$2(a2)) throw Error("React.Children.only expected to receive a single React element child."); + return a2; } }; -react_production_min.Component = E$1; -react_production_min.Fragment = p$2; -react_production_min.Profiler = r; -react_production_min.PureComponent = G$1; -react_production_min.StrictMode = q$1; -react_production_min.Suspense = w; -react_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = W$1; -react_production_min.act = X$1; -react_production_min.cloneElement = function(a, b, e) { - if (null === a || void 0 === a) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + a + "."); - var d = C$1({}, a.props), c = a.key, k2 = a.ref, h = a._owner; - if (null != b) { - void 0 !== b.ref && (k2 = b.ref, h = K$1.current); - void 0 !== b.key && (c = "" + b.key); - if (a.type && a.type.defaultProps) var g = a.type.defaultProps; - for (f2 in b) J.call(b, f2) && !L$3.hasOwnProperty(f2) && (d[f2] = void 0 === b[f2] && void 0 !== g ? g[f2] : b[f2]); +react_production_min.Component = E$2; +react_production_min.Fragment = p$3; +react_production_min.Profiler = r$1; +react_production_min.PureComponent = G$2; +react_production_min.StrictMode = q$2; +react_production_min.Suspense = w$1; +react_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = W$2; +react_production_min.act = X$2; +react_production_min.cloneElement = function(a2, b2, e2) { + if (null === a2 || void 0 === a2) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + a2 + "."); + var d2 = C$2({}, a2.props), c2 = a2.key, k2 = a2.ref, h2 = a2._owner; + if (null != b2) { + void 0 !== b2.ref && (k2 = b2.ref, h2 = K$2.current); + void 0 !== b2.key && (c2 = "" + b2.key); + if (a2.type && a2.type.defaultProps) var g2 = a2.type.defaultProps; + for (f2 in b2) J$1.call(b2, f2) && !L$2.hasOwnProperty(f2) && (d2[f2] = void 0 === b2[f2] && void 0 !== g2 ? g2[f2] : b2[f2]); } var f2 = arguments.length - 2; - if (1 === f2) d.children = e; + if (1 === f2) d2.children = e2; else if (1 < f2) { - g = Array(f2); - for (var m2 = 0; m2 < f2; m2++) g[m2] = arguments[m2 + 2]; - d.children = g; + g2 = Array(f2); + for (var m2 = 0; m2 < f2; m2++) g2[m2] = arguments[m2 + 2]; + d2.children = g2; } - return { $$typeof: l$1, type: a.type, key: c, ref: k2, props: d, _owner: h }; + return { $$typeof: l$2, type: a2.type, key: c2, ref: k2, props: d2, _owner: h2 }; }; -react_production_min.createContext = function(a) { - a = { $$typeof: u, _currentValue: a, _currentValue2: a, _threadCount: 0, Provider: null, Consumer: null, _defaultValue: null, _globalName: null }; - a.Provider = { $$typeof: t, _context: a }; - return a.Consumer = a; +react_production_min.createContext = function(a2) { + a2 = { $$typeof: u$1, _currentValue: a2, _currentValue2: a2, _threadCount: 0, Provider: null, Consumer: null, _defaultValue: null, _globalName: null }; + a2.Provider = { $$typeof: t$1, _context: a2 }; + return a2.Consumer = a2; }; -react_production_min.createElement = M$1; -react_production_min.createFactory = function(a) { - var b = M$1.bind(null, a); - b.type = a; - return b; +react_production_min.createElement = M$2; +react_production_min.createFactory = function(a2) { + var b2 = M$2.bind(null, a2); + b2.type = a2; + return b2; }; react_production_min.createRef = function() { return { current: null }; }; -react_production_min.forwardRef = function(a) { - return { $$typeof: v$1, render: a }; +react_production_min.forwardRef = function(a2) { + return { $$typeof: v$2, render: a2 }; }; -react_production_min.isValidElement = O$1; -react_production_min.lazy = function(a) { - return { $$typeof: y, _payload: { _status: -1, _result: a }, _init: T$1 }; +react_production_min.isValidElement = O$2; +react_production_min.lazy = function(a2) { + return { $$typeof: y$1, _payload: { _status: -1, _result: a2 }, _init: T$2 }; }; -react_production_min.memo = function(a, b) { - return { $$typeof: x, type: a, compare: void 0 === b ? null : b }; +react_production_min.memo = function(a2, b2) { + return { $$typeof: x$1, type: a2, compare: void 0 === b2 ? null : b2 }; }; -react_production_min.startTransition = function(a) { - var b = V$1.transition; - V$1.transition = {}; +react_production_min.startTransition = function(a2) { + var b2 = V$2.transition; + V$2.transition = {}; try { - a(); + a2(); } finally { - V$1.transition = b; + V$2.transition = b2; } }; -react_production_min.unstable_act = X$1; -react_production_min.useCallback = function(a, b) { - return U$1.current.useCallback(a, b); +react_production_min.unstable_act = X$2; +react_production_min.useCallback = function(a2, b2) { + return U$2.current.useCallback(a2, b2); }; -react_production_min.useContext = function(a) { - return U$1.current.useContext(a); +react_production_min.useContext = function(a2) { + return U$2.current.useContext(a2); }; react_production_min.useDebugValue = function() { }; -react_production_min.useDeferredValue = function(a) { - return U$1.current.useDeferredValue(a); +react_production_min.useDeferredValue = function(a2) { + return U$2.current.useDeferredValue(a2); }; -react_production_min.useEffect = function(a, b) { - return U$1.current.useEffect(a, b); +react_production_min.useEffect = function(a2, b2) { + return U$2.current.useEffect(a2, b2); }; react_production_min.useId = function() { - return U$1.current.useId(); + return U$2.current.useId(); }; -react_production_min.useImperativeHandle = function(a, b, e) { - return U$1.current.useImperativeHandle(a, b, e); +react_production_min.useImperativeHandle = function(a2, b2, e2) { + return U$2.current.useImperativeHandle(a2, b2, e2); }; -react_production_min.useInsertionEffect = function(a, b) { - return U$1.current.useInsertionEffect(a, b); +react_production_min.useInsertionEffect = function(a2, b2) { + return U$2.current.useInsertionEffect(a2, b2); }; -react_production_min.useLayoutEffect = function(a, b) { - return U$1.current.useLayoutEffect(a, b); +react_production_min.useLayoutEffect = function(a2, b2) { + return U$2.current.useLayoutEffect(a2, b2); }; -react_production_min.useMemo = function(a, b) { - return U$1.current.useMemo(a, b); +react_production_min.useMemo = function(a2, b2) { + return U$2.current.useMemo(a2, b2); }; -react_production_min.useReducer = function(a, b, e) { - return U$1.current.useReducer(a, b, e); +react_production_min.useReducer = function(a2, b2, e2) { + return U$2.current.useReducer(a2, b2, e2); }; -react_production_min.useRef = function(a) { - return U$1.current.useRef(a); +react_production_min.useRef = function(a2) { + return U$2.current.useRef(a2); }; -react_production_min.useState = function(a) { - return U$1.current.useState(a); +react_production_min.useState = function(a2) { + return U$2.current.useState(a2); }; -react_production_min.useSyncExternalStore = function(a, b, e) { - return U$1.current.useSyncExternalStore(a, b, e); +react_production_min.useSyncExternalStore = function(a2, b2, e2) { + return U$2.current.useSyncExternalStore(a2, b2, e2); }; react_production_min.useTransition = function() { - return U$1.current.useTransition(); + return U$2.current.useTransition(); }; react_production_min.version = "18.3.1"; { @@ -318,19 +318,19 @@ const React = /* @__PURE__ */ getDefaultExportFromCjs(reactExports); * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var f = reactExports, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m$1 = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p$1 = { key: true, ref: true, __self: true, __source: true }; -function q(c, a, g) { - var b, d = {}, e = null, h = null; - void 0 !== g && (e = "" + g); - void 0 !== a.key && (e = "" + a.key); - void 0 !== a.ref && (h = a.ref); - for (b in a) m$1.call(a, b) && !p$1.hasOwnProperty(b) && (d[b] = a[b]); - if (c && c.defaultProps) for (b in a = c.defaultProps, a) void 0 === d[b] && (d[b] = a[b]); - return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current }; -} -reactJsxRuntime_production_min.Fragment = l; -reactJsxRuntime_production_min.jsx = q; -reactJsxRuntime_production_min.jsxs = q; +var f$1 = reactExports, k$1 = Symbol.for("react.element"), l$1 = Symbol.for("react.fragment"), m$2 = Object.prototype.hasOwnProperty, n$1 = f$1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p$2 = { key: true, ref: true, __self: true, __source: true }; +function q$1(c2, a2, g2) { + var b2, d2 = {}, e2 = null, h2 = null; + void 0 !== g2 && (e2 = "" + g2); + void 0 !== a2.key && (e2 = "" + a2.key); + void 0 !== a2.ref && (h2 = a2.ref); + for (b2 in a2) m$2.call(a2, b2) && !p$2.hasOwnProperty(b2) && (d2[b2] = a2[b2]); + if (c2 && c2.defaultProps) for (b2 in a2 = c2.defaultProps, a2) void 0 === d2[b2] && (d2[b2] = a2[b2]); + return { $$typeof: k$1, type: c2, key: e2, ref: h2, props: d2, _owner: n$1.current }; +} +reactJsxRuntime_production_min.Fragment = l$1; +reactJsxRuntime_production_min.jsx = q$1; +reactJsxRuntime_production_min.jsxs = q$1; { jsxRuntime.exports = reactJsxRuntime_production_min; } @@ -350,35 +350,35 @@ var scheduler_production_min = {}; * LICENSE file in the root directory of this source tree. */ (function(exports) { - function f2(a, b) { - var c = a.length; - a.push(b); - a: for (; 0 < c; ) { - var d = c - 1 >>> 1, e = a[d]; - if (0 < g(e, b)) a[d] = b, a[c] = e, c = d; + function f2(a2, b2) { + var c2 = a2.length; + a2.push(b2); + a: for (; 0 < c2; ) { + var d2 = c2 - 1 >>> 1, e2 = a2[d2]; + if (0 < g2(e2, b2)) a2[d2] = b2, a2[c2] = e2, c2 = d2; else break a; } } - function h(a) { - return 0 === a.length ? null : a[0]; - } - function k2(a) { - if (0 === a.length) return null; - var b = a[0], c = a.pop(); - if (c !== b) { - a[0] = c; - a: for (var d = 0, e = a.length, w2 = e >>> 1; d < w2; ) { - var m2 = 2 * (d + 1) - 1, C2 = a[m2], n2 = m2 + 1, x2 = a[n2]; - if (0 > g(C2, c)) n2 < e && 0 > g(x2, C2) ? (a[d] = x2, a[n2] = c, d = n2) : (a[d] = C2, a[m2] = c, d = m2); - else if (n2 < e && 0 > g(x2, c)) a[d] = x2, a[n2] = c, d = n2; + function h2(a2) { + return 0 === a2.length ? null : a2[0]; + } + function k2(a2) { + if (0 === a2.length) return null; + var b2 = a2[0], c2 = a2.pop(); + if (c2 !== b2) { + a2[0] = c2; + a: for (var d2 = 0, e2 = a2.length, w2 = e2 >>> 1; d2 < w2; ) { + var m2 = 2 * (d2 + 1) - 1, C2 = a2[m2], n2 = m2 + 1, x2 = a2[n2]; + if (0 > g2(C2, c2)) n2 < e2 && 0 > g2(x2, C2) ? (a2[d2] = x2, a2[n2] = c2, d2 = n2) : (a2[d2] = C2, a2[m2] = c2, d2 = m2); + else if (n2 < e2 && 0 > g2(x2, c2)) a2[d2] = x2, a2[n2] = c2, d2 = n2; else break a; } } - return b; + return b2; } - function g(a, b) { - var c = a.sortIndex - b.sortIndex; - return 0 !== c ? c : a.id - b.id; + function g2(a2, b2) { + var c2 = a2.sortIndex - b2.sortIndex; + return 0 !== c2 ? c2 : a2.id - b2.id; } if ("object" === typeof performance && "function" === typeof performance.now) { var l2 = performance; @@ -393,51 +393,51 @@ var scheduler_production_min = {}; } var r2 = [], t2 = [], u2 = 1, v2 = null, y2 = 3, z2 = false, A2 = false, B2 = false, D2 = "function" === typeof setTimeout ? setTimeout : null, E2 = "function" === typeof clearTimeout ? clearTimeout : null, F2 = "undefined" !== typeof setImmediate ? setImmediate : null; "undefined" !== typeof navigator && void 0 !== navigator.scheduling && void 0 !== navigator.scheduling.isInputPending && navigator.scheduling.isInputPending.bind(navigator.scheduling); - function G2(a) { - for (var b = h(t2); null !== b; ) { - if (null === b.callback) k2(t2); - else if (b.startTime <= a) k2(t2), b.sortIndex = b.expirationTime, f2(r2, b); + function G2(a2) { + for (var b2 = h2(t2); null !== b2; ) { + if (null === b2.callback) k2(t2); + else if (b2.startTime <= a2) k2(t2), b2.sortIndex = b2.expirationTime, f2(r2, b2); else break; - b = h(t2); + b2 = h2(t2); } } - function H2(a) { + function H2(a2) { B2 = false; - G2(a); - if (!A2) if (null !== h(r2)) A2 = true, I2(J2); + G2(a2); + if (!A2) if (null !== h2(r2)) A2 = true, I2(J2); else { - var b = h(t2); - null !== b && K2(H2, b.startTime - a); + var b2 = h2(t2); + null !== b2 && K2(H2, b2.startTime - a2); } } - function J2(a, b) { + function J2(a2, b2) { A2 = false; B2 && (B2 = false, E2(L2), L2 = -1); z2 = true; - var c = y2; + var c2 = y2; try { - G2(b); - for (v2 = h(r2); null !== v2 && (!(v2.expirationTime > b) || a && !M2()); ) { - var d = v2.callback; - if ("function" === typeof d) { + G2(b2); + for (v2 = h2(r2); null !== v2 && (!(v2.expirationTime > b2) || a2 && !M2()); ) { + var d2 = v2.callback; + if ("function" === typeof d2) { v2.callback = null; y2 = v2.priorityLevel; - var e = d(v2.expirationTime <= b); - b = exports.unstable_now(); - "function" === typeof e ? v2.callback = e : v2 === h(r2) && k2(r2); - G2(b); + var e2 = d2(v2.expirationTime <= b2); + b2 = exports.unstable_now(); + "function" === typeof e2 ? v2.callback = e2 : v2 === h2(r2) && k2(r2); + G2(b2); } else k2(r2); - v2 = h(r2); + v2 = h2(r2); } if (null !== v2) var w2 = true; else { - var m2 = h(t2); - null !== m2 && K2(H2, m2.startTime - b); + var m2 = h2(t2); + null !== m2 && K2(H2, m2.startTime - b2); w2 = false; } return w2; } finally { - v2 = null, y2 = c, z2 = false; + v2 = null, y2 = c2, z2 = false; } } var N2 = false, O2 = null, L2 = -1, P2 = 5, Q2 = -1; @@ -446,13 +446,13 @@ var scheduler_production_min = {}; } function R2() { if (null !== O2) { - var a = exports.unstable_now(); - Q2 = a; - var b = true; + var a2 = exports.unstable_now(); + Q2 = a2; + var b2 = true; try { - b = O2(true, a); + b2 = O2(true, a2); } finally { - b ? S2() : (N2 = false, O2 = null); + b2 ? S2() : (N2 = false, O2 = null); } } else N2 = false; } @@ -469,14 +469,14 @@ var scheduler_production_min = {}; } else S2 = function() { D2(R2, 0); }; - function I2(a) { - O2 = a; + function I2(a2) { + O2 = a2; N2 || (N2 = true, S2()); } - function K2(a, b) { + function K2(a2, b2) { L2 = D2(function() { - a(exports.unstable_now()); - }, b); + a2(exports.unstable_now()); + }, b2); } exports.unstable_IdlePriority = 5; exports.unstable_ImmediatePriority = 1; @@ -484,45 +484,45 @@ var scheduler_production_min = {}; exports.unstable_NormalPriority = 3; exports.unstable_Profiling = null; exports.unstable_UserBlockingPriority = 2; - exports.unstable_cancelCallback = function(a) { - a.callback = null; + exports.unstable_cancelCallback = function(a2) { + a2.callback = null; }; exports.unstable_continueExecution = function() { A2 || z2 || (A2 = true, I2(J2)); }; - exports.unstable_forceFrameRate = function(a) { - 0 > a || 125 < a ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : P2 = 0 < a ? Math.floor(1e3 / a) : 5; + exports.unstable_forceFrameRate = function(a2) { + 0 > a2 || 125 < a2 ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : P2 = 0 < a2 ? Math.floor(1e3 / a2) : 5; }; exports.unstable_getCurrentPriorityLevel = function() { return y2; }; exports.unstable_getFirstCallbackNode = function() { - return h(r2); + return h2(r2); }; - exports.unstable_next = function(a) { + exports.unstable_next = function(a2) { switch (y2) { case 1: case 2: case 3: - var b = 3; + var b2 = 3; break; default: - b = y2; + b2 = y2; } - var c = y2; - y2 = b; + var c2 = y2; + y2 = b2; try { - return a(); + return a2(); } finally { - y2 = c; + y2 = c2; } }; exports.unstable_pauseExecution = function() { }; exports.unstable_requestPaint = function() { }; - exports.unstable_runWithPriority = function(a, b) { - switch (a) { + exports.unstable_runWithPriority = function(a2, b2) { + switch (a2) { case 1: case 2: case 3: @@ -530,50 +530,50 @@ var scheduler_production_min = {}; case 5: break; default: - a = 3; + a2 = 3; } - var c = y2; - y2 = a; + var c2 = y2; + y2 = a2; try { - return b(); + return b2(); } finally { - y2 = c; + y2 = c2; } }; - exports.unstable_scheduleCallback = function(a, b, c) { - var d = exports.unstable_now(); - "object" === typeof c && null !== c ? (c = c.delay, c = "number" === typeof c && 0 < c ? d + c : d) : c = d; - switch (a) { + exports.unstable_scheduleCallback = function(a2, b2, c2) { + var d2 = exports.unstable_now(); + "object" === typeof c2 && null !== c2 ? (c2 = c2.delay, c2 = "number" === typeof c2 && 0 < c2 ? d2 + c2 : d2) : c2 = d2; + switch (a2) { case 1: - var e = -1; + var e2 = -1; break; case 2: - e = 250; + e2 = 250; break; case 5: - e = 1073741823; + e2 = 1073741823; break; case 4: - e = 1e4; + e2 = 1e4; break; default: - e = 5e3; + e2 = 5e3; } - e = c + e; - a = { id: u2++, callback: b, priorityLevel: a, startTime: c, expirationTime: e, sortIndex: -1 }; - c > d ? (a.sortIndex = c, f2(t2, a), null === h(r2) && a === h(t2) && (B2 ? (E2(L2), L2 = -1) : B2 = true, K2(H2, c - d))) : (a.sortIndex = e, f2(r2, a), A2 || z2 || (A2 = true, I2(J2))); - return a; + e2 = c2 + e2; + a2 = { id: u2++, callback: b2, priorityLevel: a2, startTime: c2, expirationTime: e2, sortIndex: -1 }; + c2 > d2 ? (a2.sortIndex = c2, f2(t2, a2), null === h2(r2) && a2 === h2(t2) && (B2 ? (E2(L2), L2 = -1) : B2 = true, K2(H2, c2 - d2))) : (a2.sortIndex = e2, f2(r2, a2), A2 || z2 || (A2 = true, I2(J2))); + return a2; }; exports.unstable_shouldYield = M2; - exports.unstable_wrapCallback = function(a) { - var b = y2; + exports.unstable_wrapCallback = function(a2) { + var b2 = y2; return function() { - var c = y2; - y2 = b; + var c2 = y2; + y2 = b2; try { - return a.apply(this, arguments); + return a2.apply(this, arguments); } finally { - y2 = c; + y2 = c2; } }; }; @@ -592,203 +592,203 @@ var schedulerExports = scheduler.exports; * LICENSE file in the root directory of this source tree. */ var aa = reactExports, ca = schedulerExports; -function p(a) { - for (var b = "https://reactjs.org/docs/error-decoder.html?invariant=" + a, c = 1; c < arguments.length; c++) b += "&args[]=" + encodeURIComponent(arguments[c]); - return "Minified React error #" + a + "; visit " + b + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."; +function p$1(a2) { + for (var b2 = "https://reactjs.org/docs/error-decoder.html?invariant=" + a2, c2 = 1; c2 < arguments.length; c2++) b2 += "&args[]=" + encodeURIComponent(arguments[c2]); + return "Minified React error #" + a2 + "; visit " + b2 + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."; } var da = /* @__PURE__ */ new Set(), ea = {}; -function fa(a, b) { - ha(a, b); - ha(a + "Capture", b); +function fa(a2, b2) { + ha(a2, b2); + ha(a2 + "Capture", b2); } -function ha(a, b) { - ea[a] = b; - for (a = 0; a < b.length; a++) da.add(b[a]); +function ha(a2, b2) { + ea[a2] = b2; + for (a2 = 0; a2 < b2.length; a2++) da.add(b2[a2]); } var ia = !("undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement), ja = Object.prototype.hasOwnProperty, ka = /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, la = {}, ma = {}; -function oa(a) { - if (ja.call(ma, a)) return true; - if (ja.call(la, a)) return false; - if (ka.test(a)) return ma[a] = true; - la[a] = true; +function oa(a2) { + if (ja.call(ma, a2)) return true; + if (ja.call(la, a2)) return false; + if (ka.test(a2)) return ma[a2] = true; + la[a2] = true; return false; } -function pa(a, b, c, d) { - if (null !== c && 0 === c.type) return false; - switch (typeof b) { +function pa(a2, b2, c2, d2) { + if (null !== c2 && 0 === c2.type) return false; + switch (typeof b2) { case "function": case "symbol": return true; case "boolean": - if (d) return false; - if (null !== c) return !c.acceptsBooleans; - a = a.toLowerCase().slice(0, 5); - return "data-" !== a && "aria-" !== a; + if (d2) return false; + if (null !== c2) return !c2.acceptsBooleans; + a2 = a2.toLowerCase().slice(0, 5); + return "data-" !== a2 && "aria-" !== a2; default: return false; } } -function qa(a, b, c, d) { - if (null === b || "undefined" === typeof b || pa(a, b, c, d)) return true; - if (d) return false; - if (null !== c) switch (c.type) { +function qa(a2, b2, c2, d2) { + if (null === b2 || "undefined" === typeof b2 || pa(a2, b2, c2, d2)) return true; + if (d2) return false; + if (null !== c2) switch (c2.type) { case 3: - return !b; + return !b2; case 4: - return false === b; + return false === b2; case 5: - return isNaN(b); + return isNaN(b2); case 6: - return isNaN(b) || 1 > b; + return isNaN(b2) || 1 > b2; } return false; } -function v(a, b, c, d, e, f2, g) { - this.acceptsBooleans = 2 === b || 3 === b || 4 === b; - this.attributeName = d; - this.attributeNamespace = e; - this.mustUseProperty = c; - this.propertyName = a; - this.type = b; +function v$1(a2, b2, c2, d2, e2, f2, g2) { + this.acceptsBooleans = 2 === b2 || 3 === b2 || 4 === b2; + this.attributeName = d2; + this.attributeNamespace = e2; + this.mustUseProperty = c2; + this.propertyName = a2; + this.type = b2; this.sanitizeURL = f2; - this.removeEmptyString = g; + this.removeEmptyString = g2; } -var z = {}; -"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a) { - z[a] = new v(a, 0, false, a, null, false, false); +var z$1 = {}; +"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a2) { + z$1[a2] = new v$1(a2, 0, false, a2, null, false, false); }); -[["acceptCharset", "accept-charset"], ["className", "class"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"]].forEach(function(a) { - var b = a[0]; - z[b] = new v(b, 1, false, a[1], null, false, false); +[["acceptCharset", "accept-charset"], ["className", "class"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"]].forEach(function(a2) { + var b2 = a2[0]; + z$1[b2] = new v$1(b2, 1, false, a2[1], null, false, false); }); -["contentEditable", "draggable", "spellCheck", "value"].forEach(function(a) { - z[a] = new v(a, 2, false, a.toLowerCase(), null, false, false); +["contentEditable", "draggable", "spellCheck", "value"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 2, false, a2.toLowerCase(), null, false, false); }); -["autoReverse", "externalResourcesRequired", "focusable", "preserveAlpha"].forEach(function(a) { - z[a] = new v(a, 2, false, a, null, false, false); +["autoReverse", "externalResourcesRequired", "focusable", "preserveAlpha"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 2, false, a2, null, false, false); }); -"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a) { - z[a] = new v(a, 3, false, a.toLowerCase(), null, false, false); +"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a2) { + z$1[a2] = new v$1(a2, 3, false, a2.toLowerCase(), null, false, false); }); -["checked", "multiple", "muted", "selected"].forEach(function(a) { - z[a] = new v(a, 3, true, a, null, false, false); +["checked", "multiple", "muted", "selected"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 3, true, a2, null, false, false); }); -["capture", "download"].forEach(function(a) { - z[a] = new v(a, 4, false, a, null, false, false); +["capture", "download"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 4, false, a2, null, false, false); }); -["cols", "rows", "size", "span"].forEach(function(a) { - z[a] = new v(a, 6, false, a, null, false, false); +["cols", "rows", "size", "span"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 6, false, a2, null, false, false); }); -["rowSpan", "start"].forEach(function(a) { - z[a] = new v(a, 5, false, a.toLowerCase(), null, false, false); +["rowSpan", "start"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 5, false, a2.toLowerCase(), null, false, false); }); var ra = /[\-:]([a-z])/g; -function sa(a) { - return a[1].toUpperCase(); +function sa(a2) { + return a2[1].toUpperCase(); } -"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a) { - var b = a.replace( +"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a2) { + var b2 = a2.replace( ra, sa ); - z[b] = new v(b, 1, false, a, null, false, false); + z$1[b2] = new v$1(b2, 1, false, a2, null, false, false); }); -"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a) { - var b = a.replace(ra, sa); - z[b] = new v(b, 1, false, a, "http://www.w3.org/1999/xlink", false, false); +"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a2) { + var b2 = a2.replace(ra, sa); + z$1[b2] = new v$1(b2, 1, false, a2, "http://www.w3.org/1999/xlink", false, false); }); -["xml:base", "xml:lang", "xml:space"].forEach(function(a) { - var b = a.replace(ra, sa); - z[b] = new v(b, 1, false, a, "http://www.w3.org/XML/1998/namespace", false, false); +["xml:base", "xml:lang", "xml:space"].forEach(function(a2) { + var b2 = a2.replace(ra, sa); + z$1[b2] = new v$1(b2, 1, false, a2, "http://www.w3.org/XML/1998/namespace", false, false); }); -["tabIndex", "crossOrigin"].forEach(function(a) { - z[a] = new v(a, 1, false, a.toLowerCase(), null, false, false); +["tabIndex", "crossOrigin"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 1, false, a2.toLowerCase(), null, false, false); }); -z.xlinkHref = new v("xlinkHref", 1, false, "xlink:href", "http://www.w3.org/1999/xlink", true, false); -["src", "href", "action", "formAction"].forEach(function(a) { - z[a] = new v(a, 1, false, a.toLowerCase(), null, true, true); +z$1.xlinkHref = new v$1("xlinkHref", 1, false, "xlink:href", "http://www.w3.org/1999/xlink", true, false); +["src", "href", "action", "formAction"].forEach(function(a2) { + z$1[a2] = new v$1(a2, 1, false, a2.toLowerCase(), null, true, true); }); -function ta(a, b, c, d) { - var e = z.hasOwnProperty(b) ? z[b] : null; - if (null !== e ? 0 !== e.type : d || !(2 < b.length) || "o" !== b[0] && "O" !== b[0] || "n" !== b[1] && "N" !== b[1]) qa(b, c, e, d) && (c = null), d || null === e ? oa(b) && (null === c ? a.removeAttribute(b) : a.setAttribute(b, "" + c)) : e.mustUseProperty ? a[e.propertyName] = null === c ? 3 === e.type ? false : "" : c : (b = e.attributeName, d = e.attributeNamespace, null === c ? a.removeAttribute(b) : (e = e.type, c = 3 === e || 4 === e && true === c ? "" : "" + c, d ? a.setAttributeNS(d, b, c) : a.setAttribute(b, c))); +function ta(a2, b2, c2, d2) { + var e2 = z$1.hasOwnProperty(b2) ? z$1[b2] : null; + if (null !== e2 ? 0 !== e2.type : d2 || !(2 < b2.length) || "o" !== b2[0] && "O" !== b2[0] || "n" !== b2[1] && "N" !== b2[1]) qa(b2, c2, e2, d2) && (c2 = null), d2 || null === e2 ? oa(b2) && (null === c2 ? a2.removeAttribute(b2) : a2.setAttribute(b2, "" + c2)) : e2.mustUseProperty ? a2[e2.propertyName] = null === c2 ? 3 === e2.type ? false : "" : c2 : (b2 = e2.attributeName, d2 = e2.attributeNamespace, null === c2 ? a2.removeAttribute(b2) : (e2 = e2.type, c2 = 3 === e2 || 4 === e2 && true === c2 ? "" : "" + c2, d2 ? a2.setAttributeNS(d2, b2, c2) : a2.setAttribute(b2, c2))); } var ua = aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, va = Symbol.for("react.element"), wa = Symbol.for("react.portal"), ya = Symbol.for("react.fragment"), za = Symbol.for("react.strict_mode"), Aa = Symbol.for("react.profiler"), Ba = Symbol.for("react.provider"), Ca = Symbol.for("react.context"), Da = Symbol.for("react.forward_ref"), Ea = Symbol.for("react.suspense"), Fa = Symbol.for("react.suspense_list"), Ga = Symbol.for("react.memo"), Ha = Symbol.for("react.lazy"); var Ia = Symbol.for("react.offscreen"); var Ja = Symbol.iterator; -function Ka(a) { - if (null === a || "object" !== typeof a) return null; - a = Ja && a[Ja] || a["@@iterator"]; - return "function" === typeof a ? a : null; +function Ka(a2) { + if (null === a2 || "object" !== typeof a2) return null; + a2 = Ja && a2[Ja] || a2["@@iterator"]; + return "function" === typeof a2 ? a2 : null; } -var A = Object.assign, La; -function Ma(a) { +var A$1 = Object.assign, La; +function Ma(a2) { if (void 0 === La) try { throw Error(); - } catch (c) { - var b = c.stack.trim().match(/\n( *(at )?)/); - La = b && b[1] || ""; + } catch (c2) { + var b2 = c2.stack.trim().match(/\n( *(at )?)/); + La = b2 && b2[1] || ""; } - return "\n" + La + a; + return "\n" + La + a2; } var Na = false; -function Oa(a, b) { - if (!a || Na) return ""; +function Oa(a2, b2) { + if (!a2 || Na) return ""; Na = true; - var c = Error.prepareStackTrace; + var c2 = Error.prepareStackTrace; Error.prepareStackTrace = void 0; try { - if (b) if (b = function() { + if (b2) if (b2 = function() { throw Error(); - }, Object.defineProperty(b.prototype, "props", { set: function() { + }, Object.defineProperty(b2.prototype, "props", { set: function() { throw Error(); } }), "object" === typeof Reflect && Reflect.construct) { try { - Reflect.construct(b, []); + Reflect.construct(b2, []); } catch (l2) { - var d = l2; + var d2 = l2; } - Reflect.construct(a, [], b); + Reflect.construct(a2, [], b2); } else { try { - b.call(); + b2.call(); } catch (l2) { - d = l2; + d2 = l2; } - a.call(b.prototype); + a2.call(b2.prototype); } else { try { throw Error(); } catch (l2) { - d = l2; + d2 = l2; } - a(); + a2(); } } catch (l2) { - if (l2 && d && "string" === typeof l2.stack) { - for (var e = l2.stack.split("\n"), f2 = d.stack.split("\n"), g = e.length - 1, h = f2.length - 1; 1 <= g && 0 <= h && e[g] !== f2[h]; ) h--; - for (; 1 <= g && 0 <= h; g--, h--) if (e[g] !== f2[h]) { - if (1 !== g || 1 !== h) { + if (l2 && d2 && "string" === typeof l2.stack) { + for (var e2 = l2.stack.split("\n"), f2 = d2.stack.split("\n"), g2 = e2.length - 1, h2 = f2.length - 1; 1 <= g2 && 0 <= h2 && e2[g2] !== f2[h2]; ) h2--; + for (; 1 <= g2 && 0 <= h2; g2--, h2--) if (e2[g2] !== f2[h2]) { + if (1 !== g2 || 1 !== h2) { do - if (g--, h--, 0 > h || e[g] !== f2[h]) { - var k2 = "\n" + e[g].replace(" at new ", " at "); - a.displayName && k2.includes("") && (k2 = k2.replace("", a.displayName)); + if (g2--, h2--, 0 > h2 || e2[g2] !== f2[h2]) { + var k2 = "\n" + e2[g2].replace(" at new ", " at "); + a2.displayName && k2.includes("") && (k2 = k2.replace("", a2.displayName)); return k2; } - while (1 <= g && 0 <= h); + while (1 <= g2 && 0 <= h2); } break; } } } finally { - Na = false, Error.prepareStackTrace = c; + Na = false, Error.prepareStackTrace = c2; } - return (a = a ? a.displayName || a.name : "") ? Ma(a) : ""; + return (a2 = a2 ? a2.displayName || a2.name : "") ? Ma(a2) : ""; } -function Pa(a) { - switch (a.tag) { +function Pa(a2) { + switch (a2.tag) { case 5: - return Ma(a.type); + return Ma(a2.type); case 16: return Ma("Lazy"); case 13: @@ -798,20 +798,20 @@ function Pa(a) { case 0: case 2: case 15: - return a = Oa(a.type, false), a; + return a2 = Oa(a2.type, false), a2; case 11: - return a = Oa(a.type.render, false), a; + return a2 = Oa(a2.type.render, false), a2; case 1: - return a = Oa(a.type, true), a; + return a2 = Oa(a2.type, true), a2; default: return ""; } } -function Qa(a) { - if (null == a) return null; - if ("function" === typeof a) return a.displayName || a.name || null; - if ("string" === typeof a) return a; - switch (a) { +function Qa(a2) { + if (null == a2) return null; + if ("function" === typeof a2) return a2.displayName || a2.name || null; + if ("string" === typeof a2) return a2; + switch (a2) { case ya: return "Fragment"; case wa: @@ -825,45 +825,45 @@ function Qa(a) { case Fa: return "SuspenseList"; } - if ("object" === typeof a) switch (a.$$typeof) { + if ("object" === typeof a2) switch (a2.$$typeof) { case Ca: - return (a.displayName || "Context") + ".Consumer"; + return (a2.displayName || "Context") + ".Consumer"; case Ba: - return (a._context.displayName || "Context") + ".Provider"; + return (a2._context.displayName || "Context") + ".Provider"; case Da: - var b = a.render; - a = a.displayName; - a || (a = b.displayName || b.name || "", a = "" !== a ? "ForwardRef(" + a + ")" : "ForwardRef"); - return a; + var b2 = a2.render; + a2 = a2.displayName; + a2 || (a2 = b2.displayName || b2.name || "", a2 = "" !== a2 ? "ForwardRef(" + a2 + ")" : "ForwardRef"); + return a2; case Ga: - return b = a.displayName || null, null !== b ? b : Qa(a.type) || "Memo"; + return b2 = a2.displayName || null, null !== b2 ? b2 : Qa(a2.type) || "Memo"; case Ha: - b = a._payload; - a = a._init; + b2 = a2._payload; + a2 = a2._init; try { - return Qa(a(b)); - } catch (c) { + return Qa(a2(b2)); + } catch (c2) { } } return null; } -function Ra(a) { - var b = a.type; - switch (a.tag) { +function Ra(a2) { + var b2 = a2.type; + switch (a2.tag) { case 24: return "Cache"; case 9: - return (b.displayName || "Context") + ".Consumer"; + return (b2.displayName || "Context") + ".Consumer"; case 10: - return (b._context.displayName || "Context") + ".Provider"; + return (b2._context.displayName || "Context") + ".Provider"; case 18: return "DehydratedFragment"; case 11: - return a = b.render, a = a.displayName || a.name || "", b.displayName || ("" !== a ? "ForwardRef(" + a + ")" : "ForwardRef"); + return a2 = b2.render, a2 = a2.displayName || a2.name || "", b2.displayName || ("" !== a2 ? "ForwardRef(" + a2 + ")" : "ForwardRef"); case 7: return "Fragment"; case 5: - return b; + return b2; case 4: return "Portal"; case 3: @@ -871,9 +871,9 @@ function Ra(a) { case 6: return "Text"; case 16: - return Qa(b); + return Qa(b2); case 8: - return b === za ? "StrictMode" : "Mode"; + return b2 === za ? "StrictMode" : "Mode"; case 22: return "Offscreen"; case 12: @@ -892,167 +892,167 @@ function Ra(a) { case 2: case 14: case 15: - if ("function" === typeof b) return b.displayName || b.name || null; - if ("string" === typeof b) return b; + if ("function" === typeof b2) return b2.displayName || b2.name || null; + if ("string" === typeof b2) return b2; } return null; } -function Sa(a) { - switch (typeof a) { +function Sa(a2) { + switch (typeof a2) { case "boolean": case "number": case "string": case "undefined": - return a; + return a2; case "object": - return a; + return a2; default: return ""; } } -function Ta(a) { - var b = a.type; - return (a = a.nodeName) && "input" === a.toLowerCase() && ("checkbox" === b || "radio" === b); +function Ta(a2) { + var b2 = a2.type; + return (a2 = a2.nodeName) && "input" === a2.toLowerCase() && ("checkbox" === b2 || "radio" === b2); } -function Ua(a) { - var b = Ta(a) ? "checked" : "value", c = Object.getOwnPropertyDescriptor(a.constructor.prototype, b), d = "" + a[b]; - if (!a.hasOwnProperty(b) && "undefined" !== typeof c && "function" === typeof c.get && "function" === typeof c.set) { - var e = c.get, f2 = c.set; - Object.defineProperty(a, b, { configurable: true, get: function() { - return e.call(this); - }, set: function(a2) { - d = "" + a2; - f2.call(this, a2); +function Ua(a2) { + var b2 = Ta(a2) ? "checked" : "value", c2 = Object.getOwnPropertyDescriptor(a2.constructor.prototype, b2), d2 = "" + a2[b2]; + if (!a2.hasOwnProperty(b2) && "undefined" !== typeof c2 && "function" === typeof c2.get && "function" === typeof c2.set) { + var e2 = c2.get, f2 = c2.set; + Object.defineProperty(a2, b2, { configurable: true, get: function() { + return e2.call(this); + }, set: function(a3) { + d2 = "" + a3; + f2.call(this, a3); } }); - Object.defineProperty(a, b, { enumerable: c.enumerable }); + Object.defineProperty(a2, b2, { enumerable: c2.enumerable }); return { getValue: function() { - return d; - }, setValue: function(a2) { - d = "" + a2; + return d2; + }, setValue: function(a3) { + d2 = "" + a3; }, stopTracking: function() { - a._valueTracker = null; - delete a[b]; + a2._valueTracker = null; + delete a2[b2]; } }; } } -function Va(a) { - a._valueTracker || (a._valueTracker = Ua(a)); +function Va(a2) { + a2._valueTracker || (a2._valueTracker = Ua(a2)); } -function Wa(a) { - if (!a) return false; - var b = a._valueTracker; - if (!b) return true; - var c = b.getValue(); - var d = ""; - a && (d = Ta(a) ? a.checked ? "true" : "false" : a.value); - a = d; - return a !== c ? (b.setValue(a), true) : false; +function Wa(a2) { + if (!a2) return false; + var b2 = a2._valueTracker; + if (!b2) return true; + var c2 = b2.getValue(); + var d2 = ""; + a2 && (d2 = Ta(a2) ? a2.checked ? "true" : "false" : a2.value); + a2 = d2; + return a2 !== c2 ? (b2.setValue(a2), true) : false; } -function Xa(a) { - a = a || ("undefined" !== typeof document ? document : void 0); - if ("undefined" === typeof a) return null; +function Xa(a2) { + a2 = a2 || ("undefined" !== typeof document ? document : void 0); + if ("undefined" === typeof a2) return null; try { - return a.activeElement || a.body; - } catch (b) { - return a.body; - } -} -function Ya(a, b) { - var c = b.checked; - return A({}, b, { defaultChecked: void 0, defaultValue: void 0, value: void 0, checked: null != c ? c : a._wrapperState.initialChecked }); -} -function Za(a, b) { - var c = null == b.defaultValue ? "" : b.defaultValue, d = null != b.checked ? b.checked : b.defaultChecked; - c = Sa(null != b.value ? b.value : c); - a._wrapperState = { initialChecked: d, initialValue: c, controlled: "checkbox" === b.type || "radio" === b.type ? null != b.checked : null != b.value }; -} -function ab(a, b) { - b = b.checked; - null != b && ta(a, "checked", b, false); -} -function bb(a, b) { - ab(a, b); - var c = Sa(b.value), d = b.type; - if (null != c) if ("number" === d) { - if (0 === c && "" === a.value || a.value != c) a.value = "" + c; - } else a.value !== "" + c && (a.value = "" + c); - else if ("submit" === d || "reset" === d) { - a.removeAttribute("value"); - return; + return a2.activeElement || a2.body; + } catch (b2) { + return a2.body; } - b.hasOwnProperty("value") ? cb(a, b.type, c) : b.hasOwnProperty("defaultValue") && cb(a, b.type, Sa(b.defaultValue)); - null == b.checked && null != b.defaultChecked && (a.defaultChecked = !!b.defaultChecked); } -function db(a, b, c) { - if (b.hasOwnProperty("value") || b.hasOwnProperty("defaultValue")) { - var d = b.type; - if (!("submit" !== d && "reset" !== d || void 0 !== b.value && null !== b.value)) return; - b = "" + a._wrapperState.initialValue; - c || b === a.value || (a.value = b); - a.defaultValue = b; +function Ya(a2, b2) { + var c2 = b2.checked; + return A$1({}, b2, { defaultChecked: void 0, defaultValue: void 0, value: void 0, checked: null != c2 ? c2 : a2._wrapperState.initialChecked }); +} +function Za(a2, b2) { + var c2 = null == b2.defaultValue ? "" : b2.defaultValue, d2 = null != b2.checked ? b2.checked : b2.defaultChecked; + c2 = Sa(null != b2.value ? b2.value : c2); + a2._wrapperState = { initialChecked: d2, initialValue: c2, controlled: "checkbox" === b2.type || "radio" === b2.type ? null != b2.checked : null != b2.value }; +} +function ab(a2, b2) { + b2 = b2.checked; + null != b2 && ta(a2, "checked", b2, false); +} +function bb(a2, b2) { + ab(a2, b2); + var c2 = Sa(b2.value), d2 = b2.type; + if (null != c2) if ("number" === d2) { + if (0 === c2 && "" === a2.value || a2.value != c2) a2.value = "" + c2; + } else a2.value !== "" + c2 && (a2.value = "" + c2); + else if ("submit" === d2 || "reset" === d2) { + a2.removeAttribute("value"); + return; } - c = a.name; - "" !== c && (a.name = ""); - a.defaultChecked = !!a._wrapperState.initialChecked; - "" !== c && (a.name = c); + b2.hasOwnProperty("value") ? cb(a2, b2.type, c2) : b2.hasOwnProperty("defaultValue") && cb(a2, b2.type, Sa(b2.defaultValue)); + null == b2.checked && null != b2.defaultChecked && (a2.defaultChecked = !!b2.defaultChecked); +} +function db(a2, b2, c2) { + if (b2.hasOwnProperty("value") || b2.hasOwnProperty("defaultValue")) { + var d2 = b2.type; + if (!("submit" !== d2 && "reset" !== d2 || void 0 !== b2.value && null !== b2.value)) return; + b2 = "" + a2._wrapperState.initialValue; + c2 || b2 === a2.value || (a2.value = b2); + a2.defaultValue = b2; + } + c2 = a2.name; + "" !== c2 && (a2.name = ""); + a2.defaultChecked = !!a2._wrapperState.initialChecked; + "" !== c2 && (a2.name = c2); } -function cb(a, b, c) { - if ("number" !== b || Xa(a.ownerDocument) !== a) null == c ? a.defaultValue = "" + a._wrapperState.initialValue : a.defaultValue !== "" + c && (a.defaultValue = "" + c); +function cb(a2, b2, c2) { + if ("number" !== b2 || Xa(a2.ownerDocument) !== a2) null == c2 ? a2.defaultValue = "" + a2._wrapperState.initialValue : a2.defaultValue !== "" + c2 && (a2.defaultValue = "" + c2); } var eb = Array.isArray; -function fb(a, b, c, d) { - a = a.options; - if (b) { - b = {}; - for (var e = 0; e < c.length; e++) b["$" + c[e]] = true; - for (c = 0; c < a.length; c++) e = b.hasOwnProperty("$" + a[c].value), a[c].selected !== e && (a[c].selected = e), e && d && (a[c].defaultSelected = true); +function fb(a2, b2, c2, d2) { + a2 = a2.options; + if (b2) { + b2 = {}; + for (var e2 = 0; e2 < c2.length; e2++) b2["$" + c2[e2]] = true; + for (c2 = 0; c2 < a2.length; c2++) e2 = b2.hasOwnProperty("$" + a2[c2].value), a2[c2].selected !== e2 && (a2[c2].selected = e2), e2 && d2 && (a2[c2].defaultSelected = true); } else { - c = "" + Sa(c); - b = null; - for (e = 0; e < a.length; e++) { - if (a[e].value === c) { - a[e].selected = true; - d && (a[e].defaultSelected = true); + c2 = "" + Sa(c2); + b2 = null; + for (e2 = 0; e2 < a2.length; e2++) { + if (a2[e2].value === c2) { + a2[e2].selected = true; + d2 && (a2[e2].defaultSelected = true); return; } - null !== b || a[e].disabled || (b = a[e]); + null !== b2 || a2[e2].disabled || (b2 = a2[e2]); } - null !== b && (b.selected = true); + null !== b2 && (b2.selected = true); } } -function gb(a, b) { - if (null != b.dangerouslySetInnerHTML) throw Error(p(91)); - return A({}, b, { value: void 0, defaultValue: void 0, children: "" + a._wrapperState.initialValue }); +function gb(a2, b2) { + if (null != b2.dangerouslySetInnerHTML) throw Error(p$1(91)); + return A$1({}, b2, { value: void 0, defaultValue: void 0, children: "" + a2._wrapperState.initialValue }); } -function hb(a, b) { - var c = b.value; - if (null == c) { - c = b.children; - b = b.defaultValue; - if (null != c) { - if (null != b) throw Error(p(92)); - if (eb(c)) { - if (1 < c.length) throw Error(p(93)); - c = c[0]; +function hb(a2, b2) { + var c2 = b2.value; + if (null == c2) { + c2 = b2.children; + b2 = b2.defaultValue; + if (null != c2) { + if (null != b2) throw Error(p$1(92)); + if (eb(c2)) { + if (1 < c2.length) throw Error(p$1(93)); + c2 = c2[0]; } - b = c; + b2 = c2; } - null == b && (b = ""); - c = b; + null == b2 && (b2 = ""); + c2 = b2; } - a._wrapperState = { initialValue: Sa(c) }; + a2._wrapperState = { initialValue: Sa(c2) }; } -function ib(a, b) { - var c = Sa(b.value), d = Sa(b.defaultValue); - null != c && (c = "" + c, c !== a.value && (a.value = c), null == b.defaultValue && a.defaultValue !== c && (a.defaultValue = c)); - null != d && (a.defaultValue = "" + d); +function ib(a2, b2) { + var c2 = Sa(b2.value), d2 = Sa(b2.defaultValue); + null != c2 && (c2 = "" + c2, c2 !== a2.value && (a2.value = c2), null == b2.defaultValue && a2.defaultValue !== c2 && (a2.defaultValue = c2)); + null != d2 && (a2.defaultValue = "" + d2); } -function jb(a) { - var b = a.textContent; - b === a._wrapperState.initialValue && "" !== b && null !== b && (a.value = b); +function jb(a2) { + var b2 = a2.textContent; + b2 === a2._wrapperState.initialValue && "" !== b2 && null !== b2 && (a2.value = b2); } -function kb(a) { - switch (a) { +function kb(a2) { + switch (a2) { case "svg": return "http://www.w3.org/2000/svg"; case "math": @@ -1061,33 +1061,33 @@ function kb(a) { return "http://www.w3.org/1999/xhtml"; } } -function lb(a, b) { - return null == a || "http://www.w3.org/1999/xhtml" === a ? kb(b) : "http://www.w3.org/2000/svg" === a && "foreignObject" === b ? "http://www.w3.org/1999/xhtml" : a; +function lb(a2, b2) { + return null == a2 || "http://www.w3.org/1999/xhtml" === a2 ? kb(b2) : "http://www.w3.org/2000/svg" === a2 && "foreignObject" === b2 ? "http://www.w3.org/1999/xhtml" : a2; } -var mb, nb = function(a) { - return "undefined" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function(b, c, d, e) { +var mb, nb = function(a2) { + return "undefined" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function(b2, c2, d2, e2) { MSApp.execUnsafeLocalFunction(function() { - return a(b, c, d, e); + return a2(b2, c2, d2, e2); }); - } : a; -}(function(a, b) { - if ("http://www.w3.org/2000/svg" !== a.namespaceURI || "innerHTML" in a) a.innerHTML = b; + } : a2; +}(function(a2, b2) { + if ("http://www.w3.org/2000/svg" !== a2.namespaceURI || "innerHTML" in a2) a2.innerHTML = b2; else { mb = mb || document.createElement("div"); - mb.innerHTML = "" + b.valueOf().toString() + ""; - for (b = mb.firstChild; a.firstChild; ) a.removeChild(a.firstChild); - for (; b.firstChild; ) a.appendChild(b.firstChild); + mb.innerHTML = "" + b2.valueOf().toString() + ""; + for (b2 = mb.firstChild; a2.firstChild; ) a2.removeChild(a2.firstChild); + for (; b2.firstChild; ) a2.appendChild(b2.firstChild); } }); -function ob(a, b) { - if (b) { - var c = a.firstChild; - if (c && c === a.lastChild && 3 === c.nodeType) { - c.nodeValue = b; +function ob(a2, b2) { + if (b2) { + var c2 = a2.firstChild; + if (c2 && c2 === a2.lastChild && 3 === c2.nodeType) { + c2.nodeValue = b2; return; } } - a.textContent = b; + a2.textContent = b2; } var pb = { animationIterationCount: true, @@ -1134,37 +1134,37 @@ var pb = { strokeOpacity: true, strokeWidth: true }, qb = ["Webkit", "ms", "Moz", "O"]; -Object.keys(pb).forEach(function(a) { - qb.forEach(function(b) { - b = b + a.charAt(0).toUpperCase() + a.substring(1); - pb[b] = pb[a]; +Object.keys(pb).forEach(function(a2) { + qb.forEach(function(b2) { + b2 = b2 + a2.charAt(0).toUpperCase() + a2.substring(1); + pb[b2] = pb[a2]; }); }); -function rb(a, b, c) { - return null == b || "boolean" === typeof b || "" === b ? "" : c || "number" !== typeof b || 0 === b || pb.hasOwnProperty(a) && pb[a] ? ("" + b).trim() : b + "px"; +function rb(a2, b2, c2) { + return null == b2 || "boolean" === typeof b2 || "" === b2 ? "" : c2 || "number" !== typeof b2 || 0 === b2 || pb.hasOwnProperty(a2) && pb[a2] ? ("" + b2).trim() : b2 + "px"; } -function sb(a, b) { - a = a.style; - for (var c in b) if (b.hasOwnProperty(c)) { - var d = 0 === c.indexOf("--"), e = rb(c, b[c], d); - "float" === c && (c = "cssFloat"); - d ? a.setProperty(c, e) : a[c] = e; +function sb(a2, b2) { + a2 = a2.style; + for (var c2 in b2) if (b2.hasOwnProperty(c2)) { + var d2 = 0 === c2.indexOf("--"), e2 = rb(c2, b2[c2], d2); + "float" === c2 && (c2 = "cssFloat"); + d2 ? a2.setProperty(c2, e2) : a2[c2] = e2; } } -var tb = A({ menuitem: true }, { area: true, base: true, br: true, col: true, embed: true, hr: true, img: true, input: true, keygen: true, link: true, meta: true, param: true, source: true, track: true, wbr: true }); -function ub(a, b) { - if (b) { - if (tb[a] && (null != b.children || null != b.dangerouslySetInnerHTML)) throw Error(p(137, a)); - if (null != b.dangerouslySetInnerHTML) { - if (null != b.children) throw Error(p(60)); - if ("object" !== typeof b.dangerouslySetInnerHTML || !("__html" in b.dangerouslySetInnerHTML)) throw Error(p(61)); +var tb = A$1({ menuitem: true }, { area: true, base: true, br: true, col: true, embed: true, hr: true, img: true, input: true, keygen: true, link: true, meta: true, param: true, source: true, track: true, wbr: true }); +function ub(a2, b2) { + if (b2) { + if (tb[a2] && (null != b2.children || null != b2.dangerouslySetInnerHTML)) throw Error(p$1(137, a2)); + if (null != b2.dangerouslySetInnerHTML) { + if (null != b2.children) throw Error(p$1(60)); + if ("object" !== typeof b2.dangerouslySetInnerHTML || !("__html" in b2.dangerouslySetInnerHTML)) throw Error(p$1(61)); } - if (null != b.style && "object" !== typeof b.style) throw Error(p(62)); + if (null != b2.style && "object" !== typeof b2.style) throw Error(p$1(62)); } } -function vb(a, b) { - if (-1 === a.indexOf("-")) return "string" === typeof b.is; - switch (a) { +function vb(a2, b2) { + if (-1 === a2.indexOf("-")) return "string" === typeof b2.is; + switch (a2) { case "annotation-xml": case "color-profile": case "font-face": @@ -1179,52 +1179,52 @@ function vb(a, b) { } } var wb = null; -function xb(a) { - a = a.target || a.srcElement || window; - a.correspondingUseElement && (a = a.correspondingUseElement); - return 3 === a.nodeType ? a.parentNode : a; +function xb(a2) { + a2 = a2.target || a2.srcElement || window; + a2.correspondingUseElement && (a2 = a2.correspondingUseElement); + return 3 === a2.nodeType ? a2.parentNode : a2; } var yb = null, zb = null, Ab = null; -function Bb(a) { - if (a = Cb(a)) { - if ("function" !== typeof yb) throw Error(p(280)); - var b = a.stateNode; - b && (b = Db(b), yb(a.stateNode, a.type, b)); +function Bb(a2) { + if (a2 = Cb(a2)) { + if ("function" !== typeof yb) throw Error(p$1(280)); + var b2 = a2.stateNode; + b2 && (b2 = Db(b2), yb(a2.stateNode, a2.type, b2)); } } -function Eb(a) { - zb ? Ab ? Ab.push(a) : Ab = [a] : zb = a; +function Eb(a2) { + zb ? Ab ? Ab.push(a2) : Ab = [a2] : zb = a2; } function Fb() { if (zb) { - var a = zb, b = Ab; + var a2 = zb, b2 = Ab; Ab = zb = null; - Bb(a); - if (b) for (a = 0; a < b.length; a++) Bb(b[a]); + Bb(a2); + if (b2) for (a2 = 0; a2 < b2.length; a2++) Bb(b2[a2]); } } -function Gb(a, b) { - return a(b); +function Gb(a2, b2) { + return a2(b2); } function Hb() { } var Ib = false; -function Jb(a, b, c) { - if (Ib) return a(b, c); +function Jb(a2, b2, c2) { + if (Ib) return a2(b2, c2); Ib = true; try { - return Gb(a, b, c); + return Gb(a2, b2, c2); } finally { if (Ib = false, null !== zb || null !== Ab) Hb(), Fb(); } } -function Kb(a, b) { - var c = a.stateNode; - if (null === c) return null; - var d = Db(c); - if (null === d) return null; - c = d[b]; - a: switch (b) { +function Kb(a2, b2) { + var c2 = a2.stateNode; + if (null === c2) return null; + var d2 = Db(c2); + if (null === d2) return null; + c2 = d2[b2]; + a: switch (b2) { case "onClick": case "onClickCapture": case "onDoubleClick": @@ -1236,15 +1236,15 @@ function Kb(a, b) { case "onMouseUp": case "onMouseUpCapture": case "onMouseEnter": - (d = !d.disabled) || (a = a.type, d = !("button" === a || "input" === a || "select" === a || "textarea" === a)); - a = !d; + (d2 = !d2.disabled) || (a2 = a2.type, d2 = !("button" === a2 || "input" === a2 || "select" === a2 || "textarea" === a2)); + a2 = !d2; break a; default: - a = false; + a2 = false; } - if (a) return null; - if (c && "function" !== typeof c) throw Error(p(231, b, typeof c)); - return c; + if (a2) return null; + if (c2 && "function" !== typeof c2) throw Error(p$1(231, b2, typeof c2)); + return c2; } var Lb = false; if (ia) try { @@ -1254,155 +1254,155 @@ if (ia) try { } }); window.addEventListener("test", Mb, Mb); window.removeEventListener("test", Mb, Mb); -} catch (a) { +} catch (a2) { Lb = false; } -function Nb(a, b, c, d, e, f2, g, h, k2) { +function Nb(a2, b2, c2, d2, e2, f2, g2, h2, k2) { var l2 = Array.prototype.slice.call(arguments, 3); try { - b.apply(c, l2); + b2.apply(c2, l2); } catch (m2) { this.onError(m2); } } -var Ob = false, Pb = null, Qb = false, Rb = null, Sb = { onError: function(a) { +var Ob = false, Pb = null, Qb = false, Rb = null, Sb = { onError: function(a2) { Ob = true; - Pb = a; + Pb = a2; } }; -function Tb(a, b, c, d, e, f2, g, h, k2) { +function Tb(a2, b2, c2, d2, e2, f2, g2, h2, k2) { Ob = false; Pb = null; Nb.apply(Sb, arguments); } -function Ub(a, b, c, d, e, f2, g, h, k2) { +function Ub(a2, b2, c2, d2, e2, f2, g2, h2, k2) { Tb.apply(this, arguments); if (Ob) { if (Ob) { var l2 = Pb; Ob = false; Pb = null; - } else throw Error(p(198)); + } else throw Error(p$1(198)); Qb || (Qb = true, Rb = l2); } } -function Vb(a) { - var b = a, c = a; - if (a.alternate) for (; b.return; ) b = b.return; +function Vb(a2) { + var b2 = a2, c2 = a2; + if (a2.alternate) for (; b2.return; ) b2 = b2.return; else { - a = b; + a2 = b2; do - b = a, 0 !== (b.flags & 4098) && (c = b.return), a = b.return; - while (a); + b2 = a2, 0 !== (b2.flags & 4098) && (c2 = b2.return), a2 = b2.return; + while (a2); } - return 3 === b.tag ? c : null; + return 3 === b2.tag ? c2 : null; } -function Wb(a) { - if (13 === a.tag) { - var b = a.memoizedState; - null === b && (a = a.alternate, null !== a && (b = a.memoizedState)); - if (null !== b) return b.dehydrated; +function Wb(a2) { + if (13 === a2.tag) { + var b2 = a2.memoizedState; + null === b2 && (a2 = a2.alternate, null !== a2 && (b2 = a2.memoizedState)); + if (null !== b2) return b2.dehydrated; } return null; } -function Xb(a) { - if (Vb(a) !== a) throw Error(p(188)); +function Xb(a2) { + if (Vb(a2) !== a2) throw Error(p$1(188)); } -function Yb(a) { - var b = a.alternate; - if (!b) { - b = Vb(a); - if (null === b) throw Error(p(188)); - return b !== a ? null : a; - } - for (var c = a, d = b; ; ) { - var e = c.return; - if (null === e) break; - var f2 = e.alternate; +function Yb(a2) { + var b2 = a2.alternate; + if (!b2) { + b2 = Vb(a2); + if (null === b2) throw Error(p$1(188)); + return b2 !== a2 ? null : a2; + } + for (var c2 = a2, d2 = b2; ; ) { + var e2 = c2.return; + if (null === e2) break; + var f2 = e2.alternate; if (null === f2) { - d = e.return; - if (null !== d) { - c = d; + d2 = e2.return; + if (null !== d2) { + c2 = d2; continue; } break; } - if (e.child === f2.child) { - for (f2 = e.child; f2; ) { - if (f2 === c) return Xb(e), a; - if (f2 === d) return Xb(e), b; + if (e2.child === f2.child) { + for (f2 = e2.child; f2; ) { + if (f2 === c2) return Xb(e2), a2; + if (f2 === d2) return Xb(e2), b2; f2 = f2.sibling; } - throw Error(p(188)); + throw Error(p$1(188)); } - if (c.return !== d.return) c = e, d = f2; + if (c2.return !== d2.return) c2 = e2, d2 = f2; else { - for (var g = false, h = e.child; h; ) { - if (h === c) { - g = true; - c = e; - d = f2; + for (var g2 = false, h2 = e2.child; h2; ) { + if (h2 === c2) { + g2 = true; + c2 = e2; + d2 = f2; break; } - if (h === d) { - g = true; - d = e; - c = f2; + if (h2 === d2) { + g2 = true; + d2 = e2; + c2 = f2; break; } - h = h.sibling; + h2 = h2.sibling; } - if (!g) { - for (h = f2.child; h; ) { - if (h === c) { - g = true; - c = f2; - d = e; + if (!g2) { + for (h2 = f2.child; h2; ) { + if (h2 === c2) { + g2 = true; + c2 = f2; + d2 = e2; break; } - if (h === d) { - g = true; - d = f2; - c = e; + if (h2 === d2) { + g2 = true; + d2 = f2; + c2 = e2; break; } - h = h.sibling; + h2 = h2.sibling; } - if (!g) throw Error(p(189)); + if (!g2) throw Error(p$1(189)); } } - if (c.alternate !== d) throw Error(p(190)); + if (c2.alternate !== d2) throw Error(p$1(190)); } - if (3 !== c.tag) throw Error(p(188)); - return c.stateNode.current === c ? a : b; + if (3 !== c2.tag) throw Error(p$1(188)); + return c2.stateNode.current === c2 ? a2 : b2; } -function Zb(a) { - a = Yb(a); - return null !== a ? $b(a) : null; +function Zb(a2) { + a2 = Yb(a2); + return null !== a2 ? $b(a2) : null; } -function $b(a) { - if (5 === a.tag || 6 === a.tag) return a; - for (a = a.child; null !== a; ) { - var b = $b(a); - if (null !== b) return b; - a = a.sibling; +function $b(a2) { + if (5 === a2.tag || 6 === a2.tag) return a2; + for (a2 = a2.child; null !== a2; ) { + var b2 = $b(a2); + if (null !== b2) return b2; + a2 = a2.sibling; } return null; } -var ac = ca.unstable_scheduleCallback, bc = ca.unstable_cancelCallback, cc = ca.unstable_shouldYield, dc = ca.unstable_requestPaint, B = ca.unstable_now, ec = ca.unstable_getCurrentPriorityLevel, fc = ca.unstable_ImmediatePriority, gc = ca.unstable_UserBlockingPriority, hc = ca.unstable_NormalPriority, ic = ca.unstable_LowPriority, jc = ca.unstable_IdlePriority, kc = null, lc = null; -function mc(a) { +var ac = ca.unstable_scheduleCallback, bc = ca.unstable_cancelCallback, cc = ca.unstable_shouldYield, dc = ca.unstable_requestPaint, B$1 = ca.unstable_now, ec = ca.unstable_getCurrentPriorityLevel, fc = ca.unstable_ImmediatePriority, gc = ca.unstable_UserBlockingPriority, hc = ca.unstable_NormalPriority, ic = ca.unstable_LowPriority, jc = ca.unstable_IdlePriority, kc = null, lc = null; +function mc(a2) { if (lc && "function" === typeof lc.onCommitFiberRoot) try { - lc.onCommitFiberRoot(kc, a, void 0, 128 === (a.current.flags & 128)); - } catch (b) { + lc.onCommitFiberRoot(kc, a2, void 0, 128 === (a2.current.flags & 128)); + } catch (b2) { } } var oc = Math.clz32 ? Math.clz32 : nc, pc = Math.log, qc = Math.LN2; -function nc(a) { - a >>>= 0; - return 0 === a ? 32 : 31 - (pc(a) / qc | 0) | 0; +function nc(a2) { + a2 >>>= 0; + return 0 === a2 ? 32 : 31 - (pc(a2) / qc | 0) | 0; } var rc = 64, sc = 4194304; -function tc(a) { - switch (a & -a) { +function tc(a2) { + switch (a2 & -a2) { case 1: return 1; case 2: @@ -1431,13 +1431,13 @@ function tc(a) { case 524288: case 1048576: case 2097152: - return a & 4194240; + return a2 & 4194240; case 4194304: case 8388608: case 16777216: case 33554432: case 67108864: - return a & 130023424; + return a2 & 130023424; case 134217728: return 134217728; case 268435456: @@ -1447,30 +1447,30 @@ function tc(a) { case 1073741824: return 1073741824; default: - return a; - } -} -function uc(a, b) { - var c = a.pendingLanes; - if (0 === c) return 0; - var d = 0, e = a.suspendedLanes, f2 = a.pingedLanes, g = c & 268435455; - if (0 !== g) { - var h = g & ~e; - 0 !== h ? d = tc(h) : (f2 &= g, 0 !== f2 && (d = tc(f2))); - } else g = c & ~e, 0 !== g ? d = tc(g) : 0 !== f2 && (d = tc(f2)); - if (0 === d) return 0; - if (0 !== b && b !== d && 0 === (b & e) && (e = d & -d, f2 = b & -b, e >= f2 || 16 === e && 0 !== (f2 & 4194240))) return b; - 0 !== (d & 4) && (d |= c & 16); - b = a.entangledLanes; - if (0 !== b) for (a = a.entanglements, b &= d; 0 < b; ) c = 31 - oc(b), e = 1 << c, d |= a[c], b &= ~e; - return d; -} -function vc(a, b) { - switch (a) { + return a2; + } +} +function uc(a2, b2) { + var c2 = a2.pendingLanes; + if (0 === c2) return 0; + var d2 = 0, e2 = a2.suspendedLanes, f2 = a2.pingedLanes, g2 = c2 & 268435455; + if (0 !== g2) { + var h2 = g2 & ~e2; + 0 !== h2 ? d2 = tc(h2) : (f2 &= g2, 0 !== f2 && (d2 = tc(f2))); + } else g2 = c2 & ~e2, 0 !== g2 ? d2 = tc(g2) : 0 !== f2 && (d2 = tc(f2)); + if (0 === d2) return 0; + if (0 !== b2 && b2 !== d2 && 0 === (b2 & e2) && (e2 = d2 & -d2, f2 = b2 & -b2, e2 >= f2 || 16 === e2 && 0 !== (f2 & 4194240))) return b2; + 0 !== (d2 & 4) && (d2 |= c2 & 16); + b2 = a2.entangledLanes; + if (0 !== b2) for (a2 = a2.entanglements, b2 &= d2; 0 < b2; ) c2 = 31 - oc(b2), e2 = 1 << c2, d2 |= a2[c2], b2 &= ~e2; + return d2; +} +function vc(a2, b2) { + switch (a2) { case 1: case 2: case 4: - return b + 250; + return b2 + 250; case 8: case 16: case 32: @@ -1490,7 +1490,7 @@ function vc(a, b) { case 524288: case 1048576: case 2097152: - return b + 5e3; + return b2 + 5e3; case 4194304: case 8388608: case 16777216: @@ -1506,70 +1506,70 @@ function vc(a, b) { return -1; } } -function wc(a, b) { - for (var c = a.suspendedLanes, d = a.pingedLanes, e = a.expirationTimes, f2 = a.pendingLanes; 0 < f2; ) { - var g = 31 - oc(f2), h = 1 << g, k2 = e[g]; +function wc(a2, b2) { + for (var c2 = a2.suspendedLanes, d2 = a2.pingedLanes, e2 = a2.expirationTimes, f2 = a2.pendingLanes; 0 < f2; ) { + var g2 = 31 - oc(f2), h2 = 1 << g2, k2 = e2[g2]; if (-1 === k2) { - if (0 === (h & c) || 0 !== (h & d)) e[g] = vc(h, b); - } else k2 <= b && (a.expiredLanes |= h); - f2 &= ~h; + if (0 === (h2 & c2) || 0 !== (h2 & d2)) e2[g2] = vc(h2, b2); + } else k2 <= b2 && (a2.expiredLanes |= h2); + f2 &= ~h2; } } -function xc(a) { - a = a.pendingLanes & -1073741825; - return 0 !== a ? a : a & 1073741824 ? 1073741824 : 0; +function xc(a2) { + a2 = a2.pendingLanes & -1073741825; + return 0 !== a2 ? a2 : a2 & 1073741824 ? 1073741824 : 0; } function yc() { - var a = rc; + var a2 = rc; rc <<= 1; 0 === (rc & 4194240) && (rc = 64); - return a; + return a2; } -function zc(a) { - for (var b = [], c = 0; 31 > c; c++) b.push(a); - return b; +function zc(a2) { + for (var b2 = [], c2 = 0; 31 > c2; c2++) b2.push(a2); + return b2; +} +function Ac(a2, b2, c2) { + a2.pendingLanes |= b2; + 536870912 !== b2 && (a2.suspendedLanes = 0, a2.pingedLanes = 0); + a2 = a2.eventTimes; + b2 = 31 - oc(b2); + a2[b2] = c2; +} +function Bc(a2, b2) { + var c2 = a2.pendingLanes & ~b2; + a2.pendingLanes = b2; + a2.suspendedLanes = 0; + a2.pingedLanes = 0; + a2.expiredLanes &= b2; + a2.mutableReadLanes &= b2; + a2.entangledLanes &= b2; + b2 = a2.entanglements; + var d2 = a2.eventTimes; + for (a2 = a2.expirationTimes; 0 < c2; ) { + var e2 = 31 - oc(c2), f2 = 1 << e2; + b2[e2] = 0; + d2[e2] = -1; + a2[e2] = -1; + c2 &= ~f2; + } } -function Ac(a, b, c) { - a.pendingLanes |= b; - 536870912 !== b && (a.suspendedLanes = 0, a.pingedLanes = 0); - a = a.eventTimes; - b = 31 - oc(b); - a[b] = c; -} -function Bc(a, b) { - var c = a.pendingLanes & ~b; - a.pendingLanes = b; - a.suspendedLanes = 0; - a.pingedLanes = 0; - a.expiredLanes &= b; - a.mutableReadLanes &= b; - a.entangledLanes &= b; - b = a.entanglements; - var d = a.eventTimes; - for (a = a.expirationTimes; 0 < c; ) { - var e = 31 - oc(c), f2 = 1 << e; - b[e] = 0; - d[e] = -1; - a[e] = -1; - c &= ~f2; - } -} -function Cc(a, b) { - var c = a.entangledLanes |= b; - for (a = a.entanglements; c; ) { - var d = 31 - oc(c), e = 1 << d; - e & b | a[d] & b && (a[d] |= b); - c &= ~e; - } -} -var C = 0; -function Dc(a) { - a &= -a; - return 1 < a ? 4 < a ? 0 !== (a & 268435455) ? 16 : 536870912 : 4 : 1; +function Cc(a2, b2) { + var c2 = a2.entangledLanes |= b2; + for (a2 = a2.entanglements; c2; ) { + var d2 = 31 - oc(c2), e2 = 1 << d2; + e2 & b2 | a2[d2] & b2 && (a2[d2] |= b2); + c2 &= ~e2; + } +} +var C$1 = 0; +function Dc(a2) { + a2 &= -a2; + return 1 < a2 ? 4 < a2 ? 0 !== (a2 & 268435455) ? 16 : 536870912 : 4 : 1; } var Ec, Fc, Gc, Hc, Ic, Jc = false, Kc = [], Lc = null, Mc = null, Nc = null, Oc = /* @__PURE__ */ new Map(), Pc = /* @__PURE__ */ new Map(), Qc = [], Rc = "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "); -function Sc(a, b) { - switch (a) { +function Sc(a2, b2) { + switch (a2) { case "focusin": case "focusout": Lc = null; @@ -1584,75 +1584,75 @@ function Sc(a, b) { break; case "pointerover": case "pointerout": - Oc.delete(b.pointerId); + Oc.delete(b2.pointerId); break; case "gotpointercapture": case "lostpointercapture": - Pc.delete(b.pointerId); + Pc.delete(b2.pointerId); } } -function Tc(a, b, c, d, e, f2) { - if (null === a || a.nativeEvent !== f2) return a = { blockedOn: b, domEventName: c, eventSystemFlags: d, nativeEvent: f2, targetContainers: [e] }, null !== b && (b = Cb(b), null !== b && Fc(b)), a; - a.eventSystemFlags |= d; - b = a.targetContainers; - null !== e && -1 === b.indexOf(e) && b.push(e); - return a; +function Tc(a2, b2, c2, d2, e2, f2) { + if (null === a2 || a2.nativeEvent !== f2) return a2 = { blockedOn: b2, domEventName: c2, eventSystemFlags: d2, nativeEvent: f2, targetContainers: [e2] }, null !== b2 && (b2 = Cb(b2), null !== b2 && Fc(b2)), a2; + a2.eventSystemFlags |= d2; + b2 = a2.targetContainers; + null !== e2 && -1 === b2.indexOf(e2) && b2.push(e2); + return a2; } -function Uc(a, b, c, d, e) { - switch (b) { +function Uc(a2, b2, c2, d2, e2) { + switch (b2) { case "focusin": - return Lc = Tc(Lc, a, b, c, d, e), true; + return Lc = Tc(Lc, a2, b2, c2, d2, e2), true; case "dragenter": - return Mc = Tc(Mc, a, b, c, d, e), true; + return Mc = Tc(Mc, a2, b2, c2, d2, e2), true; case "mouseover": - return Nc = Tc(Nc, a, b, c, d, e), true; + return Nc = Tc(Nc, a2, b2, c2, d2, e2), true; case "pointerover": - var f2 = e.pointerId; - Oc.set(f2, Tc(Oc.get(f2) || null, a, b, c, d, e)); + var f2 = e2.pointerId; + Oc.set(f2, Tc(Oc.get(f2) || null, a2, b2, c2, d2, e2)); return true; case "gotpointercapture": - return f2 = e.pointerId, Pc.set(f2, Tc(Pc.get(f2) || null, a, b, c, d, e)), true; + return f2 = e2.pointerId, Pc.set(f2, Tc(Pc.get(f2) || null, a2, b2, c2, d2, e2)), true; } return false; } -function Vc(a) { - var b = Wc(a.target); - if (null !== b) { - var c = Vb(b); - if (null !== c) { - if (b = c.tag, 13 === b) { - if (b = Wb(c), null !== b) { - a.blockedOn = b; - Ic(a.priority, function() { - Gc(c); +function Vc(a2) { + var b2 = Wc(a2.target); + if (null !== b2) { + var c2 = Vb(b2); + if (null !== c2) { + if (b2 = c2.tag, 13 === b2) { + if (b2 = Wb(c2), null !== b2) { + a2.blockedOn = b2; + Ic(a2.priority, function() { + Gc(c2); }); return; } - } else if (3 === b && c.stateNode.current.memoizedState.isDehydrated) { - a.blockedOn = 3 === c.tag ? c.stateNode.containerInfo : null; + } else if (3 === b2 && c2.stateNode.current.memoizedState.isDehydrated) { + a2.blockedOn = 3 === c2.tag ? c2.stateNode.containerInfo : null; return; } } } - a.blockedOn = null; + a2.blockedOn = null; } -function Xc(a) { - if (null !== a.blockedOn) return false; - for (var b = a.targetContainers; 0 < b.length; ) { - var c = Yc(a.domEventName, a.eventSystemFlags, b[0], a.nativeEvent); - if (null === c) { - c = a.nativeEvent; - var d = new c.constructor(c.type, c); - wb = d; - c.target.dispatchEvent(d); +function Xc(a2) { + if (null !== a2.blockedOn) return false; + for (var b2 = a2.targetContainers; 0 < b2.length; ) { + var c2 = Yc(a2.domEventName, a2.eventSystemFlags, b2[0], a2.nativeEvent); + if (null === c2) { + c2 = a2.nativeEvent; + var d2 = new c2.constructor(c2.type, c2); + wb = d2; + c2.target.dispatchEvent(d2); wb = null; - } else return b = Cb(c), null !== b && Fc(b), a.blockedOn = c, false; - b.shift(); + } else return b2 = Cb(c2), null !== b2 && Fc(b2), a2.blockedOn = c2, false; + b2.shift(); } return true; } -function Zc(a, b, c) { - Xc(a) && c.delete(b); +function Zc(a2, b2, c2) { + Xc(a2) && c2.delete(b2); } function $c() { Jc = false; @@ -1662,84 +1662,84 @@ function $c() { Oc.forEach(Zc); Pc.forEach(Zc); } -function ad(a, b) { - a.blockedOn === b && (a.blockedOn = null, Jc || (Jc = true, ca.unstable_scheduleCallback(ca.unstable_NormalPriority, $c))); +function ad(a2, b2) { + a2.blockedOn === b2 && (a2.blockedOn = null, Jc || (Jc = true, ca.unstable_scheduleCallback(ca.unstable_NormalPriority, $c))); } -function bd(a) { - function b(b2) { - return ad(b2, a); +function bd(a2) { + function b2(b3) { + return ad(b3, a2); } if (0 < Kc.length) { - ad(Kc[0], a); - for (var c = 1; c < Kc.length; c++) { - var d = Kc[c]; - d.blockedOn === a && (d.blockedOn = null); + ad(Kc[0], a2); + for (var c2 = 1; c2 < Kc.length; c2++) { + var d2 = Kc[c2]; + d2.blockedOn === a2 && (d2.blockedOn = null); } } - null !== Lc && ad(Lc, a); - null !== Mc && ad(Mc, a); - null !== Nc && ad(Nc, a); - Oc.forEach(b); - Pc.forEach(b); - for (c = 0; c < Qc.length; c++) d = Qc[c], d.blockedOn === a && (d.blockedOn = null); - for (; 0 < Qc.length && (c = Qc[0], null === c.blockedOn); ) Vc(c), null === c.blockedOn && Qc.shift(); + null !== Lc && ad(Lc, a2); + null !== Mc && ad(Mc, a2); + null !== Nc && ad(Nc, a2); + Oc.forEach(b2); + Pc.forEach(b2); + for (c2 = 0; c2 < Qc.length; c2++) d2 = Qc[c2], d2.blockedOn === a2 && (d2.blockedOn = null); + for (; 0 < Qc.length && (c2 = Qc[0], null === c2.blockedOn); ) Vc(c2), null === c2.blockedOn && Qc.shift(); } var cd = ua.ReactCurrentBatchConfig, dd = true; -function ed(a, b, c, d) { - var e = C, f2 = cd.transition; +function ed(a2, b2, c2, d2) { + var e2 = C$1, f2 = cd.transition; cd.transition = null; try { - C = 1, fd(a, b, c, d); + C$1 = 1, fd(a2, b2, c2, d2); } finally { - C = e, cd.transition = f2; + C$1 = e2, cd.transition = f2; } } -function gd(a, b, c, d) { - var e = C, f2 = cd.transition; +function gd(a2, b2, c2, d2) { + var e2 = C$1, f2 = cd.transition; cd.transition = null; try { - C = 4, fd(a, b, c, d); + C$1 = 4, fd(a2, b2, c2, d2); } finally { - C = e, cd.transition = f2; + C$1 = e2, cd.transition = f2; } } -function fd(a, b, c, d) { +function fd(a2, b2, c2, d2) { if (dd) { - var e = Yc(a, b, c, d); - if (null === e) hd(a, b, d, id, c), Sc(a, d); - else if (Uc(e, a, b, c, d)) d.stopPropagation(); - else if (Sc(a, d), b & 4 && -1 < Rc.indexOf(a)) { - for (; null !== e; ) { - var f2 = Cb(e); + var e2 = Yc(a2, b2, c2, d2); + if (null === e2) hd(a2, b2, d2, id, c2), Sc(a2, d2); + else if (Uc(e2, a2, b2, c2, d2)) d2.stopPropagation(); + else if (Sc(a2, d2), b2 & 4 && -1 < Rc.indexOf(a2)) { + for (; null !== e2; ) { + var f2 = Cb(e2); null !== f2 && Ec(f2); - f2 = Yc(a, b, c, d); - null === f2 && hd(a, b, d, id, c); - if (f2 === e) break; - e = f2; + f2 = Yc(a2, b2, c2, d2); + null === f2 && hd(a2, b2, d2, id, c2); + if (f2 === e2) break; + e2 = f2; } - null !== e && d.stopPropagation(); - } else hd(a, b, d, null, c); + null !== e2 && d2.stopPropagation(); + } else hd(a2, b2, d2, null, c2); } } var id = null; -function Yc(a, b, c, d) { +function Yc(a2, b2, c2, d2) { id = null; - a = xb(d); - a = Wc(a); - if (null !== a) if (b = Vb(a), null === b) a = null; - else if (c = b.tag, 13 === c) { - a = Wb(b); - if (null !== a) return a; - a = null; - } else if (3 === c) { - if (b.stateNode.current.memoizedState.isDehydrated) return 3 === b.tag ? b.stateNode.containerInfo : null; - a = null; - } else b !== a && (a = null); - id = a; + a2 = xb(d2); + a2 = Wc(a2); + if (null !== a2) if (b2 = Vb(a2), null === b2) a2 = null; + else if (c2 = b2.tag, 13 === c2) { + a2 = Wb(b2); + if (null !== a2) return a2; + a2 = null; + } else if (3 === c2) { + if (b2.stateNode.current.memoizedState.isDehydrated) return 3 === b2.tag ? b2.stateNode.containerInfo : null; + a2 = null; + } else b2 !== a2 && (a2 = null); + id = a2; return null; } -function jd(a) { - switch (a) { +function jd(a2) { + switch (a2) { case "cancel": case "click": case "close": @@ -1833,17 +1833,17 @@ function jd(a) { var kd = null, ld = null, md = null; function nd() { if (md) return md; - var a, b = ld, c = b.length, d, e = "value" in kd ? kd.value : kd.textContent, f2 = e.length; - for (a = 0; a < c && b[a] === e[a]; a++) ; - var g = c - a; - for (d = 1; d <= g && b[c - d] === e[f2 - d]; d++) ; - return md = e.slice(a, 1 < d ? 1 - d : void 0); -} -function od(a) { - var b = a.keyCode; - "charCode" in a ? (a = a.charCode, 0 === a && 13 === b && (a = 13)) : a = b; - 10 === a && (a = 13); - return 32 <= a || 13 === a ? a : 0; + var a2, b2 = ld, c2 = b2.length, d2, e2 = "value" in kd ? kd.value : kd.textContent, f2 = e2.length; + for (a2 = 0; a2 < c2 && b2[a2] === e2[a2]; a2++) ; + var g2 = c2 - a2; + for (d2 = 1; d2 <= g2 && b2[c2 - d2] === e2[f2 - d2]; d2++) ; + return md = e2.slice(a2, 1 < d2 ? 1 - d2 : void 0); +} +function od(a2) { + var b2 = a2.keyCode; + "charCode" in a2 ? (a2 = a2.charCode, 0 === a2 && 13 === b2 && (a2 = 13)) : a2 = b2; + 10 === a2 && (a2 = 13); + return 32 <= a2 || 13 === a2 ? a2 : 0; } function pd() { return true; @@ -1851,43 +1851,43 @@ function pd() { function qd() { return false; } -function rd(a) { - function b(b2, d, e, f2, g) { - this._reactName = b2; - this._targetInst = e; - this.type = d; +function rd(a2) { + function b2(b3, d2, e2, f2, g2) { + this._reactName = b3; + this._targetInst = e2; + this.type = d2; this.nativeEvent = f2; - this.target = g; + this.target = g2; this.currentTarget = null; - for (var c in a) a.hasOwnProperty(c) && (b2 = a[c], this[c] = b2 ? b2(f2) : f2[c]); + for (var c2 in a2) a2.hasOwnProperty(c2) && (b3 = a2[c2], this[c2] = b3 ? b3(f2) : f2[c2]); this.isDefaultPrevented = (null != f2.defaultPrevented ? f2.defaultPrevented : false === f2.returnValue) ? pd : qd; this.isPropagationStopped = qd; return this; } - A(b.prototype, { preventDefault: function() { + A$1(b2.prototype, { preventDefault: function() { this.defaultPrevented = true; - var a2 = this.nativeEvent; - a2 && (a2.preventDefault ? a2.preventDefault() : "unknown" !== typeof a2.returnValue && (a2.returnValue = false), this.isDefaultPrevented = pd); + var a3 = this.nativeEvent; + a3 && (a3.preventDefault ? a3.preventDefault() : "unknown" !== typeof a3.returnValue && (a3.returnValue = false), this.isDefaultPrevented = pd); }, stopPropagation: function() { - var a2 = this.nativeEvent; - a2 && (a2.stopPropagation ? a2.stopPropagation() : "unknown" !== typeof a2.cancelBubble && (a2.cancelBubble = true), this.isPropagationStopped = pd); + var a3 = this.nativeEvent; + a3 && (a3.stopPropagation ? a3.stopPropagation() : "unknown" !== typeof a3.cancelBubble && (a3.cancelBubble = true), this.isPropagationStopped = pd); }, persist: function() { }, isPersistent: pd }); - return b; + return b2; } -var sd = { eventPhase: 0, bubbles: 0, cancelable: 0, timeStamp: function(a) { - return a.timeStamp || Date.now(); -}, defaultPrevented: 0, isTrusted: 0 }, td = rd(sd), ud = A({}, sd, { view: 0, detail: 0 }), vd = rd(ud), wd, xd, yd, Ad = A({}, ud, { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, getModifierState: zd, button: 0, buttons: 0, relatedTarget: function(a) { - return void 0 === a.relatedTarget ? a.fromElement === a.srcElement ? a.toElement : a.fromElement : a.relatedTarget; -}, movementX: function(a) { - if ("movementX" in a) return a.movementX; - a !== yd && (yd && "mousemove" === a.type ? (wd = a.screenX - yd.screenX, xd = a.screenY - yd.screenY) : xd = wd = 0, yd = a); +var sd = { eventPhase: 0, bubbles: 0, cancelable: 0, timeStamp: function(a2) { + return a2.timeStamp || Date.now(); +}, defaultPrevented: 0, isTrusted: 0 }, td = rd(sd), ud = A$1({}, sd, { view: 0, detail: 0 }), vd = rd(ud), wd, xd, yd, Ad = A$1({}, ud, { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, getModifierState: zd, button: 0, buttons: 0, relatedTarget: function(a2) { + return void 0 === a2.relatedTarget ? a2.fromElement === a2.srcElement ? a2.toElement : a2.fromElement : a2.relatedTarget; +}, movementX: function(a2) { + if ("movementX" in a2) return a2.movementX; + a2 !== yd && (yd && "mousemove" === a2.type ? (wd = a2.screenX - yd.screenX, xd = a2.screenY - yd.screenY) : xd = wd = 0, yd = a2); return wd; -}, movementY: function(a) { - return "movementY" in a ? a.movementY : xd; -} }), Bd = rd(Ad), Cd = A({}, Ad, { dataTransfer: 0 }), Dd = rd(Cd), Ed = A({}, ud, { relatedTarget: 0 }), Fd = rd(Ed), Gd = A({}, sd, { animationName: 0, elapsedTime: 0, pseudoElement: 0 }), Hd = rd(Gd), Id = A({}, sd, { clipboardData: function(a) { - return "clipboardData" in a ? a.clipboardData : window.clipboardData; -} }), Jd = rd(Id), Kd = A({}, sd, { data: 0 }), Ld = rd(Kd), Md = { +}, movementY: function(a2) { + return "movementY" in a2 ? a2.movementY : xd; +} }), Bd = rd(Ad), Cd = A$1({}, Ad, { dataTransfer: 0 }), Dd = rd(Cd), Ed = A$1({}, ud, { relatedTarget: 0 }), Fd = rd(Ed), Gd = A$1({}, sd, { animationName: 0, elapsedTime: 0, pseudoElement: 0 }), Hd = rd(Gd), Id = A$1({}, sd, { clipboardData: function(a2) { + return "clipboardData" in a2 ? a2.clipboardData : window.clipboardData; +} }), Jd = rd(Id), Kd = A$1({}, sd, { data: 0 }), Ld = rd(Kd), Md = { Esc: "Escape", Spacebar: " ", Left: "ArrowLeft", @@ -1938,43 +1938,43 @@ var sd = { eventPhase: 0, bubbles: 0, cancelable: 0, timeStamp: function(a) { 145: "ScrollLock", 224: "Meta" }, Od = { Alt: "altKey", Control: "ctrlKey", Meta: "metaKey", Shift: "shiftKey" }; -function Pd(a) { - var b = this.nativeEvent; - return b.getModifierState ? b.getModifierState(a) : (a = Od[a]) ? !!b[a] : false; +function Pd(a2) { + var b2 = this.nativeEvent; + return b2.getModifierState ? b2.getModifierState(a2) : (a2 = Od[a2]) ? !!b2[a2] : false; } function zd() { return Pd; } -var Qd = A({}, ud, { key: function(a) { - if (a.key) { - var b = Md[a.key] || a.key; - if ("Unidentified" !== b) return b; - } - return "keypress" === a.type ? (a = od(a), 13 === a ? "Enter" : String.fromCharCode(a)) : "keydown" === a.type || "keyup" === a.type ? Nd[a.keyCode] || "Unidentified" : ""; -}, code: 0, location: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, repeat: 0, locale: 0, getModifierState: zd, charCode: function(a) { - return "keypress" === a.type ? od(a) : 0; -}, keyCode: function(a) { - return "keydown" === a.type || "keyup" === a.type ? a.keyCode : 0; -}, which: function(a) { - return "keypress" === a.type ? od(a) : "keydown" === a.type || "keyup" === a.type ? a.keyCode : 0; -} }), Rd = rd(Qd), Sd = A({}, Ad, { pointerId: 0, width: 0, height: 0, pressure: 0, tangentialPressure: 0, tiltX: 0, tiltY: 0, twist: 0, pointerType: 0, isPrimary: 0 }), Td = rd(Sd), Ud = A({}, ud, { touches: 0, targetTouches: 0, changedTouches: 0, altKey: 0, metaKey: 0, ctrlKey: 0, shiftKey: 0, getModifierState: zd }), Vd = rd(Ud), Wd = A({}, sd, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 }), Xd = rd(Wd), Yd = A({}, Ad, { - deltaX: function(a) { - return "deltaX" in a ? a.deltaX : "wheelDeltaX" in a ? -a.wheelDeltaX : 0; +var Qd = A$1({}, ud, { key: function(a2) { + if (a2.key) { + var b2 = Md[a2.key] || a2.key; + if ("Unidentified" !== b2) return b2; + } + return "keypress" === a2.type ? (a2 = od(a2), 13 === a2 ? "Enter" : String.fromCharCode(a2)) : "keydown" === a2.type || "keyup" === a2.type ? Nd[a2.keyCode] || "Unidentified" : ""; +}, code: 0, location: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, repeat: 0, locale: 0, getModifierState: zd, charCode: function(a2) { + return "keypress" === a2.type ? od(a2) : 0; +}, keyCode: function(a2) { + return "keydown" === a2.type || "keyup" === a2.type ? a2.keyCode : 0; +}, which: function(a2) { + return "keypress" === a2.type ? od(a2) : "keydown" === a2.type || "keyup" === a2.type ? a2.keyCode : 0; +} }), Rd = rd(Qd), Sd = A$1({}, Ad, { pointerId: 0, width: 0, height: 0, pressure: 0, tangentialPressure: 0, tiltX: 0, tiltY: 0, twist: 0, pointerType: 0, isPrimary: 0 }), Td = rd(Sd), Ud = A$1({}, ud, { touches: 0, targetTouches: 0, changedTouches: 0, altKey: 0, metaKey: 0, ctrlKey: 0, shiftKey: 0, getModifierState: zd }), Vd = rd(Ud), Wd = A$1({}, sd, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 }), Xd = rd(Wd), Yd = A$1({}, Ad, { + deltaX: function(a2) { + return "deltaX" in a2 ? a2.deltaX : "wheelDeltaX" in a2 ? -a2.wheelDeltaX : 0; }, - deltaY: function(a) { - return "deltaY" in a ? a.deltaY : "wheelDeltaY" in a ? -a.wheelDeltaY : "wheelDelta" in a ? -a.wheelDelta : 0; + deltaY: function(a2) { + return "deltaY" in a2 ? a2.deltaY : "wheelDeltaY" in a2 ? -a2.wheelDeltaY : "wheelDelta" in a2 ? -a2.wheelDelta : 0; }, deltaZ: 0, deltaMode: 0 -}), Zd = rd(Yd), $d = [9, 13, 27, 32], ae = ia && "CompositionEvent" in window, be = null; +}), Zd = rd(Yd), $d = [9, 13, 27, 32], ae$1 = ia && "CompositionEvent" in window, be = null; ia && "documentMode" in document && (be = document.documentMode); -var ce = ia && "TextEvent" in window && !be, de = ia && (!ae || be && 8 < be && 11 >= be), ee = String.fromCharCode(32), fe = false; -function ge(a, b) { - switch (a) { +var ce$1 = ia && "TextEvent" in window && !be, de$1 = ia && (!ae$1 || be && 8 < be && 11 >= be), ee$1 = String.fromCharCode(32), fe$1 = false; +function ge$1(a2, b2) { + switch (a2) { case "keyup": - return -1 !== $d.indexOf(b.keyCode); + return -1 !== $d.indexOf(b2.keyCode); case "keydown": - return 229 !== b.keyCode; + return 229 !== b2.keyCode; case "keypress": case "mousedown": case "focusout": @@ -1983,215 +1983,215 @@ function ge(a, b) { return false; } } -function he(a) { - a = a.detail; - return "object" === typeof a && "data" in a ? a.data : null; +function he$1(a2) { + a2 = a2.detail; + return "object" === typeof a2 && "data" in a2 ? a2.data : null; } -var ie = false; -function je(a, b) { - switch (a) { +var ie$1 = false; +function je$1(a2, b2) { + switch (a2) { case "compositionend": - return he(b); + return he$1(b2); case "keypress": - if (32 !== b.which) return null; - fe = true; - return ee; + if (32 !== b2.which) return null; + fe$1 = true; + return ee$1; case "textInput": - return a = b.data, a === ee && fe ? null : a; + return a2 = b2.data, a2 === ee$1 && fe$1 ? null : a2; default: return null; } } -function ke(a, b) { - if (ie) return "compositionend" === a || !ae && ge(a, b) ? (a = nd(), md = ld = kd = null, ie = false, a) : null; - switch (a) { +function ke$1(a2, b2) { + if (ie$1) return "compositionend" === a2 || !ae$1 && ge$1(a2, b2) ? (a2 = nd(), md = ld = kd = null, ie$1 = false, a2) : null; + switch (a2) { case "paste": return null; case "keypress": - if (!(b.ctrlKey || b.altKey || b.metaKey) || b.ctrlKey && b.altKey) { - if (b.char && 1 < b.char.length) return b.char; - if (b.which) return String.fromCharCode(b.which); + if (!(b2.ctrlKey || b2.altKey || b2.metaKey) || b2.ctrlKey && b2.altKey) { + if (b2.char && 1 < b2.char.length) return b2.char; + if (b2.which) return String.fromCharCode(b2.which); } return null; case "compositionend": - return de && "ko" !== b.locale ? null : b.data; + return de$1 && "ko" !== b2.locale ? null : b2.data; default: return null; } } -var le = { color: true, date: true, datetime: true, "datetime-local": true, email: true, month: true, number: true, password: true, range: true, search: true, tel: true, text: true, time: true, url: true, week: true }; -function me(a) { - var b = a && a.nodeName && a.nodeName.toLowerCase(); - return "input" === b ? !!le[a.type] : "textarea" === b ? true : false; +var le$1 = { color: true, date: true, datetime: true, "datetime-local": true, email: true, month: true, number: true, password: true, range: true, search: true, tel: true, text: true, time: true, url: true, week: true }; +function me$1(a2) { + var b2 = a2 && a2.nodeName && a2.nodeName.toLowerCase(); + return "input" === b2 ? !!le$1[a2.type] : "textarea" === b2 ? true : false; } -function ne(a, b, c, d) { - Eb(d); - b = oe(b, "onChange"); - 0 < b.length && (c = new td("onChange", "change", null, c, d), a.push({ event: c, listeners: b })); +function ne$1(a2, b2, c2, d2) { + Eb(d2); + b2 = oe$1(b2, "onChange"); + 0 < b2.length && (c2 = new td("onChange", "change", null, c2, d2), a2.push({ event: c2, listeners: b2 })); } -var pe = null, qe = null; -function re(a) { - se(a, 0); +var pe$1 = null, qe$1 = null; +function re$1(a2) { + se$1(a2, 0); } -function te(a) { - var b = ue(a); - if (Wa(b)) return a; +function te$1(a2) { + var b2 = ue$1(a2); + if (Wa(b2)) return a2; } -function ve(a, b) { - if ("change" === a) return b; +function ve$1(a2, b2) { + if ("change" === a2) return b2; } -var we = false; +var we$1 = false; if (ia) { - var xe; + var xe$1; if (ia) { - var ye = "oninput" in document; - if (!ye) { - var ze = document.createElement("div"); - ze.setAttribute("oninput", "return;"); - ye = "function" === typeof ze.oninput; + var ye$1 = "oninput" in document; + if (!ye$1) { + var ze$1 = document.createElement("div"); + ze$1.setAttribute("oninput", "return;"); + ye$1 = "function" === typeof ze$1.oninput; } - xe = ye; - } else xe = false; - we = xe && (!document.documentMode || 9 < document.documentMode); + xe$1 = ye$1; + } else xe$1 = false; + we$1 = xe$1 && (!document.documentMode || 9 < document.documentMode); } -function Ae() { - pe && (pe.detachEvent("onpropertychange", Be), qe = pe = null); +function Ae$1() { + pe$1 && (pe$1.detachEvent("onpropertychange", Be$1), qe$1 = pe$1 = null); } -function Be(a) { - if ("value" === a.propertyName && te(qe)) { - var b = []; - ne(b, qe, a, xb(a)); - Jb(re, b); +function Be$1(a2) { + if ("value" === a2.propertyName && te$1(qe$1)) { + var b2 = []; + ne$1(b2, qe$1, a2, xb(a2)); + Jb(re$1, b2); } } -function Ce(a, b, c) { - "focusin" === a ? (Ae(), pe = b, qe = c, pe.attachEvent("onpropertychange", Be)) : "focusout" === a && Ae(); +function Ce$1(a2, b2, c2) { + "focusin" === a2 ? (Ae$1(), pe$1 = b2, qe$1 = c2, pe$1.attachEvent("onpropertychange", Be$1)) : "focusout" === a2 && Ae$1(); } -function De(a) { - if ("selectionchange" === a || "keyup" === a || "keydown" === a) return te(qe); +function De$1(a2) { + if ("selectionchange" === a2 || "keyup" === a2 || "keydown" === a2) return te$1(qe$1); } -function Ee(a, b) { - if ("click" === a) return te(b); +function Ee$1(a2, b2) { + if ("click" === a2) return te$1(b2); } -function Fe(a, b) { - if ("input" === a || "change" === a) return te(b); +function Fe$1(a2, b2) { + if ("input" === a2 || "change" === a2) return te$1(b2); } -function Ge(a, b) { - return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b; +function Ge$1(a2, b2) { + return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2; } -var He = "function" === typeof Object.is ? Object.is : Ge; -function Ie(a, b) { - if (He(a, b)) return true; - if ("object" !== typeof a || null === a || "object" !== typeof b || null === b) return false; - var c = Object.keys(a), d = Object.keys(b); - if (c.length !== d.length) return false; - for (d = 0; d < c.length; d++) { - var e = c[d]; - if (!ja.call(b, e) || !He(a[e], b[e])) return false; +var He$1 = "function" === typeof Object.is ? Object.is : Ge$1; +function Ie$1(a2, b2) { + if (He$1(a2, b2)) return true; + if ("object" !== typeof a2 || null === a2 || "object" !== typeof b2 || null === b2) return false; + var c2 = Object.keys(a2), d2 = Object.keys(b2); + if (c2.length !== d2.length) return false; + for (d2 = 0; d2 < c2.length; d2++) { + var e2 = c2[d2]; + if (!ja.call(b2, e2) || !He$1(a2[e2], b2[e2])) return false; } return true; } -function Je(a) { - for (; a && a.firstChild; ) a = a.firstChild; - return a; +function Je$1(a2) { + for (; a2 && a2.firstChild; ) a2 = a2.firstChild; + return a2; } -function Ke(a, b) { - var c = Je(a); - a = 0; - for (var d; c; ) { - if (3 === c.nodeType) { - d = a + c.textContent.length; - if (a <= b && d >= b) return { node: c, offset: b - a }; - a = d; +function Ke$1(a2, b2) { + var c2 = Je$1(a2); + a2 = 0; + for (var d2; c2; ) { + if (3 === c2.nodeType) { + d2 = a2 + c2.textContent.length; + if (a2 <= b2 && d2 >= b2) return { node: c2, offset: b2 - a2 }; + a2 = d2; } a: { - for (; c; ) { - if (c.nextSibling) { - c = c.nextSibling; + for (; c2; ) { + if (c2.nextSibling) { + c2 = c2.nextSibling; break a; } - c = c.parentNode; + c2 = c2.parentNode; } - c = void 0; + c2 = void 0; } - c = Je(c); + c2 = Je$1(c2); } } -function Le(a, b) { - return a && b ? a === b ? true : a && 3 === a.nodeType ? false : b && 3 === b.nodeType ? Le(a, b.parentNode) : "contains" in a ? a.contains(b) : a.compareDocumentPosition ? !!(a.compareDocumentPosition(b) & 16) : false : false; +function Le$1(a2, b2) { + return a2 && b2 ? a2 === b2 ? true : a2 && 3 === a2.nodeType ? false : b2 && 3 === b2.nodeType ? Le$1(a2, b2.parentNode) : "contains" in a2 ? a2.contains(b2) : a2.compareDocumentPosition ? !!(a2.compareDocumentPosition(b2) & 16) : false : false; } -function Me() { - for (var a = window, b = Xa(); b instanceof a.HTMLIFrameElement; ) { +function Me$1() { + for (var a2 = window, b2 = Xa(); b2 instanceof a2.HTMLIFrameElement; ) { try { - var c = "string" === typeof b.contentWindow.location.href; - } catch (d) { - c = false; + var c2 = "string" === typeof b2.contentWindow.location.href; + } catch (d2) { + c2 = false; } - if (c) a = b.contentWindow; + if (c2) a2 = b2.contentWindow; else break; - b = Xa(a.document); + b2 = Xa(a2.document); } - return b; + return b2; +} +function Ne$1(a2) { + var b2 = a2 && a2.nodeName && a2.nodeName.toLowerCase(); + return b2 && ("input" === b2 && ("text" === a2.type || "search" === a2.type || "tel" === a2.type || "url" === a2.type || "password" === a2.type) || "textarea" === b2 || "true" === a2.contentEditable); } -function Ne(a) { - var b = a && a.nodeName && a.nodeName.toLowerCase(); - return b && ("input" === b && ("text" === a.type || "search" === a.type || "tel" === a.type || "url" === a.type || "password" === a.type) || "textarea" === b || "true" === a.contentEditable); -} -function Oe(a) { - var b = Me(), c = a.focusedElem, d = a.selectionRange; - if (b !== c && c && c.ownerDocument && Le(c.ownerDocument.documentElement, c)) { - if (null !== d && Ne(c)) { - if (b = d.start, a = d.end, void 0 === a && (a = b), "selectionStart" in c) c.selectionStart = b, c.selectionEnd = Math.min(a, c.value.length); - else if (a = (b = c.ownerDocument || document) && b.defaultView || window, a.getSelection) { - a = a.getSelection(); - var e = c.textContent.length, f2 = Math.min(d.start, e); - d = void 0 === d.end ? f2 : Math.min(d.end, e); - !a.extend && f2 > d && (e = d, d = f2, f2 = e); - e = Ke(c, f2); - var g = Ke( - c, - d +function Oe$1(a2) { + var b2 = Me$1(), c2 = a2.focusedElem, d2 = a2.selectionRange; + if (b2 !== c2 && c2 && c2.ownerDocument && Le$1(c2.ownerDocument.documentElement, c2)) { + if (null !== d2 && Ne$1(c2)) { + if (b2 = d2.start, a2 = d2.end, void 0 === a2 && (a2 = b2), "selectionStart" in c2) c2.selectionStart = b2, c2.selectionEnd = Math.min(a2, c2.value.length); + else if (a2 = (b2 = c2.ownerDocument || document) && b2.defaultView || window, a2.getSelection) { + a2 = a2.getSelection(); + var e2 = c2.textContent.length, f2 = Math.min(d2.start, e2); + d2 = void 0 === d2.end ? f2 : Math.min(d2.end, e2); + !a2.extend && f2 > d2 && (e2 = d2, d2 = f2, f2 = e2); + e2 = Ke$1(c2, f2); + var g2 = Ke$1( + c2, + d2 ); - e && g && (1 !== a.rangeCount || a.anchorNode !== e.node || a.anchorOffset !== e.offset || a.focusNode !== g.node || a.focusOffset !== g.offset) && (b = b.createRange(), b.setStart(e.node, e.offset), a.removeAllRanges(), f2 > d ? (a.addRange(b), a.extend(g.node, g.offset)) : (b.setEnd(g.node, g.offset), a.addRange(b))); + e2 && g2 && (1 !== a2.rangeCount || a2.anchorNode !== e2.node || a2.anchorOffset !== e2.offset || a2.focusNode !== g2.node || a2.focusOffset !== g2.offset) && (b2 = b2.createRange(), b2.setStart(e2.node, e2.offset), a2.removeAllRanges(), f2 > d2 ? (a2.addRange(b2), a2.extend(g2.node, g2.offset)) : (b2.setEnd(g2.node, g2.offset), a2.addRange(b2))); } } - b = []; - for (a = c; a = a.parentNode; ) 1 === a.nodeType && b.push({ element: a, left: a.scrollLeft, top: a.scrollTop }); - "function" === typeof c.focus && c.focus(); - for (c = 0; c < b.length; c++) a = b[c], a.element.scrollLeft = a.left, a.element.scrollTop = a.top; + b2 = []; + for (a2 = c2; a2 = a2.parentNode; ) 1 === a2.nodeType && b2.push({ element: a2, left: a2.scrollLeft, top: a2.scrollTop }); + "function" === typeof c2.focus && c2.focus(); + for (c2 = 0; c2 < b2.length; c2++) a2 = b2[c2], a2.element.scrollLeft = a2.left, a2.element.scrollTop = a2.top; } } -var Pe = ia && "documentMode" in document && 11 >= document.documentMode, Qe = null, Re = null, Se = null, Te = false; -function Ue(a, b, c) { - var d = c.window === c ? c.document : 9 === c.nodeType ? c : c.ownerDocument; - Te || null == Qe || Qe !== Xa(d) || (d = Qe, "selectionStart" in d && Ne(d) ? d = { start: d.selectionStart, end: d.selectionEnd } : (d = (d.ownerDocument && d.ownerDocument.defaultView || window).getSelection(), d = { anchorNode: d.anchorNode, anchorOffset: d.anchorOffset, focusNode: d.focusNode, focusOffset: d.focusOffset }), Se && Ie(Se, d) || (Se = d, d = oe(Re, "onSelect"), 0 < d.length && (b = new td("onSelect", "select", null, b, c), a.push({ event: b, listeners: d }), b.target = Qe))); +var Pe$1 = ia && "documentMode" in document && 11 >= document.documentMode, Qe$1 = null, Re$1 = null, Se$1 = null, Te$1 = false; +function Ue$1(a2, b2, c2) { + var d2 = c2.window === c2 ? c2.document : 9 === c2.nodeType ? c2 : c2.ownerDocument; + Te$1 || null == Qe$1 || Qe$1 !== Xa(d2) || (d2 = Qe$1, "selectionStart" in d2 && Ne$1(d2) ? d2 = { start: d2.selectionStart, end: d2.selectionEnd } : (d2 = (d2.ownerDocument && d2.ownerDocument.defaultView || window).getSelection(), d2 = { anchorNode: d2.anchorNode, anchorOffset: d2.anchorOffset, focusNode: d2.focusNode, focusOffset: d2.focusOffset }), Se$1 && Ie$1(Se$1, d2) || (Se$1 = d2, d2 = oe$1(Re$1, "onSelect"), 0 < d2.length && (b2 = new td("onSelect", "select", null, b2, c2), a2.push({ event: b2, listeners: d2 }), b2.target = Qe$1))); } -function Ve(a, b) { - var c = {}; - c[a.toLowerCase()] = b.toLowerCase(); - c["Webkit" + a] = "webkit" + b; - c["Moz" + a] = "moz" + b; - return c; +function Ve$1(a2, b2) { + var c2 = {}; + c2[a2.toLowerCase()] = b2.toLowerCase(); + c2["Webkit" + a2] = "webkit" + b2; + c2["Moz" + a2] = "moz" + b2; + return c2; } -var We = { animationend: Ve("Animation", "AnimationEnd"), animationiteration: Ve("Animation", "AnimationIteration"), animationstart: Ve("Animation", "AnimationStart"), transitionend: Ve("Transition", "TransitionEnd") }, Xe = {}, Ye = {}; -ia && (Ye = document.createElement("div").style, "AnimationEvent" in window || (delete We.animationend.animation, delete We.animationiteration.animation, delete We.animationstart.animation), "TransitionEvent" in window || delete We.transitionend.transition); -function Ze(a) { - if (Xe[a]) return Xe[a]; - if (!We[a]) return a; - var b = We[a], c; - for (c in b) if (b.hasOwnProperty(c) && c in Ye) return Xe[a] = b[c]; - return a; +var We$1 = { animationend: Ve$1("Animation", "AnimationEnd"), animationiteration: Ve$1("Animation", "AnimationIteration"), animationstart: Ve$1("Animation", "AnimationStart"), transitionend: Ve$1("Transition", "TransitionEnd") }, Xe$1 = {}, Ye$1 = {}; +ia && (Ye$1 = document.createElement("div").style, "AnimationEvent" in window || (delete We$1.animationend.animation, delete We$1.animationiteration.animation, delete We$1.animationstart.animation), "TransitionEvent" in window || delete We$1.transitionend.transition); +function Ze$1(a2) { + if (Xe$1[a2]) return Xe$1[a2]; + if (!We$1[a2]) return a2; + var b2 = We$1[a2], c2; + for (c2 in b2) if (b2.hasOwnProperty(c2) && c2 in Ye$1) return Xe$1[a2] = b2[c2]; + return a2; } -var $e = Ze("animationend"), af = Ze("animationiteration"), bf = Ze("animationstart"), cf = Ze("transitionend"), df = /* @__PURE__ */ new Map(), ef = "abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" "); -function ff(a, b) { - df.set(a, b); - fa(b, [a]); +var $e$1 = Ze$1("animationend"), af = Ze$1("animationiteration"), bf = Ze$1("animationstart"), cf = Ze$1("transitionend"), df = /* @__PURE__ */ new Map(), ef = "abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" "); +function ff(a2, b2) { + df.set(a2, b2); + fa(b2, [a2]); } for (var gf = 0; gf < ef.length; gf++) { var hf = ef[gf], jf = hf.toLowerCase(), kf = hf[0].toUpperCase() + hf.slice(1); ff(jf, "on" + kf); } -ff($e, "onAnimationEnd"); +ff($e$1, "onAnimationEnd"); ff(af, "onAnimationIteration"); ff(bf, "onAnimationStart"); ff("dblclick", "onDoubleClick"); @@ -2209,114 +2209,114 @@ fa("onCompositionEnd", "compositionend focusout keydown keypress keyup mousedown fa("onCompositionStart", "compositionstart focusout keydown keypress keyup mousedown".split(" ")); fa("onCompositionUpdate", "compositionupdate focusout keydown keypress keyup mousedown".split(" ")); var lf = "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "), mf = new Set("cancel close invalid load scroll toggle".split(" ").concat(lf)); -function nf(a, b, c) { - var d = a.type || "unknown-event"; - a.currentTarget = c; - Ub(d, b, void 0, a); - a.currentTarget = null; -} -function se(a, b) { - b = 0 !== (b & 4); - for (var c = 0; c < a.length; c++) { - var d = a[c], e = d.event; - d = d.listeners; +function nf(a2, b2, c2) { + var d2 = a2.type || "unknown-event"; + a2.currentTarget = c2; + Ub(d2, b2, void 0, a2); + a2.currentTarget = null; +} +function se$1(a2, b2) { + b2 = 0 !== (b2 & 4); + for (var c2 = 0; c2 < a2.length; c2++) { + var d2 = a2[c2], e2 = d2.event; + d2 = d2.listeners; a: { var f2 = void 0; - if (b) for (var g = d.length - 1; 0 <= g; g--) { - var h = d[g], k2 = h.instance, l2 = h.currentTarget; - h = h.listener; - if (k2 !== f2 && e.isPropagationStopped()) break a; - nf(e, h, l2); + if (b2) for (var g2 = d2.length - 1; 0 <= g2; g2--) { + var h2 = d2[g2], k2 = h2.instance, l2 = h2.currentTarget; + h2 = h2.listener; + if (k2 !== f2 && e2.isPropagationStopped()) break a; + nf(e2, h2, l2); f2 = k2; } - else for (g = 0; g < d.length; g++) { - h = d[g]; - k2 = h.instance; - l2 = h.currentTarget; - h = h.listener; - if (k2 !== f2 && e.isPropagationStopped()) break a; - nf(e, h, l2); + else for (g2 = 0; g2 < d2.length; g2++) { + h2 = d2[g2]; + k2 = h2.instance; + l2 = h2.currentTarget; + h2 = h2.listener; + if (k2 !== f2 && e2.isPropagationStopped()) break a; + nf(e2, h2, l2); f2 = k2; } } } - if (Qb) throw a = Rb, Qb = false, Rb = null, a; + if (Qb) throw a2 = Rb, Qb = false, Rb = null, a2; } -function D(a, b) { - var c = b[of]; - void 0 === c && (c = b[of] = /* @__PURE__ */ new Set()); - var d = a + "__bubble"; - c.has(d) || (pf(b, a, 2, false), c.add(d)); +function D$1(a2, b2) { + var c2 = b2[of]; + void 0 === c2 && (c2 = b2[of] = /* @__PURE__ */ new Set()); + var d2 = a2 + "__bubble"; + c2.has(d2) || (pf(b2, a2, 2, false), c2.add(d2)); } -function qf(a, b, c) { - var d = 0; - b && (d |= 4); - pf(c, a, d, b); +function qf(a2, b2, c2) { + var d2 = 0; + b2 && (d2 |= 4); + pf(c2, a2, d2, b2); } var rf = "_reactListening" + Math.random().toString(36).slice(2); -function sf(a) { - if (!a[rf]) { - a[rf] = true; - da.forEach(function(b2) { - "selectionchange" !== b2 && (mf.has(b2) || qf(b2, false, a), qf(b2, true, a)); +function sf(a2) { + if (!a2[rf]) { + a2[rf] = true; + da.forEach(function(b3) { + "selectionchange" !== b3 && (mf.has(b3) || qf(b3, false, a2), qf(b3, true, a2)); }); - var b = 9 === a.nodeType ? a : a.ownerDocument; - null === b || b[rf] || (b[rf] = true, qf("selectionchange", false, b)); + var b2 = 9 === a2.nodeType ? a2 : a2.ownerDocument; + null === b2 || b2[rf] || (b2[rf] = true, qf("selectionchange", false, b2)); } } -function pf(a, b, c, d) { - switch (jd(b)) { +function pf(a2, b2, c2, d2) { + switch (jd(b2)) { case 1: - var e = ed; + var e2 = ed; break; case 4: - e = gd; + e2 = gd; break; default: - e = fd; - } - c = e.bind(null, b, c, a); - e = void 0; - !Lb || "touchstart" !== b && "touchmove" !== b && "wheel" !== b || (e = true); - d ? void 0 !== e ? a.addEventListener(b, c, { capture: true, passive: e }) : a.addEventListener(b, c, true) : void 0 !== e ? a.addEventListener(b, c, { passive: e }) : a.addEventListener(b, c, false); -} -function hd(a, b, c, d, e) { - var f2 = d; - if (0 === (b & 1) && 0 === (b & 2) && null !== d) a: for (; ; ) { - if (null === d) return; - var g = d.tag; - if (3 === g || 4 === g) { - var h = d.stateNode.containerInfo; - if (h === e || 8 === h.nodeType && h.parentNode === e) break; - if (4 === g) for (g = d.return; null !== g; ) { - var k2 = g.tag; + e2 = fd; + } + c2 = e2.bind(null, b2, c2, a2); + e2 = void 0; + !Lb || "touchstart" !== b2 && "touchmove" !== b2 && "wheel" !== b2 || (e2 = true); + d2 ? void 0 !== e2 ? a2.addEventListener(b2, c2, { capture: true, passive: e2 }) : a2.addEventListener(b2, c2, true) : void 0 !== e2 ? a2.addEventListener(b2, c2, { passive: e2 }) : a2.addEventListener(b2, c2, false); +} +function hd(a2, b2, c2, d2, e2) { + var f2 = d2; + if (0 === (b2 & 1) && 0 === (b2 & 2) && null !== d2) a: for (; ; ) { + if (null === d2) return; + var g2 = d2.tag; + if (3 === g2 || 4 === g2) { + var h2 = d2.stateNode.containerInfo; + if (h2 === e2 || 8 === h2.nodeType && h2.parentNode === e2) break; + if (4 === g2) for (g2 = d2.return; null !== g2; ) { + var k2 = g2.tag; if (3 === k2 || 4 === k2) { - if (k2 = g.stateNode.containerInfo, k2 === e || 8 === k2.nodeType && k2.parentNode === e) return; + if (k2 = g2.stateNode.containerInfo, k2 === e2 || 8 === k2.nodeType && k2.parentNode === e2) return; } - g = g.return; + g2 = g2.return; } - for (; null !== h; ) { - g = Wc(h); - if (null === g) return; - k2 = g.tag; + for (; null !== h2; ) { + g2 = Wc(h2); + if (null === g2) return; + k2 = g2.tag; if (5 === k2 || 6 === k2) { - d = f2 = g; + d2 = f2 = g2; continue a; } - h = h.parentNode; + h2 = h2.parentNode; } } - d = d.return; + d2 = d2.return; } Jb(function() { - var d2 = f2, e2 = xb(c), g2 = []; + var d3 = f2, e3 = xb(c2), g3 = []; a: { - var h3 = df.get(a); + var h3 = df.get(a2); if (void 0 !== h3) { - var k3 = td, n2 = a; - switch (a) { + var k3 = td, n2 = a2; + switch (a2) { case "keypress": - if (0 === od(c)) break a; + if (0 === od(c2)) break a; case "keydown": case "keyup": k3 = Rd; @@ -2334,7 +2334,7 @@ function hd(a, b, c, d, e) { k3 = Fd; break; case "click": - if (2 === c.button) break a; + if (2 === c2.button) break a; case "auxclick": case "dblclick": case "mousedown": @@ -2361,7 +2361,7 @@ function hd(a, b, c, d, e) { case "touchstart": k3 = Vd; break; - case $e: + case $e$1: case af: case bf: k3 = Hd; @@ -2390,41 +2390,41 @@ function hd(a, b, c, d, e) { case "pointerup": k3 = Td; } - var t2 = 0 !== (b & 4), J2 = !t2 && "scroll" === a, x2 = t2 ? null !== h3 ? h3 + "Capture" : null : h3; + var t2 = 0 !== (b2 & 4), J2 = !t2 && "scroll" === a2, x2 = t2 ? null !== h3 ? h3 + "Capture" : null : h3; t2 = []; - for (var w2 = d2, u2; null !== w2; ) { + for (var w2 = d3, u2; null !== w2; ) { u2 = w2; var F2 = u2.stateNode; 5 === u2.tag && null !== F2 && (u2 = F2, null !== x2 && (F2 = Kb(w2, x2), null != F2 && t2.push(tf(w2, F2, u2)))); if (J2) break; w2 = w2.return; } - 0 < t2.length && (h3 = new k3(h3, n2, null, c, e2), g2.push({ event: h3, listeners: t2 })); + 0 < t2.length && (h3 = new k3(h3, n2, null, c2, e3), g3.push({ event: h3, listeners: t2 })); } } - if (0 === (b & 7)) { + if (0 === (b2 & 7)) { a: { - h3 = "mouseover" === a || "pointerover" === a; - k3 = "mouseout" === a || "pointerout" === a; - if (h3 && c !== wb && (n2 = c.relatedTarget || c.fromElement) && (Wc(n2) || n2[uf])) break a; + h3 = "mouseover" === a2 || "pointerover" === a2; + k3 = "mouseout" === a2 || "pointerout" === a2; + if (h3 && c2 !== wb && (n2 = c2.relatedTarget || c2.fromElement) && (Wc(n2) || n2[uf])) break a; if (k3 || h3) { - h3 = e2.window === e2 ? e2 : (h3 = e2.ownerDocument) ? h3.defaultView || h3.parentWindow : window; + h3 = e3.window === e3 ? e3 : (h3 = e3.ownerDocument) ? h3.defaultView || h3.parentWindow : window; if (k3) { - if (n2 = c.relatedTarget || c.toElement, k3 = d2, n2 = n2 ? Wc(n2) : null, null !== n2 && (J2 = Vb(n2), n2 !== J2 || 5 !== n2.tag && 6 !== n2.tag)) n2 = null; - } else k3 = null, n2 = d2; + if (n2 = c2.relatedTarget || c2.toElement, k3 = d3, n2 = n2 ? Wc(n2) : null, null !== n2 && (J2 = Vb(n2), n2 !== J2 || 5 !== n2.tag && 6 !== n2.tag)) n2 = null; + } else k3 = null, n2 = d3; if (k3 !== n2) { t2 = Bd; F2 = "onMouseLeave"; x2 = "onMouseEnter"; w2 = "mouse"; - if ("pointerout" === a || "pointerover" === a) t2 = Td, F2 = "onPointerLeave", x2 = "onPointerEnter", w2 = "pointer"; - J2 = null == k3 ? h3 : ue(k3); - u2 = null == n2 ? h3 : ue(n2); - h3 = new t2(F2, w2 + "leave", k3, c, e2); + if ("pointerout" === a2 || "pointerover" === a2) t2 = Td, F2 = "onPointerLeave", x2 = "onPointerEnter", w2 = "pointer"; + J2 = null == k3 ? h3 : ue$1(k3); + u2 = null == n2 ? h3 : ue$1(n2); + h3 = new t2(F2, w2 + "leave", k3, c2, e3); h3.target = J2; h3.relatedTarget = u2; F2 = null; - Wc(e2) === d2 && (t2 = new t2(x2, w2 + "enter", n2, c, e2), t2.target = u2, t2.relatedTarget = J2, F2 = t2); + Wc(e3) === d3 && (t2 = new t2(x2, w2 + "enter", n2, c2, e3), t2.target = u2, t2.relatedTarget = J2, F2 = t2); J2 = F2; if (k3 && n2) b: { t2 = k3; @@ -2443,54 +2443,54 @@ function hd(a, b, c, d, e) { t2 = null; } else t2 = null; - null !== k3 && wf(g2, h3, k3, t2, false); - null !== n2 && null !== J2 && wf(g2, J2, n2, t2, true); + null !== k3 && wf(g3, h3, k3, t2, false); + null !== n2 && null !== J2 && wf(g3, J2, n2, t2, true); } } } a: { - h3 = d2 ? ue(d2) : window; + h3 = d3 ? ue$1(d3) : window; k3 = h3.nodeName && h3.nodeName.toLowerCase(); - if ("select" === k3 || "input" === k3 && "file" === h3.type) var na = ve; - else if (me(h3)) if (we) na = Fe; + if ("select" === k3 || "input" === k3 && "file" === h3.type) var na = ve$1; + else if (me$1(h3)) if (we$1) na = Fe$1; else { - na = De; - var xa = Ce; + na = De$1; + var xa = Ce$1; } - else (k3 = h3.nodeName) && "input" === k3.toLowerCase() && ("checkbox" === h3.type || "radio" === h3.type) && (na = Ee); - if (na && (na = na(a, d2))) { - ne(g2, na, c, e2); + else (k3 = h3.nodeName) && "input" === k3.toLowerCase() && ("checkbox" === h3.type || "radio" === h3.type) && (na = Ee$1); + if (na && (na = na(a2, d3))) { + ne$1(g3, na, c2, e3); break a; } - xa && xa(a, h3, d2); - "focusout" === a && (xa = h3._wrapperState) && xa.controlled && "number" === h3.type && cb(h3, "number", h3.value); + xa && xa(a2, h3, d3); + "focusout" === a2 && (xa = h3._wrapperState) && xa.controlled && "number" === h3.type && cb(h3, "number", h3.value); } - xa = d2 ? ue(d2) : window; - switch (a) { + xa = d3 ? ue$1(d3) : window; + switch (a2) { case "focusin": - if (me(xa) || "true" === xa.contentEditable) Qe = xa, Re = d2, Se = null; + if (me$1(xa) || "true" === xa.contentEditable) Qe$1 = xa, Re$1 = d3, Se$1 = null; break; case "focusout": - Se = Re = Qe = null; + Se$1 = Re$1 = Qe$1 = null; break; case "mousedown": - Te = true; + Te$1 = true; break; case "contextmenu": case "mouseup": case "dragend": - Te = false; - Ue(g2, c, e2); + Te$1 = false; + Ue$1(g3, c2, e3); break; case "selectionchange": - if (Pe) break; + if (Pe$1) break; case "keydown": case "keyup": - Ue(g2, c, e2); + Ue$1(g3, c2, e3); } var $a; - if (ae) b: { - switch (a) { + if (ae$1) b: { + switch (a2) { case "compositionstart": var ba = "onCompositionStart"; break b; @@ -2503,621 +2503,621 @@ function hd(a, b, c, d, e) { } ba = void 0; } - else ie ? ge(a, c) && (ba = "onCompositionEnd") : "keydown" === a && 229 === c.keyCode && (ba = "onCompositionStart"); - ba && (de && "ko" !== c.locale && (ie || "onCompositionStart" !== ba ? "onCompositionEnd" === ba && ie && ($a = nd()) : (kd = e2, ld = "value" in kd ? kd.value : kd.textContent, ie = true)), xa = oe(d2, ba), 0 < xa.length && (ba = new Ld(ba, a, null, c, e2), g2.push({ event: ba, listeners: xa }), $a ? ba.data = $a : ($a = he(c), null !== $a && (ba.data = $a)))); - if ($a = ce ? je(a, c) : ke(a, c)) d2 = oe(d2, "onBeforeInput"), 0 < d2.length && (e2 = new Ld("onBeforeInput", "beforeinput", null, c, e2), g2.push({ event: e2, listeners: d2 }), e2.data = $a); + else ie$1 ? ge$1(a2, c2) && (ba = "onCompositionEnd") : "keydown" === a2 && 229 === c2.keyCode && (ba = "onCompositionStart"); + ba && (de$1 && "ko" !== c2.locale && (ie$1 || "onCompositionStart" !== ba ? "onCompositionEnd" === ba && ie$1 && ($a = nd()) : (kd = e3, ld = "value" in kd ? kd.value : kd.textContent, ie$1 = true)), xa = oe$1(d3, ba), 0 < xa.length && (ba = new Ld(ba, a2, null, c2, e3), g3.push({ event: ba, listeners: xa }), $a ? ba.data = $a : ($a = he$1(c2), null !== $a && (ba.data = $a)))); + if ($a = ce$1 ? je$1(a2, c2) : ke$1(a2, c2)) d3 = oe$1(d3, "onBeforeInput"), 0 < d3.length && (e3 = new Ld("onBeforeInput", "beforeinput", null, c2, e3), g3.push({ event: e3, listeners: d3 }), e3.data = $a); } - se(g2, b); + se$1(g3, b2); }); } -function tf(a, b, c) { - return { instance: a, listener: b, currentTarget: c }; +function tf(a2, b2, c2) { + return { instance: a2, listener: b2, currentTarget: c2 }; } -function oe(a, b) { - for (var c = b + "Capture", d = []; null !== a; ) { - var e = a, f2 = e.stateNode; - 5 === e.tag && null !== f2 && (e = f2, f2 = Kb(a, c), null != f2 && d.unshift(tf(a, f2, e)), f2 = Kb(a, b), null != f2 && d.push(tf(a, f2, e))); - a = a.return; +function oe$1(a2, b2) { + for (var c2 = b2 + "Capture", d2 = []; null !== a2; ) { + var e2 = a2, f2 = e2.stateNode; + 5 === e2.tag && null !== f2 && (e2 = f2, f2 = Kb(a2, c2), null != f2 && d2.unshift(tf(a2, f2, e2)), f2 = Kb(a2, b2), null != f2 && d2.push(tf(a2, f2, e2))); + a2 = a2.return; } - return d; + return d2; } -function vf(a) { - if (null === a) return null; +function vf(a2) { + if (null === a2) return null; do - a = a.return; - while (a && 5 !== a.tag); - return a ? a : null; + a2 = a2.return; + while (a2 && 5 !== a2.tag); + return a2 ? a2 : null; } -function wf(a, b, c, d, e) { - for (var f2 = b._reactName, g = []; null !== c && c !== d; ) { - var h = c, k2 = h.alternate, l2 = h.stateNode; - if (null !== k2 && k2 === d) break; - 5 === h.tag && null !== l2 && (h = l2, e ? (k2 = Kb(c, f2), null != k2 && g.unshift(tf(c, k2, h))) : e || (k2 = Kb(c, f2), null != k2 && g.push(tf(c, k2, h)))); - c = c.return; - } - 0 !== g.length && a.push({ event: b, listeners: g }); +function wf(a2, b2, c2, d2, e2) { + for (var f2 = b2._reactName, g2 = []; null !== c2 && c2 !== d2; ) { + var h2 = c2, k2 = h2.alternate, l2 = h2.stateNode; + if (null !== k2 && k2 === d2) break; + 5 === h2.tag && null !== l2 && (h2 = l2, e2 ? (k2 = Kb(c2, f2), null != k2 && g2.unshift(tf(c2, k2, h2))) : e2 || (k2 = Kb(c2, f2), null != k2 && g2.push(tf(c2, k2, h2)))); + c2 = c2.return; + } + 0 !== g2.length && a2.push({ event: b2, listeners: g2 }); } var xf = /\r\n?/g, yf = /\u0000|\uFFFD/g; -function zf(a) { - return ("string" === typeof a ? a : "" + a).replace(xf, "\n").replace(yf, ""); +function zf(a2) { + return ("string" === typeof a2 ? a2 : "" + a2).replace(xf, "\n").replace(yf, ""); } -function Af(a, b, c) { - b = zf(b); - if (zf(a) !== b && c) throw Error(p(425)); +function Af(a2, b2, c2) { + b2 = zf(b2); + if (zf(a2) !== b2 && c2) throw Error(p$1(425)); } function Bf() { } var Cf = null, Df = null; -function Ef(a, b) { - return "textarea" === a || "noscript" === a || "string" === typeof b.children || "number" === typeof b.children || "object" === typeof b.dangerouslySetInnerHTML && null !== b.dangerouslySetInnerHTML && null != b.dangerouslySetInnerHTML.__html; +function Ef(a2, b2) { + return "textarea" === a2 || "noscript" === a2 || "string" === typeof b2.children || "number" === typeof b2.children || "object" === typeof b2.dangerouslySetInnerHTML && null !== b2.dangerouslySetInnerHTML && null != b2.dangerouslySetInnerHTML.__html; } -var Ff = "function" === typeof setTimeout ? setTimeout : void 0, Gf = "function" === typeof clearTimeout ? clearTimeout : void 0, Hf = "function" === typeof Promise ? Promise : void 0, Jf = "function" === typeof queueMicrotask ? queueMicrotask : "undefined" !== typeof Hf ? function(a) { - return Hf.resolve(null).then(a).catch(If); +var Ff = "function" === typeof setTimeout ? setTimeout : void 0, Gf = "function" === typeof clearTimeout ? clearTimeout : void 0, Hf = "function" === typeof Promise ? Promise : void 0, Jf = "function" === typeof queueMicrotask ? queueMicrotask : "undefined" !== typeof Hf ? function(a2) { + return Hf.resolve(null).then(a2).catch(If); } : Ff; -function If(a) { +function If(a2) { setTimeout(function() { - throw a; + throw a2; }); } -function Kf(a, b) { - var c = b, d = 0; +function Kf(a2, b2) { + var c2 = b2, d2 = 0; do { - var e = c.nextSibling; - a.removeChild(c); - if (e && 8 === e.nodeType) if (c = e.data, "/$" === c) { - if (0 === d) { - a.removeChild(e); - bd(b); + var e2 = c2.nextSibling; + a2.removeChild(c2); + if (e2 && 8 === e2.nodeType) if (c2 = e2.data, "/$" === c2) { + if (0 === d2) { + a2.removeChild(e2); + bd(b2); return; } - d--; - } else "$" !== c && "$?" !== c && "$!" !== c || d++; - c = e; - } while (c); - bd(b); + d2--; + } else "$" !== c2 && "$?" !== c2 && "$!" !== c2 || d2++; + c2 = e2; + } while (c2); + bd(b2); } -function Lf(a) { - for (; null != a; a = a.nextSibling) { - var b = a.nodeType; - if (1 === b || 3 === b) break; - if (8 === b) { - b = a.data; - if ("$" === b || "$!" === b || "$?" === b) break; - if ("/$" === b) return null; +function Lf(a2) { + for (; null != a2; a2 = a2.nextSibling) { + var b2 = a2.nodeType; + if (1 === b2 || 3 === b2) break; + if (8 === b2) { + b2 = a2.data; + if ("$" === b2 || "$!" === b2 || "$?" === b2) break; + if ("/$" === b2) return null; } } - return a; + return a2; } -function Mf(a) { - a = a.previousSibling; - for (var b = 0; a; ) { - if (8 === a.nodeType) { - var c = a.data; - if ("$" === c || "$!" === c || "$?" === c) { - if (0 === b) return a; - b--; - } else "/$" === c && b++; +function Mf(a2) { + a2 = a2.previousSibling; + for (var b2 = 0; a2; ) { + if (8 === a2.nodeType) { + var c2 = a2.data; + if ("$" === c2 || "$!" === c2 || "$?" === c2) { + if (0 === b2) return a2; + b2--; + } else "/$" === c2 && b2++; } - a = a.previousSibling; + a2 = a2.previousSibling; } return null; } var Nf = Math.random().toString(36).slice(2), Of = "__reactFiber$" + Nf, Pf = "__reactProps$" + Nf, uf = "__reactContainer$" + Nf, of = "__reactEvents$" + Nf, Qf = "__reactListeners$" + Nf, Rf = "__reactHandles$" + Nf; -function Wc(a) { - var b = a[Of]; - if (b) return b; - for (var c = a.parentNode; c; ) { - if (b = c[uf] || c[Of]) { - c = b.alternate; - if (null !== b.child || null !== c && null !== c.child) for (a = Mf(a); null !== a; ) { - if (c = a[Of]) return c; - a = Mf(a); +function Wc(a2) { + var b2 = a2[Of]; + if (b2) return b2; + for (var c2 = a2.parentNode; c2; ) { + if (b2 = c2[uf] || c2[Of]) { + c2 = b2.alternate; + if (null !== b2.child || null !== c2 && null !== c2.child) for (a2 = Mf(a2); null !== a2; ) { + if (c2 = a2[Of]) return c2; + a2 = Mf(a2); } - return b; + return b2; } - a = c; - c = a.parentNode; + a2 = c2; + c2 = a2.parentNode; } return null; } -function Cb(a) { - a = a[Of] || a[uf]; - return !a || 5 !== a.tag && 6 !== a.tag && 13 !== a.tag && 3 !== a.tag ? null : a; +function Cb(a2) { + a2 = a2[Of] || a2[uf]; + return !a2 || 5 !== a2.tag && 6 !== a2.tag && 13 !== a2.tag && 3 !== a2.tag ? null : a2; } -function ue(a) { - if (5 === a.tag || 6 === a.tag) return a.stateNode; - throw Error(p(33)); +function ue$1(a2) { + if (5 === a2.tag || 6 === a2.tag) return a2.stateNode; + throw Error(p$1(33)); } -function Db(a) { - return a[Pf] || null; +function Db(a2) { + return a2[Pf] || null; } var Sf = [], Tf = -1; -function Uf(a) { - return { current: a }; +function Uf(a2) { + return { current: a2 }; } -function E(a) { - 0 > Tf || (a.current = Sf[Tf], Sf[Tf] = null, Tf--); +function E$1(a2) { + 0 > Tf || (a2.current = Sf[Tf], Sf[Tf] = null, Tf--); } -function G(a, b) { +function G$1(a2, b2) { Tf++; - Sf[Tf] = a.current; - a.current = b; -} -var Vf = {}, H = Uf(Vf), Wf = Uf(false), Xf = Vf; -function Yf(a, b) { - var c = a.type.contextTypes; - if (!c) return Vf; - var d = a.stateNode; - if (d && d.__reactInternalMemoizedUnmaskedChildContext === b) return d.__reactInternalMemoizedMaskedChildContext; - var e = {}, f2; - for (f2 in c) e[f2] = b[f2]; - d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = b, a.__reactInternalMemoizedMaskedChildContext = e); - return e; -} -function Zf(a) { - a = a.childContextTypes; - return null !== a && void 0 !== a; + Sf[Tf] = a2.current; + a2.current = b2; +} +var Vf = {}, H$1 = Uf(Vf), Wf = Uf(false), Xf = Vf; +function Yf(a2, b2) { + var c2 = a2.type.contextTypes; + if (!c2) return Vf; + var d2 = a2.stateNode; + if (d2 && d2.__reactInternalMemoizedUnmaskedChildContext === b2) return d2.__reactInternalMemoizedMaskedChildContext; + var e2 = {}, f2; + for (f2 in c2) e2[f2] = b2[f2]; + d2 && (a2 = a2.stateNode, a2.__reactInternalMemoizedUnmaskedChildContext = b2, a2.__reactInternalMemoizedMaskedChildContext = e2); + return e2; +} +function Zf(a2) { + a2 = a2.childContextTypes; + return null !== a2 && void 0 !== a2; } function $f() { - E(Wf); - E(H); -} -function ag(a, b, c) { - if (H.current !== Vf) throw Error(p(168)); - G(H, b); - G(Wf, c); -} -function bg(a, b, c) { - var d = a.stateNode; - b = b.childContextTypes; - if ("function" !== typeof d.getChildContext) return c; - d = d.getChildContext(); - for (var e in d) if (!(e in b)) throw Error(p(108, Ra(a) || "Unknown", e)); - return A({}, c, d); -} -function cg(a) { - a = (a = a.stateNode) && a.__reactInternalMemoizedMergedChildContext || Vf; - Xf = H.current; - G(H, a); - G(Wf, Wf.current); + E$1(Wf); + E$1(H$1); +} +function ag(a2, b2, c2) { + if (H$1.current !== Vf) throw Error(p$1(168)); + G$1(H$1, b2); + G$1(Wf, c2); +} +function bg(a2, b2, c2) { + var d2 = a2.stateNode; + b2 = b2.childContextTypes; + if ("function" !== typeof d2.getChildContext) return c2; + d2 = d2.getChildContext(); + for (var e2 in d2) if (!(e2 in b2)) throw Error(p$1(108, Ra(a2) || "Unknown", e2)); + return A$1({}, c2, d2); +} +function cg(a2) { + a2 = (a2 = a2.stateNode) && a2.__reactInternalMemoizedMergedChildContext || Vf; + Xf = H$1.current; + G$1(H$1, a2); + G$1(Wf, Wf.current); return true; } -function dg(a, b, c) { - var d = a.stateNode; - if (!d) throw Error(p(169)); - c ? (a = bg(a, b, Xf), d.__reactInternalMemoizedMergedChildContext = a, E(Wf), E(H), G(H, a)) : E(Wf); - G(Wf, c); +function dg(a2, b2, c2) { + var d2 = a2.stateNode; + if (!d2) throw Error(p$1(169)); + c2 ? (a2 = bg(a2, b2, Xf), d2.__reactInternalMemoizedMergedChildContext = a2, E$1(Wf), E$1(H$1), G$1(H$1, a2)) : E$1(Wf); + G$1(Wf, c2); } var eg = null, fg = false, gg = false; -function hg(a) { - null === eg ? eg = [a] : eg.push(a); +function hg(a2) { + null === eg ? eg = [a2] : eg.push(a2); } -function ig(a) { +function ig(a2) { fg = true; - hg(a); + hg(a2); } function jg() { if (!gg && null !== eg) { gg = true; - var a = 0, b = C; + var a2 = 0, b2 = C$1; try { - var c = eg; - for (C = 1; a < c.length; a++) { - var d = c[a]; + var c2 = eg; + for (C$1 = 1; a2 < c2.length; a2++) { + var d2 = c2[a2]; do - d = d(true); - while (null !== d); + d2 = d2(true); + while (null !== d2); } eg = null; fg = false; - } catch (e) { - throw null !== eg && (eg = eg.slice(a + 1)), ac(fc, jg), e; + } catch (e2) { + throw null !== eg && (eg = eg.slice(a2 + 1)), ac(fc, jg), e2; } finally { - C = b, gg = false; + C$1 = b2, gg = false; } } return null; } var kg = [], lg = 0, mg = null, ng = 0, og = [], pg = 0, qg = null, rg = 1, sg = ""; -function tg(a, b) { +function tg(a2, b2) { kg[lg++] = ng; kg[lg++] = mg; - mg = a; - ng = b; + mg = a2; + ng = b2; } -function ug(a, b, c) { +function ug(a2, b2, c2) { og[pg++] = rg; og[pg++] = sg; og[pg++] = qg; - qg = a; - var d = rg; - a = sg; - var e = 32 - oc(d) - 1; - d &= ~(1 << e); - c += 1; - var f2 = 32 - oc(b) + e; + qg = a2; + var d2 = rg; + a2 = sg; + var e2 = 32 - oc(d2) - 1; + d2 &= ~(1 << e2); + c2 += 1; + var f2 = 32 - oc(b2) + e2; if (30 < f2) { - var g = e - e % 5; - f2 = (d & (1 << g) - 1).toString(32); - d >>= g; - e -= g; - rg = 1 << 32 - oc(b) + e | c << e | d; - sg = f2 + a; - } else rg = 1 << f2 | c << e | d, sg = a; -} -function vg(a) { - null !== a.return && (tg(a, 1), ug(a, 1, 0)); -} -function wg(a) { - for (; a === mg; ) mg = kg[--lg], kg[lg] = null, ng = kg[--lg], kg[lg] = null; - for (; a === qg; ) qg = og[--pg], og[pg] = null, sg = og[--pg], og[pg] = null, rg = og[--pg], og[pg] = null; -} -var xg = null, yg = null, I = false, zg = null; -function Ag(a, b) { - var c = Bg(5, null, null, 0); - c.elementType = "DELETED"; - c.stateNode = b; - c.return = a; - b = a.deletions; - null === b ? (a.deletions = [c], a.flags |= 16) : b.push(c); -} -function Cg(a, b) { - switch (a.tag) { + var g2 = e2 - e2 % 5; + f2 = (d2 & (1 << g2) - 1).toString(32); + d2 >>= g2; + e2 -= g2; + rg = 1 << 32 - oc(b2) + e2 | c2 << e2 | d2; + sg = f2 + a2; + } else rg = 1 << f2 | c2 << e2 | d2, sg = a2; +} +function vg(a2) { + null !== a2.return && (tg(a2, 1), ug(a2, 1, 0)); +} +function wg(a2) { + for (; a2 === mg; ) mg = kg[--lg], kg[lg] = null, ng = kg[--lg], kg[lg] = null; + for (; a2 === qg; ) qg = og[--pg], og[pg] = null, sg = og[--pg], og[pg] = null, rg = og[--pg], og[pg] = null; +} +var xg = null, yg = null, I$1 = false, zg = null; +function Ag(a2, b2) { + var c2 = Bg(5, null, null, 0); + c2.elementType = "DELETED"; + c2.stateNode = b2; + c2.return = a2; + b2 = a2.deletions; + null === b2 ? (a2.deletions = [c2], a2.flags |= 16) : b2.push(c2); +} +function Cg(a2, b2) { + switch (a2.tag) { case 5: - var c = a.type; - b = 1 !== b.nodeType || c.toLowerCase() !== b.nodeName.toLowerCase() ? null : b; - return null !== b ? (a.stateNode = b, xg = a, yg = Lf(b.firstChild), true) : false; + var c2 = a2.type; + b2 = 1 !== b2.nodeType || c2.toLowerCase() !== b2.nodeName.toLowerCase() ? null : b2; + return null !== b2 ? (a2.stateNode = b2, xg = a2, yg = Lf(b2.firstChild), true) : false; case 6: - return b = "" === a.pendingProps || 3 !== b.nodeType ? null : b, null !== b ? (a.stateNode = b, xg = a, yg = null, true) : false; + return b2 = "" === a2.pendingProps || 3 !== b2.nodeType ? null : b2, null !== b2 ? (a2.stateNode = b2, xg = a2, yg = null, true) : false; case 13: - return b = 8 !== b.nodeType ? null : b, null !== b ? (c = null !== qg ? { id: rg, overflow: sg } : null, a.memoizedState = { dehydrated: b, treeContext: c, retryLane: 1073741824 }, c = Bg(18, null, null, 0), c.stateNode = b, c.return = a, a.child = c, xg = a, yg = null, true) : false; + return b2 = 8 !== b2.nodeType ? null : b2, null !== b2 ? (c2 = null !== qg ? { id: rg, overflow: sg } : null, a2.memoizedState = { dehydrated: b2, treeContext: c2, retryLane: 1073741824 }, c2 = Bg(18, null, null, 0), c2.stateNode = b2, c2.return = a2, a2.child = c2, xg = a2, yg = null, true) : false; default: return false; } } -function Dg(a) { - return 0 !== (a.mode & 1) && 0 === (a.flags & 128); +function Dg(a2) { + return 0 !== (a2.mode & 1) && 0 === (a2.flags & 128); } -function Eg(a) { - if (I) { - var b = yg; - if (b) { - var c = b; - if (!Cg(a, b)) { - if (Dg(a)) throw Error(p(418)); - b = Lf(c.nextSibling); - var d = xg; - b && Cg(a, b) ? Ag(d, c) : (a.flags = a.flags & -4097 | 2, I = false, xg = a); +function Eg(a2) { + if (I$1) { + var b2 = yg; + if (b2) { + var c2 = b2; + if (!Cg(a2, b2)) { + if (Dg(a2)) throw Error(p$1(418)); + b2 = Lf(c2.nextSibling); + var d2 = xg; + b2 && Cg(a2, b2) ? Ag(d2, c2) : (a2.flags = a2.flags & -4097 | 2, I$1 = false, xg = a2); } } else { - if (Dg(a)) throw Error(p(418)); - a.flags = a.flags & -4097 | 2; - I = false; - xg = a; - } - } -} -function Fg(a) { - for (a = a.return; null !== a && 5 !== a.tag && 3 !== a.tag && 13 !== a.tag; ) a = a.return; - xg = a; -} -function Gg(a) { - if (a !== xg) return false; - if (!I) return Fg(a), I = true, false; - var b; - (b = 3 !== a.tag) && !(b = 5 !== a.tag) && (b = a.type, b = "head" !== b && "body" !== b && !Ef(a.type, a.memoizedProps)); - if (b && (b = yg)) { - if (Dg(a)) throw Hg(), Error(p(418)); - for (; b; ) Ag(a, b), b = Lf(b.nextSibling); - } - Fg(a); - if (13 === a.tag) { - a = a.memoizedState; - a = null !== a ? a.dehydrated : null; - if (!a) throw Error(p(317)); + if (Dg(a2)) throw Error(p$1(418)); + a2.flags = a2.flags & -4097 | 2; + I$1 = false; + xg = a2; + } + } +} +function Fg(a2) { + for (a2 = a2.return; null !== a2 && 5 !== a2.tag && 3 !== a2.tag && 13 !== a2.tag; ) a2 = a2.return; + xg = a2; +} +function Gg(a2) { + if (a2 !== xg) return false; + if (!I$1) return Fg(a2), I$1 = true, false; + var b2; + (b2 = 3 !== a2.tag) && !(b2 = 5 !== a2.tag) && (b2 = a2.type, b2 = "head" !== b2 && "body" !== b2 && !Ef(a2.type, a2.memoizedProps)); + if (b2 && (b2 = yg)) { + if (Dg(a2)) throw Hg(), Error(p$1(418)); + for (; b2; ) Ag(a2, b2), b2 = Lf(b2.nextSibling); + } + Fg(a2); + if (13 === a2.tag) { + a2 = a2.memoizedState; + a2 = null !== a2 ? a2.dehydrated : null; + if (!a2) throw Error(p$1(317)); a: { - a = a.nextSibling; - for (b = 0; a; ) { - if (8 === a.nodeType) { - var c = a.data; - if ("/$" === c) { - if (0 === b) { - yg = Lf(a.nextSibling); + a2 = a2.nextSibling; + for (b2 = 0; a2; ) { + if (8 === a2.nodeType) { + var c2 = a2.data; + if ("/$" === c2) { + if (0 === b2) { + yg = Lf(a2.nextSibling); break a; } - b--; - } else "$" !== c && "$!" !== c && "$?" !== c || b++; + b2--; + } else "$" !== c2 && "$!" !== c2 && "$?" !== c2 || b2++; } - a = a.nextSibling; + a2 = a2.nextSibling; } yg = null; } - } else yg = xg ? Lf(a.stateNode.nextSibling) : null; + } else yg = xg ? Lf(a2.stateNode.nextSibling) : null; return true; } function Hg() { - for (var a = yg; a; ) a = Lf(a.nextSibling); + for (var a2 = yg; a2; ) a2 = Lf(a2.nextSibling); } function Ig() { yg = xg = null; - I = false; + I$1 = false; } -function Jg(a) { - null === zg ? zg = [a] : zg.push(a); +function Jg(a2) { + null === zg ? zg = [a2] : zg.push(a2); } var Kg = ua.ReactCurrentBatchConfig; -function Lg(a, b, c) { - a = c.ref; - if (null !== a && "function" !== typeof a && "object" !== typeof a) { - if (c._owner) { - c = c._owner; - if (c) { - if (1 !== c.tag) throw Error(p(309)); - var d = c.stateNode; - } - if (!d) throw Error(p(147, a)); - var e = d, f2 = "" + a; - if (null !== b && null !== b.ref && "function" === typeof b.ref && b.ref._stringRef === f2) return b.ref; - b = function(a2) { - var b2 = e.refs; - null === a2 ? delete b2[f2] : b2[f2] = a2; +function Lg(a2, b2, c2) { + a2 = c2.ref; + if (null !== a2 && "function" !== typeof a2 && "object" !== typeof a2) { + if (c2._owner) { + c2 = c2._owner; + if (c2) { + if (1 !== c2.tag) throw Error(p$1(309)); + var d2 = c2.stateNode; + } + if (!d2) throw Error(p$1(147, a2)); + var e2 = d2, f2 = "" + a2; + if (null !== b2 && null !== b2.ref && "function" === typeof b2.ref && b2.ref._stringRef === f2) return b2.ref; + b2 = function(a3) { + var b3 = e2.refs; + null === a3 ? delete b3[f2] : b3[f2] = a3; }; - b._stringRef = f2; - return b; + b2._stringRef = f2; + return b2; } - if ("string" !== typeof a) throw Error(p(284)); - if (!c._owner) throw Error(p(290, a)); + if ("string" !== typeof a2) throw Error(p$1(284)); + if (!c2._owner) throw Error(p$1(290, a2)); } - return a; + return a2; } -function Mg(a, b) { - a = Object.prototype.toString.call(b); - throw Error(p(31, "[object Object]" === a ? "object with keys {" + Object.keys(b).join(", ") + "}" : a)); +function Mg(a2, b2) { + a2 = Object.prototype.toString.call(b2); + throw Error(p$1(31, "[object Object]" === a2 ? "object with keys {" + Object.keys(b2).join(", ") + "}" : a2)); } -function Ng(a) { - var b = a._init; - return b(a._payload); +function Ng(a2) { + var b2 = a2._init; + return b2(a2._payload); } -function Og(a) { - function b(b2, c2) { - if (a) { - var d2 = b2.deletions; - null === d2 ? (b2.deletions = [c2], b2.flags |= 16) : d2.push(c2); +function Og(a2) { + function b2(b3, c3) { + if (a2) { + var d3 = b3.deletions; + null === d3 ? (b3.deletions = [c3], b3.flags |= 16) : d3.push(c3); } } - function c(c2, d2) { - if (!a) return null; - for (; null !== d2; ) b(c2, d2), d2 = d2.sibling; + function c2(c3, d3) { + if (!a2) return null; + for (; null !== d3; ) b2(c3, d3), d3 = d3.sibling; return null; } - function d(a2, b2) { - for (a2 = /* @__PURE__ */ new Map(); null !== b2; ) null !== b2.key ? a2.set(b2.key, b2) : a2.set(b2.index, b2), b2 = b2.sibling; - return a2; - } - function e(a2, b2) { - a2 = Pg(a2, b2); - a2.index = 0; - a2.sibling = null; - return a2; - } - function f2(b2, c2, d2) { - b2.index = d2; - if (!a) return b2.flags |= 1048576, c2; - d2 = b2.alternate; - if (null !== d2) return d2 = d2.index, d2 < c2 ? (b2.flags |= 2, c2) : d2; - b2.flags |= 2; - return c2; - } - function g(b2) { - a && null === b2.alternate && (b2.flags |= 2); - return b2; - } - function h(a2, b2, c2, d2) { - if (null === b2 || 6 !== b2.tag) return b2 = Qg(c2, a2.mode, d2), b2.return = a2, b2; - b2 = e(b2, c2); - b2.return = a2; - return b2; - } - function k2(a2, b2, c2, d2) { - var f3 = c2.type; - if (f3 === ya) return m2(a2, b2, c2.props.children, d2, c2.key); - if (null !== b2 && (b2.elementType === f3 || "object" === typeof f3 && null !== f3 && f3.$$typeof === Ha && Ng(f3) === b2.type)) return d2 = e(b2, c2.props), d2.ref = Lg(a2, b2, c2), d2.return = a2, d2; - d2 = Rg(c2.type, c2.key, c2.props, null, a2.mode, d2); - d2.ref = Lg(a2, b2, c2); - d2.return = a2; - return d2; - } - function l2(a2, b2, c2, d2) { - if (null === b2 || 4 !== b2.tag || b2.stateNode.containerInfo !== c2.containerInfo || b2.stateNode.implementation !== c2.implementation) return b2 = Sg(c2, a2.mode, d2), b2.return = a2, b2; - b2 = e(b2, c2.children || []); - b2.return = a2; - return b2; - } - function m2(a2, b2, c2, d2, f3) { - if (null === b2 || 7 !== b2.tag) return b2 = Tg(c2, a2.mode, d2, f3), b2.return = a2, b2; - b2 = e(b2, c2); - b2.return = a2; - return b2; - } - function q2(a2, b2, c2) { - if ("string" === typeof b2 && "" !== b2 || "number" === typeof b2) return b2 = Qg("" + b2, a2.mode, c2), b2.return = a2, b2; - if ("object" === typeof b2 && null !== b2) { - switch (b2.$$typeof) { + function d2(a3, b3) { + for (a3 = /* @__PURE__ */ new Map(); null !== b3; ) null !== b3.key ? a3.set(b3.key, b3) : a3.set(b3.index, b3), b3 = b3.sibling; + return a3; + } + function e2(a3, b3) { + a3 = Pg(a3, b3); + a3.index = 0; + a3.sibling = null; + return a3; + } + function f2(b3, c3, d3) { + b3.index = d3; + if (!a2) return b3.flags |= 1048576, c3; + d3 = b3.alternate; + if (null !== d3) return d3 = d3.index, d3 < c3 ? (b3.flags |= 2, c3) : d3; + b3.flags |= 2; + return c3; + } + function g2(b3) { + a2 && null === b3.alternate && (b3.flags |= 2); + return b3; + } + function h2(a3, b3, c3, d3) { + if (null === b3 || 6 !== b3.tag) return b3 = Qg(c3, a3.mode, d3), b3.return = a3, b3; + b3 = e2(b3, c3); + b3.return = a3; + return b3; + } + function k2(a3, b3, c3, d3) { + var f3 = c3.type; + if (f3 === ya) return m2(a3, b3, c3.props.children, d3, c3.key); + if (null !== b3 && (b3.elementType === f3 || "object" === typeof f3 && null !== f3 && f3.$$typeof === Ha && Ng(f3) === b3.type)) return d3 = e2(b3, c3.props), d3.ref = Lg(a3, b3, c3), d3.return = a3, d3; + d3 = Rg(c3.type, c3.key, c3.props, null, a3.mode, d3); + d3.ref = Lg(a3, b3, c3); + d3.return = a3; + return d3; + } + function l2(a3, b3, c3, d3) { + if (null === b3 || 4 !== b3.tag || b3.stateNode.containerInfo !== c3.containerInfo || b3.stateNode.implementation !== c3.implementation) return b3 = Sg(c3, a3.mode, d3), b3.return = a3, b3; + b3 = e2(b3, c3.children || []); + b3.return = a3; + return b3; + } + function m2(a3, b3, c3, d3, f3) { + if (null === b3 || 7 !== b3.tag) return b3 = Tg(c3, a3.mode, d3, f3), b3.return = a3, b3; + b3 = e2(b3, c3); + b3.return = a3; + return b3; + } + function q2(a3, b3, c3) { + if ("string" === typeof b3 && "" !== b3 || "number" === typeof b3) return b3 = Qg("" + b3, a3.mode, c3), b3.return = a3, b3; + if ("object" === typeof b3 && null !== b3) { + switch (b3.$$typeof) { case va: - return c2 = Rg(b2.type, b2.key, b2.props, null, a2.mode, c2), c2.ref = Lg(a2, null, b2), c2.return = a2, c2; + return c3 = Rg(b3.type, b3.key, b3.props, null, a3.mode, c3), c3.ref = Lg(a3, null, b3), c3.return = a3, c3; case wa: - return b2 = Sg(b2, a2.mode, c2), b2.return = a2, b2; + return b3 = Sg(b3, a3.mode, c3), b3.return = a3, b3; case Ha: - var d2 = b2._init; - return q2(a2, d2(b2._payload), c2); + var d3 = b3._init; + return q2(a3, d3(b3._payload), c3); } - if (eb(b2) || Ka(b2)) return b2 = Tg(b2, a2.mode, c2, null), b2.return = a2, b2; - Mg(a2, b2); + if (eb(b3) || Ka(b3)) return b3 = Tg(b3, a3.mode, c3, null), b3.return = a3, b3; + Mg(a3, b3); } return null; } - function r2(a2, b2, c2, d2) { - var e2 = null !== b2 ? b2.key : null; - if ("string" === typeof c2 && "" !== c2 || "number" === typeof c2) return null !== e2 ? null : h(a2, b2, "" + c2, d2); - if ("object" === typeof c2 && null !== c2) { - switch (c2.$$typeof) { + function r2(a3, b3, c3, d3) { + var e3 = null !== b3 ? b3.key : null; + if ("string" === typeof c3 && "" !== c3 || "number" === typeof c3) return null !== e3 ? null : h2(a3, b3, "" + c3, d3); + if ("object" === typeof c3 && null !== c3) { + switch (c3.$$typeof) { case va: - return c2.key === e2 ? k2(a2, b2, c2, d2) : null; + return c3.key === e3 ? k2(a3, b3, c3, d3) : null; case wa: - return c2.key === e2 ? l2(a2, b2, c2, d2) : null; + return c3.key === e3 ? l2(a3, b3, c3, d3) : null; case Ha: - return e2 = c2._init, r2( - a2, - b2, - e2(c2._payload), - d2 + return e3 = c3._init, r2( + a3, + b3, + e3(c3._payload), + d3 ); } - if (eb(c2) || Ka(c2)) return null !== e2 ? null : m2(a2, b2, c2, d2, null); - Mg(a2, c2); + if (eb(c3) || Ka(c3)) return null !== e3 ? null : m2(a3, b3, c3, d3, null); + Mg(a3, c3); } return null; } - function y2(a2, b2, c2, d2, e2) { - if ("string" === typeof d2 && "" !== d2 || "number" === typeof d2) return a2 = a2.get(c2) || null, h(b2, a2, "" + d2, e2); - if ("object" === typeof d2 && null !== d2) { - switch (d2.$$typeof) { + function y2(a3, b3, c3, d3, e3) { + if ("string" === typeof d3 && "" !== d3 || "number" === typeof d3) return a3 = a3.get(c3) || null, h2(b3, a3, "" + d3, e3); + if ("object" === typeof d3 && null !== d3) { + switch (d3.$$typeof) { case va: - return a2 = a2.get(null === d2.key ? c2 : d2.key) || null, k2(b2, a2, d2, e2); + return a3 = a3.get(null === d3.key ? c3 : d3.key) || null, k2(b3, a3, d3, e3); case wa: - return a2 = a2.get(null === d2.key ? c2 : d2.key) || null, l2(b2, a2, d2, e2); + return a3 = a3.get(null === d3.key ? c3 : d3.key) || null, l2(b3, a3, d3, e3); case Ha: - var f3 = d2._init; - return y2(a2, b2, c2, f3(d2._payload), e2); + var f3 = d3._init; + return y2(a3, b3, c3, f3(d3._payload), e3); } - if (eb(d2) || Ka(d2)) return a2 = a2.get(c2) || null, m2(b2, a2, d2, e2, null); - Mg(b2, d2); + if (eb(d3) || Ka(d3)) return a3 = a3.get(c3) || null, m2(b3, a3, d3, e3, null); + Mg(b3, d3); } return null; } - function n2(e2, g2, h3, k3) { - for (var l3 = null, m3 = null, u2 = g2, w2 = g2 = 0, x2 = null; null !== u2 && w2 < h3.length; w2++) { + function n2(e3, g3, h3, k3) { + for (var l3 = null, m3 = null, u2 = g3, w2 = g3 = 0, x2 = null; null !== u2 && w2 < h3.length; w2++) { u2.index > w2 ? (x2 = u2, u2 = null) : x2 = u2.sibling; - var n3 = r2(e2, u2, h3[w2], k3); + var n3 = r2(e3, u2, h3[w2], k3); if (null === n3) { null === u2 && (u2 = x2); break; } - a && u2 && null === n3.alternate && b(e2, u2); - g2 = f2(n3, g2, w2); + a2 && u2 && null === n3.alternate && b2(e3, u2); + g3 = f2(n3, g3, w2); null === m3 ? l3 = n3 : m3.sibling = n3; m3 = n3; u2 = x2; } - if (w2 === h3.length) return c(e2, u2), I && tg(e2, w2), l3; + if (w2 === h3.length) return c2(e3, u2), I$1 && tg(e3, w2), l3; if (null === u2) { - for (; w2 < h3.length; w2++) u2 = q2(e2, h3[w2], k3), null !== u2 && (g2 = f2(u2, g2, w2), null === m3 ? l3 = u2 : m3.sibling = u2, m3 = u2); - I && tg(e2, w2); + for (; w2 < h3.length; w2++) u2 = q2(e3, h3[w2], k3), null !== u2 && (g3 = f2(u2, g3, w2), null === m3 ? l3 = u2 : m3.sibling = u2, m3 = u2); + I$1 && tg(e3, w2); return l3; } - for (u2 = d(e2, u2); w2 < h3.length; w2++) x2 = y2(u2, e2, w2, h3[w2], k3), null !== x2 && (a && null !== x2.alternate && u2.delete(null === x2.key ? w2 : x2.key), g2 = f2(x2, g2, w2), null === m3 ? l3 = x2 : m3.sibling = x2, m3 = x2); - a && u2.forEach(function(a2) { - return b(e2, a2); + for (u2 = d2(e3, u2); w2 < h3.length; w2++) x2 = y2(u2, e3, w2, h3[w2], k3), null !== x2 && (a2 && null !== x2.alternate && u2.delete(null === x2.key ? w2 : x2.key), g3 = f2(x2, g3, w2), null === m3 ? l3 = x2 : m3.sibling = x2, m3 = x2); + a2 && u2.forEach(function(a3) { + return b2(e3, a3); }); - I && tg(e2, w2); + I$1 && tg(e3, w2); return l3; } - function t2(e2, g2, h3, k3) { + function t2(e3, g3, h3, k3) { var l3 = Ka(h3); - if ("function" !== typeof l3) throw Error(p(150)); + if ("function" !== typeof l3) throw Error(p$1(150)); h3 = l3.call(h3); - if (null == h3) throw Error(p(151)); - for (var u2 = l3 = null, m3 = g2, w2 = g2 = 0, x2 = null, n3 = h3.next(); null !== m3 && !n3.done; w2++, n3 = h3.next()) { + if (null == h3) throw Error(p$1(151)); + for (var u2 = l3 = null, m3 = g3, w2 = g3 = 0, x2 = null, n3 = h3.next(); null !== m3 && !n3.done; w2++, n3 = h3.next()) { m3.index > w2 ? (x2 = m3, m3 = null) : x2 = m3.sibling; - var t3 = r2(e2, m3, n3.value, k3); + var t3 = r2(e3, m3, n3.value, k3); if (null === t3) { null === m3 && (m3 = x2); break; } - a && m3 && null === t3.alternate && b(e2, m3); - g2 = f2(t3, g2, w2); + a2 && m3 && null === t3.alternate && b2(e3, m3); + g3 = f2(t3, g3, w2); null === u2 ? l3 = t3 : u2.sibling = t3; u2 = t3; m3 = x2; } - if (n3.done) return c( - e2, + if (n3.done) return c2( + e3, m3 - ), I && tg(e2, w2), l3; + ), I$1 && tg(e3, w2), l3; if (null === m3) { - for (; !n3.done; w2++, n3 = h3.next()) n3 = q2(e2, n3.value, k3), null !== n3 && (g2 = f2(n3, g2, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); - I && tg(e2, w2); + for (; !n3.done; w2++, n3 = h3.next()) n3 = q2(e3, n3.value, k3), null !== n3 && (g3 = f2(n3, g3, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); + I$1 && tg(e3, w2); return l3; } - for (m3 = d(e2, m3); !n3.done; w2++, n3 = h3.next()) n3 = y2(m3, e2, w2, n3.value, k3), null !== n3 && (a && null !== n3.alternate && m3.delete(null === n3.key ? w2 : n3.key), g2 = f2(n3, g2, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); - a && m3.forEach(function(a2) { - return b(e2, a2); + for (m3 = d2(e3, m3); !n3.done; w2++, n3 = h3.next()) n3 = y2(m3, e3, w2, n3.value, k3), null !== n3 && (a2 && null !== n3.alternate && m3.delete(null === n3.key ? w2 : n3.key), g3 = f2(n3, g3, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); + a2 && m3.forEach(function(a3) { + return b2(e3, a3); }); - I && tg(e2, w2); + I$1 && tg(e3, w2); return l3; } - function J2(a2, d2, f3, h3) { + function J2(a3, d3, f3, h3) { "object" === typeof f3 && null !== f3 && f3.type === ya && null === f3.key && (f3 = f3.props.children); if ("object" === typeof f3 && null !== f3) { switch (f3.$$typeof) { case va: a: { - for (var k3 = f3.key, l3 = d2; null !== l3; ) { + for (var k3 = f3.key, l3 = d3; null !== l3; ) { if (l3.key === k3) { k3 = f3.type; if (k3 === ya) { if (7 === l3.tag) { - c(a2, l3.sibling); - d2 = e(l3, f3.props.children); - d2.return = a2; - a2 = d2; + c2(a3, l3.sibling); + d3 = e2(l3, f3.props.children); + d3.return = a3; + a3 = d3; break a; } } else if (l3.elementType === k3 || "object" === typeof k3 && null !== k3 && k3.$$typeof === Ha && Ng(k3) === l3.type) { - c(a2, l3.sibling); - d2 = e(l3, f3.props); - d2.ref = Lg(a2, l3, f3); - d2.return = a2; - a2 = d2; + c2(a3, l3.sibling); + d3 = e2(l3, f3.props); + d3.ref = Lg(a3, l3, f3); + d3.return = a3; + a3 = d3; break a; } - c(a2, l3); + c2(a3, l3); break; - } else b(a2, l3); + } else b2(a3, l3); l3 = l3.sibling; } - f3.type === ya ? (d2 = Tg(f3.props.children, a2.mode, h3, f3.key), d2.return = a2, a2 = d2) : (h3 = Rg(f3.type, f3.key, f3.props, null, a2.mode, h3), h3.ref = Lg(a2, d2, f3), h3.return = a2, a2 = h3); + f3.type === ya ? (d3 = Tg(f3.props.children, a3.mode, h3, f3.key), d3.return = a3, a3 = d3) : (h3 = Rg(f3.type, f3.key, f3.props, null, a3.mode, h3), h3.ref = Lg(a3, d3, f3), h3.return = a3, a3 = h3); } - return g(a2); + return g2(a3); case wa: a: { - for (l3 = f3.key; null !== d2; ) { - if (d2.key === l3) if (4 === d2.tag && d2.stateNode.containerInfo === f3.containerInfo && d2.stateNode.implementation === f3.implementation) { - c(a2, d2.sibling); - d2 = e(d2, f3.children || []); - d2.return = a2; - a2 = d2; + for (l3 = f3.key; null !== d3; ) { + if (d3.key === l3) if (4 === d3.tag && d3.stateNode.containerInfo === f3.containerInfo && d3.stateNode.implementation === f3.implementation) { + c2(a3, d3.sibling); + d3 = e2(d3, f3.children || []); + d3.return = a3; + a3 = d3; break a; } else { - c(a2, d2); + c2(a3, d3); break; } - else b(a2, d2); - d2 = d2.sibling; + else b2(a3, d3); + d3 = d3.sibling; } - d2 = Sg(f3, a2.mode, h3); - d2.return = a2; - a2 = d2; + d3 = Sg(f3, a3.mode, h3); + d3.return = a3; + a3 = d3; } - return g(a2); + return g2(a3); case Ha: - return l3 = f3._init, J2(a2, d2, l3(f3._payload), h3); + return l3 = f3._init, J2(a3, d3, l3(f3._payload), h3); } - if (eb(f3)) return n2(a2, d2, f3, h3); - if (Ka(f3)) return t2(a2, d2, f3, h3); - Mg(a2, f3); + if (eb(f3)) return n2(a3, d3, f3, h3); + if (Ka(f3)) return t2(a3, d3, f3, h3); + Mg(a3, f3); } - return "string" === typeof f3 && "" !== f3 || "number" === typeof f3 ? (f3 = "" + f3, null !== d2 && 6 === d2.tag ? (c(a2, d2.sibling), d2 = e(d2, f3), d2.return = a2, a2 = d2) : (c(a2, d2), d2 = Qg(f3, a2.mode, h3), d2.return = a2, a2 = d2), g(a2)) : c(a2, d2); + return "string" === typeof f3 && "" !== f3 || "number" === typeof f3 ? (f3 = "" + f3, null !== d3 && 6 === d3.tag ? (c2(a3, d3.sibling), d3 = e2(d3, f3), d3.return = a3, a3 = d3) : (c2(a3, d3), d3 = Qg(f3, a3.mode, h3), d3.return = a3, a3 = d3), g2(a3)) : c2(a3, d3); } return J2; } @@ -3125,142 +3125,142 @@ var Ug = Og(true), Vg = Og(false), Wg = Uf(null), Xg = null, Yg = null, Zg = nul function $g() { Zg = Yg = Xg = null; } -function ah(a) { - var b = Wg.current; - E(Wg); - a._currentValue = b; +function ah(a2) { + var b2 = Wg.current; + E$1(Wg); + a2._currentValue = b2; } -function bh(a, b, c) { - for (; null !== a; ) { - var d = a.alternate; - (a.childLanes & b) !== b ? (a.childLanes |= b, null !== d && (d.childLanes |= b)) : null !== d && (d.childLanes & b) !== b && (d.childLanes |= b); - if (a === c) break; - a = a.return; +function bh(a2, b2, c2) { + for (; null !== a2; ) { + var d2 = a2.alternate; + (a2.childLanes & b2) !== b2 ? (a2.childLanes |= b2, null !== d2 && (d2.childLanes |= b2)) : null !== d2 && (d2.childLanes & b2) !== b2 && (d2.childLanes |= b2); + if (a2 === c2) break; + a2 = a2.return; } } -function ch(a, b) { - Xg = a; +function ch(a2, b2) { + Xg = a2; Zg = Yg = null; - a = a.dependencies; - null !== a && null !== a.firstContext && (0 !== (a.lanes & b) && (dh = true), a.firstContext = null); -} -function eh(a) { - var b = a._currentValue; - if (Zg !== a) if (a = { context: a, memoizedValue: b, next: null }, null === Yg) { - if (null === Xg) throw Error(p(308)); - Yg = a; - Xg.dependencies = { lanes: 0, firstContext: a }; - } else Yg = Yg.next = a; - return b; + a2 = a2.dependencies; + null !== a2 && null !== a2.firstContext && (0 !== (a2.lanes & b2) && (dh = true), a2.firstContext = null); +} +function eh(a2) { + var b2 = a2._currentValue; + if (Zg !== a2) if (a2 = { context: a2, memoizedValue: b2, next: null }, null === Yg) { + if (null === Xg) throw Error(p$1(308)); + Yg = a2; + Xg.dependencies = { lanes: 0, firstContext: a2 }; + } else Yg = Yg.next = a2; + return b2; } var fh = null; -function gh(a) { - null === fh ? fh = [a] : fh.push(a); -} -function hh(a, b, c, d) { - var e = b.interleaved; - null === e ? (c.next = c, gh(b)) : (c.next = e.next, e.next = c); - b.interleaved = c; - return ih(a, d); -} -function ih(a, b) { - a.lanes |= b; - var c = a.alternate; - null !== c && (c.lanes |= b); - c = a; - for (a = a.return; null !== a; ) a.childLanes |= b, c = a.alternate, null !== c && (c.childLanes |= b), c = a, a = a.return; - return 3 === c.tag ? c.stateNode : null; +function gh(a2) { + null === fh ? fh = [a2] : fh.push(a2); +} +function hh(a2, b2, c2, d2) { + var e2 = b2.interleaved; + null === e2 ? (c2.next = c2, gh(b2)) : (c2.next = e2.next, e2.next = c2); + b2.interleaved = c2; + return ih(a2, d2); +} +function ih(a2, b2) { + a2.lanes |= b2; + var c2 = a2.alternate; + null !== c2 && (c2.lanes |= b2); + c2 = a2; + for (a2 = a2.return; null !== a2; ) a2.childLanes |= b2, c2 = a2.alternate, null !== c2 && (c2.childLanes |= b2), c2 = a2, a2 = a2.return; + return 3 === c2.tag ? c2.stateNode : null; } var jh = false; -function kh(a) { - a.updateQueue = { baseState: a.memoizedState, firstBaseUpdate: null, lastBaseUpdate: null, shared: { pending: null, interleaved: null, lanes: 0 }, effects: null }; -} -function lh(a, b) { - a = a.updateQueue; - b.updateQueue === a && (b.updateQueue = { baseState: a.baseState, firstBaseUpdate: a.firstBaseUpdate, lastBaseUpdate: a.lastBaseUpdate, shared: a.shared, effects: a.effects }); -} -function mh(a, b) { - return { eventTime: a, lane: b, tag: 0, payload: null, callback: null, next: null }; -} -function nh(a, b, c) { - var d = a.updateQueue; - if (null === d) return null; - d = d.shared; - if (0 !== (K & 2)) { - var e = d.pending; - null === e ? b.next = b : (b.next = e.next, e.next = b); - d.pending = b; - return ih(a, c); - } - e = d.interleaved; - null === e ? (b.next = b, gh(d)) : (b.next = e.next, e.next = b); - d.interleaved = b; - return ih(a, c); -} -function oh(a, b, c) { - b = b.updateQueue; - if (null !== b && (b = b.shared, 0 !== (c & 4194240))) { - var d = b.lanes; - d &= a.pendingLanes; - c |= d; - b.lanes = c; - Cc(a, c); - } -} -function ph(a, b) { - var c = a.updateQueue, d = a.alternate; - if (null !== d && (d = d.updateQueue, c === d)) { - var e = null, f2 = null; - c = c.firstBaseUpdate; - if (null !== c) { +function kh(a2) { + a2.updateQueue = { baseState: a2.memoizedState, firstBaseUpdate: null, lastBaseUpdate: null, shared: { pending: null, interleaved: null, lanes: 0 }, effects: null }; +} +function lh(a2, b2) { + a2 = a2.updateQueue; + b2.updateQueue === a2 && (b2.updateQueue = { baseState: a2.baseState, firstBaseUpdate: a2.firstBaseUpdate, lastBaseUpdate: a2.lastBaseUpdate, shared: a2.shared, effects: a2.effects }); +} +function mh(a2, b2) { + return { eventTime: a2, lane: b2, tag: 0, payload: null, callback: null, next: null }; +} +function nh(a2, b2, c2) { + var d2 = a2.updateQueue; + if (null === d2) return null; + d2 = d2.shared; + if (0 !== (K$1 & 2)) { + var e2 = d2.pending; + null === e2 ? b2.next = b2 : (b2.next = e2.next, e2.next = b2); + d2.pending = b2; + return ih(a2, c2); + } + e2 = d2.interleaved; + null === e2 ? (b2.next = b2, gh(d2)) : (b2.next = e2.next, e2.next = b2); + d2.interleaved = b2; + return ih(a2, c2); +} +function oh(a2, b2, c2) { + b2 = b2.updateQueue; + if (null !== b2 && (b2 = b2.shared, 0 !== (c2 & 4194240))) { + var d2 = b2.lanes; + d2 &= a2.pendingLanes; + c2 |= d2; + b2.lanes = c2; + Cc(a2, c2); + } +} +function ph(a2, b2) { + var c2 = a2.updateQueue, d2 = a2.alternate; + if (null !== d2 && (d2 = d2.updateQueue, c2 === d2)) { + var e2 = null, f2 = null; + c2 = c2.firstBaseUpdate; + if (null !== c2) { do { - var g = { eventTime: c.eventTime, lane: c.lane, tag: c.tag, payload: c.payload, callback: c.callback, next: null }; - null === f2 ? e = f2 = g : f2 = f2.next = g; - c = c.next; - } while (null !== c); - null === f2 ? e = f2 = b : f2 = f2.next = b; - } else e = f2 = b; - c = { baseState: d.baseState, firstBaseUpdate: e, lastBaseUpdate: f2, shared: d.shared, effects: d.effects }; - a.updateQueue = c; + var g2 = { eventTime: c2.eventTime, lane: c2.lane, tag: c2.tag, payload: c2.payload, callback: c2.callback, next: null }; + null === f2 ? e2 = f2 = g2 : f2 = f2.next = g2; + c2 = c2.next; + } while (null !== c2); + null === f2 ? e2 = f2 = b2 : f2 = f2.next = b2; + } else e2 = f2 = b2; + c2 = { baseState: d2.baseState, firstBaseUpdate: e2, lastBaseUpdate: f2, shared: d2.shared, effects: d2.effects }; + a2.updateQueue = c2; return; } - a = c.lastBaseUpdate; - null === a ? c.firstBaseUpdate = b : a.next = b; - c.lastBaseUpdate = b; + a2 = c2.lastBaseUpdate; + null === a2 ? c2.firstBaseUpdate = b2 : a2.next = b2; + c2.lastBaseUpdate = b2; } -function qh(a, b, c, d) { - var e = a.updateQueue; +function qh(a2, b2, c2, d2) { + var e2 = a2.updateQueue; jh = false; - var f2 = e.firstBaseUpdate, g = e.lastBaseUpdate, h = e.shared.pending; - if (null !== h) { - e.shared.pending = null; - var k2 = h, l2 = k2.next; + var f2 = e2.firstBaseUpdate, g2 = e2.lastBaseUpdate, h2 = e2.shared.pending; + if (null !== h2) { + e2.shared.pending = null; + var k2 = h2, l2 = k2.next; k2.next = null; - null === g ? f2 = l2 : g.next = l2; - g = k2; - var m2 = a.alternate; - null !== m2 && (m2 = m2.updateQueue, h = m2.lastBaseUpdate, h !== g && (null === h ? m2.firstBaseUpdate = l2 : h.next = l2, m2.lastBaseUpdate = k2)); + null === g2 ? f2 = l2 : g2.next = l2; + g2 = k2; + var m2 = a2.alternate; + null !== m2 && (m2 = m2.updateQueue, h2 = m2.lastBaseUpdate, h2 !== g2 && (null === h2 ? m2.firstBaseUpdate = l2 : h2.next = l2, m2.lastBaseUpdate = k2)); } if (null !== f2) { - var q2 = e.baseState; - g = 0; + var q2 = e2.baseState; + g2 = 0; m2 = l2 = k2 = null; - h = f2; + h2 = f2; do { - var r2 = h.lane, y2 = h.eventTime; - if ((d & r2) === r2) { + var r2 = h2.lane, y2 = h2.eventTime; + if ((d2 & r2) === r2) { null !== m2 && (m2 = m2.next = { eventTime: y2, lane: 0, - tag: h.tag, - payload: h.payload, - callback: h.callback, + tag: h2.tag, + payload: h2.payload, + callback: h2.callback, next: null }); a: { - var n2 = a, t2 = h; - r2 = b; - y2 = c; + var n2 = a2, t2 = h2; + r2 = b2; + y2 = c2; switch (t2.tag) { case 1: n2 = t2.payload; @@ -3276,197 +3276,197 @@ function qh(a, b, c, d) { n2 = t2.payload; r2 = "function" === typeof n2 ? n2.call(y2, q2, r2) : n2; if (null === r2 || void 0 === r2) break a; - q2 = A({}, q2, r2); + q2 = A$1({}, q2, r2); break a; case 2: jh = true; } } - null !== h.callback && 0 !== h.lane && (a.flags |= 64, r2 = e.effects, null === r2 ? e.effects = [h] : r2.push(h)); - } else y2 = { eventTime: y2, lane: r2, tag: h.tag, payload: h.payload, callback: h.callback, next: null }, null === m2 ? (l2 = m2 = y2, k2 = q2) : m2 = m2.next = y2, g |= r2; - h = h.next; - if (null === h) if (h = e.shared.pending, null === h) break; - else r2 = h, h = r2.next, r2.next = null, e.lastBaseUpdate = r2, e.shared.pending = null; + null !== h2.callback && 0 !== h2.lane && (a2.flags |= 64, r2 = e2.effects, null === r2 ? e2.effects = [h2] : r2.push(h2)); + } else y2 = { eventTime: y2, lane: r2, tag: h2.tag, payload: h2.payload, callback: h2.callback, next: null }, null === m2 ? (l2 = m2 = y2, k2 = q2) : m2 = m2.next = y2, g2 |= r2; + h2 = h2.next; + if (null === h2) if (h2 = e2.shared.pending, null === h2) break; + else r2 = h2, h2 = r2.next, r2.next = null, e2.lastBaseUpdate = r2, e2.shared.pending = null; } while (1); null === m2 && (k2 = q2); - e.baseState = k2; - e.firstBaseUpdate = l2; - e.lastBaseUpdate = m2; - b = e.shared.interleaved; - if (null !== b) { - e = b; + e2.baseState = k2; + e2.firstBaseUpdate = l2; + e2.lastBaseUpdate = m2; + b2 = e2.shared.interleaved; + if (null !== b2) { + e2 = b2; do - g |= e.lane, e = e.next; - while (e !== b); - } else null === f2 && (e.shared.lanes = 0); - rh |= g; - a.lanes = g; - a.memoizedState = q2; + g2 |= e2.lane, e2 = e2.next; + while (e2 !== b2); + } else null === f2 && (e2.shared.lanes = 0); + rh |= g2; + a2.lanes = g2; + a2.memoizedState = q2; } } -function sh(a, b, c) { - a = b.effects; - b.effects = null; - if (null !== a) for (b = 0; b < a.length; b++) { - var d = a[b], e = d.callback; - if (null !== e) { - d.callback = null; - d = c; - if ("function" !== typeof e) throw Error(p(191, e)); - e.call(d); +function sh(a2, b2, c2) { + a2 = b2.effects; + b2.effects = null; + if (null !== a2) for (b2 = 0; b2 < a2.length; b2++) { + var d2 = a2[b2], e2 = d2.callback; + if (null !== e2) { + d2.callback = null; + d2 = c2; + if ("function" !== typeof e2) throw Error(p$1(191, e2)); + e2.call(d2); } } } var th = {}, uh = Uf(th), vh = Uf(th), wh = Uf(th); -function xh(a) { - if (a === th) throw Error(p(174)); - return a; -} -function yh(a, b) { - G(wh, b); - G(vh, a); - G(uh, th); - a = b.nodeType; - switch (a) { +function xh(a2) { + if (a2 === th) throw Error(p$1(174)); + return a2; +} +function yh(a2, b2) { + G$1(wh, b2); + G$1(vh, a2); + G$1(uh, th); + a2 = b2.nodeType; + switch (a2) { case 9: case 11: - b = (b = b.documentElement) ? b.namespaceURI : lb(null, ""); + b2 = (b2 = b2.documentElement) ? b2.namespaceURI : lb(null, ""); break; default: - a = 8 === a ? b.parentNode : b, b = a.namespaceURI || null, a = a.tagName, b = lb(b, a); + a2 = 8 === a2 ? b2.parentNode : b2, b2 = a2.namespaceURI || null, a2 = a2.tagName, b2 = lb(b2, a2); } - E(uh); - G(uh, b); + E$1(uh); + G$1(uh, b2); } function zh() { - E(uh); - E(vh); - E(wh); + E$1(uh); + E$1(vh); + E$1(wh); } -function Ah(a) { +function Ah(a2) { xh(wh.current); - var b = xh(uh.current); - var c = lb(b, a.type); - b !== c && (G(vh, a), G(uh, c)); -} -function Bh(a) { - vh.current === a && (E(uh), E(vh)); -} -var L$2 = Uf(0); -function Ch(a) { - for (var b = a; null !== b; ) { - if (13 === b.tag) { - var c = b.memoizedState; - if (null !== c && (c = c.dehydrated, null === c || "$?" === c.data || "$!" === c.data)) return b; - } else if (19 === b.tag && void 0 !== b.memoizedProps.revealOrder) { - if (0 !== (b.flags & 128)) return b; - } else if (null !== b.child) { - b.child.return = b; - b = b.child; + var b2 = xh(uh.current); + var c2 = lb(b2, a2.type); + b2 !== c2 && (G$1(vh, a2), G$1(uh, c2)); +} +function Bh(a2) { + vh.current === a2 && (E$1(uh), E$1(vh)); +} +var L$1 = Uf(0); +function Ch(a2) { + for (var b2 = a2; null !== b2; ) { + if (13 === b2.tag) { + var c2 = b2.memoizedState; + if (null !== c2 && (c2 = c2.dehydrated, null === c2 || "$?" === c2.data || "$!" === c2.data)) return b2; + } else if (19 === b2.tag && void 0 !== b2.memoizedProps.revealOrder) { + if (0 !== (b2.flags & 128)) return b2; + } else if (null !== b2.child) { + b2.child.return = b2; + b2 = b2.child; continue; } - if (b === a) break; - for (; null === b.sibling; ) { - if (null === b.return || b.return === a) return null; - b = b.return; + if (b2 === a2) break; + for (; null === b2.sibling; ) { + if (null === b2.return || b2.return === a2) return null; + b2 = b2.return; } - b.sibling.return = b.return; - b = b.sibling; + b2.sibling.return = b2.return; + b2 = b2.sibling; } return null; } var Dh = []; function Eh() { - for (var a = 0; a < Dh.length; a++) Dh[a]._workInProgressVersionPrimary = null; + for (var a2 = 0; a2 < Dh.length; a2++) Dh[a2]._workInProgressVersionPrimary = null; Dh.length = 0; } -var Fh = ua.ReactCurrentDispatcher, Gh = ua.ReactCurrentBatchConfig, Hh = 0, M = null, N = null, O = null, Ih = false, Jh = false, Kh = 0, Lh = 0; -function P() { - throw Error(p(321)); +var Fh = ua.ReactCurrentDispatcher, Gh = ua.ReactCurrentBatchConfig, Hh = 0, M$1 = null, N$1 = null, O$1 = null, Ih = false, Jh = false, Kh = 0, Lh = 0; +function P$1() { + throw Error(p$1(321)); } -function Mh(a, b) { - if (null === b) return false; - for (var c = 0; c < b.length && c < a.length; c++) if (!He(a[c], b[c])) return false; +function Mh(a2, b2) { + if (null === b2) return false; + for (var c2 = 0; c2 < b2.length && c2 < a2.length; c2++) if (!He$1(a2[c2], b2[c2])) return false; return true; } -function Nh(a, b, c, d, e, f2) { +function Nh(a2, b2, c2, d2, e2, f2) { Hh = f2; - M = b; - b.memoizedState = null; - b.updateQueue = null; - b.lanes = 0; - Fh.current = null === a || null === a.memoizedState ? Oh : Ph; - a = c(d, e); + M$1 = b2; + b2.memoizedState = null; + b2.updateQueue = null; + b2.lanes = 0; + Fh.current = null === a2 || null === a2.memoizedState ? Oh : Ph; + a2 = c2(d2, e2); if (Jh) { f2 = 0; do { Jh = false; Kh = 0; - if (25 <= f2) throw Error(p(301)); + if (25 <= f2) throw Error(p$1(301)); f2 += 1; - O = N = null; - b.updateQueue = null; + O$1 = N$1 = null; + b2.updateQueue = null; Fh.current = Qh; - a = c(d, e); + a2 = c2(d2, e2); } while (Jh); } Fh.current = Rh; - b = null !== N && null !== N.next; + b2 = null !== N$1 && null !== N$1.next; Hh = 0; - O = N = M = null; + O$1 = N$1 = M$1 = null; Ih = false; - if (b) throw Error(p(300)); - return a; + if (b2) throw Error(p$1(300)); + return a2; } function Sh() { - var a = 0 !== Kh; + var a2 = 0 !== Kh; Kh = 0; - return a; + return a2; } function Th() { - var a = { memoizedState: null, baseState: null, baseQueue: null, queue: null, next: null }; - null === O ? M.memoizedState = O = a : O = O.next = a; - return O; + var a2 = { memoizedState: null, baseState: null, baseQueue: null, queue: null, next: null }; + null === O$1 ? M$1.memoizedState = O$1 = a2 : O$1 = O$1.next = a2; + return O$1; } function Uh() { - if (null === N) { - var a = M.alternate; - a = null !== a ? a.memoizedState : null; - } else a = N.next; - var b = null === O ? M.memoizedState : O.next; - if (null !== b) O = b, N = a; + if (null === N$1) { + var a2 = M$1.alternate; + a2 = null !== a2 ? a2.memoizedState : null; + } else a2 = N$1.next; + var b2 = null === O$1 ? M$1.memoizedState : O$1.next; + if (null !== b2) O$1 = b2, N$1 = a2; else { - if (null === a) throw Error(p(310)); - N = a; - a = { memoizedState: N.memoizedState, baseState: N.baseState, baseQueue: N.baseQueue, queue: N.queue, next: null }; - null === O ? M.memoizedState = O = a : O = O.next = a; + if (null === a2) throw Error(p$1(310)); + N$1 = a2; + a2 = { memoizedState: N$1.memoizedState, baseState: N$1.baseState, baseQueue: N$1.baseQueue, queue: N$1.queue, next: null }; + null === O$1 ? M$1.memoizedState = O$1 = a2 : O$1 = O$1.next = a2; } - return O; + return O$1; } -function Vh(a, b) { - return "function" === typeof b ? b(a) : b; +function Vh(a2, b2) { + return "function" === typeof b2 ? b2(a2) : b2; } -function Wh(a) { - var b = Uh(), c = b.queue; - if (null === c) throw Error(p(311)); - c.lastRenderedReducer = a; - var d = N, e = d.baseQueue, f2 = c.pending; +function Wh(a2) { + var b2 = Uh(), c2 = b2.queue; + if (null === c2) throw Error(p$1(311)); + c2.lastRenderedReducer = a2; + var d2 = N$1, e2 = d2.baseQueue, f2 = c2.pending; if (null !== f2) { - if (null !== e) { - var g = e.next; - e.next = f2.next; - f2.next = g; - } - d.baseQueue = e = f2; - c.pending = null; - } - if (null !== e) { - f2 = e.next; - d = d.baseState; - var h = g = null, k2 = null, l2 = f2; + if (null !== e2) { + var g2 = e2.next; + e2.next = f2.next; + f2.next = g2; + } + d2.baseQueue = e2 = f2; + c2.pending = null; + } + if (null !== e2) { + f2 = e2.next; + d2 = d2.baseState; + var h2 = g2 = null, k2 = null, l2 = f2; do { var m2 = l2.lane; - if ((Hh & m2) === m2) null !== k2 && (k2 = k2.next = { lane: 0, action: l2.action, hasEagerState: l2.hasEagerState, eagerState: l2.eagerState, next: null }), d = l2.hasEagerState ? l2.eagerState : a(d, l2.action); + if ((Hh & m2) === m2) null !== k2 && (k2 = k2.next = { lane: 0, action: l2.action, hasEagerState: l2.hasEagerState, eagerState: l2.eagerState, next: null }), d2 = l2.hasEagerState ? l2.eagerState : a2(d2, l2.action); else { var q2 = { lane: m2, @@ -3475,318 +3475,318 @@ function Wh(a) { eagerState: l2.eagerState, next: null }; - null === k2 ? (h = k2 = q2, g = d) : k2 = k2.next = q2; - M.lanes |= m2; + null === k2 ? (h2 = k2 = q2, g2 = d2) : k2 = k2.next = q2; + M$1.lanes |= m2; rh |= m2; } l2 = l2.next; } while (null !== l2 && l2 !== f2); - null === k2 ? g = d : k2.next = h; - He(d, b.memoizedState) || (dh = true); - b.memoizedState = d; - b.baseState = g; - b.baseQueue = k2; - c.lastRenderedState = d; - } - a = c.interleaved; - if (null !== a) { - e = a; + null === k2 ? g2 = d2 : k2.next = h2; + He$1(d2, b2.memoizedState) || (dh = true); + b2.memoizedState = d2; + b2.baseState = g2; + b2.baseQueue = k2; + c2.lastRenderedState = d2; + } + a2 = c2.interleaved; + if (null !== a2) { + e2 = a2; do - f2 = e.lane, M.lanes |= f2, rh |= f2, e = e.next; - while (e !== a); - } else null === e && (c.lanes = 0); - return [b.memoizedState, c.dispatch]; -} -function Xh(a) { - var b = Uh(), c = b.queue; - if (null === c) throw Error(p(311)); - c.lastRenderedReducer = a; - var d = c.dispatch, e = c.pending, f2 = b.memoizedState; - if (null !== e) { - c.pending = null; - var g = e = e.next; + f2 = e2.lane, M$1.lanes |= f2, rh |= f2, e2 = e2.next; + while (e2 !== a2); + } else null === e2 && (c2.lanes = 0); + return [b2.memoizedState, c2.dispatch]; +} +function Xh(a2) { + var b2 = Uh(), c2 = b2.queue; + if (null === c2) throw Error(p$1(311)); + c2.lastRenderedReducer = a2; + var d2 = c2.dispatch, e2 = c2.pending, f2 = b2.memoizedState; + if (null !== e2) { + c2.pending = null; + var g2 = e2 = e2.next; do - f2 = a(f2, g.action), g = g.next; - while (g !== e); - He(f2, b.memoizedState) || (dh = true); - b.memoizedState = f2; - null === b.baseQueue && (b.baseState = f2); - c.lastRenderedState = f2; - } - return [f2, d]; + f2 = a2(f2, g2.action), g2 = g2.next; + while (g2 !== e2); + He$1(f2, b2.memoizedState) || (dh = true); + b2.memoizedState = f2; + null === b2.baseQueue && (b2.baseState = f2); + c2.lastRenderedState = f2; + } + return [f2, d2]; } function Yh() { } -function Zh(a, b) { - var c = M, d = Uh(), e = b(), f2 = !He(d.memoizedState, e); - f2 && (d.memoizedState = e, dh = true); - d = d.queue; - $h(ai.bind(null, c, d, a), [a]); - if (d.getSnapshot !== b || f2 || null !== O && O.memoizedState.tag & 1) { - c.flags |= 2048; - bi(9, ci.bind(null, c, d, e, b), void 0, null); - if (null === Q) throw Error(p(349)); - 0 !== (Hh & 30) || di(c, b, e); - } - return e; -} -function di(a, b, c) { - a.flags |= 16384; - a = { getSnapshot: b, value: c }; - b = M.updateQueue; - null === b ? (b = { lastEffect: null, stores: null }, M.updateQueue = b, b.stores = [a]) : (c = b.stores, null === c ? b.stores = [a] : c.push(a)); -} -function ci(a, b, c, d) { - b.value = c; - b.getSnapshot = d; - ei(b) && fi(a); -} -function ai(a, b, c) { - return c(function() { - ei(b) && fi(a); +function Zh(a2, b2) { + var c2 = M$1, d2 = Uh(), e2 = b2(), f2 = !He$1(d2.memoizedState, e2); + f2 && (d2.memoizedState = e2, dh = true); + d2 = d2.queue; + $h(ai.bind(null, c2, d2, a2), [a2]); + if (d2.getSnapshot !== b2 || f2 || null !== O$1 && O$1.memoizedState.tag & 1) { + c2.flags |= 2048; + bi(9, ci.bind(null, c2, d2, e2, b2), void 0, null); + if (null === Q$1) throw Error(p$1(349)); + 0 !== (Hh & 30) || di(c2, b2, e2); + } + return e2; +} +function di(a2, b2, c2) { + a2.flags |= 16384; + a2 = { getSnapshot: b2, value: c2 }; + b2 = M$1.updateQueue; + null === b2 ? (b2 = { lastEffect: null, stores: null }, M$1.updateQueue = b2, b2.stores = [a2]) : (c2 = b2.stores, null === c2 ? b2.stores = [a2] : c2.push(a2)); +} +function ci(a2, b2, c2, d2) { + b2.value = c2; + b2.getSnapshot = d2; + ei(b2) && fi(a2); +} +function ai(a2, b2, c2) { + return c2(function() { + ei(b2) && fi(a2); }); } -function ei(a) { - var b = a.getSnapshot; - a = a.value; +function ei(a2) { + var b2 = a2.getSnapshot; + a2 = a2.value; try { - var c = b(); - return !He(a, c); - } catch (d) { + var c2 = b2(); + return !He$1(a2, c2); + } catch (d2) { return true; } } -function fi(a) { - var b = ih(a, 1); - null !== b && gi(b, a, 1, -1); +function fi(a2) { + var b2 = ih(a2, 1); + null !== b2 && gi(b2, a2, 1, -1); } -function hi(a) { - var b = Th(); - "function" === typeof a && (a = a()); - b.memoizedState = b.baseState = a; - a = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: Vh, lastRenderedState: a }; - b.queue = a; - a = a.dispatch = ii.bind(null, M, a); - return [b.memoizedState, a]; +function hi(a2) { + var b2 = Th(); + "function" === typeof a2 && (a2 = a2()); + b2.memoizedState = b2.baseState = a2; + a2 = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: Vh, lastRenderedState: a2 }; + b2.queue = a2; + a2 = a2.dispatch = ii.bind(null, M$1, a2); + return [b2.memoizedState, a2]; } -function bi(a, b, c, d) { - a = { tag: a, create: b, destroy: c, deps: d, next: null }; - b = M.updateQueue; - null === b ? (b = { lastEffect: null, stores: null }, M.updateQueue = b, b.lastEffect = a.next = a) : (c = b.lastEffect, null === c ? b.lastEffect = a.next = a : (d = c.next, c.next = a, a.next = d, b.lastEffect = a)); - return a; +function bi(a2, b2, c2, d2) { + a2 = { tag: a2, create: b2, destroy: c2, deps: d2, next: null }; + b2 = M$1.updateQueue; + null === b2 ? (b2 = { lastEffect: null, stores: null }, M$1.updateQueue = b2, b2.lastEffect = a2.next = a2) : (c2 = b2.lastEffect, null === c2 ? b2.lastEffect = a2.next = a2 : (d2 = c2.next, c2.next = a2, a2.next = d2, b2.lastEffect = a2)); + return a2; } function ji() { return Uh().memoizedState; } -function ki(a, b, c, d) { - var e = Th(); - M.flags |= a; - e.memoizedState = bi(1 | b, c, void 0, void 0 === d ? null : d); +function ki(a2, b2, c2, d2) { + var e2 = Th(); + M$1.flags |= a2; + e2.memoizedState = bi(1 | b2, c2, void 0, void 0 === d2 ? null : d2); } -function li(a, b, c, d) { - var e = Uh(); - d = void 0 === d ? null : d; +function li(a2, b2, c2, d2) { + var e2 = Uh(); + d2 = void 0 === d2 ? null : d2; var f2 = void 0; - if (null !== N) { - var g = N.memoizedState; - f2 = g.destroy; - if (null !== d && Mh(d, g.deps)) { - e.memoizedState = bi(b, c, f2, d); + if (null !== N$1) { + var g2 = N$1.memoizedState; + f2 = g2.destroy; + if (null !== d2 && Mh(d2, g2.deps)) { + e2.memoizedState = bi(b2, c2, f2, d2); return; } } - M.flags |= a; - e.memoizedState = bi(1 | b, c, f2, d); + M$1.flags |= a2; + e2.memoizedState = bi(1 | b2, c2, f2, d2); } -function mi(a, b) { - return ki(8390656, 8, a, b); +function mi(a2, b2) { + return ki(8390656, 8, a2, b2); } -function $h(a, b) { - return li(2048, 8, a, b); +function $h(a2, b2) { + return li(2048, 8, a2, b2); } -function ni(a, b) { - return li(4, 2, a, b); +function ni(a2, b2) { + return li(4, 2, a2, b2); } -function oi(a, b) { - return li(4, 4, a, b); +function oi(a2, b2) { + return li(4, 4, a2, b2); } -function pi(a, b) { - if ("function" === typeof b) return a = a(), b(a), function() { - b(null); +function pi(a2, b2) { + if ("function" === typeof b2) return a2 = a2(), b2(a2), function() { + b2(null); }; - if (null !== b && void 0 !== b) return a = a(), b.current = a, function() { - b.current = null; + if (null !== b2 && void 0 !== b2) return a2 = a2(), b2.current = a2, function() { + b2.current = null; }; } -function qi(a, b, c) { - c = null !== c && void 0 !== c ? c.concat([a]) : null; - return li(4, 4, pi.bind(null, b, a), c); +function qi(a2, b2, c2) { + c2 = null !== c2 && void 0 !== c2 ? c2.concat([a2]) : null; + return li(4, 4, pi.bind(null, b2, a2), c2); } function ri() { } -function si(a, b) { - var c = Uh(); - b = void 0 === b ? null : b; - var d = c.memoizedState; - if (null !== d && null !== b && Mh(b, d[1])) return d[0]; - c.memoizedState = [a, b]; - return a; -} -function ti(a, b) { - var c = Uh(); - b = void 0 === b ? null : b; - var d = c.memoizedState; - if (null !== d && null !== b && Mh(b, d[1])) return d[0]; - a = a(); - c.memoizedState = [a, b]; - return a; -} -function ui(a, b, c) { - if (0 === (Hh & 21)) return a.baseState && (a.baseState = false, dh = true), a.memoizedState = c; - He(c, b) || (c = yc(), M.lanes |= c, rh |= c, a.baseState = true); - return b; +function si(a2, b2) { + var c2 = Uh(); + b2 = void 0 === b2 ? null : b2; + var d2 = c2.memoizedState; + if (null !== d2 && null !== b2 && Mh(b2, d2[1])) return d2[0]; + c2.memoizedState = [a2, b2]; + return a2; } -function vi(a, b) { - var c = C; - C = 0 !== c && 4 > c ? c : 4; - a(true); - var d = Gh.transition; +function ti(a2, b2) { + var c2 = Uh(); + b2 = void 0 === b2 ? null : b2; + var d2 = c2.memoizedState; + if (null !== d2 && null !== b2 && Mh(b2, d2[1])) return d2[0]; + a2 = a2(); + c2.memoizedState = [a2, b2]; + return a2; +} +function ui(a2, b2, c2) { + if (0 === (Hh & 21)) return a2.baseState && (a2.baseState = false, dh = true), a2.memoizedState = c2; + He$1(c2, b2) || (c2 = yc(), M$1.lanes |= c2, rh |= c2, a2.baseState = true); + return b2; +} +function vi(a2, b2) { + var c2 = C$1; + C$1 = 0 !== c2 && 4 > c2 ? c2 : 4; + a2(true); + var d2 = Gh.transition; Gh.transition = {}; try { - a(false), b(); + a2(false), b2(); } finally { - C = c, Gh.transition = d; + C$1 = c2, Gh.transition = d2; } } function wi() { return Uh().memoizedState; } -function xi(a, b, c) { - var d = yi(a); - c = { lane: d, action: c, hasEagerState: false, eagerState: null, next: null }; - if (zi(a)) Ai(b, c); - else if (c = hh(a, b, c, d), null !== c) { - var e = R(); - gi(c, a, d, e); - Bi(c, b, d); +function xi(a2, b2, c2) { + var d2 = yi(a2); + c2 = { lane: d2, action: c2, hasEagerState: false, eagerState: null, next: null }; + if (zi(a2)) Ai(b2, c2); + else if (c2 = hh(a2, b2, c2, d2), null !== c2) { + var e2 = R$1(); + gi(c2, a2, d2, e2); + Bi(c2, b2, d2); } } -function ii(a, b, c) { - var d = yi(a), e = { lane: d, action: c, hasEagerState: false, eagerState: null, next: null }; - if (zi(a)) Ai(b, e); +function ii(a2, b2, c2) { + var d2 = yi(a2), e2 = { lane: d2, action: c2, hasEagerState: false, eagerState: null, next: null }; + if (zi(a2)) Ai(b2, e2); else { - var f2 = a.alternate; - if (0 === a.lanes && (null === f2 || 0 === f2.lanes) && (f2 = b.lastRenderedReducer, null !== f2)) try { - var g = b.lastRenderedState, h = f2(g, c); - e.hasEagerState = true; - e.eagerState = h; - if (He(h, g)) { - var k2 = b.interleaved; - null === k2 ? (e.next = e, gh(b)) : (e.next = k2.next, k2.next = e); - b.interleaved = e; + var f2 = a2.alternate; + if (0 === a2.lanes && (null === f2 || 0 === f2.lanes) && (f2 = b2.lastRenderedReducer, null !== f2)) try { + var g2 = b2.lastRenderedState, h2 = f2(g2, c2); + e2.hasEagerState = true; + e2.eagerState = h2; + if (He$1(h2, g2)) { + var k2 = b2.interleaved; + null === k2 ? (e2.next = e2, gh(b2)) : (e2.next = k2.next, k2.next = e2); + b2.interleaved = e2; return; } } catch (l2) { } finally { } - c = hh(a, b, e, d); - null !== c && (e = R(), gi(c, a, d, e), Bi(c, b, d)); + c2 = hh(a2, b2, e2, d2); + null !== c2 && (e2 = R$1(), gi(c2, a2, d2, e2), Bi(c2, b2, d2)); } } -function zi(a) { - var b = a.alternate; - return a === M || null !== b && b === M; +function zi(a2) { + var b2 = a2.alternate; + return a2 === M$1 || null !== b2 && b2 === M$1; } -function Ai(a, b) { +function Ai(a2, b2) { Jh = Ih = true; - var c = a.pending; - null === c ? b.next = b : (b.next = c.next, c.next = b); - a.pending = b; -} -function Bi(a, b, c) { - if (0 !== (c & 4194240)) { - var d = b.lanes; - d &= a.pendingLanes; - c |= d; - b.lanes = c; - Cc(a, c); - } -} -var Rh = { readContext: eh, useCallback: P, useContext: P, useEffect: P, useImperativeHandle: P, useInsertionEffect: P, useLayoutEffect: P, useMemo: P, useReducer: P, useRef: P, useState: P, useDebugValue: P, useDeferredValue: P, useTransition: P, useMutableSource: P, useSyncExternalStore: P, useId: P, unstable_isNewReconciler: false }, Oh = { readContext: eh, useCallback: function(a, b) { - Th().memoizedState = [a, void 0 === b ? null : b]; - return a; -}, useContext: eh, useEffect: mi, useImperativeHandle: function(a, b, c) { - c = null !== c && void 0 !== c ? c.concat([a]) : null; + var c2 = a2.pending; + null === c2 ? b2.next = b2 : (b2.next = c2.next, c2.next = b2); + a2.pending = b2; +} +function Bi(a2, b2, c2) { + if (0 !== (c2 & 4194240)) { + var d2 = b2.lanes; + d2 &= a2.pendingLanes; + c2 |= d2; + b2.lanes = c2; + Cc(a2, c2); + } +} +var Rh = { readContext: eh, useCallback: P$1, useContext: P$1, useEffect: P$1, useImperativeHandle: P$1, useInsertionEffect: P$1, useLayoutEffect: P$1, useMemo: P$1, useReducer: P$1, useRef: P$1, useState: P$1, useDebugValue: P$1, useDeferredValue: P$1, useTransition: P$1, useMutableSource: P$1, useSyncExternalStore: P$1, useId: P$1, unstable_isNewReconciler: false }, Oh = { readContext: eh, useCallback: function(a2, b2) { + Th().memoizedState = [a2, void 0 === b2 ? null : b2]; + return a2; +}, useContext: eh, useEffect: mi, useImperativeHandle: function(a2, b2, c2) { + c2 = null !== c2 && void 0 !== c2 ? c2.concat([a2]) : null; return ki( 4194308, 4, - pi.bind(null, b, a), - c + pi.bind(null, b2, a2), + c2 ); -}, useLayoutEffect: function(a, b) { - return ki(4194308, 4, a, b); -}, useInsertionEffect: function(a, b) { - return ki(4, 2, a, b); -}, useMemo: function(a, b) { - var c = Th(); - b = void 0 === b ? null : b; - a = a(); - c.memoizedState = [a, b]; - return a; -}, useReducer: function(a, b, c) { - var d = Th(); - b = void 0 !== c ? c(b) : b; - d.memoizedState = d.baseState = b; - a = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: a, lastRenderedState: b }; - d.queue = a; - a = a.dispatch = xi.bind(null, M, a); - return [d.memoizedState, a]; -}, useRef: function(a) { - var b = Th(); - a = { current: a }; - return b.memoizedState = a; -}, useState: hi, useDebugValue: ri, useDeferredValue: function(a) { - return Th().memoizedState = a; +}, useLayoutEffect: function(a2, b2) { + return ki(4194308, 4, a2, b2); +}, useInsertionEffect: function(a2, b2) { + return ki(4, 2, a2, b2); +}, useMemo: function(a2, b2) { + var c2 = Th(); + b2 = void 0 === b2 ? null : b2; + a2 = a2(); + c2.memoizedState = [a2, b2]; + return a2; +}, useReducer: function(a2, b2, c2) { + var d2 = Th(); + b2 = void 0 !== c2 ? c2(b2) : b2; + d2.memoizedState = d2.baseState = b2; + a2 = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: a2, lastRenderedState: b2 }; + d2.queue = a2; + a2 = a2.dispatch = xi.bind(null, M$1, a2); + return [d2.memoizedState, a2]; +}, useRef: function(a2) { + var b2 = Th(); + a2 = { current: a2 }; + return b2.memoizedState = a2; +}, useState: hi, useDebugValue: ri, useDeferredValue: function(a2) { + return Th().memoizedState = a2; }, useTransition: function() { - var a = hi(false), b = a[0]; - a = vi.bind(null, a[1]); - Th().memoizedState = a; - return [b, a]; + var a2 = hi(false), b2 = a2[0]; + a2 = vi.bind(null, a2[1]); + Th().memoizedState = a2; + return [b2, a2]; }, useMutableSource: function() { -}, useSyncExternalStore: function(a, b, c) { - var d = M, e = Th(); - if (I) { - if (void 0 === c) throw Error(p(407)); - c = c(); +}, useSyncExternalStore: function(a2, b2, c2) { + var d2 = M$1, e2 = Th(); + if (I$1) { + if (void 0 === c2) throw Error(p$1(407)); + c2 = c2(); } else { - c = b(); - if (null === Q) throw Error(p(349)); - 0 !== (Hh & 30) || di(d, b, c); + c2 = b2(); + if (null === Q$1) throw Error(p$1(349)); + 0 !== (Hh & 30) || di(d2, b2, c2); } - e.memoizedState = c; - var f2 = { value: c, getSnapshot: b }; - e.queue = f2; + e2.memoizedState = c2; + var f2 = { value: c2, getSnapshot: b2 }; + e2.queue = f2; mi(ai.bind( null, - d, + d2, f2, - a - ), [a]); - d.flags |= 2048; - bi(9, ci.bind(null, d, f2, c, b), void 0, null); - return c; + a2 + ), [a2]); + d2.flags |= 2048; + bi(9, ci.bind(null, d2, f2, c2, b2), void 0, null); + return c2; }, useId: function() { - var a = Th(), b = Q.identifierPrefix; - if (I) { - var c = sg; - var d = rg; - c = (d & ~(1 << 32 - oc(d) - 1)).toString(32) + c; - b = ":" + b + "R" + c; - c = Kh++; - 0 < c && (b += "H" + c.toString(32)); - b += ":"; - } else c = Lh++, b = ":" + b + "r" + c.toString(32) + ":"; - return a.memoizedState = b; + var a2 = Th(), b2 = Q$1.identifierPrefix; + if (I$1) { + var c2 = sg; + var d2 = rg; + c2 = (d2 & ~(1 << 32 - oc(d2) - 1)).toString(32) + c2; + b2 = ":" + b2 + "R" + c2; + c2 = Kh++; + 0 < c2 && (b2 += "H" + c2.toString(32)); + b2 += ":"; + } else c2 = Lh++, b2 = ":" + b2 + "r" + c2.toString(32) + ":"; + return a2.memoizedState = b2; }, unstable_isNewReconciler: false }, Ph = { readContext: eh, useCallback: si, @@ -3802,13 +3802,13 @@ var Rh = { readContext: eh, useCallback: P, useContext: P, useEffect: P, useImpe return Wh(Vh); }, useDebugValue: ri, - useDeferredValue: function(a) { - var b = Uh(); - return ui(b, N.memoizedState, a); + useDeferredValue: function(a2) { + var b2 = Uh(); + return ui(b2, N$1.memoizedState, a2); }, useTransition: function() { - var a = Wh(Vh)[0], b = Uh().memoizedState; - return [a, b]; + var a2 = Wh(Vh)[0], b2 = Uh().memoizedState; + return [a2, b2]; }, useMutableSource: Yh, useSyncExternalStore: Zh, @@ -3816,416 +3816,416 @@ var Rh = { readContext: eh, useCallback: P, useContext: P, useEffect: P, useImpe unstable_isNewReconciler: false }, Qh = { readContext: eh, useCallback: si, useContext: eh, useEffect: $h, useImperativeHandle: qi, useInsertionEffect: ni, useLayoutEffect: oi, useMemo: ti, useReducer: Xh, useRef: ji, useState: function() { return Xh(Vh); -}, useDebugValue: ri, useDeferredValue: function(a) { - var b = Uh(); - return null === N ? b.memoizedState = a : ui(b, N.memoizedState, a); +}, useDebugValue: ri, useDeferredValue: function(a2) { + var b2 = Uh(); + return null === N$1 ? b2.memoizedState = a2 : ui(b2, N$1.memoizedState, a2); }, useTransition: function() { - var a = Xh(Vh)[0], b = Uh().memoizedState; - return [a, b]; + var a2 = Xh(Vh)[0], b2 = Uh().memoizedState; + return [a2, b2]; }, useMutableSource: Yh, useSyncExternalStore: Zh, useId: wi, unstable_isNewReconciler: false }; -function Ci(a, b) { - if (a && a.defaultProps) { - b = A({}, b); - a = a.defaultProps; - for (var c in a) void 0 === b[c] && (b[c] = a[c]); - return b; +function Ci(a2, b2) { + if (a2 && a2.defaultProps) { + b2 = A$1({}, b2); + a2 = a2.defaultProps; + for (var c2 in a2) void 0 === b2[c2] && (b2[c2] = a2[c2]); + return b2; } - return b; + return b2; +} +function Di(a2, b2, c2, d2) { + b2 = a2.memoizedState; + c2 = c2(d2, b2); + c2 = null === c2 || void 0 === c2 ? b2 : A$1({}, b2, c2); + a2.memoizedState = c2; + 0 === a2.lanes && (a2.updateQueue.baseState = c2); } -function Di(a, b, c, d) { - b = a.memoizedState; - c = c(d, b); - c = null === c || void 0 === c ? b : A({}, b, c); - a.memoizedState = c; - 0 === a.lanes && (a.updateQueue.baseState = c); -} -var Ei = { isMounted: function(a) { - return (a = a._reactInternals) ? Vb(a) === a : false; -}, enqueueSetState: function(a, b, c) { - a = a._reactInternals; - var d = R(), e = yi(a), f2 = mh(d, e); - f2.payload = b; - void 0 !== c && null !== c && (f2.callback = c); - b = nh(a, f2, e); - null !== b && (gi(b, a, e, d), oh(b, a, e)); -}, enqueueReplaceState: function(a, b, c) { - a = a._reactInternals; - var d = R(), e = yi(a), f2 = mh(d, e); +var Ei = { isMounted: function(a2) { + return (a2 = a2._reactInternals) ? Vb(a2) === a2 : false; +}, enqueueSetState: function(a2, b2, c2) { + a2 = a2._reactInternals; + var d2 = R$1(), e2 = yi(a2), f2 = mh(d2, e2); + f2.payload = b2; + void 0 !== c2 && null !== c2 && (f2.callback = c2); + b2 = nh(a2, f2, e2); + null !== b2 && (gi(b2, a2, e2, d2), oh(b2, a2, e2)); +}, enqueueReplaceState: function(a2, b2, c2) { + a2 = a2._reactInternals; + var d2 = R$1(), e2 = yi(a2), f2 = mh(d2, e2); f2.tag = 1; - f2.payload = b; - void 0 !== c && null !== c && (f2.callback = c); - b = nh(a, f2, e); - null !== b && (gi(b, a, e, d), oh(b, a, e)); -}, enqueueForceUpdate: function(a, b) { - a = a._reactInternals; - var c = R(), d = yi(a), e = mh(c, d); - e.tag = 2; - void 0 !== b && null !== b && (e.callback = b); - b = nh(a, e, d); - null !== b && (gi(b, a, d, c), oh(b, a, d)); + f2.payload = b2; + void 0 !== c2 && null !== c2 && (f2.callback = c2); + b2 = nh(a2, f2, e2); + null !== b2 && (gi(b2, a2, e2, d2), oh(b2, a2, e2)); +}, enqueueForceUpdate: function(a2, b2) { + a2 = a2._reactInternals; + var c2 = R$1(), d2 = yi(a2), e2 = mh(c2, d2); + e2.tag = 2; + void 0 !== b2 && null !== b2 && (e2.callback = b2); + b2 = nh(a2, e2, d2); + null !== b2 && (gi(b2, a2, d2, c2), oh(b2, a2, d2)); } }; -function Fi(a, b, c, d, e, f2, g) { - a = a.stateNode; - return "function" === typeof a.shouldComponentUpdate ? a.shouldComponentUpdate(d, f2, g) : b.prototype && b.prototype.isPureReactComponent ? !Ie(c, d) || !Ie(e, f2) : true; -} -function Gi(a, b, c) { - var d = false, e = Vf; - var f2 = b.contextType; - "object" === typeof f2 && null !== f2 ? f2 = eh(f2) : (e = Zf(b) ? Xf : H.current, d = b.contextTypes, f2 = (d = null !== d && void 0 !== d) ? Yf(a, e) : Vf); - b = new b(c, f2); - a.memoizedState = null !== b.state && void 0 !== b.state ? b.state : null; - b.updater = Ei; - a.stateNode = b; - b._reactInternals = a; - d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = e, a.__reactInternalMemoizedMaskedChildContext = f2); - return b; +function Fi(a2, b2, c2, d2, e2, f2, g2) { + a2 = a2.stateNode; + return "function" === typeof a2.shouldComponentUpdate ? a2.shouldComponentUpdate(d2, f2, g2) : b2.prototype && b2.prototype.isPureReactComponent ? !Ie$1(c2, d2) || !Ie$1(e2, f2) : true; +} +function Gi(a2, b2, c2) { + var d2 = false, e2 = Vf; + var f2 = b2.contextType; + "object" === typeof f2 && null !== f2 ? f2 = eh(f2) : (e2 = Zf(b2) ? Xf : H$1.current, d2 = b2.contextTypes, f2 = (d2 = null !== d2 && void 0 !== d2) ? Yf(a2, e2) : Vf); + b2 = new b2(c2, f2); + a2.memoizedState = null !== b2.state && void 0 !== b2.state ? b2.state : null; + b2.updater = Ei; + a2.stateNode = b2; + b2._reactInternals = a2; + d2 && (a2 = a2.stateNode, a2.__reactInternalMemoizedUnmaskedChildContext = e2, a2.__reactInternalMemoizedMaskedChildContext = f2); + return b2; +} +function Hi(a2, b2, c2, d2) { + a2 = b2.state; + "function" === typeof b2.componentWillReceiveProps && b2.componentWillReceiveProps(c2, d2); + "function" === typeof b2.UNSAFE_componentWillReceiveProps && b2.UNSAFE_componentWillReceiveProps(c2, d2); + b2.state !== a2 && Ei.enqueueReplaceState(b2, b2.state, null); +} +function Ii(a2, b2, c2, d2) { + var e2 = a2.stateNode; + e2.props = c2; + e2.state = a2.memoizedState; + e2.refs = {}; + kh(a2); + var f2 = b2.contextType; + "object" === typeof f2 && null !== f2 ? e2.context = eh(f2) : (f2 = Zf(b2) ? Xf : H$1.current, e2.context = Yf(a2, f2)); + e2.state = a2.memoizedState; + f2 = b2.getDerivedStateFromProps; + "function" === typeof f2 && (Di(a2, b2, f2, c2), e2.state = a2.memoizedState); + "function" === typeof b2.getDerivedStateFromProps || "function" === typeof e2.getSnapshotBeforeUpdate || "function" !== typeof e2.UNSAFE_componentWillMount && "function" !== typeof e2.componentWillMount || (b2 = e2.state, "function" === typeof e2.componentWillMount && e2.componentWillMount(), "function" === typeof e2.UNSAFE_componentWillMount && e2.UNSAFE_componentWillMount(), b2 !== e2.state && Ei.enqueueReplaceState(e2, e2.state, null), qh(a2, c2, e2, d2), e2.state = a2.memoizedState); + "function" === typeof e2.componentDidMount && (a2.flags |= 4194308); } -function Hi(a, b, c, d) { - a = b.state; - "function" === typeof b.componentWillReceiveProps && b.componentWillReceiveProps(c, d); - "function" === typeof b.UNSAFE_componentWillReceiveProps && b.UNSAFE_componentWillReceiveProps(c, d); - b.state !== a && Ei.enqueueReplaceState(b, b.state, null); -} -function Ii(a, b, c, d) { - var e = a.stateNode; - e.props = c; - e.state = a.memoizedState; - e.refs = {}; - kh(a); - var f2 = b.contextType; - "object" === typeof f2 && null !== f2 ? e.context = eh(f2) : (f2 = Zf(b) ? Xf : H.current, e.context = Yf(a, f2)); - e.state = a.memoizedState; - f2 = b.getDerivedStateFromProps; - "function" === typeof f2 && (Di(a, b, f2, c), e.state = a.memoizedState); - "function" === typeof b.getDerivedStateFromProps || "function" === typeof e.getSnapshotBeforeUpdate || "function" !== typeof e.UNSAFE_componentWillMount && "function" !== typeof e.componentWillMount || (b = e.state, "function" === typeof e.componentWillMount && e.componentWillMount(), "function" === typeof e.UNSAFE_componentWillMount && e.UNSAFE_componentWillMount(), b !== e.state && Ei.enqueueReplaceState(e, e.state, null), qh(a, c, e, d), e.state = a.memoizedState); - "function" === typeof e.componentDidMount && (a.flags |= 4194308); -} -function Ji(a, b) { +function Ji(a2, b2) { try { - var c = "", d = b; + var c2 = "", d2 = b2; do - c += Pa(d), d = d.return; - while (d); - var e = c; + c2 += Pa(d2), d2 = d2.return; + while (d2); + var e2 = c2; } catch (f2) { - e = "\nError generating stack: " + f2.message + "\n" + f2.stack; + e2 = "\nError generating stack: " + f2.message + "\n" + f2.stack; } - return { value: a, source: b, stack: e, digest: null }; + return { value: a2, source: b2, stack: e2, digest: null }; } -function Ki(a, b, c) { - return { value: a, source: null, stack: null != c ? c : null, digest: null != b ? b : null }; +function Ki(a2, b2, c2) { + return { value: a2, source: null, stack: null != c2 ? c2 : null, digest: null != b2 ? b2 : null }; } -function Li(a, b) { +function Li(a2, b2) { try { - console.error(b.value); - } catch (c) { + console.error(b2.value); + } catch (c2) { setTimeout(function() { - throw c; + throw c2; }); } } var Mi = "function" === typeof WeakMap ? WeakMap : Map; -function Ni(a, b, c) { - c = mh(-1, c); - c.tag = 3; - c.payload = { element: null }; - var d = b.value; - c.callback = function() { - Oi || (Oi = true, Pi = d); - Li(a, b); +function Ni(a2, b2, c2) { + c2 = mh(-1, c2); + c2.tag = 3; + c2.payload = { element: null }; + var d2 = b2.value; + c2.callback = function() { + Oi || (Oi = true, Pi = d2); + Li(a2, b2); }; - return c; -} -function Qi(a, b, c) { - c = mh(-1, c); - c.tag = 3; - var d = a.type.getDerivedStateFromError; - if ("function" === typeof d) { - var e = b.value; - c.payload = function() { - return d(e); + return c2; +} +function Qi(a2, b2, c2) { + c2 = mh(-1, c2); + c2.tag = 3; + var d2 = a2.type.getDerivedStateFromError; + if ("function" === typeof d2) { + var e2 = b2.value; + c2.payload = function() { + return d2(e2); }; - c.callback = function() { - Li(a, b); + c2.callback = function() { + Li(a2, b2); }; } - var f2 = a.stateNode; - null !== f2 && "function" === typeof f2.componentDidCatch && (c.callback = function() { - Li(a, b); - "function" !== typeof d && (null === Ri ? Ri = /* @__PURE__ */ new Set([this]) : Ri.add(this)); - var c2 = b.stack; - this.componentDidCatch(b.value, { componentStack: null !== c2 ? c2 : "" }); + var f2 = a2.stateNode; + null !== f2 && "function" === typeof f2.componentDidCatch && (c2.callback = function() { + Li(a2, b2); + "function" !== typeof d2 && (null === Ri ? Ri = /* @__PURE__ */ new Set([this]) : Ri.add(this)); + var c3 = b2.stack; + this.componentDidCatch(b2.value, { componentStack: null !== c3 ? c3 : "" }); }); - return c; -} -function Si(a, b, c) { - var d = a.pingCache; - if (null === d) { - d = a.pingCache = new Mi(); - var e = /* @__PURE__ */ new Set(); - d.set(b, e); - } else e = d.get(b), void 0 === e && (e = /* @__PURE__ */ new Set(), d.set(b, e)); - e.has(c) || (e.add(c), a = Ti.bind(null, a, b, c), b.then(a, a)); -} -function Ui(a) { + return c2; +} +function Si(a2, b2, c2) { + var d2 = a2.pingCache; + if (null === d2) { + d2 = a2.pingCache = new Mi(); + var e2 = /* @__PURE__ */ new Set(); + d2.set(b2, e2); + } else e2 = d2.get(b2), void 0 === e2 && (e2 = /* @__PURE__ */ new Set(), d2.set(b2, e2)); + e2.has(c2) || (e2.add(c2), a2 = Ti.bind(null, a2, b2, c2), b2.then(a2, a2)); +} +function Ui(a2) { do { - var b; - if (b = 13 === a.tag) b = a.memoizedState, b = null !== b ? null !== b.dehydrated ? true : false : true; - if (b) return a; - a = a.return; - } while (null !== a); + var b2; + if (b2 = 13 === a2.tag) b2 = a2.memoizedState, b2 = null !== b2 ? null !== b2.dehydrated ? true : false : true; + if (b2) return a2; + a2 = a2.return; + } while (null !== a2); return null; } -function Vi(a, b, c, d, e) { - if (0 === (a.mode & 1)) return a === b ? a.flags |= 65536 : (a.flags |= 128, c.flags |= 131072, c.flags &= -52805, 1 === c.tag && (null === c.alternate ? c.tag = 17 : (b = mh(-1, 1), b.tag = 2, nh(c, b, 1))), c.lanes |= 1), a; - a.flags |= 65536; - a.lanes = e; - return a; +function Vi(a2, b2, c2, d2, e2) { + if (0 === (a2.mode & 1)) return a2 === b2 ? a2.flags |= 65536 : (a2.flags |= 128, c2.flags |= 131072, c2.flags &= -52805, 1 === c2.tag && (null === c2.alternate ? c2.tag = 17 : (b2 = mh(-1, 1), b2.tag = 2, nh(c2, b2, 1))), c2.lanes |= 1), a2; + a2.flags |= 65536; + a2.lanes = e2; + return a2; } var Wi = ua.ReactCurrentOwner, dh = false; -function Xi(a, b, c, d) { - b.child = null === a ? Vg(b, null, c, d) : Ug(b, a.child, c, d); -} -function Yi(a, b, c, d, e) { - c = c.render; - var f2 = b.ref; - ch(b, e); - d = Nh(a, b, c, d, f2, e); - c = Sh(); - if (null !== a && !dh) return b.updateQueue = a.updateQueue, b.flags &= -2053, a.lanes &= ~e, Zi(a, b, e); - I && c && vg(b); - b.flags |= 1; - Xi(a, b, d, e); - return b.child; -} -function $i(a, b, c, d, e) { - if (null === a) { - var f2 = c.type; - if ("function" === typeof f2 && !aj(f2) && void 0 === f2.defaultProps && null === c.compare && void 0 === c.defaultProps) return b.tag = 15, b.type = f2, bj(a, b, f2, d, e); - a = Rg(c.type, null, d, b, b.mode, e); - a.ref = b.ref; - a.return = b; - return b.child = a; - } - f2 = a.child; - if (0 === (a.lanes & e)) { - var g = f2.memoizedProps; - c = c.compare; - c = null !== c ? c : Ie; - if (c(g, d) && a.ref === b.ref) return Zi(a, b, e); - } - b.flags |= 1; - a = Pg(f2, d); - a.ref = b.ref; - a.return = b; - return b.child = a; -} -function bj(a, b, c, d, e) { - if (null !== a) { - var f2 = a.memoizedProps; - if (Ie(f2, d) && a.ref === b.ref) if (dh = false, b.pendingProps = d = f2, 0 !== (a.lanes & e)) 0 !== (a.flags & 131072) && (dh = true); - else return b.lanes = a.lanes, Zi(a, b, e); - } - return cj(a, b, c, d, e); -} -function dj(a, b, c) { - var d = b.pendingProps, e = d.children, f2 = null !== a ? a.memoizedState : null; - if ("hidden" === d.mode) if (0 === (b.mode & 1)) b.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }, G(ej, fj), fj |= c; +function Xi(a2, b2, c2, d2) { + b2.child = null === a2 ? Vg(b2, null, c2, d2) : Ug(b2, a2.child, c2, d2); +} +function Yi(a2, b2, c2, d2, e2) { + c2 = c2.render; + var f2 = b2.ref; + ch(b2, e2); + d2 = Nh(a2, b2, c2, d2, f2, e2); + c2 = Sh(); + if (null !== a2 && !dh) return b2.updateQueue = a2.updateQueue, b2.flags &= -2053, a2.lanes &= ~e2, Zi(a2, b2, e2); + I$1 && c2 && vg(b2); + b2.flags |= 1; + Xi(a2, b2, d2, e2); + return b2.child; +} +function $i(a2, b2, c2, d2, e2) { + if (null === a2) { + var f2 = c2.type; + if ("function" === typeof f2 && !aj(f2) && void 0 === f2.defaultProps && null === c2.compare && void 0 === c2.defaultProps) return b2.tag = 15, b2.type = f2, bj(a2, b2, f2, d2, e2); + a2 = Rg(c2.type, null, d2, b2, b2.mode, e2); + a2.ref = b2.ref; + a2.return = b2; + return b2.child = a2; + } + f2 = a2.child; + if (0 === (a2.lanes & e2)) { + var g2 = f2.memoizedProps; + c2 = c2.compare; + c2 = null !== c2 ? c2 : Ie$1; + if (c2(g2, d2) && a2.ref === b2.ref) return Zi(a2, b2, e2); + } + b2.flags |= 1; + a2 = Pg(f2, d2); + a2.ref = b2.ref; + a2.return = b2; + return b2.child = a2; +} +function bj(a2, b2, c2, d2, e2) { + if (null !== a2) { + var f2 = a2.memoizedProps; + if (Ie$1(f2, d2) && a2.ref === b2.ref) if (dh = false, b2.pendingProps = d2 = f2, 0 !== (a2.lanes & e2)) 0 !== (a2.flags & 131072) && (dh = true); + else return b2.lanes = a2.lanes, Zi(a2, b2, e2); + } + return cj(a2, b2, c2, d2, e2); +} +function dj(a2, b2, c2) { + var d2 = b2.pendingProps, e2 = d2.children, f2 = null !== a2 ? a2.memoizedState : null; + if ("hidden" === d2.mode) if (0 === (b2.mode & 1)) b2.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }, G$1(ej, fj), fj |= c2; else { - if (0 === (c & 1073741824)) return a = null !== f2 ? f2.baseLanes | c : c, b.lanes = b.childLanes = 1073741824, b.memoizedState = { baseLanes: a, cachePool: null, transitions: null }, b.updateQueue = null, G(ej, fj), fj |= a, null; - b.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }; - d = null !== f2 ? f2.baseLanes : c; - G(ej, fj); - fj |= d; - } - else null !== f2 ? (d = f2.baseLanes | c, b.memoizedState = null) : d = c, G(ej, fj), fj |= d; - Xi(a, b, e, c); - return b.child; -} -function gj(a, b) { - var c = b.ref; - if (null === a && null !== c || null !== a && a.ref !== c) b.flags |= 512, b.flags |= 2097152; -} -function cj(a, b, c, d, e) { - var f2 = Zf(c) ? Xf : H.current; - f2 = Yf(b, f2); - ch(b, e); - c = Nh(a, b, c, d, f2, e); - d = Sh(); - if (null !== a && !dh) return b.updateQueue = a.updateQueue, b.flags &= -2053, a.lanes &= ~e, Zi(a, b, e); - I && d && vg(b); - b.flags |= 1; - Xi(a, b, c, e); - return b.child; -} -function hj(a, b, c, d, e) { - if (Zf(c)) { + if (0 === (c2 & 1073741824)) return a2 = null !== f2 ? f2.baseLanes | c2 : c2, b2.lanes = b2.childLanes = 1073741824, b2.memoizedState = { baseLanes: a2, cachePool: null, transitions: null }, b2.updateQueue = null, G$1(ej, fj), fj |= a2, null; + b2.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }; + d2 = null !== f2 ? f2.baseLanes : c2; + G$1(ej, fj); + fj |= d2; + } + else null !== f2 ? (d2 = f2.baseLanes | c2, b2.memoizedState = null) : d2 = c2, G$1(ej, fj), fj |= d2; + Xi(a2, b2, e2, c2); + return b2.child; +} +function gj(a2, b2) { + var c2 = b2.ref; + if (null === a2 && null !== c2 || null !== a2 && a2.ref !== c2) b2.flags |= 512, b2.flags |= 2097152; +} +function cj(a2, b2, c2, d2, e2) { + var f2 = Zf(c2) ? Xf : H$1.current; + f2 = Yf(b2, f2); + ch(b2, e2); + c2 = Nh(a2, b2, c2, d2, f2, e2); + d2 = Sh(); + if (null !== a2 && !dh) return b2.updateQueue = a2.updateQueue, b2.flags &= -2053, a2.lanes &= ~e2, Zi(a2, b2, e2); + I$1 && d2 && vg(b2); + b2.flags |= 1; + Xi(a2, b2, c2, e2); + return b2.child; +} +function hj(a2, b2, c2, d2, e2) { + if (Zf(c2)) { var f2 = true; - cg(b); + cg(b2); } else f2 = false; - ch(b, e); - if (null === b.stateNode) ij(a, b), Gi(b, c, d), Ii(b, c, d, e), d = true; - else if (null === a) { - var g = b.stateNode, h = b.memoizedProps; - g.props = h; - var k2 = g.context, l2 = c.contextType; - "object" === typeof l2 && null !== l2 ? l2 = eh(l2) : (l2 = Zf(c) ? Xf : H.current, l2 = Yf(b, l2)); - var m2 = c.getDerivedStateFromProps, q2 = "function" === typeof m2 || "function" === typeof g.getSnapshotBeforeUpdate; - q2 || "function" !== typeof g.UNSAFE_componentWillReceiveProps && "function" !== typeof g.componentWillReceiveProps || (h !== d || k2 !== l2) && Hi(b, g, d, l2); + ch(b2, e2); + if (null === b2.stateNode) ij(a2, b2), Gi(b2, c2, d2), Ii(b2, c2, d2, e2), d2 = true; + else if (null === a2) { + var g2 = b2.stateNode, h2 = b2.memoizedProps; + g2.props = h2; + var k2 = g2.context, l2 = c2.contextType; + "object" === typeof l2 && null !== l2 ? l2 = eh(l2) : (l2 = Zf(c2) ? Xf : H$1.current, l2 = Yf(b2, l2)); + var m2 = c2.getDerivedStateFromProps, q2 = "function" === typeof m2 || "function" === typeof g2.getSnapshotBeforeUpdate; + q2 || "function" !== typeof g2.UNSAFE_componentWillReceiveProps && "function" !== typeof g2.componentWillReceiveProps || (h2 !== d2 || k2 !== l2) && Hi(b2, g2, d2, l2); jh = false; - var r2 = b.memoizedState; - g.state = r2; - qh(b, d, g, e); - k2 = b.memoizedState; - h !== d || r2 !== k2 || Wf.current || jh ? ("function" === typeof m2 && (Di(b, c, m2, d), k2 = b.memoizedState), (h = jh || Fi(b, c, h, d, r2, k2, l2)) ? (q2 || "function" !== typeof g.UNSAFE_componentWillMount && "function" !== typeof g.componentWillMount || ("function" === typeof g.componentWillMount && g.componentWillMount(), "function" === typeof g.UNSAFE_componentWillMount && g.UNSAFE_componentWillMount()), "function" === typeof g.componentDidMount && (b.flags |= 4194308)) : ("function" === typeof g.componentDidMount && (b.flags |= 4194308), b.memoizedProps = d, b.memoizedState = k2), g.props = d, g.state = k2, g.context = l2, d = h) : ("function" === typeof g.componentDidMount && (b.flags |= 4194308), d = false); + var r2 = b2.memoizedState; + g2.state = r2; + qh(b2, d2, g2, e2); + k2 = b2.memoizedState; + h2 !== d2 || r2 !== k2 || Wf.current || jh ? ("function" === typeof m2 && (Di(b2, c2, m2, d2), k2 = b2.memoizedState), (h2 = jh || Fi(b2, c2, h2, d2, r2, k2, l2)) ? (q2 || "function" !== typeof g2.UNSAFE_componentWillMount && "function" !== typeof g2.componentWillMount || ("function" === typeof g2.componentWillMount && g2.componentWillMount(), "function" === typeof g2.UNSAFE_componentWillMount && g2.UNSAFE_componentWillMount()), "function" === typeof g2.componentDidMount && (b2.flags |= 4194308)) : ("function" === typeof g2.componentDidMount && (b2.flags |= 4194308), b2.memoizedProps = d2, b2.memoizedState = k2), g2.props = d2, g2.state = k2, g2.context = l2, d2 = h2) : ("function" === typeof g2.componentDidMount && (b2.flags |= 4194308), d2 = false); } else { - g = b.stateNode; - lh(a, b); - h = b.memoizedProps; - l2 = b.type === b.elementType ? h : Ci(b.type, h); - g.props = l2; - q2 = b.pendingProps; - r2 = g.context; - k2 = c.contextType; - "object" === typeof k2 && null !== k2 ? k2 = eh(k2) : (k2 = Zf(c) ? Xf : H.current, k2 = Yf(b, k2)); - var y2 = c.getDerivedStateFromProps; - (m2 = "function" === typeof y2 || "function" === typeof g.getSnapshotBeforeUpdate) || "function" !== typeof g.UNSAFE_componentWillReceiveProps && "function" !== typeof g.componentWillReceiveProps || (h !== q2 || r2 !== k2) && Hi(b, g, d, k2); + g2 = b2.stateNode; + lh(a2, b2); + h2 = b2.memoizedProps; + l2 = b2.type === b2.elementType ? h2 : Ci(b2.type, h2); + g2.props = l2; + q2 = b2.pendingProps; + r2 = g2.context; + k2 = c2.contextType; + "object" === typeof k2 && null !== k2 ? k2 = eh(k2) : (k2 = Zf(c2) ? Xf : H$1.current, k2 = Yf(b2, k2)); + var y2 = c2.getDerivedStateFromProps; + (m2 = "function" === typeof y2 || "function" === typeof g2.getSnapshotBeforeUpdate) || "function" !== typeof g2.UNSAFE_componentWillReceiveProps && "function" !== typeof g2.componentWillReceiveProps || (h2 !== q2 || r2 !== k2) && Hi(b2, g2, d2, k2); jh = false; - r2 = b.memoizedState; - g.state = r2; - qh(b, d, g, e); - var n2 = b.memoizedState; - h !== q2 || r2 !== n2 || Wf.current || jh ? ("function" === typeof y2 && (Di(b, c, y2, d), n2 = b.memoizedState), (l2 = jh || Fi(b, c, l2, d, r2, n2, k2) || false) ? (m2 || "function" !== typeof g.UNSAFE_componentWillUpdate && "function" !== typeof g.componentWillUpdate || ("function" === typeof g.componentWillUpdate && g.componentWillUpdate(d, n2, k2), "function" === typeof g.UNSAFE_componentWillUpdate && g.UNSAFE_componentWillUpdate(d, n2, k2)), "function" === typeof g.componentDidUpdate && (b.flags |= 4), "function" === typeof g.getSnapshotBeforeUpdate && (b.flags |= 1024)) : ("function" !== typeof g.componentDidUpdate || h === a.memoizedProps && r2 === a.memoizedState || (b.flags |= 4), "function" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && r2 === a.memoizedState || (b.flags |= 1024), b.memoizedProps = d, b.memoizedState = n2), g.props = d, g.state = n2, g.context = k2, d = l2) : ("function" !== typeof g.componentDidUpdate || h === a.memoizedProps && r2 === a.memoizedState || (b.flags |= 4), "function" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && r2 === a.memoizedState || (b.flags |= 1024), d = false); - } - return jj(a, b, c, d, f2, e); -} -function jj(a, b, c, d, e, f2) { - gj(a, b); - var g = 0 !== (b.flags & 128); - if (!d && !g) return e && dg(b, c, false), Zi(a, b, f2); - d = b.stateNode; - Wi.current = b; - var h = g && "function" !== typeof c.getDerivedStateFromError ? null : d.render(); - b.flags |= 1; - null !== a && g ? (b.child = Ug(b, a.child, null, f2), b.child = Ug(b, null, h, f2)) : Xi(a, b, h, f2); - b.memoizedState = d.state; - e && dg(b, c, true); - return b.child; -} -function kj(a) { - var b = a.stateNode; - b.pendingContext ? ag(a, b.pendingContext, b.pendingContext !== b.context) : b.context && ag(a, b.context, false); - yh(a, b.containerInfo); -} -function lj(a, b, c, d, e) { + r2 = b2.memoizedState; + g2.state = r2; + qh(b2, d2, g2, e2); + var n2 = b2.memoizedState; + h2 !== q2 || r2 !== n2 || Wf.current || jh ? ("function" === typeof y2 && (Di(b2, c2, y2, d2), n2 = b2.memoizedState), (l2 = jh || Fi(b2, c2, l2, d2, r2, n2, k2) || false) ? (m2 || "function" !== typeof g2.UNSAFE_componentWillUpdate && "function" !== typeof g2.componentWillUpdate || ("function" === typeof g2.componentWillUpdate && g2.componentWillUpdate(d2, n2, k2), "function" === typeof g2.UNSAFE_componentWillUpdate && g2.UNSAFE_componentWillUpdate(d2, n2, k2)), "function" === typeof g2.componentDidUpdate && (b2.flags |= 4), "function" === typeof g2.getSnapshotBeforeUpdate && (b2.flags |= 1024)) : ("function" !== typeof g2.componentDidUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 4), "function" !== typeof g2.getSnapshotBeforeUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 1024), b2.memoizedProps = d2, b2.memoizedState = n2), g2.props = d2, g2.state = n2, g2.context = k2, d2 = l2) : ("function" !== typeof g2.componentDidUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 4), "function" !== typeof g2.getSnapshotBeforeUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 1024), d2 = false); + } + return jj(a2, b2, c2, d2, f2, e2); +} +function jj(a2, b2, c2, d2, e2, f2) { + gj(a2, b2); + var g2 = 0 !== (b2.flags & 128); + if (!d2 && !g2) return e2 && dg(b2, c2, false), Zi(a2, b2, f2); + d2 = b2.stateNode; + Wi.current = b2; + var h2 = g2 && "function" !== typeof c2.getDerivedStateFromError ? null : d2.render(); + b2.flags |= 1; + null !== a2 && g2 ? (b2.child = Ug(b2, a2.child, null, f2), b2.child = Ug(b2, null, h2, f2)) : Xi(a2, b2, h2, f2); + b2.memoizedState = d2.state; + e2 && dg(b2, c2, true); + return b2.child; +} +function kj(a2) { + var b2 = a2.stateNode; + b2.pendingContext ? ag(a2, b2.pendingContext, b2.pendingContext !== b2.context) : b2.context && ag(a2, b2.context, false); + yh(a2, b2.containerInfo); +} +function lj(a2, b2, c2, d2, e2) { Ig(); - Jg(e); - b.flags |= 256; - Xi(a, b, c, d); - return b.child; + Jg(e2); + b2.flags |= 256; + Xi(a2, b2, c2, d2); + return b2.child; } var mj = { dehydrated: null, treeContext: null, retryLane: 0 }; -function nj(a) { - return { baseLanes: a, cachePool: null, transitions: null }; -} -function oj(a, b, c) { - var d = b.pendingProps, e = L$2.current, f2 = false, g = 0 !== (b.flags & 128), h; - (h = g) || (h = null !== a && null === a.memoizedState ? false : 0 !== (e & 2)); - if (h) f2 = true, b.flags &= -129; - else if (null === a || null !== a.memoizedState) e |= 1; - G(L$2, e & 1); - if (null === a) { - Eg(b); - a = b.memoizedState; - if (null !== a && (a = a.dehydrated, null !== a)) return 0 === (b.mode & 1) ? b.lanes = 1 : "$!" === a.data ? b.lanes = 8 : b.lanes = 1073741824, null; - g = d.children; - a = d.fallback; - return f2 ? (d = b.mode, f2 = b.child, g = { mode: "hidden", children: g }, 0 === (d & 1) && null !== f2 ? (f2.childLanes = 0, f2.pendingProps = g) : f2 = pj(g, d, 0, null), a = Tg(a, d, c, null), f2.return = b, a.return = b, f2.sibling = a, b.child = f2, b.child.memoizedState = nj(c), b.memoizedState = mj, a) : qj(b, g); - } - e = a.memoizedState; - if (null !== e && (h = e.dehydrated, null !== h)) return rj(a, b, g, d, h, e, c); +function nj(a2) { + return { baseLanes: a2, cachePool: null, transitions: null }; +} +function oj(a2, b2, c2) { + var d2 = b2.pendingProps, e2 = L$1.current, f2 = false, g2 = 0 !== (b2.flags & 128), h2; + (h2 = g2) || (h2 = null !== a2 && null === a2.memoizedState ? false : 0 !== (e2 & 2)); + if (h2) f2 = true, b2.flags &= -129; + else if (null === a2 || null !== a2.memoizedState) e2 |= 1; + G$1(L$1, e2 & 1); + if (null === a2) { + Eg(b2); + a2 = b2.memoizedState; + if (null !== a2 && (a2 = a2.dehydrated, null !== a2)) return 0 === (b2.mode & 1) ? b2.lanes = 1 : "$!" === a2.data ? b2.lanes = 8 : b2.lanes = 1073741824, null; + g2 = d2.children; + a2 = d2.fallback; + return f2 ? (d2 = b2.mode, f2 = b2.child, g2 = { mode: "hidden", children: g2 }, 0 === (d2 & 1) && null !== f2 ? (f2.childLanes = 0, f2.pendingProps = g2) : f2 = pj(g2, d2, 0, null), a2 = Tg(a2, d2, c2, null), f2.return = b2, a2.return = b2, f2.sibling = a2, b2.child = f2, b2.child.memoizedState = nj(c2), b2.memoizedState = mj, a2) : qj(b2, g2); + } + e2 = a2.memoizedState; + if (null !== e2 && (h2 = e2.dehydrated, null !== h2)) return rj(a2, b2, g2, d2, h2, e2, c2); if (f2) { - f2 = d.fallback; - g = b.mode; - e = a.child; - h = e.sibling; - var k2 = { mode: "hidden", children: d.children }; - 0 === (g & 1) && b.child !== e ? (d = b.child, d.childLanes = 0, d.pendingProps = k2, b.deletions = null) : (d = Pg(e, k2), d.subtreeFlags = e.subtreeFlags & 14680064); - null !== h ? f2 = Pg(h, f2) : (f2 = Tg(f2, g, c, null), f2.flags |= 2); - f2.return = b; - d.return = b; - d.sibling = f2; - b.child = d; - d = f2; - f2 = b.child; - g = a.child.memoizedState; - g = null === g ? nj(c) : { baseLanes: g.baseLanes | c, cachePool: null, transitions: g.transitions }; - f2.memoizedState = g; - f2.childLanes = a.childLanes & ~c; - b.memoizedState = mj; - return d; - } - f2 = a.child; - a = f2.sibling; - d = Pg(f2, { mode: "visible", children: d.children }); - 0 === (b.mode & 1) && (d.lanes = c); - d.return = b; - d.sibling = null; - null !== a && (c = b.deletions, null === c ? (b.deletions = [a], b.flags |= 16) : c.push(a)); - b.child = d; - b.memoizedState = null; - return d; -} -function qj(a, b) { - b = pj({ mode: "visible", children: b }, a.mode, 0, null); - b.return = a; - return a.child = b; -} -function sj(a, b, c, d) { - null !== d && Jg(d); - Ug(b, a.child, null, c); - a = qj(b, b.pendingProps.children); - a.flags |= 2; - b.memoizedState = null; - return a; -} -function rj(a, b, c, d, e, f2, g) { - if (c) { - if (b.flags & 256) return b.flags &= -257, d = Ki(Error(p(422))), sj(a, b, g, d); - if (null !== b.memoizedState) return b.child = a.child, b.flags |= 128, null; - f2 = d.fallback; - e = b.mode; - d = pj({ mode: "visible", children: d.children }, e, 0, null); - f2 = Tg(f2, e, g, null); + f2 = d2.fallback; + g2 = b2.mode; + e2 = a2.child; + h2 = e2.sibling; + var k2 = { mode: "hidden", children: d2.children }; + 0 === (g2 & 1) && b2.child !== e2 ? (d2 = b2.child, d2.childLanes = 0, d2.pendingProps = k2, b2.deletions = null) : (d2 = Pg(e2, k2), d2.subtreeFlags = e2.subtreeFlags & 14680064); + null !== h2 ? f2 = Pg(h2, f2) : (f2 = Tg(f2, g2, c2, null), f2.flags |= 2); + f2.return = b2; + d2.return = b2; + d2.sibling = f2; + b2.child = d2; + d2 = f2; + f2 = b2.child; + g2 = a2.child.memoizedState; + g2 = null === g2 ? nj(c2) : { baseLanes: g2.baseLanes | c2, cachePool: null, transitions: g2.transitions }; + f2.memoizedState = g2; + f2.childLanes = a2.childLanes & ~c2; + b2.memoizedState = mj; + return d2; + } + f2 = a2.child; + a2 = f2.sibling; + d2 = Pg(f2, { mode: "visible", children: d2.children }); + 0 === (b2.mode & 1) && (d2.lanes = c2); + d2.return = b2; + d2.sibling = null; + null !== a2 && (c2 = b2.deletions, null === c2 ? (b2.deletions = [a2], b2.flags |= 16) : c2.push(a2)); + b2.child = d2; + b2.memoizedState = null; + return d2; +} +function qj(a2, b2) { + b2 = pj({ mode: "visible", children: b2 }, a2.mode, 0, null); + b2.return = a2; + return a2.child = b2; +} +function sj(a2, b2, c2, d2) { + null !== d2 && Jg(d2); + Ug(b2, a2.child, null, c2); + a2 = qj(b2, b2.pendingProps.children); + a2.flags |= 2; + b2.memoizedState = null; + return a2; +} +function rj(a2, b2, c2, d2, e2, f2, g2) { + if (c2) { + if (b2.flags & 256) return b2.flags &= -257, d2 = Ki(Error(p$1(422))), sj(a2, b2, g2, d2); + if (null !== b2.memoizedState) return b2.child = a2.child, b2.flags |= 128, null; + f2 = d2.fallback; + e2 = b2.mode; + d2 = pj({ mode: "visible", children: d2.children }, e2, 0, null); + f2 = Tg(f2, e2, g2, null); f2.flags |= 2; - d.return = b; - f2.return = b; - d.sibling = f2; - b.child = d; - 0 !== (b.mode & 1) && Ug(b, a.child, null, g); - b.child.memoizedState = nj(g); - b.memoizedState = mj; + d2.return = b2; + f2.return = b2; + d2.sibling = f2; + b2.child = d2; + 0 !== (b2.mode & 1) && Ug(b2, a2.child, null, g2); + b2.child.memoizedState = nj(g2); + b2.memoizedState = mj; return f2; } - if (0 === (b.mode & 1)) return sj(a, b, g, null); - if ("$!" === e.data) { - d = e.nextSibling && e.nextSibling.dataset; - if (d) var h = d.dgst; - d = h; - f2 = Error(p(419)); - d = Ki(f2, d, void 0); - return sj(a, b, g, d); - } - h = 0 !== (g & a.childLanes); - if (dh || h) { - d = Q; - if (null !== d) { - switch (g & -g) { + if (0 === (b2.mode & 1)) return sj(a2, b2, g2, null); + if ("$!" === e2.data) { + d2 = e2.nextSibling && e2.nextSibling.dataset; + if (d2) var h2 = d2.dgst; + d2 = h2; + f2 = Error(p$1(419)); + d2 = Ki(f2, d2, void 0); + return sj(a2, b2, g2, d2); + } + h2 = 0 !== (g2 & a2.childLanes); + if (dh || h2) { + d2 = Q$1; + if (null !== d2) { + switch (g2 & -g2) { case 4: - e = 2; + e2 = 2; break; case 16: - e = 8; + e2 = 8; break; case 64: case 128: @@ -4248,262 +4248,262 @@ function rj(a, b, c, d, e, f2, g) { case 16777216: case 33554432: case 67108864: - e = 32; + e2 = 32; break; case 536870912: - e = 268435456; + e2 = 268435456; break; default: - e = 0; + e2 = 0; } - e = 0 !== (e & (d.suspendedLanes | g)) ? 0 : e; - 0 !== e && e !== f2.retryLane && (f2.retryLane = e, ih(a, e), gi(d, a, e, -1)); + e2 = 0 !== (e2 & (d2.suspendedLanes | g2)) ? 0 : e2; + 0 !== e2 && e2 !== f2.retryLane && (f2.retryLane = e2, ih(a2, e2), gi(d2, a2, e2, -1)); } tj(); - d = Ki(Error(p(421))); - return sj(a, b, g, d); - } - if ("$?" === e.data) return b.flags |= 128, b.child = a.child, b = uj.bind(null, a), e._reactRetry = b, null; - a = f2.treeContext; - yg = Lf(e.nextSibling); - xg = b; - I = true; + d2 = Ki(Error(p$1(421))); + return sj(a2, b2, g2, d2); + } + if ("$?" === e2.data) return b2.flags |= 128, b2.child = a2.child, b2 = uj.bind(null, a2), e2._reactRetry = b2, null; + a2 = f2.treeContext; + yg = Lf(e2.nextSibling); + xg = b2; + I$1 = true; zg = null; - null !== a && (og[pg++] = rg, og[pg++] = sg, og[pg++] = qg, rg = a.id, sg = a.overflow, qg = b); - b = qj(b, d.children); - b.flags |= 4096; - return b; + null !== a2 && (og[pg++] = rg, og[pg++] = sg, og[pg++] = qg, rg = a2.id, sg = a2.overflow, qg = b2); + b2 = qj(b2, d2.children); + b2.flags |= 4096; + return b2; +} +function vj(a2, b2, c2) { + a2.lanes |= b2; + var d2 = a2.alternate; + null !== d2 && (d2.lanes |= b2); + bh(a2.return, b2, c2); +} +function wj(a2, b2, c2, d2, e2) { + var f2 = a2.memoizedState; + null === f2 ? a2.memoizedState = { isBackwards: b2, rendering: null, renderingStartTime: 0, last: d2, tail: c2, tailMode: e2 } : (f2.isBackwards = b2, f2.rendering = null, f2.renderingStartTime = 0, f2.last = d2, f2.tail = c2, f2.tailMode = e2); } -function vj(a, b, c) { - a.lanes |= b; - var d = a.alternate; - null !== d && (d.lanes |= b); - bh(a.return, b, c); -} -function wj(a, b, c, d, e) { - var f2 = a.memoizedState; - null === f2 ? a.memoizedState = { isBackwards: b, rendering: null, renderingStartTime: 0, last: d, tail: c, tailMode: e } : (f2.isBackwards = b, f2.rendering = null, f2.renderingStartTime = 0, f2.last = d, f2.tail = c, f2.tailMode = e); -} -function xj(a, b, c) { - var d = b.pendingProps, e = d.revealOrder, f2 = d.tail; - Xi(a, b, d.children, c); - d = L$2.current; - if (0 !== (d & 2)) d = d & 1 | 2, b.flags |= 128; +function xj(a2, b2, c2) { + var d2 = b2.pendingProps, e2 = d2.revealOrder, f2 = d2.tail; + Xi(a2, b2, d2.children, c2); + d2 = L$1.current; + if (0 !== (d2 & 2)) d2 = d2 & 1 | 2, b2.flags |= 128; else { - if (null !== a && 0 !== (a.flags & 128)) a: for (a = b.child; null !== a; ) { - if (13 === a.tag) null !== a.memoizedState && vj(a, c, b); - else if (19 === a.tag) vj(a, c, b); - else if (null !== a.child) { - a.child.return = a; - a = a.child; + if (null !== a2 && 0 !== (a2.flags & 128)) a: for (a2 = b2.child; null !== a2; ) { + if (13 === a2.tag) null !== a2.memoizedState && vj(a2, c2, b2); + else if (19 === a2.tag) vj(a2, c2, b2); + else if (null !== a2.child) { + a2.child.return = a2; + a2 = a2.child; continue; } - if (a === b) break a; - for (; null === a.sibling; ) { - if (null === a.return || a.return === b) break a; - a = a.return; + if (a2 === b2) break a; + for (; null === a2.sibling; ) { + if (null === a2.return || a2.return === b2) break a; + a2 = a2.return; } - a.sibling.return = a.return; - a = a.sibling; + a2.sibling.return = a2.return; + a2 = a2.sibling; } - d &= 1; + d2 &= 1; } - G(L$2, d); - if (0 === (b.mode & 1)) b.memoizedState = null; - else switch (e) { + G$1(L$1, d2); + if (0 === (b2.mode & 1)) b2.memoizedState = null; + else switch (e2) { case "forwards": - c = b.child; - for (e = null; null !== c; ) a = c.alternate, null !== a && null === Ch(a) && (e = c), c = c.sibling; - c = e; - null === c ? (e = b.child, b.child = null) : (e = c.sibling, c.sibling = null); - wj(b, false, e, c, f2); + c2 = b2.child; + for (e2 = null; null !== c2; ) a2 = c2.alternate, null !== a2 && null === Ch(a2) && (e2 = c2), c2 = c2.sibling; + c2 = e2; + null === c2 ? (e2 = b2.child, b2.child = null) : (e2 = c2.sibling, c2.sibling = null); + wj(b2, false, e2, c2, f2); break; case "backwards": - c = null; - e = b.child; - for (b.child = null; null !== e; ) { - a = e.alternate; - if (null !== a && null === Ch(a)) { - b.child = e; + c2 = null; + e2 = b2.child; + for (b2.child = null; null !== e2; ) { + a2 = e2.alternate; + if (null !== a2 && null === Ch(a2)) { + b2.child = e2; break; } - a = e.sibling; - e.sibling = c; - c = e; - e = a; + a2 = e2.sibling; + e2.sibling = c2; + c2 = e2; + e2 = a2; } - wj(b, true, c, null, f2); + wj(b2, true, c2, null, f2); break; case "together": - wj(b, false, null, null, void 0); + wj(b2, false, null, null, void 0); break; default: - b.memoizedState = null; + b2.memoizedState = null; } - return b.child; + return b2.child; } -function ij(a, b) { - 0 === (b.mode & 1) && null !== a && (a.alternate = null, b.alternate = null, b.flags |= 2); +function ij(a2, b2) { + 0 === (b2.mode & 1) && null !== a2 && (a2.alternate = null, b2.alternate = null, b2.flags |= 2); } -function Zi(a, b, c) { - null !== a && (b.dependencies = a.dependencies); - rh |= b.lanes; - if (0 === (c & b.childLanes)) return null; - if (null !== a && b.child !== a.child) throw Error(p(153)); - if (null !== b.child) { - a = b.child; - c = Pg(a, a.pendingProps); - b.child = c; - for (c.return = b; null !== a.sibling; ) a = a.sibling, c = c.sibling = Pg(a, a.pendingProps), c.return = b; - c.sibling = null; - } - return b.child; +function Zi(a2, b2, c2) { + null !== a2 && (b2.dependencies = a2.dependencies); + rh |= b2.lanes; + if (0 === (c2 & b2.childLanes)) return null; + if (null !== a2 && b2.child !== a2.child) throw Error(p$1(153)); + if (null !== b2.child) { + a2 = b2.child; + c2 = Pg(a2, a2.pendingProps); + b2.child = c2; + for (c2.return = b2; null !== a2.sibling; ) a2 = a2.sibling, c2 = c2.sibling = Pg(a2, a2.pendingProps), c2.return = b2; + c2.sibling = null; + } + return b2.child; } -function yj(a, b, c) { - switch (b.tag) { +function yj(a2, b2, c2) { + switch (b2.tag) { case 3: - kj(b); + kj(b2); Ig(); break; case 5: - Ah(b); + Ah(b2); break; case 1: - Zf(b.type) && cg(b); + Zf(b2.type) && cg(b2); break; case 4: - yh(b, b.stateNode.containerInfo); + yh(b2, b2.stateNode.containerInfo); break; case 10: - var d = b.type._context, e = b.memoizedProps.value; - G(Wg, d._currentValue); - d._currentValue = e; + var d2 = b2.type._context, e2 = b2.memoizedProps.value; + G$1(Wg, d2._currentValue); + d2._currentValue = e2; break; case 13: - d = b.memoizedState; - if (null !== d) { - if (null !== d.dehydrated) return G(L$2, L$2.current & 1), b.flags |= 128, null; - if (0 !== (c & b.child.childLanes)) return oj(a, b, c); - G(L$2, L$2.current & 1); - a = Zi(a, b, c); - return null !== a ? a.sibling : null; - } - G(L$2, L$2.current & 1); + d2 = b2.memoizedState; + if (null !== d2) { + if (null !== d2.dehydrated) return G$1(L$1, L$1.current & 1), b2.flags |= 128, null; + if (0 !== (c2 & b2.child.childLanes)) return oj(a2, b2, c2); + G$1(L$1, L$1.current & 1); + a2 = Zi(a2, b2, c2); + return null !== a2 ? a2.sibling : null; + } + G$1(L$1, L$1.current & 1); break; case 19: - d = 0 !== (c & b.childLanes); - if (0 !== (a.flags & 128)) { - if (d) return xj(a, b, c); - b.flags |= 128; - } - e = b.memoizedState; - null !== e && (e.rendering = null, e.tail = null, e.lastEffect = null); - G(L$2, L$2.current); - if (d) break; + d2 = 0 !== (c2 & b2.childLanes); + if (0 !== (a2.flags & 128)) { + if (d2) return xj(a2, b2, c2); + b2.flags |= 128; + } + e2 = b2.memoizedState; + null !== e2 && (e2.rendering = null, e2.tail = null, e2.lastEffect = null); + G$1(L$1, L$1.current); + if (d2) break; else return null; case 22: case 23: - return b.lanes = 0, dj(a, b, c); + return b2.lanes = 0, dj(a2, b2, c2); } - return Zi(a, b, c); + return Zi(a2, b2, c2); } var zj, Aj, Bj, Cj; -zj = function(a, b) { - for (var c = b.child; null !== c; ) { - if (5 === c.tag || 6 === c.tag) a.appendChild(c.stateNode); - else if (4 !== c.tag && null !== c.child) { - c.child.return = c; - c = c.child; +zj = function(a2, b2) { + for (var c2 = b2.child; null !== c2; ) { + if (5 === c2.tag || 6 === c2.tag) a2.appendChild(c2.stateNode); + else if (4 !== c2.tag && null !== c2.child) { + c2.child.return = c2; + c2 = c2.child; continue; } - if (c === b) break; - for (; null === c.sibling; ) { - if (null === c.return || c.return === b) return; - c = c.return; + if (c2 === b2) break; + for (; null === c2.sibling; ) { + if (null === c2.return || c2.return === b2) return; + c2 = c2.return; } - c.sibling.return = c.return; - c = c.sibling; + c2.sibling.return = c2.return; + c2 = c2.sibling; } }; Aj = function() { }; -Bj = function(a, b, c, d) { - var e = a.memoizedProps; - if (e !== d) { - a = b.stateNode; +Bj = function(a2, b2, c2, d2) { + var e2 = a2.memoizedProps; + if (e2 !== d2) { + a2 = b2.stateNode; xh(uh.current); var f2 = null; - switch (c) { + switch (c2) { case "input": - e = Ya(a, e); - d = Ya(a, d); + e2 = Ya(a2, e2); + d2 = Ya(a2, d2); f2 = []; break; case "select": - e = A({}, e, { value: void 0 }); - d = A({}, d, { value: void 0 }); + e2 = A$1({}, e2, { value: void 0 }); + d2 = A$1({}, d2, { value: void 0 }); f2 = []; break; case "textarea": - e = gb(a, e); - d = gb(a, d); + e2 = gb(a2, e2); + d2 = gb(a2, d2); f2 = []; break; default: - "function" !== typeof e.onClick && "function" === typeof d.onClick && (a.onclick = Bf); - } - ub(c, d); - var g; - c = null; - for (l2 in e) if (!d.hasOwnProperty(l2) && e.hasOwnProperty(l2) && null != e[l2]) if ("style" === l2) { - var h = e[l2]; - for (g in h) h.hasOwnProperty(g) && (c || (c = {}), c[g] = ""); + "function" !== typeof e2.onClick && "function" === typeof d2.onClick && (a2.onclick = Bf); + } + ub(c2, d2); + var g2; + c2 = null; + for (l2 in e2) if (!d2.hasOwnProperty(l2) && e2.hasOwnProperty(l2) && null != e2[l2]) if ("style" === l2) { + var h2 = e2[l2]; + for (g2 in h2) h2.hasOwnProperty(g2) && (c2 || (c2 = {}), c2[g2] = ""); } else "dangerouslySetInnerHTML" !== l2 && "children" !== l2 && "suppressContentEditableWarning" !== l2 && "suppressHydrationWarning" !== l2 && "autoFocus" !== l2 && (ea.hasOwnProperty(l2) ? f2 || (f2 = []) : (f2 = f2 || []).push(l2, null)); - for (l2 in d) { - var k2 = d[l2]; - h = null != e ? e[l2] : void 0; - if (d.hasOwnProperty(l2) && k2 !== h && (null != k2 || null != h)) if ("style" === l2) if (h) { - for (g in h) !h.hasOwnProperty(g) || k2 && k2.hasOwnProperty(g) || (c || (c = {}), c[g] = ""); - for (g in k2) k2.hasOwnProperty(g) && h[g] !== k2[g] && (c || (c = {}), c[g] = k2[g]); - } else c || (f2 || (f2 = []), f2.push( + for (l2 in d2) { + var k2 = d2[l2]; + h2 = null != e2 ? e2[l2] : void 0; + if (d2.hasOwnProperty(l2) && k2 !== h2 && (null != k2 || null != h2)) if ("style" === l2) if (h2) { + for (g2 in h2) !h2.hasOwnProperty(g2) || k2 && k2.hasOwnProperty(g2) || (c2 || (c2 = {}), c2[g2] = ""); + for (g2 in k2) k2.hasOwnProperty(g2) && h2[g2] !== k2[g2] && (c2 || (c2 = {}), c2[g2] = k2[g2]); + } else c2 || (f2 || (f2 = []), f2.push( l2, - c - )), c = k2; - else "dangerouslySetInnerHTML" === l2 ? (k2 = k2 ? k2.__html : void 0, h = h ? h.__html : void 0, null != k2 && h !== k2 && (f2 = f2 || []).push(l2, k2)) : "children" === l2 ? "string" !== typeof k2 && "number" !== typeof k2 || (f2 = f2 || []).push(l2, "" + k2) : "suppressContentEditableWarning" !== l2 && "suppressHydrationWarning" !== l2 && (ea.hasOwnProperty(l2) ? (null != k2 && "onScroll" === l2 && D("scroll", a), f2 || h === k2 || (f2 = [])) : (f2 = f2 || []).push(l2, k2)); + c2 + )), c2 = k2; + else "dangerouslySetInnerHTML" === l2 ? (k2 = k2 ? k2.__html : void 0, h2 = h2 ? h2.__html : void 0, null != k2 && h2 !== k2 && (f2 = f2 || []).push(l2, k2)) : "children" === l2 ? "string" !== typeof k2 && "number" !== typeof k2 || (f2 = f2 || []).push(l2, "" + k2) : "suppressContentEditableWarning" !== l2 && "suppressHydrationWarning" !== l2 && (ea.hasOwnProperty(l2) ? (null != k2 && "onScroll" === l2 && D$1("scroll", a2), f2 || h2 === k2 || (f2 = [])) : (f2 = f2 || []).push(l2, k2)); } - c && (f2 = f2 || []).push("style", c); + c2 && (f2 = f2 || []).push("style", c2); var l2 = f2; - if (b.updateQueue = l2) b.flags |= 4; + if (b2.updateQueue = l2) b2.flags |= 4; } }; -Cj = function(a, b, c, d) { - c !== d && (b.flags |= 4); +Cj = function(a2, b2, c2, d2) { + c2 !== d2 && (b2.flags |= 4); }; -function Dj(a, b) { - if (!I) switch (a.tailMode) { +function Dj(a2, b2) { + if (!I$1) switch (a2.tailMode) { case "hidden": - b = a.tail; - for (var c = null; null !== b; ) null !== b.alternate && (c = b), b = b.sibling; - null === c ? a.tail = null : c.sibling = null; + b2 = a2.tail; + for (var c2 = null; null !== b2; ) null !== b2.alternate && (c2 = b2), b2 = b2.sibling; + null === c2 ? a2.tail = null : c2.sibling = null; break; case "collapsed": - c = a.tail; - for (var d = null; null !== c; ) null !== c.alternate && (d = c), c = c.sibling; - null === d ? b || null === a.tail ? a.tail = null : a.tail.sibling = null : d.sibling = null; + c2 = a2.tail; + for (var d2 = null; null !== c2; ) null !== c2.alternate && (d2 = c2), c2 = c2.sibling; + null === d2 ? b2 || null === a2.tail ? a2.tail = null : a2.tail.sibling = null : d2.sibling = null; } } -function S(a) { - var b = null !== a.alternate && a.alternate.child === a.child, c = 0, d = 0; - if (b) for (var e = a.child; null !== e; ) c |= e.lanes | e.childLanes, d |= e.subtreeFlags & 14680064, d |= e.flags & 14680064, e.return = a, e = e.sibling; - else for (e = a.child; null !== e; ) c |= e.lanes | e.childLanes, d |= e.subtreeFlags, d |= e.flags, e.return = a, e = e.sibling; - a.subtreeFlags |= d; - a.childLanes = c; - return b; +function S$1(a2) { + var b2 = null !== a2.alternate && a2.alternate.child === a2.child, c2 = 0, d2 = 0; + if (b2) for (var e2 = a2.child; null !== e2; ) c2 |= e2.lanes | e2.childLanes, d2 |= e2.subtreeFlags & 14680064, d2 |= e2.flags & 14680064, e2.return = a2, e2 = e2.sibling; + else for (e2 = a2.child; null !== e2; ) c2 |= e2.lanes | e2.childLanes, d2 |= e2.subtreeFlags, d2 |= e2.flags, e2.return = a2, e2 = e2.sibling; + a2.subtreeFlags |= d2; + a2.childLanes = c2; + return b2; } -function Ej(a, b, c) { - var d = b.pendingProps; - wg(b); - switch (b.tag) { +function Ej(a2, b2, c2) { + var d2 = b2.pendingProps; + wg(b2); + switch (b2.tag) { case 2: case 16: case 15: @@ -4514,346 +4514,346 @@ function Ej(a, b, c) { case 12: case 9: case 14: - return S(b), null; + return S$1(b2), null; case 1: - return Zf(b.type) && $f(), S(b), null; + return Zf(b2.type) && $f(), S$1(b2), null; case 3: - d = b.stateNode; + d2 = b2.stateNode; zh(); - E(Wf); - E(H); + E$1(Wf); + E$1(H$1); Eh(); - d.pendingContext && (d.context = d.pendingContext, d.pendingContext = null); - if (null === a || null === a.child) Gg(b) ? b.flags |= 4 : null === a || a.memoizedState.isDehydrated && 0 === (b.flags & 256) || (b.flags |= 1024, null !== zg && (Fj(zg), zg = null)); - Aj(a, b); - S(b); + d2.pendingContext && (d2.context = d2.pendingContext, d2.pendingContext = null); + if (null === a2 || null === a2.child) Gg(b2) ? b2.flags |= 4 : null === a2 || a2.memoizedState.isDehydrated && 0 === (b2.flags & 256) || (b2.flags |= 1024, null !== zg && (Fj(zg), zg = null)); + Aj(a2, b2); + S$1(b2); return null; case 5: - Bh(b); - var e = xh(wh.current); - c = b.type; - if (null !== a && null != b.stateNode) Bj(a, b, c, d, e), a.ref !== b.ref && (b.flags |= 512, b.flags |= 2097152); + Bh(b2); + var e2 = xh(wh.current); + c2 = b2.type; + if (null !== a2 && null != b2.stateNode) Bj(a2, b2, c2, d2, e2), a2.ref !== b2.ref && (b2.flags |= 512, b2.flags |= 2097152); else { - if (!d) { - if (null === b.stateNode) throw Error(p(166)); - S(b); + if (!d2) { + if (null === b2.stateNode) throw Error(p$1(166)); + S$1(b2); return null; } - a = xh(uh.current); - if (Gg(b)) { - d = b.stateNode; - c = b.type; - var f2 = b.memoizedProps; - d[Of] = b; - d[Pf] = f2; - a = 0 !== (b.mode & 1); - switch (c) { + a2 = xh(uh.current); + if (Gg(b2)) { + d2 = b2.stateNode; + c2 = b2.type; + var f2 = b2.memoizedProps; + d2[Of] = b2; + d2[Pf] = f2; + a2 = 0 !== (b2.mode & 1); + switch (c2) { case "dialog": - D("cancel", d); - D("close", d); + D$1("cancel", d2); + D$1("close", d2); break; case "iframe": case "object": case "embed": - D("load", d); + D$1("load", d2); break; case "video": case "audio": - for (e = 0; e < lf.length; e++) D(lf[e], d); + for (e2 = 0; e2 < lf.length; e2++) D$1(lf[e2], d2); break; case "source": - D("error", d); + D$1("error", d2); break; case "img": case "image": case "link": - D( + D$1( "error", - d + d2 ); - D("load", d); + D$1("load", d2); break; case "details": - D("toggle", d); + D$1("toggle", d2); break; case "input": - Za(d, f2); - D("invalid", d); + Za(d2, f2); + D$1("invalid", d2); break; case "select": - d._wrapperState = { wasMultiple: !!f2.multiple }; - D("invalid", d); + d2._wrapperState = { wasMultiple: !!f2.multiple }; + D$1("invalid", d2); break; case "textarea": - hb(d, f2), D("invalid", d); - } - ub(c, f2); - e = null; - for (var g in f2) if (f2.hasOwnProperty(g)) { - var h = f2[g]; - "children" === g ? "string" === typeof h ? d.textContent !== h && (true !== f2.suppressHydrationWarning && Af(d.textContent, h, a), e = ["children", h]) : "number" === typeof h && d.textContent !== "" + h && (true !== f2.suppressHydrationWarning && Af( - d.textContent, - h, - a - ), e = ["children", "" + h]) : ea.hasOwnProperty(g) && null != h && "onScroll" === g && D("scroll", d); - } - switch (c) { + hb(d2, f2), D$1("invalid", d2); + } + ub(c2, f2); + e2 = null; + for (var g2 in f2) if (f2.hasOwnProperty(g2)) { + var h2 = f2[g2]; + "children" === g2 ? "string" === typeof h2 ? d2.textContent !== h2 && (true !== f2.suppressHydrationWarning && Af(d2.textContent, h2, a2), e2 = ["children", h2]) : "number" === typeof h2 && d2.textContent !== "" + h2 && (true !== f2.suppressHydrationWarning && Af( + d2.textContent, + h2, + a2 + ), e2 = ["children", "" + h2]) : ea.hasOwnProperty(g2) && null != h2 && "onScroll" === g2 && D$1("scroll", d2); + } + switch (c2) { case "input": - Va(d); - db(d, f2, true); + Va(d2); + db(d2, f2, true); break; case "textarea": - Va(d); - jb(d); + Va(d2); + jb(d2); break; case "select": case "option": break; default: - "function" === typeof f2.onClick && (d.onclick = Bf); + "function" === typeof f2.onClick && (d2.onclick = Bf); } - d = e; - b.updateQueue = d; - null !== d && (b.flags |= 4); + d2 = e2; + b2.updateQueue = d2; + null !== d2 && (b2.flags |= 4); } else { - g = 9 === e.nodeType ? e : e.ownerDocument; - "http://www.w3.org/1999/xhtml" === a && (a = kb(c)); - "http://www.w3.org/1999/xhtml" === a ? "script" === c ? (a = g.createElement("div"), a.innerHTML = "