diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3d37323..d3d4b8c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -15,32 +15,32 @@ */ module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier', - ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'], - }, - env: { - browser: true, - es2017: true, - node: true, - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - }, - }, - ], + root: true, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:svelte/recommended', + 'prettier', + ], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020, + extraFileExtensions: ['.svelte'], + }, + env: { + browser: true, + es2017: true, + node: true, + }, + overrides: [ + { + files: ['*.svelte'], + parser: 'svelte-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser', + }, + }, + ], }; diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..95d3e55 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,38 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: build + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: # Manual runs + +jobs: + check-build: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18, 20] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..bec7c67 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,36 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: check + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: # Manual runs + +jobs: + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: 20 + - run: npm ci + - run: npm run lint + - run: npm run check diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..33889ad --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,37 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: tests + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: # Manual runs + +jobs: + run-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: 20 + - run: npm ci + - run: npx playwright install chromium + - run: npm run test:unit + - run: npm run test:integration diff --git a/.gitignore b/.gitignore index df13805..b2ded05 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,14 @@ .DS_Store -node_modules -/build -/.svelte-kit -/package .env .env.* !.env.example -.vercel .output +.svelte-kit +.vercel +build +coverage +node_modules +package +test-results vite.config.js.timestamp-* -vite.config.ts.timestamp-* -test-results \ No newline at end of file +vite.config.ts.timestamp-* \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index b586c10..634921a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ { - "useTabs": true, - "singleQuote": true, - "trailingComma": "all", - "printWidth": 100, - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] + "singleQuote": true, + "trailingComma": "all", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] } diff --git a/package-lock.json b/package-lock.json index 70f0836..b09b4ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,36 +13,37 @@ "devDependencies": { "@fontsource/fira-mono": "^5.0.8", "@googlemaps/js-api-loader": "^1.16.2", - "@material/web": "^1.0.0-pre.14", - "@neoconfetti/svelte": "^1.0.0", - "@playwright/test": "^1.37.0", - "@sveltejs/adapter-auto": "^2.1.0", - "@sveltejs/adapter-node": "^1.3.1", - "@sveltejs/kit": "^1.22.6", - "@types/cookie": "^0.5.1", - "@types/google.maps": "^3.53.6", - "@types/google.visualization": "^0.0.69", - "@types/proj4": "^2.5.2", - "@typescript-eslint/eslint-plugin": "^6.4.0", - "@typescript-eslint/parser": "^6.4.0", - "autoprefixer": "^10.4.15", - "eslint": "^8.47.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-svelte": "^2.32.4", - "geotiff": "^2.0.7", - "geotiff-geokeys-to-proj4": "^2022.9.7", + "@material/web": "^1.1.1", + "@playwright/test": "^1.41.0", + "@sveltejs/adapter-auto": "^3.1.0", + "@sveltejs/adapter-node": "^3.0.1", + "@sveltejs/kit": "^2.3.5", + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "@types/cookie": "^0.6.0", + "@types/google.maps": "^3.54.10", + "@types/google.visualization": "^0.0.73", + "@types/proj4": "^2.5.5", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@vitest/coverage-v8": "^1.2.1", + "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.35.1", + "geotiff": "^2.1.1", + "geotiff-geokeys-to-proj4": "^2024.1.14", "google-charts": "^2.0.0", - "postcss": "^8.4.31", - "prettier": "^3.0.2", - "prettier-plugin-svelte": "^3.0.3", - "proj4": "^2.9.0", - "svelte": "^4.2.0", - "svelte-check": "^3.5.0", - "tailwindcss": "^3.3.3", - "tslib": "^2.6.1", - "typescript": "^5.1.6", - "vite": "^4.4.9", - "vitest": "^0.33.0" + "postcss": "^8.4.33", + "prettier": "^3.2.4", + "prettier-plugin-svelte": "^3.1.2", + "proj4": "^2.10.0", + "svelte": "^4.2.9", + "svelte-check": "^3.6.3", + "tailwindcss": "^3.4.1", + "tslib": "^2.6.2", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "vitest": "^1.2.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -79,10 +80,76 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", "cpu": [ "arm" ], @@ -96,9 +163,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", "cpu": [ "arm64" ], @@ -112,9 +179,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", "cpu": [ "x64" ], @@ -128,9 +195,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "cpu": [ "arm64" ], @@ -144,9 +211,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", "cpu": [ "x64" ], @@ -160,9 +227,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", "cpu": [ "arm64" ], @@ -176,9 +243,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", "cpu": [ "x64" ], @@ -192,9 +259,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", "cpu": [ "arm" ], @@ -208,9 +275,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", "cpu": [ "arm64" ], @@ -224,9 +291,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", "cpu": [ "ia32" ], @@ -240,9 +307,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", "cpu": [ "loong64" ], @@ -256,9 +323,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", "cpu": [ "mips64el" ], @@ -272,9 +339,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", "cpu": [ "ppc64" ], @@ -288,9 +355,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", "cpu": [ "riscv64" ], @@ -304,9 +371,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", "cpu": [ "s390x" ], @@ -320,9 +387,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", "cpu": [ "x64" ], @@ -336,9 +403,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", "cpu": [ "x64" ], @@ -352,9 +419,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", "cpu": [ "x64" ], @@ -368,9 +435,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", "cpu": [ "x64" ], @@ -384,9 +451,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", "cpu": [ "arm64" ], @@ -400,9 +467,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", "cpu": [ "ia32" ], @@ -416,9 +483,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", "cpu": [ "x64" ], @@ -447,18 +514,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -478,10 +545,32 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -503,19 +592,41 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -530,15 +641,68 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -586,9 +750,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -596,36 +760,30 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", - "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==", "dev": true }, "node_modules/@lit/reactive-element": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.3.tgz", + "integrity": "sha512-e067EuTNNgOHm1tZcc0Ia7TCzD/9ZpoPegHKgesrGK6pSDRGkGDAQbYuQclqLPIoJ9eC8Kb9mYtGryWcM5AywA==", "dev": true, "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" + "@lit-labs/ssr-dom-shim": "^1.1.2" } }, "node_modules/@material/web": { - "version": "1.0.0-pre.15", - "resolved": "https://registry.npmjs.org/@material/web/-/web-1.0.0-pre.15.tgz", - "integrity": "sha512-AuGOfuREI6b0u0qYhWrOT+IwrbXtsVNDtPHyFRaiABD3OIs9gRtkOUh+uSjMesbDT8BzMhbXDdCMbK+O4XOlLQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@material/web/-/web-1.1.1.tgz", + "integrity": "sha512-K7N9yQrQmB42rwvtbVlwK8SGT99oUcqTdHZkxan4v9klcIUYB5BdqlT8CSKYhKFMU6zITHP628E2u+qpYhLYsw==", "dev": true, "dependencies": { - "lit": "^2.7.4", + "lit": "^2.7.4 || ^3.0.0", "tslib": "^2.4.0" } }, - "node_modules/@neoconfetti/svelte": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", - "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -662,40 +820,46 @@ } }, "node_modules/@petamoriken/float16": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.3.tgz", - "integrity": "sha512-an2OZ7/6er9Jja8EDUvU/tmtGIutdlb6LwXOwgjzoCjDRAsUd8sRZMBjoPEy78Xa9iOp+Kglk2CHgVwZuZbWbw==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz", + "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ==", "dev": true }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@playwright/test": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.37.0.tgz", - "integrity": "sha512-181WBLk4SRUyH1Q96VZl7BP6HcK0b7lbdeKisn3N/vnjitk+9HbdlFz/L5fey05vxaAhldIDnzo8KUoy8S3mmQ==", + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.0.tgz", + "integrity": "sha512-Grvzj841THwtpBOrfiHOeYTJQxDRnKofMSzCiV8XeyLWu3o89qftQ4BCKfkziJhSUQRd0utKhrddtIsiraIwmw==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.37.0" + "playwright": "1.41.0" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", - "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", + "version": "25.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", + "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -703,13 +867,13 @@ "estree-walker": "^2.0.2", "glob": "^8.0.3", "is-reference": "1.2.1", - "magic-string": "^0.27.0" + "magic-string": "^0.30.3" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" + "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -718,18 +882,18 @@ } }, "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1" + "@rollup/pluginutils": "^5.1.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -738,9 +902,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -754,7 +918,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" + "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -763,9 +927,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.3.tgz", - "integrity": "sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", @@ -776,7 +940,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -784,6 +948,175 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -791,187 +1124,149 @@ "dev": true }, "node_modules/@sveltejs/adapter-auto": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", - "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.1.0.tgz", + "integrity": "sha512-igS5hqCwdiXWb8NoWzThKCVQQj9tKgUkbTtzfxBPgSLOyFjkiGNDX0SgCoY2QIUWBqOkfGTOqGlrW5Ynw9oUvw==", "dev": true, "dependencies": { - "import-meta-resolve": "^3.0.0" + "import-meta-resolve": "^4.0.0" }, "peerDependencies": { - "@sveltejs/kit": "^1.0.0" + "@sveltejs/kit": "^2.0.0" } }, "node_modules/@sveltejs/adapter-node": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-1.3.1.tgz", - "integrity": "sha512-A0VgRQDCDPzdLNoiAbcOxGw4zT1Mc+n1LwT1OmO350R7WxrEqdMUChPPOd1iMfIDWlP4ie6E2d/WQf5es2d4Zw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-3.0.1.tgz", + "integrity": "sha512-w1NE6K60WQ7JcNa4IyrhzoyH6MIuGdBL9Bd3EaRNcSYdvCG4mOzXI6kLI3kUhLI8krKGoQeOxLhchC5xLnqo6Q==", "dev": true, "dependencies": { - "@rollup/plugin-commonjs": "^25.0.0", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.1", - "rollup": "^3.7.0" + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "rollup": "^4.9.5" }, "peerDependencies": { - "@sveltejs/kit": "^1.0.0" + "@sveltejs/kit": "^2.0.0" } }, "node_modules/@sveltejs/kit": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.22.6.tgz", - "integrity": "sha512-SDKxI/QpsReCwIn5czjT53fKlPBybbmMk67d317gUqfeORroBAFN1Z6s/x0E1JYi+04i7kKllS+Sz9wVfmUkAQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.3.5.tgz", + "integrity": "sha512-Vu+ckGQu/t+pcuueryaHYacgoYsYq6KB1k1p4w1xDp1eQ2aYz3POcx3GSuqxWjJfOwMMM83xiuAnDWBKyOn1Tg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.4.1", - "@types/cookie": "^0.5.1", - "cookie": "^0.5.0", - "devalue": "^4.3.1", + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0", + "devalue": "^4.3.2", "esm-env": "^1.0.0", + "import-meta-resolve": "^4.0.0", "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "mime": "^3.0.0", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^2.0.2", - "undici": "~5.23.0" + "sirv": "^2.0.4", + "tiny-glob": "^0.2.9" }, "bin": { "svelte-kit": "svelte-kit.js" }, "engines": { - "node": "^16.14 || >=18" + "node": ">=18.13" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0-next.0", - "vite": "^4.0.0" - } - }, - "node_modules/@sveltejs/kit/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3" } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.5.tgz", - "integrity": "sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz", + "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3", + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.2", + "magic-string": "^0.30.5", "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.4" + "vitefu": "^0.2.5" }, "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz", - "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", "dev": true, "dependencies": { "debug": "^4.3.4" }, "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.2.0", - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "dependencies": { - "@types/chai": "*" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, "node_modules/@types/cookie": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", - "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/google.maps": { - "version": "3.53.6", - "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.53.6.tgz", - "integrity": "sha512-zDU8c7K0YR1Ob7Wn0qCSQvICIuxilZH9KFIDHK6JO/5QzqEMv8e4+9bmyoDEktA9vPNmwP++zzg65h9y53iZ6Q==", + "version": "3.54.10", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.54.10.tgz", + "integrity": "sha512-N6gwM01mKhooXaw+IKbUH7wJcIJCn8U60VoaVvom5EiQjmfgevhQ+0+/r17beXW5j8ad2x+WPr0iyOUodCw4/w==", "dev": true }, "node_modules/@types/google.visualization": { - "version": "0.0.69", - "resolved": "https://registry.npmjs.org/@types/google.visualization/-/google.visualization-0.0.69.tgz", - "integrity": "sha512-EGkhm5uUyX7PVCTzQacux9rELhiG5uxGZP2mYc1zLCuT3/vHQvWDGY96BZwTDaizqtebGIfFuGFBx3kW7dwYVw==", + "version": "0.0.73", + "resolved": "https://registry.npmjs.org/@types/google.visualization/-/google.visualization-0.0.73.tgz", + "integrity": "sha512-ACEjWFeNJVrV5DUvhODYDQwvWk5wzlqyACy3i+WPMx0v+9ysIYWGVe2uTLVFzpjxy5zA4iF4GrHd9SGtrf+H2A==", "dev": true }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "node_modules/@types/node": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", - "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/proj4": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.2.tgz", - "integrity": "sha512-/Nmfn9p08yaYw6xo5f2b0L+2oHk2kZeOkp5v+4VCeNfq+ETlLQbmHmC97/pjDIEZy8jxwz7pdPpwNzDHM5cuJw==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", + "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==", "dev": true }, "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", "dev": true }, "node_modules/@types/resolve": { @@ -981,28 +1276,28 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", - "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", + "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.4.0", - "@typescript-eslint/type-utils": "6.4.0", - "@typescript-eslint/utils": "6.4.0", - "@typescript-eslint/visitor-keys": "6.4.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/type-utils": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1028,15 +1323,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.4.0", - "@typescript-eslint/types": "6.4.0", - "@typescript-eslint/typescript-estree": "6.4.0", - "@typescript-eslint/visitor-keys": "6.4.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4" }, "engines": { @@ -1056,13 +1351,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", - "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.4.0", - "@typescript-eslint/visitor-keys": "6.4.0" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1073,13 +1368,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", - "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", + "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.4.0", - "@typescript-eslint/utils": "6.4.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/utils": "6.19.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1100,9 +1395,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1113,16 +1408,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.4.0", - "@typescript-eslint/visitor-keys": "6.4.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -1140,17 +1436,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", - "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", + "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.4.0", - "@typescript-eslint/types": "6.4.0", - "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", "semver": "^7.5.4" }, "engines": { @@ -1165,12 +1461,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", - "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/types": "6.19.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1181,28 +1477,61 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.1.tgz", + "integrity": "sha512-fJEhKaDwGMZtJUX7BRcGxooGwg1Hl0qt53mVup/ZJeznhvL5EodteVnb/mcByhEcvVWbK83ZF31c7nPEDi4LOQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "^1.0.0" + } + }, "node_modules/@vitest/expect": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.33.0.tgz", - "integrity": "sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", "dev": true, "dependencies": { - "@vitest/spy": "0.33.0", - "@vitest/utils": "0.33.0", - "chai": "^4.3.7" + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "chai": "^4.3.10" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.33.0.tgz", - "integrity": "sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.33.0", - "p-limit": "^4.0.0", + "@vitest/utils": "1.2.1", + "p-limit": "^5.0.0", "pathe": "^1.1.1" }, "funding": { @@ -1210,15 +1539,15 @@ } }, "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1237,61 +1566,59 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.33.0.tgz", - "integrity": "sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", "dev": true, "dependencies": { - "magic-string": "^0.30.1", + "magic-string": "^0.30.5", "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@vitest/spy": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.33.0.tgz", - "integrity": "sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", "dev": true, "dependencies": { - "tinyspy": "^2.1.1" + "tinyspy": "^2.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.33.0.tgz", - "integrity": "sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", "dev": true, "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/utils/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, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1310,9 +1637,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -1417,9 +1744,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", "dev": true, "funding": [ { @@ -1436,9 +1763,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -1454,9 +1781,9 @@ } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", "dev": true, "dependencies": { "dequal": "^2.0.3" @@ -1478,13 +1805,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -1500,9 +1826,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -1519,10 +1845,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -1552,18 +1878,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -1592,9 +1906,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001521", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", - "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -1612,18 +1926,18 @@ ] }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -1646,10 +1960,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -1754,10 +2071,16 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -1877,9 +2200,9 @@ "dev": true }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -1926,10 +2249,22 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { - "version": "1.4.492", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz", - "integrity": "sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==", + "version": "1.4.638", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.638.tgz", + "integrity": "sha512-gpmbAG2LbfPKcDaL5m9IKutKjUx4ZRkvGNkgL/8nKqxkXsBVYykVULboWlqCrHsh3razucgDJDuKoWJmGPdItA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/es6-promise": { @@ -1939,9 +2274,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1951,28 +2286,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "node_modules/escalade": { @@ -1997,18 +2333,19 @@ } }, "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2050,10 +2387,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2063,22 +2412,23 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "2.32.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.32.4.tgz", - "integrity": "sha512-VJ12i2Iogug1jvhwxSlognnfGj76P5gks/V4pUD4SCSVQOp14u47MNP0zAG8AQR3LT0Fi1iUvIFnY4l9z5Rwbg==", + "version": "2.35.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz", + "integrity": "sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@jridgewell/sourcemap-codec": "^1.4.14", "debug": "^4.3.1", + "eslint-compat-utils": "^0.1.2", "esutils": "^2.0.3", - "known-css-properties": "^0.28.0", + "known-css-properties": "^0.29.0", "postcss": "^8.4.5", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.11", "semver": "^7.5.3", - "svelte-eslint-parser": "^0.32.2" + "svelte-eslint-parser": ">=0.33.0 <1.0.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -2124,6 +2474,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", @@ -2195,6 +2567,29 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2202,9 +2597,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -2242,9 +2637,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2291,12 +2686,13 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -2304,22 +2700,38 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fs.realpath": { @@ -2343,15 +2755,18 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/geotiff": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz", - "integrity": "sha512-FKvFTNowMU5K6lHYY2f83d4lS2rsCNdpUC28AX61x9ZzzqPNaWFElWv93xj0eJFaNyOYA63ic5OzJ88dHpoA5Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.1.tgz", + "integrity": "sha512-Ss6HQEhrlR2v0FmOGq88l0wa2oCmmGi6rXAMiUxR/T7Xe98evypEmyiji7lvVeVR/AXuxK0xDCWcwfWkSmOrAA==", "dev": true, "dependencies": { "@petamoriken/float16": "^3.4.7", @@ -2360,27 +2775,40 @@ "parse-headers": "^2.0.2", "quick-lru": "^6.1.1", "web-worker": "^1.2.0", - "xml-utils": "^1.0.2" + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" }, "engines": { "node": ">=10.19" } }, "node_modules/geotiff-geokeys-to-proj4": { - "version": "2022.9.7", - "resolved": "https://registry.npmjs.org/geotiff-geokeys-to-proj4/-/geotiff-geokeys-to-proj4-2022.9.7.tgz", - "integrity": "sha512-lLZQddb5nompADXwmjtA+bymiz1tfOMg0r9wY9+rWLZzgpR2Uzs7U2azFcUnz6om9XOOuL+55hRKcKVPUlAg/w==", + "version": "2024.1.14", + "resolved": "https://registry.npmjs.org/geotiff-geokeys-to-proj4/-/geotiff-geokeys-to-proj4-2024.1.14.tgz", + "integrity": "sha512-HUVrrHzXNbMjZtJpQ16HTEczL4fSOiIblUt7k7ct5tNcnyDq4xBHaZdRLwP0LWIHwnunL5OnorF53Olsrq3t5A==", "dev": true }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" } }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -2412,15 +2840,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/glob/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -2434,9 +2853,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2448,6 +2867,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -2468,6 +2893,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/google-charts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/google-charts/-/google-charts-2.0.0.tgz", @@ -2486,31 +2917,46 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" } }, - "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==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16.17.0" } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -2533,9 +2979,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", - "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", "dev": true, "funding": { "type": "github", @@ -2595,12 +3041,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2615,6 +3061,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2624,52 +3079,132 @@ "is-extglob": "^2.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { - "@types/estree": "*" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -2687,6 +3222,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2705,6 +3246,15 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -2715,9 +3265,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "node_modules/lerc": { @@ -2755,41 +3305,45 @@ "dev": true }, "node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.1.tgz", + "integrity": "sha512-hF1y4K58+Gqrz+aAPS0DNBwPqPrg6P04DuWK52eMkt/SM9Qe9keWLcFgRcEKOLuDlRZlDsDbNL37Vr7ew1VCuw==", "dev": true, "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" } }, "node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.3.tgz", + "integrity": "sha512-2vhidmC7gGLfnVx41P8UZpzyS0Fb8wYhS5RCm16cMW3oERO0Khd3EsKwtRpOnttuByI5rURjT2dfoA7NlInCNw==", "dev": true, "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" + "@lit-labs/ssr-dom-shim": "^1.1.2", + "@lit/reactive-element": "^2.0.0", + "lit-html": "^3.1.0" } }, "node_modules/lit-html": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", - "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.1.tgz", + "integrity": "sha512-x/EwfGk2D/f4odSFM40hcGumzqoKv0/SUh6fBO+1Ragez81APrcAMPo1jIrCDd9Sn+Z4CT867HWKViByvkDZUA==", "dev": true, "dependencies": { "@types/trusted-types": "^2.0.2" } }, "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -2825,12 +3379,12 @@ "dev": true }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { @@ -2846,23 +3400,55 @@ } }, "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { "node": ">=12" } }, + "node_modules/magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2891,16 +3477,16 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { @@ -2913,15 +3499,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -2933,6 +3522,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -2946,15 +3544,15 @@ } }, "node_modules/mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.1.2" + "ufo": "^1.3.2" } }, "node_modules/mri": { @@ -2967,9 +3565,9 @@ } }, "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "engines": { "node": ">=10" @@ -2993,9 +3591,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -3017,9 +3615,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-path": { @@ -3040,6 +3638,33 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3067,6 +3692,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3171,6 +3811,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -3181,9 +3846,9 @@ } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "node_modules/pathval": { @@ -3216,9 +3881,9 @@ } }, "node_modules/periscopic/node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", "dev": true, "dependencies": { "@types/estree": "*" @@ -3271,10 +3936,28 @@ "pathe": "^1.1.0" } }, + "node_modules/playwright": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.0.tgz", + "integrity": "sha512-XOsfl5ZtAik/T9oek4V0jAypNlaCNzuKOwVhqhgYT3os6kH34PzbRb74F0VWcLYa5WFdnmxl7qyAHBXvPv7lqQ==", + "dev": true, + "dependencies": { + "playwright-core": "1.41.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, "node_modules/playwright-core": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.37.0.tgz", - "integrity": "sha512-1c46jhTH/myQw6sesrcuHVtLoSNfJv8Pfy9t3rs6subY7kARv0HRw5PpyfPYPpPtQvBOmgbE6K+qgYUpj81LAA==", + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.0.tgz", + "integrity": "sha512-UGKASUhXmvqm2Lxa1fNr8sFwAtqjpgBRr9jQ7XBI8Rn5uFiEowGUGwrruUQsVPIom4bk7Lt+oLGpXobnXzrBIw==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -3284,9 +3967,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "funding": [ { @@ -3303,7 +3986,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -3412,9 +4095,9 @@ } }, "node_modules/postcss-scss": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.7.tgz", - "integrity": "sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, "funding": [ { @@ -3434,13 +4117,13 @@ "node": ">=12.0" }, "peerDependencies": { - "postcss": "^8.4.19" + "postcss": "^8.4.29" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3466,9 +4149,9 @@ } }, "node_modules/prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -3481,22 +4164,22 @@ } }, "node_modules/prettier-plugin-svelte": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz", - "integrity": "sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz", + "integrity": "sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==", "dev": true, "peerDependencies": { "prettier": "^3.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0" + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -3517,19 +4200,19 @@ } }, "node_modules/proj4": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.0.tgz", - "integrity": "sha512-BoDXEzCVnRJVZoOKA0QHTFtYoE8lUxtX1jST38DJ8U+v1ixY70Kpwi0Llu6YqSWEH2xqu4XMEBNGcgeRIEywoA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.10.0.tgz", + "integrity": "sha512-0eyB8h1PDoWxucnq88/EZqt7UZlvjhcfbXCcINpE7hqRN0iRPWE/4mXINGulNa/FAvK+Ie7F+l2OxH/0uKV36A==", "dev": true, "dependencies": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -3556,9 +4239,9 @@ ] }, "node_modules/quick-lru": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", - "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", "dev": true, "engines": { "node": ">=12" @@ -3595,9 +4278,9 @@ } }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -3645,6 +4328,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3665,19 +4358,47 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/rollup": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", - "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", "fsevents": "~2.3.2" } }, @@ -3728,6 +4449,16 @@ "rimraf": "^2.5.2" } }, + "node_modules/sander/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/sander/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3748,6 +4479,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sander/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/sander/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -3808,14 +4551,26 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { @@ -3846,34 +4601,99 @@ "sorcery": "bin/sorcery" } }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "engines": { - "node": ">=0.10.0" + "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 + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "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==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", - "dev": true + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi": { @@ -3888,6 +4708,31 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -3925,14 +4770,14 @@ } }, "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", @@ -3943,24 +4788,26 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3991,23 +4838,24 @@ } }, "node_modules/svelte": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz", - "integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.9.tgz", + "integrity": "sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", "acorn": "^8.9.0", "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", + "axobject-query": "^4.0.0", "code-red": "^1.0.3", "css-tree": "^2.3.1", "estree-walker": "^3.0.3", "is-reference": "^3.0.1", "locate-character": "^3.0.0", - "magic-string": "^0.30.0", + "magic-string": "^0.30.4", "periscopic": "^3.1.0" }, "engines": { @@ -4015,9 +4863,9 @@ } }, "node_modules/svelte-check": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.0.tgz", - "integrity": "sha512-KHujbn4k17xKYLmtCwv0sKKM7uiHTYcQvXnvrCcNU6a7hcszh99zFTIoiu/Sp/ewAw5aJmillJ1Cs8gKLmcX4A==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.3.tgz", + "integrity": "sha512-Q2nGnoysxUnB9KjnjpQLZwdjK62DHyW6nuH/gm2qteFnDk0lCehe/6z8TsIvYeKjC6luKaWxiNGyOcWiLLPSwA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -4026,27 +4874,27 @@ "import-fresh": "^3.2.1", "picocolors": "^1.0.0", "sade": "^1.7.4", - "svelte-preprocess": "^5.0.4", + "svelte-preprocess": "^5.1.0", "typescript": "^5.0.3" }, "bin": { "svelte-check": "bin/svelte-check" }, "peerDependencies": { - "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" } }, "node_modules/svelte-eslint-parser": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.32.2.tgz", - "integrity": "sha512-Ok9D3A4b23iLQsONrjqtXtYDu5ZZ/826Blaw2LeFZVTg1pwofKDG4mz3/GYTax8fQ0plRGHI6j+d9VQYy5Lo/A==", + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", + "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==", "dev": true, "dependencies": { "eslint-scope": "^7.0.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", - "postcss": "^8.4.25", - "postcss-scss": "^4.0.6" + "postcss": "^8.4.29", + "postcss-scss": "^4.0.8" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4076,32 +4924,33 @@ } }, "node_modules/svelte-preprocess": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", - "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", "dev": true, "hasInstallScript": true, "dependencies": { "@types/pug": "^2.0.6", "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", + "magic-string": "^0.30.5", "sorcery": "^0.11.0", "strip-indent": "^3.0.0" }, "engines": { - "node": ">= 14.10.0" + "node": ">= 16.0.0", + "pnpm": "^8.0.0" }, "peerDependencies": { "@babel/core": "^7.10.2", "coffeescript": "^2.5.1", "less": "^3.11.3 || ^4.0.0", "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "pug": "^3.0.0", "sass": "^1.26.8", "stylus": "^0.55.0", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { @@ -4147,30 +4996,18 @@ } }, "node_modules/svelte/node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", "dev": true, "dependencies": { "@types/estree": "*" } }, - "node_modules/svelte/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -4178,10 +5015,10 @@ "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.19.1", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -4205,21 +5042,27 @@ } }, "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { "node": ">= 14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" @@ -4233,15 +5076,80 @@ } } }, + "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { "node": ">= 14" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4269,30 +5177,49 @@ "node": ">=0.8" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinypool": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.6.0.tgz", - "integrity": "sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true, "engines": { "node": ">=14.0.0" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4315,9 +5242,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, "engines": { "node": ">=16.13.0" @@ -4333,9 +5260,9 @@ "dev": true }, "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/type-check": { @@ -4372,9 +5299,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -4385,27 +5312,15 @@ } }, "node_modules/ufo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz", - "integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", "dev": true }, - "node_modules/undici": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", - "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -4447,30 +5362,44 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -4503,35 +5432,48 @@ } }, "node_modules/vite-node": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.33.0.tgz", - "integrity": "sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", "dev": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", "dev": true, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { "vite": { @@ -4540,59 +5482,57 @@ } }, "node_modules/vitest": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.33.0.tgz", - "integrity": "sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.33.0", - "@vitest/runner": "0.33.0", - "@vitest/snapshot": "0.33.0", - "@vitest/spy": "0.33.0", - "@vitest/utils": "0.33.0", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.6.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.33.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.2.1", "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -4604,34 +5544,13 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", + "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==", "dev": true }, "node_modules/which": { @@ -4671,6 +5590,100 @@ "integrity": "sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4709,6 +5722,12 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==", + "dev": true } } } diff --git a/package.json b/package.json index fefe9d3..633b3da 100644 --- a/package.json +++ b/package.json @@ -1,55 +1,56 @@ { - "name": "solar-potential", - "version": "1.0.0", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "start": "node build", - "test": "npm run test:integration && npm run test:unit", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --check . && eslint .", - "format": "prettier --write .", - "test:integration": "playwright test", - "test:unit": "vitest" - }, - "dependencies": { - "dotenv": "^16.3.1" - }, - "devDependencies": { - "@fontsource/fira-mono": "^5.0.8", - "@googlemaps/js-api-loader": "^1.16.2", - "@material/web": "^1.0.0-pre.14", - "@neoconfetti/svelte": "^1.0.0", - "@playwright/test": "^1.37.0", - "@sveltejs/adapter-auto": "^2.1.0", - "@sveltejs/adapter-node": "^1.3.1", - "@sveltejs/kit": "^1.22.6", - "@types/cookie": "^0.5.1", - "@types/google.maps": "^3.53.6", - "@types/google.visualization": "^0.0.69", - "@types/proj4": "^2.5.2", - "@typescript-eslint/eslint-plugin": "^6.4.0", - "@typescript-eslint/parser": "^6.4.0", - "autoprefixer": "^10.4.15", - "eslint": "^8.47.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-svelte": "^2.32.4", - "geotiff": "^2.0.7", - "geotiff-geokeys-to-proj4": "^2022.9.7", - "google-charts": "^2.0.0", - "postcss": "^8.4.31", - "prettier": "^3.0.2", - "prettier-plugin-svelte": "^3.0.3", - "proj4": "^2.9.0", - "svelte": "^4.2.0", - "svelte-check": "^3.5.0", - "tailwindcss": "^3.3.3", - "tslib": "^2.6.1", - "typescript": "^5.1.6", - "vite": "^4.4.9", - "vitest": "^0.33.0" - }, - "type": "module" + "name": "solar-potential", + "version": "1.0.0", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "start": "node build", + "test": "npm run test:integration && npm run test:unit", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write .", + "test:integration": "playwright test", + "test:unit": "vitest run --coverage" + }, + "dependencies": { + "dotenv": "^16.3.1" + }, + "devDependencies": { + "@fontsource/fira-mono": "^5.0.8", + "@googlemaps/js-api-loader": "^1.16.2", + "@material/web": "^1.1.1", + "@playwright/test": "^1.41.0", + "@sveltejs/adapter-auto": "^3.1.0", + "@sveltejs/adapter-node": "^3.0.1", + "@sveltejs/kit": "^2.3.5", + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "@types/cookie": "^0.6.0", + "@types/google.maps": "^3.54.10", + "@types/google.visualization": "^0.0.73", + "@types/proj4": "^2.5.5", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@vitest/coverage-v8": "^1.2.1", + "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.35.1", + "geotiff": "^2.1.1", + "geotiff-geokeys-to-proj4": "^2024.1.14", + "google-charts": "^2.0.0", + "postcss": "^8.4.33", + "prettier": "^3.2.4", + "prettier-plugin-svelte": "^3.1.2", + "proj4": "^2.10.0", + "svelte": "^4.2.9", + "svelte-check": "^3.6.3", + "tailwindcss": "^3.4.1", + "tslib": "^2.6.2", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "vitest": "^1.2.1" + }, + "type": "module" } diff --git a/playwright.config.ts b/playwright.config.ts index e512930..eb26519 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -17,12 +17,12 @@ import type { PlaywrightTestConfig } from '@playwright/test'; const config: PlaywrightTestConfig = { - webServer: { - command: 'npm run build && npm run preview', - port: 4173, - }, - testDir: 'tests', - testMatch: /(.+\.)?(test|spec)\.[jt]s/, + webServer: { + command: 'npm run build && npm run preview', + port: 4173, + }, + testDir: 'tests', + testMatch: /(.+\.)?(test|spec)\.[jt]s/, }; export default config; diff --git a/postcss.config.js b/postcss.config.js index 25e54e3..8beb5af 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -15,8 +15,8 @@ */ export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, }; diff --git a/src/app.css b/src/app.css index 9987b24..f3d24f0 100644 --- a/src/app.css +++ b/src/app.css @@ -19,307 +19,307 @@ @tailwind utilities; :root { - --md-sys-color-primary: var(--md-sys-color-primary-light); - --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); - --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); - --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); - --md-sys-color-secondary: var(--md-sys-color-secondary-light); - --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); - --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); - --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); - --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); - --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light); - --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light); - --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light); - --md-sys-color-error: var(--md-sys-color-error-light); - --md-sys-color-on-error: var(--md-sys-color-on-error-light); - --md-sys-color-error-container: var(--md-sys-color-error-container-light); - --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light); - --md-sys-color-outline: var(--md-sys-color-outline-light); - --md-sys-color-background: var(--md-sys-color-background-light); - --md-sys-color-on-background: var(--md-sys-color-on-background-light); - --md-sys-color-surface: var(--md-sys-color-surface-light); - --md-sys-color-on-surface: var(--md-sys-color-on-surface-light); - --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light); - --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light); - --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light); - --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light); - --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light); - --md-sys-color-shadow: var(--md-sys-color-shadow-light); - --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light); - --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-light); - --md-sys-color-scrim: var(--md-sys-color-scrim-light); + --md-sys-color-primary: var(--md-sys-color-primary-light); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); + --md-sys-color-secondary: var(--md-sys-color-secondary-light); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light); + --md-sys-color-error: var(--md-sys-color-error-light); + --md-sys-color-on-error: var(--md-sys-color-on-error-light); + --md-sys-color-error-container: var(--md-sys-color-error-container-light); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light); + --md-sys-color-outline: var(--md-sys-color-outline-light); + --md-sys-color-background: var(--md-sys-color-background-light); + --md-sys-color-on-background: var(--md-sys-color-on-background-light); + --md-sys-color-surface: var(--md-sys-color-surface-light); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-light); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light); + --md-sys-color-shadow: var(--md-sys-color-shadow-light); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-light); + --md-sys-color-scrim: var(--md-sys-color-scrim-light); } .dark { - --md-sys-color-primary: var(--md-sys-color-primary-dark); - --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); - --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); - --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); - --md-sys-color-secondary: var(--md-sys-color-secondary-dark); - --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); - --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); - --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); - --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); - --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark); - --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark); - --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark); - --md-sys-color-error: var(--md-sys-color-error-dark); - --md-sys-color-on-error: var(--md-sys-color-on-error-dark); - --md-sys-color-error-container: var(--md-sys-color-error-container-dark); - --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark); - --md-sys-color-outline: var(--md-sys-color-outline-dark); - --md-sys-color-background: var(--md-sys-color-background-dark); - --md-sys-color-on-background: var(--md-sys-color-on-background-dark); - --md-sys-color-surface: var(--md-sys-color-surface-dark); - --md-sys-color-on-surface: var(--md-sys-color-on-surface-dark); - --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark); - --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark); - --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark); - --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark); - --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark); - --md-sys-color-shadow: var(--md-sys-color-shadow-dark); - --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark); - --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-dark); - --md-sys-color-scrim: var(--md-sys-color-scrim-dark); + --md-sys-color-primary: var(--md-sys-color-primary-dark); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); + --md-sys-color-secondary: var(--md-sys-color-secondary-dark); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark); + --md-sys-color-error: var(--md-sys-color-error-dark); + --md-sys-color-on-error: var(--md-sys-color-on-error-dark); + --md-sys-color-error-container: var(--md-sys-color-error-container-dark); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark); + --md-sys-color-outline: var(--md-sys-color-outline-dark); + --md-sys-color-background: var(--md-sys-color-background-dark); + --md-sys-color-on-background: var(--md-sys-color-on-background-dark); + --md-sys-color-surface: var(--md-sys-color-surface-dark); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-dark); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark); + --md-sys-color-shadow: var(--md-sys-color-shadow-dark); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-dark); + --md-sys-color-scrim: var(--md-sys-color-scrim-dark); } .primary { - background-color: var(--md-sys-color-primary); + background-color: var(--md-sys-color-primary); } .primary-text { - color: var(--md-sys-color-primary); + color: var(--md-sys-color-primary); } .on-primary { - background-color: var(--md-sys-color-on-primary); + background-color: var(--md-sys-color-on-primary); } .on-primary-text { - color: var(--md-sys-color-on-primary); + color: var(--md-sys-color-on-primary); } .primary-container { - background-color: var(--md-sys-color-primary-container); + background-color: var(--md-sys-color-primary-container); } .primary-container-text { - color: var(--md-sys-color-primary-container); + color: var(--md-sys-color-primary-container); } .on-primary-container { - background-color: var(--md-sys-color-on-primary-container); + background-color: var(--md-sys-color-on-primary-container); } .on-primary-container-text { - color: var(--md-sys-color-on-primary-container); + color: var(--md-sys-color-on-primary-container); } .secondary { - background-color: var(--md-sys-color-secondary); + background-color: var(--md-sys-color-secondary); } .secondary-text { - color: var(--md-sys-color-secondary); + color: var(--md-sys-color-secondary); } .on-secondary { - background-color: var(--md-sys-color-on-secondary); + background-color: var(--md-sys-color-on-secondary); } .on-secondary-text { - color: var(--md-sys-color-on-secondary); + color: var(--md-sys-color-on-secondary); } .secondary-container { - background-color: var(--md-sys-color-secondary-container); + background-color: var(--md-sys-color-secondary-container); } .secondary-container-text { - color: var(--md-sys-color-secondary-container); + color: var(--md-sys-color-secondary-container); } .on-secondary-container { - background-color: var(--md-sys-color-on-secondary-container); + background-color: var(--md-sys-color-on-secondary-container); } .on-secondary-container-text { - color: var(--md-sys-color-on-secondary-container); + color: var(--md-sys-color-on-secondary-container); } .tertiary { - background-color: var(--md-sys-color-tertiary); + background-color: var(--md-sys-color-tertiary); } .tertiary-text { - color: var(--md-sys-color-tertiary); + color: var(--md-sys-color-tertiary); } .on-tertiary { - background-color: var(--md-sys-color-on-tertiary); + background-color: var(--md-sys-color-on-tertiary); } .on-tertiary-text { - color: var(--md-sys-color-on-tertiary); + color: var(--md-sys-color-on-tertiary); } .tertiary-container { - background-color: var(--md-sys-color-tertiary-container); + background-color: var(--md-sys-color-tertiary-container); } .tertiary-container-text { - color: var(--md-sys-color-tertiary-container); + color: var(--md-sys-color-tertiary-container); } .on-tertiary-container { - background-color: var(--md-sys-color-on-tertiary-container); + background-color: var(--md-sys-color-on-tertiary-container); } .on-tertiary-container-text { - color: var(--md-sys-color-on-tertiary-container); + color: var(--md-sys-color-on-tertiary-container); } .error { - background-color: var(--md-sys-color-error); + background-color: var(--md-sys-color-error); } .error-text { - color: var(--md-sys-color-error); + color: var(--md-sys-color-error); } .on-error { - background-color: var(--md-sys-color-on-error); + background-color: var(--md-sys-color-on-error); } .on-error-text { - color: var(--md-sys-color-on-error); + color: var(--md-sys-color-on-error); } .error-container { - background-color: var(--md-sys-color-error-container); + background-color: var(--md-sys-color-error-container); } .error-container-text { - color: var(--md-sys-color-error-container); + color: var(--md-sys-color-error-container); } .on-error-container { - background-color: var(--md-sys-color-on-error-container); + background-color: var(--md-sys-color-on-error-container); } .on-error-container-text { - color: var(--md-sys-color-on-error-container); + color: var(--md-sys-color-on-error-container); } .outline { - background-color: var(--md-sys-color-outline); + background-color: var(--md-sys-color-outline); } .outline-text { - color: var(--md-sys-color-outline); + color: var(--md-sys-color-outline); } .background { - background-color: var(--md-sys-color-background); + background-color: var(--md-sys-color-background); } .background-text { - color: var(--md-sys-color-background); + color: var(--md-sys-color-background); } .on-background { - background-color: var(--md-sys-color-on-background); + background-color: var(--md-sys-color-on-background); } .on-background-text { - color: var(--md-sys-color-on-background); + color: var(--md-sys-color-on-background); } .surface { - background-color: var(--md-sys-color-surface); + background-color: var(--md-sys-color-surface); } .surface-text { - color: var(--md-sys-color-surface); + color: var(--md-sys-color-surface); } .on-surface { - background-color: var(--md-sys-color-on-surface); + background-color: var(--md-sys-color-on-surface); } .on-surface-text { - color: var(--md-sys-color-on-surface); + color: var(--md-sys-color-on-surface); } .surface-variant { - background-color: var(--md-sys-color-surface-variant); + background-color: var(--md-sys-color-surface-variant); } .surface-variant-text { - color: var(--md-sys-color-surface-variant); + color: var(--md-sys-color-surface-variant); } .on-surface-variant { - background-color: var(--md-sys-color-on-surface-variant); + background-color: var(--md-sys-color-on-surface-variant); } .on-surface-variant-text { - color: var(--md-sys-color-on-surface-variant); + color: var(--md-sys-color-on-surface-variant); } .inverse-surface { - background-color: var(--md-sys-color-inverse-surface); + background-color: var(--md-sys-color-inverse-surface); } .inverse-surface-text { - color: var(--md-sys-color-inverse-surface); + color: var(--md-sys-color-inverse-surface); } .inverse-on-surface { - background-color: var(--md-sys-color-inverse-on-surface); + background-color: var(--md-sys-color-inverse-on-surface); } .inverse-on-surface-text { - color: var(--md-sys-color-inverse-on-surface); + color: var(--md-sys-color-inverse-on-surface); } .inverse-primary { - background-color: var(--md-sys-color-inverse-primary); + background-color: var(--md-sys-color-inverse-primary); } .inverse-primary-text { - color: var(--md-sys-color-inverse-primary); + color: var(--md-sys-color-inverse-primary); } .shadow { - background-color: var(--md-sys-color-shadow); + background-color: var(--md-sys-color-shadow); } .shadow-text { - color: var(--md-sys-color-shadow); + color: var(--md-sys-color-shadow); } .surface-tint { - background-color: var(--md-sys-color-surface-tint); + background-color: var(--md-sys-color-surface-tint); } .surface-tint-text { - color: var(--md-sys-color-surface-tint); + color: var(--md-sys-color-surface-tint); } .outline-variant { - background-color: var(--md-sys-color-outline-variant); + background-color: var(--md-sys-color-outline-variant); } .outline-variant-text { - color: var(--md-sys-color-outline-variant); + color: var(--md-sys-color-outline-variant); } .scrim { - background-color: var(--md-sys-color-scrim); + background-color: var(--md-sys-color-scrim); } .scrim-text { - color: var(--md-sys-color-scrim); + color: var(--md-sys-color-scrim); } diff --git a/src/app.d.ts b/src/app.d.ts index 6a6b354..ce5930e 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -17,12 +17,12 @@ // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface Platform {} - } + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } } export {}; diff --git a/src/app.html b/src/app.html index 1802947..885f8a5 100644 --- a/src/app.html +++ b/src/app.html @@ -17,18 +17,18 @@ --> - - - - - - %sveltekit.head% - + + + + + + %sveltekit.head% + - -
%sveltekit.body%
- + +
%sveltekit.body%
+ diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 165ca20..5ce5162 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -15,43 +15,43 @@ --> - Solar API demo - + Solar API demo +
- +
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 13bee85..7f29afc 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -15,111 +15,113 @@ -->
- -
- - - + +
+ + +
diff --git a/src/routes/components/Calendar.svelte b/src/routes/components/Calendar.svelte index f96d095..f95bd15 100644 --- a/src/routes/components/Calendar.svelte +++ b/src/routes/components/Calendar.svelte @@ -15,99 +15,99 @@ -->
- (opened = !opened)}> -
- event -   {months[month]} {day} -
-
+ (opened = !opened)}> +
+ event +   {months[month]} {day} +
+
- {#if opened} -
(opened = false)} - /> + {#if opened} +
(opened = false)} + /> -
-
- [i.toString(), month]))} - onChange={async (value) => { - month = Number(value); - onChange(month, day); - }} - /> -
+
+
+ [i.toString(), month]))} + onChange={async (value) => { + month = Number(value); + onChange(month, day); + }} + /> +
- - {#each [...Array(Math.ceil(monthDays[months[month]] / numCols)).keys()] as row} - - {#each [...Array(numCols).keys()] as col} - - {/each} - - {/each} -
- {#if day == dayFrom(row, col)} - - {:else if dayFrom(row, col) <= monthDays[months[month]]} - - {/if} -
-
- {/if} + + {#each [...Array(Math.ceil(monthDays[months[month]] / numCols)).keys()] as row} + + {#each [...Array(numCols).keys()] as col} + + {/each} + + {/each} +
+ {#if day == dayFrom(row, col)} + + {:else if dayFrom(row, col) <= monthDays[months[month]]} + + {/if} +
+
+ {/if}
diff --git a/src/routes/components/Dropdown.svelte b/src/routes/components/Dropdown.svelte index 5918ca8..5290e65 100644 --- a/src/routes/components/Dropdown.svelte +++ b/src/routes/components/Dropdown.svelte @@ -15,63 +15,63 @@ -->
- (opened = !opened)} - > -
- {value !== undefined ? options[value] : 'Choose an option'} - {opened ? 'expand_less' : 'expand_more'} -
-
+ (opened = !opened)} + > +
+ {value !== undefined ? options[value] : 'Choose an option'} + {opened ? 'expand_less' : 'expand_more'} +
+
- {#if opened} -
(opened = false)} - /> + {#if opened} +
(opened = false)} + /> -
-
- {#each Object.keys(options) as option} - - {/each} -
- {/if} +
+
+ {#each Object.keys(options) as option} + + {/each} +
+ {/if}
diff --git a/src/routes/components/Expandable.svelte b/src/routes/components/Expandable.svelte index 021ee1c..0fa36dd 100644 --- a/src/routes/components/Expandable.svelte +++ b/src/routes/components/Expandable.svelte @@ -15,36 +15,36 @@ --> {#if section == title} -
- -
+
+ +
{/if} diff --git a/src/routes/components/Gauge.svelte b/src/routes/components/Gauge.svelte index c87a3dd..34c445a 100644 --- a/src/routes/components/Gauge.svelte +++ b/src/routes/components/Gauge.svelte @@ -15,27 +15,27 @@ -->
-

{title}

-
- - - {icon} - -
-

- - {label} - - {labelSuffix} -

+

{title}

+
+ + + {icon} + +
+

+ + {label} + + {labelSuffix} +

diff --git a/src/routes/components/InputBool.svelte b/src/routes/components/InputBool.svelte index af60065..8361001 100644 --- a/src/routes/components/InputBool.svelte +++ b/src/routes/components/InputBool.svelte @@ -15,20 +15,20 @@ --> diff --git a/src/routes/components/InputMoney.svelte b/src/routes/components/InputMoney.svelte index 6e7d73a..ffb71aa 100644 --- a/src/routes/components/InputMoney.svelte +++ b/src/routes/components/InputMoney.svelte @@ -15,24 +15,24 @@ --> x.toFixed(precision)} - {onChange} + bind:value + min={0} + {icon} + {label} + {suffix} + {prefix} + put={(x) => x.toFixed(precision)} + {onChange} /> diff --git a/src/routes/components/InputNumber.svelte b/src/routes/components/InputNumber.svelte index 3f61712..2b7ad81 100644 --- a/src/routes/components/InputNumber.svelte +++ b/src/routes/components/InputNumber.svelte @@ -15,35 +15,35 @@ --> - {icon} + {icon} diff --git a/src/routes/components/InputPanelsCount.svelte b/src/routes/components/InputPanelsCount.svelte index 7a2de0c..bdb0424 100644 --- a/src/routes/components/InputPanelsCount.svelte +++ b/src/routes/components/InputPanelsCount.svelte @@ -15,34 +15,34 @@ -->
- - - - - - -
solar_power Panels count - {solarPanelConfigs[configId].panelsCount} panels -
- - + + + + + + +
solar_power Panels count + {solarPanelConfigs[configId].panelsCount} panels +
+ +
diff --git a/src/routes/components/InputPercent.svelte b/src/routes/components/InputPercent.svelte index 2dfb565..ca99d76 100644 --- a/src/routes/components/InputPercent.svelte +++ b/src/routes/components/InputPercent.svelte @@ -15,23 +15,23 @@ --> (x * 100).toLocaleString(undefined, { maximumSignificantDigits: 2 })} - get={(x) => x / 100} - {onChange} + bind:value + {icon} + {label} + {prefix} + {suffix} + put={(x) => (x * 100).toLocaleString(undefined, { maximumSignificantDigits: 2 })} + get={(x) => x / 100} + {onChange} /> diff --git a/src/routes/components/InputRatio.svelte b/src/routes/components/InputRatio.svelte index aec8b24..aa97d8a 100644 --- a/src/routes/components/InputRatio.svelte +++ b/src/routes/components/InputRatio.svelte @@ -15,29 +15,29 @@ --> - ((decrease ? 1 - x : x - 1) * 100).toLocaleString(undefined, { - maximumSignificantDigits: 2, - })} - get={(x) => (decrease ? 1 - x / 100 : x / 100 + 1)} - {onChange} + bind:value + {icon} + {label} + {prefix} + {suffix} + put={(x) => + ((decrease ? 1 - x : x - 1) * 100).toLocaleString(undefined, { + maximumSignificantDigits: 2, + })} + get={(x) => (decrease ? 1 - x / 100 : x / 100 + 1)} + {onChange} /> diff --git a/src/routes/components/SearchBar.svelte b/src/routes/components/SearchBar.svelte index 0450bfa..4a1c9dc 100644 --- a/src/routes/components/SearchBar.svelte +++ b/src/routes/components/SearchBar.svelte @@ -15,52 +15,52 @@ --> - search + search diff --git a/src/routes/components/Show.svelte b/src/routes/components/Show.svelte index cd2d236..e1f9767 100644 --- a/src/routes/components/Show.svelte +++ b/src/routes/components/Show.svelte @@ -15,73 +15,73 @@ -->
-
- {#if collapsed && items !== undefined} - - {:else} -
 
- {/if} +
+ {#if collapsed && items !== undefined} + + {:else} +
 
+ {/if} - {#if key !== undefined} - {key}:  - {/if} + {#if key !== undefined} + {key}:  + {/if} - {#if label} - {label} - {:else if ['number', 'string', 'boolean', 'undefined'].includes(typeof value)} - {value} - {:else if value === null} - {value} - {:else if Array.isArray(value)} - ({value.length}) {summary} - {:else} - {summary} - {/if} -
+ {#if label} + {label} + {:else if ['number', 'string', 'boolean', 'undefined'].includes(typeof value)} + {value} + {:else if value === null} + {value} + {:else if Array.isArray(value)} + ({value.length}) {summary} + {:else} + {summary} + {/if} +
- {#if !collapsed || expanded} -
- {#if Array.isArray(value)} - length: {value.length} - {/if} -
- {#each items as { k, v }} - - {/each} -
-
- {/if} + {#if !collapsed || expanded} +
+ {#if Array.isArray(value)} + length: {value.length} + {/if} +
+ {#each items as { k, v }} + + {/each} +
+
+ {/if}
diff --git a/src/routes/components/SummaryCard.svelte b/src/routes/components/SummaryCard.svelte index 43abec1..397fa92 100644 --- a/src/routes/components/SummaryCard.svelte +++ b/src/routes/components/SummaryCard.svelte @@ -15,25 +15,30 @@ -->
-
- {icon} -

{title}

-
-
- -
-
- - -
- -
+
+ {icon} +

{title}

+
+
+ +
+
+
+ +
+ +
diff --git a/src/routes/components/Table.svelte b/src/routes/components/Table.svelte index ffeed42..bb6480b 100644 --- a/src/routes/components/Table.svelte +++ b/src/routes/components/Table.svelte @@ -15,22 +15,27 @@ -->
- {#each rows as row} - - - - - - {/each} + {#each rows as row} + + + + + + {/each}
- {row.icon ?? ''} - - {row.name} - - {row.value.toString()} - {row.units ?? ''} -
+ {row.icon ?? ''} + + {row.name} + + {row.value.toString()} + {row.units ?? ''} +
diff --git a/src/routes/layer.ts b/src/routes/layer.ts index 7361854..21fe2f1 100644 --- a/src/routes/layer.ts +++ b/src/routes/layer.ts @@ -19,172 +19,172 @@ import { downloadGeoTIFF, type DataLayersResponse, type LayerId, type Bounds } f import { renderPalette, renderRGB } from './visualize'; export interface Palette { - colors: string[]; - min: string; - max: string; + colors: string[]; + min: string; + max: string; } export interface Layer { - id: LayerId; - render: (showRoofOnly: boolean, month: number, day: number) => HTMLCanvasElement[]; - bounds: Bounds; - palette?: Palette; + id: LayerId; + render: (showRoofOnly: boolean, month: number, day: number) => HTMLCanvasElement[]; + bounds: Bounds; + palette?: Palette; } export async function getLayer( - layerId: LayerId, - urls: DataLayersResponse, - googleMapsApiKey: string, + layerId: LayerId, + urls: DataLayersResponse, + googleMapsApiKey: string, ): Promise { - const get: Record Promise> = { - mask: async () => { - const mask = await downloadGeoTIFF(urls.maskUrl, googleMapsApiKey); - const colors = binaryPalette; - return { - id: layerId, - bounds: mask.bounds, - palette: { - colors: colors, - min: 'No roof', - max: 'Roof', - }, - render: (showRoofOnly) => [ - renderPalette({ - data: mask, - mask: showRoofOnly ? mask : undefined, - colors: colors, - }), - ], - }; - }, - dsm: async () => { - const [mask, data] = await Promise.all([ - downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), - downloadGeoTIFF(urls.dsmUrl, googleMapsApiKey), - ]); - const sortedValues = Array.from(data.rasters[0]).sort((x, y) => x - y); - const minValue = sortedValues[0]; - const maxValue = sortedValues.slice(-1)[0]; - const colors = rainbowPalette; - return { - id: layerId, - bounds: mask.bounds, - palette: { - colors: colors, - min: `${minValue.toFixed(1)} m`, - max: `${maxValue.toFixed(1)} m`, - }, - render: (showRoofOnly) => [ - renderPalette({ - data: data, - mask: showRoofOnly ? mask : undefined, - colors: colors, - min: sortedValues[0], - max: sortedValues.slice(-1)[0], - }), - ], - }; - }, - rgb: async () => { - const [mask, data] = await Promise.all([ - downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), - downloadGeoTIFF(urls.rgbUrl, googleMapsApiKey), - ]); - return { - id: layerId, - bounds: mask.bounds, - render: (showRoofOnly) => [renderRGB(data, showRoofOnly ? mask : undefined)], - }; - }, - annualFlux: async () => { - const [mask, data] = await Promise.all([ - downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), - downloadGeoTIFF(urls.annualFluxUrl, googleMapsApiKey), - ]); - const colors = ironPalette; - return { - id: layerId, - bounds: mask.bounds, - palette: { - colors: colors, - min: 'Shady', - max: 'Sunny', - }, - render: (showRoofOnly) => [ - renderPalette({ - data: data, - mask: showRoofOnly ? mask : undefined, - colors: colors, - min: 0, - max: 1800, - }), - ], - }; - }, - monthlyFlux: async () => { - const [mask, data] = await Promise.all([ - downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), - downloadGeoTIFF(urls.monthlyFluxUrl, googleMapsApiKey), - ]); - const colors = ironPalette; - return { - id: layerId, - bounds: mask.bounds, - palette: { - colors: colors, - min: 'Shady', - max: 'Sunny', - }, - render: (showRoofOnly) => - [...Array(12).keys()].map((month) => - renderPalette({ - data: data, - mask: showRoofOnly ? mask : undefined, - colors: colors, - min: 0, - max: 200, - index: month, - }), - ), - }; - }, - hourlyShade: async () => { - const [mask, ...months] = await Promise.all([ - downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), - ...urls.hourlyShadeUrls.map((url) => downloadGeoTIFF(url, googleMapsApiKey)), - ]); - const colors = sunlightPalette; - return { - id: layerId, - bounds: mask.bounds, - palette: { - colors: colors, - min: 'Shade', - max: 'Sun', - }, - render: (showRoofOnly, month, day) => - [...Array(24).keys()].map((hour) => - renderPalette({ - data: { - ...months[month], - rasters: months[month].rasters.map((values) => - values.map((x) => x & (1 << (day - 1))), - ), - }, - mask: showRoofOnly ? mask : undefined, - colors: colors, - min: 0, - max: 1, - index: hour, - }), - ), - }; - }, - }; - try { - return get[layerId](); - } catch (e) { - console.error(`Error getting layer: ${layerId}\n`, e); - throw e; - } + const get: Record Promise> = { + mask: async () => { + const mask = await downloadGeoTIFF(urls.maskUrl, googleMapsApiKey); + const colors = binaryPalette; + return { + id: layerId, + bounds: mask.bounds, + palette: { + colors: colors, + min: 'No roof', + max: 'Roof', + }, + render: (showRoofOnly) => [ + renderPalette({ + data: mask, + mask: showRoofOnly ? mask : undefined, + colors: colors, + }), + ], + }; + }, + dsm: async () => { + const [mask, data] = await Promise.all([ + downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), + downloadGeoTIFF(urls.dsmUrl, googleMapsApiKey), + ]); + const sortedValues = Array.from(data.rasters[0]).sort((x, y) => x - y); + const minValue = sortedValues[0]; + const maxValue = sortedValues.slice(-1)[0]; + const colors = rainbowPalette; + return { + id: layerId, + bounds: mask.bounds, + palette: { + colors: colors, + min: `${minValue.toFixed(1)} m`, + max: `${maxValue.toFixed(1)} m`, + }, + render: (showRoofOnly) => [ + renderPalette({ + data: data, + mask: showRoofOnly ? mask : undefined, + colors: colors, + min: sortedValues[0], + max: sortedValues.slice(-1)[0], + }), + ], + }; + }, + rgb: async () => { + const [mask, data] = await Promise.all([ + downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), + downloadGeoTIFF(urls.rgbUrl, googleMapsApiKey), + ]); + return { + id: layerId, + bounds: mask.bounds, + render: (showRoofOnly) => [renderRGB(data, showRoofOnly ? mask : undefined)], + }; + }, + annualFlux: async () => { + const [mask, data] = await Promise.all([ + downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), + downloadGeoTIFF(urls.annualFluxUrl, googleMapsApiKey), + ]); + const colors = ironPalette; + return { + id: layerId, + bounds: mask.bounds, + palette: { + colors: colors, + min: 'Shady', + max: 'Sunny', + }, + render: (showRoofOnly) => [ + renderPalette({ + data: data, + mask: showRoofOnly ? mask : undefined, + colors: colors, + min: 0, + max: 1800, + }), + ], + }; + }, + monthlyFlux: async () => { + const [mask, data] = await Promise.all([ + downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), + downloadGeoTIFF(urls.monthlyFluxUrl, googleMapsApiKey), + ]); + const colors = ironPalette; + return { + id: layerId, + bounds: mask.bounds, + palette: { + colors: colors, + min: 'Shady', + max: 'Sunny', + }, + render: (showRoofOnly) => + [...Array(12).keys()].map((month) => + renderPalette({ + data: data, + mask: showRoofOnly ? mask : undefined, + colors: colors, + min: 0, + max: 200, + index: month, + }), + ), + }; + }, + hourlyShade: async () => { + const [mask, ...months] = await Promise.all([ + downloadGeoTIFF(urls.maskUrl, googleMapsApiKey), + ...urls.hourlyShadeUrls.map((url) => downloadGeoTIFF(url, googleMapsApiKey)), + ]); + const colors = sunlightPalette; + return { + id: layerId, + bounds: mask.bounds, + palette: { + colors: colors, + min: 'Shade', + max: 'Sun', + }, + render: (showRoofOnly, month, day) => + [...Array(24).keys()].map((hour) => + renderPalette({ + data: { + ...months[month], + rasters: months[month].rasters.map((values) => + values.map((x) => x & (1 << (day - 1))), + ), + }, + mask: showRoofOnly ? mask : undefined, + colors: colors, + min: 0, + max: 1, + index: hour, + }), + ), + }; + }, + }; + try { + return get[layerId](); + } catch (e) { + console.error(`Error getting layer: ${layerId}\n`, e); + throw e; + } } diff --git a/src/routes/sections/BuildingInsightsSection.svelte b/src/routes/sections/BuildingInsightsSection.svelte index 7a1410b..e56f0e3 100644 --- a/src/routes/sections/BuildingInsightsSection.svelte +++ b/src/routes/sections/BuildingInsightsSection.svelte @@ -15,251 +15,251 @@ --> {#if requestError} -
- -
-
-

- Error on buildingInsights request -

-

ERROR {requestError.error.code}

-

{requestError.error.status}

-

{requestError.error.message}

-
- showSolarPotential(location)}> - Retry - refresh - -
-
-
+
+ +
+
+

+ Error on buildingInsights request +

+

ERROR {requestError.error.code}

+

{requestError.error.status}

+

{requestError.error.message}

+
+ showSolarPotential(location)}> + Retry + refresh + +
+
+
{:else if !buildingInsights} -
- -
+
+ +
{:else if configId !== undefined && panelConfig} - -
- - {title} provides data on the location, dimensions & solar potential of a building. - + +
+ + {title} provides data on the location, dimensions & solar potential of a building. + - - - + + + -
- apiResponseDialog.show()}> - API response - -
+
+ apiResponseDialog.show()}> + API response + +
- -
-
- {icon} -  {title} -
-
-
- -
-
- apiResponseDialog.close()}> - Close - -
-
-
-
+ +
+
+ {icon} +  {title} +
+
+
+ +
+
+ apiResponseDialog.close()}> + Close + +
+
+
+
- {#if expandedSection == title} -
-
- + {#if expandedSection == title} +
+
+ -
-
- +
+
+ - -
-
-
-
- {/if} + +
+
+
+
+ {/if} {/if} diff --git a/src/routes/sections/DataLayersSection.svelte b/src/routes/sections/DataLayersSection.svelte index 0a3d040..9e0d6d9 100644 --- a/src/routes/sections/DataLayersSection.svelte +++ b/src/routes/sections/DataLayersSection.svelte @@ -15,362 +15,362 @@ --> {#if requestError} -
- -
-
-

- Error on dataLayers - {layerId} request -

-

ERROR {requestError.error.code}

-

{requestError.error.status}

-

{requestError.error.message}

-
- showDataLayer(true)}> - Retry - refresh - -
-
-
+
+ +
+
+

+ Error on dataLayers + {layerId} request +

+

ERROR {requestError.error.code}

+

{requestError.error.status}

+

{requestError.error.message}

+
+ showDataLayer(true)}> + Retry + refresh + +
+
+
{:else} - -
- - {title} provides raw and processed imagery and granular details on an area surrounding - a location. - - - showDataLayer(true)} - /> - - {#if layerId == 'none'} -
- {:else if !layer} - - {:else} - {#if layer.id == 'hourlyShade'} - showDataLayer()} /> - {/if} - - - showDataLayer()} /> - - {#if ['monthlyFlux', 'hourlyShade'].includes(layerId)} - - {/if} - {/if} -
-
- apiResponseDialog.show()}> - API response - -
- - -
-
- {icon} -  {title} -
-
-
- -
-
- apiResponseDialog.close()}> - Close - -
-
-
- + +
+ + {title} provides raw and processed imagery and granular details on an area surrounding + a location. + + + showDataLayer(true)} + /> + + {#if layerId == 'none'} +
+ {:else if !layer} + + {:else} + {#if layer.id == 'hourlyShade'} + showDataLayer()} /> + {/if} + + + showDataLayer()} /> + + {#if ['monthlyFlux', 'hourlyShade'].includes(layerId)} + + {/if} + {/if} +
+
+ apiResponseDialog.show()}> + API response + +
+ + +
+
+ {icon} +  {title} +
+
+
+ +
+
+ apiResponseDialog.close()}> + Close + +
+
+
+ {/if}
- {#if expandedSection == title && layer} -
- -
-

- {#if layerId == 'mask'} - The building mask image: one bit per pixel saying whether that pixel is considered to - be part of a rooftop or not. - {:else if layerId == 'dsm'} - An image of the DSM (Digital Surface Model) of the region. Values are in meters above - EGM96 geoid (i.e., sea level). Invalid locations (where we don't have data) are stored - as -9999. - {:else if layerId == 'rgb'} - An image of RGB data (aerial photo) of the region. - {:else if layerId == 'annualFlux'} - The annual flux map (annual sunlight on roofs) of the region. Values are kWh/kW/year. - This is unmasked flux: flux is computed for every location, not just building - rooftops. Invalid locations are stored as -9999: locations outside our coverage area - will be invalid, and a few locations inside the coverage area, where we were unable to - calculate flux, will also be invalid. - {:else if layerId == 'monthlyFlux'} - The monthly flux map (sunlight on roofs, broken down by month) of the region. Values - are kWh/kW/year. The GeoTIFF imagery file pointed to by this URL will contain twelve - bands, corresponding to January...December, in order. - {:else if layerId == 'hourlyShade'} - Twelve URLs for hourly shade, corresponding to January...December, in order. Each - GeoTIFF imagery file will contain 24 bands, corresponding to the 24 hours of the day. - Each pixel is a 32 bit integer, corresponding to the (up to) 31 days of that month; a - 1 bit means that the corresponding location is able to see the sun at that day, of - that hour, of that month. Invalid locations are stored as -9999 (since this is - negative, it has bit 31 set, and no valid value could have bit 31 set as that would - correspond to the 32nd day of the month). - {/if} -

- - {#if layer.palette} -
-
'#' + hex, - )})`} - /> -
- {layer.palette.min} - {layer.palette.max} -
-
- {/if} -
- -
- {/if} + {#if expandedSection == title && layer} +
+ +
+

+ {#if layerId == 'mask'} + The building mask image: one bit per pixel saying whether that pixel is considered to + be part of a rooftop or not. + {:else if layerId == 'dsm'} + An image of the DSM (Digital Surface Model) of the region. Values are in meters above + EGM96 geoid (i.e., sea level). Invalid locations (where we don't have data) are stored + as -9999. + {:else if layerId == 'rgb'} + An image of RGB data (aerial photo) of the region. + {:else if layerId == 'annualFlux'} + The annual flux map (annual sunlight on roofs) of the region. Values are kWh/kW/year. + This is unmasked flux: flux is computed for every location, not just building + rooftops. Invalid locations are stored as -9999: locations outside our coverage area + will be invalid, and a few locations inside the coverage area, where we were unable to + calculate flux, will also be invalid. + {:else if layerId == 'monthlyFlux'} + The monthly flux map (sunlight on roofs, broken down by month) of the region. Values + are kWh/kW/year. The GeoTIFF imagery file pointed to by this URL will contain twelve + bands, corresponding to January...December, in order. + {:else if layerId == 'hourlyShade'} + Twelve URLs for hourly shade, corresponding to January...December, in order. Each + GeoTIFF imagery file will contain 24 bands, corresponding to the 24 hours of the day. + Each pixel is a 32 bit integer, corresponding to the (up to) 31 days of that month; a + 1 bit means that the corresponding location is able to see the sun at that day, of + that hour, of that month. Invalid locations are stored as -9999 (since this is + negative, it has bit 31 set, and no valid value could have bit 31 set as that would + correspond to the 32nd day of the month). + {/if} +

+ + {#if layer.palette} +
+
'#' + hex, + )})`} + /> +
+ {layer.palette.min} + {layer.palette.max} +
+
+ {/if} +
+ +
+ {/if}
-
- {#if layer} -
- {#if layer.id == 'monthlyFlux'} - - {monthNames[month]} - {:else if layer.id == 'hourlyShade'} - - - {monthNames[month]} - {day}, - {#if hour == 0} - 12am - {:else if hour < 10} - {hour}am - {:else if hour < 12} - {hour}am - {:else if hour == 12} - 12pm - {:else if hour < 22} - {hour - 12}pm - {:else} - {hour - 12}pm - {/if} - - {/if} -
- {/if} -
+
+ {#if layer} +
+ {#if layer.id == 'monthlyFlux'} + + {monthNames[month]} + {:else if layer.id == 'hourlyShade'} + + + {monthNames[month]} + {day}, + {#if hour == 0} + 12am + {:else if hour < 10} + {hour}am + {:else if hour < 12} + {hour}am + {:else if hour == 12} + 12pm + {:else if hour < 22} + {hour - 12}pm + {:else} + {hour - 12}pm + {/if} + + {/if} +
+ {/if} +
diff --git a/src/routes/sections/Sections.svelte b/src/routes/sections/Sections.svelte index f3a6072..80a9282 100644 --- a/src/routes/sections/Sections.svelte +++ b/src/routes/sections/Sections.svelte @@ -15,84 +15,84 @@ -->
- {#if geometryLibrary && map} - - {/if} + {#if geometryLibrary && map} + + {/if} - {#if buildingInsights && configId !== undefined} - - + {#if buildingInsights && configId !== undefined} + + - - - {/if} + + + {/if}
diff --git a/src/routes/sections/SolarPotentialSection.svelte b/src/routes/sections/SolarPotentialSection.svelte index b856aad..b49d18f 100644 --- a/src/routes/sections/SolarPotentialSection.svelte +++ b/src/routes/sections/SolarPotentialSection.svelte @@ -15,381 +15,381 @@ --> -
-
-

- info - - Projections use a - - USA financial model - open_in_new - - -

-
- - - -
-
- -
- - sync - -
- - - - - - - - - -
- (showAdvancedSettings = !showAdvancedSettings)} - > - {showAdvancedSettings ? 'Hide' : 'Show'} advanced settings - - {showAdvancedSettings ? 'expand_less' : 'expand_more'} - - -
- - {#if showAdvancedSettings} -
- - - - - - - - - -
- {/if} - -
- - More details - open_in_new - -
-
+
+
+

+ info + + Projections use a + + USA financial model + open_in_new + + +

+
+ + + +
+
+ +
+ + sync + +
+ + + + + + + + + +
+ (showAdvancedSettings = !showAdvancedSettings)} + > + {showAdvancedSettings ? 'Hide' : 'Show'} advanced settings + + {showAdvancedSettings ? 'expand_less' : 'expand_more'} + + +
+ + {#if showAdvancedSettings} +
+ + + + + + + + + +
+ {/if} + +
+ + More details + open_in_new + +
+
- {#if expandedSection == title} -
- -
- -
-
-
- = 0 - ? `${breakEvenYear + new Date().getFullYear() + 1} in ${breakEvenYear + 1}` - : '--', - units: 'years', - }, - ]} - /> - - - {/if} + {#if expandedSection == title} +
+ +
+ +
+
+
+
= 0 + ? `${breakEvenYear + new Date().getFullYear() + 1} in ${breakEvenYear + 1}` + : '--', + units: 'years', + }, + ]} + /> + + + {/if} diff --git a/src/routes/solar.test.ts b/src/routes/solar.test.ts new file mode 100644 index 0000000..ffcafbb --- /dev/null +++ b/src/routes/solar.test.ts @@ -0,0 +1,20 @@ +/* + Copyright 2024 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import { test } from 'vitest'; +import {} from './solar'; + +test('import works', () => {}); diff --git a/src/routes/solar.ts b/src/routes/solar.ts index daaa626..3b29639 100644 --- a/src/routes/solar.ts +++ b/src/routes/solar.ts @@ -22,220 +22,220 @@ import proj4 from 'proj4'; export type LayerId = 'mask' | 'dsm' | 'rgb' | 'annualFlux' | 'monthlyFlux' | 'hourlyShade'; export interface DataLayersResponse { - imageryDate: Date; - imageryProcessedDate: Date; - dsmUrl: string; - rgbUrl: string; - maskUrl: string; - annualFluxUrl: string; - monthlyFluxUrl: string; - hourlyShadeUrls: string[]; - imageryQuality: 'HIGH' | 'MEDIUM' | 'LOW'; + imageryDate: Date; + imageryProcessedDate: Date; + dsmUrl: string; + rgbUrl: string; + maskUrl: string; + annualFluxUrl: string; + monthlyFluxUrl: string; + hourlyShadeUrls: string[]; + imageryQuality: 'HIGH' | 'MEDIUM' | 'LOW'; } export interface Bounds { - north: number; - south: number; - east: number; - west: number; + north: number; + south: number; + east: number; + west: number; } export interface GeoTiff { - width: number; - height: number; - rasters: Array[]; - bounds: Bounds; + width: number; + height: number; + rasters: Array[]; + bounds: Bounds; } // https://developers.google.com/maps/documentation/solar/reference/rest/v1/buildingInsights/findClosest export interface BuildingInsightsResponse { - name: string; - center: LatLng; - boundingBox: LatLngBox; - imageryDate: Date; - imageryProcessedDate: Date; - postalCode: string; - administrativeArea: string; - statisticalArea: string; - regionCode: string; - solarPotential: SolarPotential; - imageryQuality: 'HIGH' | 'MEDIUM' | 'LOW'; + name: string; + center: LatLng; + boundingBox: LatLngBox; + imageryDate: Date; + imageryProcessedDate: Date; + postalCode: string; + administrativeArea: string; + statisticalArea: string; + regionCode: string; + solarPotential: SolarPotential; + imageryQuality: 'HIGH' | 'MEDIUM' | 'LOW'; } export interface SolarPotential { - maxArrayPanelsCount: number; - panelCapacityWatts: number; - panelHeightMeters: number; - panelWidthMeters: number; - panelLifetimeYears: number; - maxArrayAreaMeters2: number; - maxSunshineHoursPerYear: number; - carbonOffsetFactorKgPerMwh: number; - wholeRoofStats: SizeAndSunshineStats; - buildingStats: SizeAndSunshineStats; - roofSegmentStats: RoofSegmentSizeAndSunshineStats[]; - solarPanels: SolarPanel[]; - solarPanelConfigs: SolarPanelConfig[]; - financialAnalyses: object; + maxArrayPanelsCount: number; + panelCapacityWatts: number; + panelHeightMeters: number; + panelWidthMeters: number; + panelLifetimeYears: number; + maxArrayAreaMeters2: number; + maxSunshineHoursPerYear: number; + carbonOffsetFactorKgPerMwh: number; + wholeRoofStats: SizeAndSunshineStats; + buildingStats: SizeAndSunshineStats; + roofSegmentStats: RoofSegmentSizeAndSunshineStats[]; + solarPanels: SolarPanel[]; + solarPanelConfigs: SolarPanelConfig[]; + financialAnalyses: object; } export interface SizeAndSunshineStats { - areaMeters2: number; - sunshineQuantiles: number[]; - groundAreaMeters2: number; + areaMeters2: number; + sunshineQuantiles: number[]; + groundAreaMeters2: number; } export interface RoofSegmentSizeAndSunshineStats { - pitchDegrees: number; - azimuthDegrees: number; - stats: SizeAndSunshineStats; - center: LatLng; - boundingBox: LatLngBox; - planeHeightAtCenterMeters: number; + pitchDegrees: number; + azimuthDegrees: number; + stats: SizeAndSunshineStats; + center: LatLng; + boundingBox: LatLngBox; + planeHeightAtCenterMeters: number; } export interface SolarPanel { - center: LatLng; - orientation: 'LANDSCAPE' | 'PORTRAIT'; - segmentIndex: number; - yearlyEnergyDcKwh: number; + center: LatLng; + orientation: 'LANDSCAPE' | 'PORTRAIT'; + segmentIndex: number; + yearlyEnergyDcKwh: number; } export interface SolarPanelConfig { - panelsCount: number; - yearlyEnergyDcKwh: number; - roofSegmentSummaries: RoofSegmentSummary[]; + panelsCount: number; + yearlyEnergyDcKwh: number; + roofSegmentSummaries: RoofSegmentSummary[]; } export interface RoofSegmentSummary { - pitchDegrees: number; - azimuthDegrees: number; - panelsCount: number; - yearlyEnergyDcKwh: number; - segmentIndex: number; + pitchDegrees: number; + azimuthDegrees: number; + panelsCount: number; + yearlyEnergyDcKwh: number; + segmentIndex: number; } export interface LatLng { - latitude: number; - longitude: number; + latitude: number; + longitude: number; } export interface LatLngBox { - sw: LatLng; - ne: LatLng; + sw: LatLng; + ne: LatLng; } export interface Date { - year: number; - month: number; - day: number; + year: number; + month: number; + day: number; } export interface RequestError { - error: { - code: number; - message: string; - status: string; - }; + error: { + code: number; + message: string; + status: string; + }; } export function showLatLng(point: LatLng) { - return `(${point.latitude.toFixed(5)}, ${point.longitude.toFixed(5)})`; + return `(${point.latitude.toFixed(5)}, ${point.longitude.toFixed(5)})`; } export function showDate(date: Date) { - return `${date.month}/${date.day}/${date.year}`; + return `${date.month}/${date.day}/${date.year}`; } // https://developers.google.com/maps/documentation/solar/requests#make-building export async function findClosestBuilding( - location: google.maps.LatLng, - apiKey: string, + location: google.maps.LatLng, + apiKey: string, ): Promise { - const args = { - 'location.latitude': location.lat().toFixed(5), - 'location.longitude': location.lng().toFixed(5), - }; - console.log('GET buildingInsights\n', args); - const params = new URLSearchParams({ ...args, key: apiKey }); - return fetch(`https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`).then( - async (response) => { - const content = await response.json(); - if (response.status != 200) { - console.error('findClosestBuilding\n', content); - throw content; - } - console.log('buildingInsightsResponse', content); - return content; - }, - ); + const args = { + 'location.latitude': location.lat().toFixed(5), + 'location.longitude': location.lng().toFixed(5), + }; + console.log('GET buildingInsights\n', args); + const params = new URLSearchParams({ ...args, key: apiKey }); + return fetch(`https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`).then( + async (response) => { + const content = await response.json(); + if (response.status != 200) { + console.error('findClosestBuilding\n', content); + throw content; + } + console.log('buildingInsightsResponse', content); + return content; + }, + ); } // https://developers.google.com/maps/documentation/solar/requests#make-data export async function getDataLayerUrls( - location: LatLng, - radius_meters: number, - apiKey: string, + location: LatLng, + radius_meters: number, + apiKey: string, ): Promise { - const args = { - 'location.latitude': location.latitude.toFixed(5), - 'location.longitude': location.longitude.toFixed(5), - radius_meters: radius_meters.toString(), - }; - console.log('GET dataLayers\n', args); - const params = new URLSearchParams({ ...args, key: apiKey }); - return fetch(`https://solar.googleapis.com/v1/dataLayers:get?${params}`).then( - async (response) => { - const content = await response.json(); - if (response.status != 200) { - console.error('getDataLayerUrls\n', content); - throw content; - } - console.log('dataLayersResponse', content); - return content; - }, - ); + const args = { + 'location.latitude': location.latitude.toFixed(5), + 'location.longitude': location.longitude.toFixed(5), + radius_meters: radius_meters.toString(), + }; + console.log('GET dataLayers\n', args); + const params = new URLSearchParams({ ...args, key: apiKey }); + return fetch(`https://solar.googleapis.com/v1/dataLayers:get?${params}`).then( + async (response) => { + const content = await response.json(); + if (response.status != 200) { + console.error('getDataLayerUrls\n', content); + throw content; + } + console.log('dataLayersResponse', content); + return content; + }, + ); } export async function downloadGeoTIFF(url: string, apiKey: string): Promise { - console.log(`Downloading data layer: ${url}`); - const solarUrl = url.includes('solar.googleapis.com') ? url + `&key=${apiKey}` : url; - const response = await fetch(solarUrl); - if (response.status != 200) { - const error = await response.json(); - console.error(`downloadGeoTIFF failed: ${url}\n`, error); - throw error; - } - const arrayBuffer = await response.arrayBuffer(); - const tiff = await geotiff.fromArrayBuffer(arrayBuffer); - const image = await tiff.getImage(); - const rasters = await image.readRasters(); - - // Reproject the bounding box into coordinates. - const geoKeys = image.getGeoKeys(); - const projObj = geokeysToProj4.toProj4(geoKeys); - const projection = proj4(projObj.proj4, 'WGS84'); - const box = image.getBoundingBox(); - const sw = projection.forward({ - x: box[0] * projObj.coordinatesConversionParameters.x, - y: box[1] * projObj.coordinatesConversionParameters.y, - }); - const ne = projection.forward({ - x: box[2] * projObj.coordinatesConversionParameters.x, - y: box[3] * projObj.coordinatesConversionParameters.y, - }); - - return { - width: rasters.width, - height: rasters.height, - rasters: [...Array(rasters.length).keys()].map((i) => - Array.from(rasters[i] as geotiff.TypedArray), - ), - bounds: { - north: ne.y, - south: sw.y, - east: ne.x, - west: sw.x, - }, - }; + console.log(`Downloading data layer: ${url}`); + const solarUrl = url.includes('solar.googleapis.com') ? url + `&key=${apiKey}` : url; + const response = await fetch(solarUrl); + if (response.status != 200) { + const error = await response.json(); + console.error(`downloadGeoTIFF failed: ${url}\n`, error); + throw error; + } + const arrayBuffer = await response.arrayBuffer(); + const tiff = await geotiff.fromArrayBuffer(arrayBuffer); + const image = await tiff.getImage(); + const rasters = await image.readRasters(); + + // Reproject the bounding box into coordinates. + const geoKeys = image.getGeoKeys(); + const projObj = geokeysToProj4.toProj4(geoKeys); + const projection = proj4(projObj.proj4, 'WGS84'); + const box = image.getBoundingBox(); + const sw = projection.forward({ + x: box[0] * projObj.coordinatesConversionParameters.x, + y: box[1] * projObj.coordinatesConversionParameters.y, + }); + const ne = projection.forward({ + x: box[2] * projObj.coordinatesConversionParameters.x, + y: box[3] * projObj.coordinatesConversionParameters.y, + }); + + return { + width: rasters.width, + height: rasters.height, + rasters: [...Array(rasters.length).keys()].map((i) => + Array.from(rasters[i] as geotiff.TypedArray), + ), + bounds: { + north: ne.y, + south: sw.y, + east: ne.x, + west: sw.x, + }, + }; } diff --git a/src/routes/utils.ts b/src/routes/utils.ts index d31de00..364551d 100644 --- a/src/routes/utils.ts +++ b/src/routes/utils.ts @@ -17,24 +17,24 @@ import type { SolarPanelConfig } from './solar'; export function showNumber(x: number) { - return x.toLocaleString(undefined, { maximumFractionDigits: 1 }); + return x.toLocaleString(undefined, { maximumFractionDigits: 1 }); } export function showMoney(amount: number) { - return `$${amount.toLocaleString(undefined, { - minimumFractionDigits: 2, - maximumFractionDigits: 2, - })}`; + return `$${amount.toLocaleString(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + })}`; } export function findSolarConfig( - solarPanelConfigs: SolarPanelConfig[], - yearlyKwhEnergyConsumption: number, - panelCapacityRatio: number, - dcToAcDerate: number, + solarPanelConfigs: SolarPanelConfig[], + yearlyKwhEnergyConsumption: number, + panelCapacityRatio: number, + dcToAcDerate: number, ) { - return solarPanelConfigs.findIndex( - (config) => - config.yearlyEnergyDcKwh * panelCapacityRatio * dcToAcDerate >= yearlyKwhEnergyConsumption, - ); + return solarPanelConfigs.findIndex( + (config) => + config.yearlyEnergyDcKwh * panelCapacityRatio * dcToAcDerate >= yearlyKwhEnergyConsumption, + ); } diff --git a/src/routes/visualize.ts b/src/routes/visualize.ts index 596f34a..63f301b 100644 --- a/src/routes/visualize.ts +++ b/src/routes/visualize.ts @@ -17,109 +17,109 @@ import type { GeoTiff } from './solar'; export function renderRGB(rgb: GeoTiff, mask?: GeoTiff) { - // https://www.w3schools.com/tags/canvas_createimagedata.asp - const canvas = document.createElement('canvas'); - canvas.width = mask ? mask.width : rgb.width; - canvas.height = mask ? mask.height : rgb.height; + // https://www.w3schools.com/tags/canvas_createimagedata.asp + const canvas = document.createElement('canvas'); + canvas.width = mask ? mask.width : rgb.width; + canvas.height = mask ? mask.height : rgb.height; - const dw = rgb.width / canvas.width; - const dh = rgb.height / canvas.height; + const dw = rgb.width / canvas.width; + const dh = rgb.height / canvas.height; - const ctx = canvas.getContext('2d')!; - const img = ctx.getImageData(0, 0, canvas.width, canvas.height); - for (let y = 0; y < canvas.height; y++) { - for (let x = 0; x < canvas.width; x++) { - const imgIdx = y * canvas.width * 4 + x * 4; - const rgbIdx = Math.floor(y * dh) * rgb.width + Math.floor(x * dw); - const maskIdx = y * canvas.width + x; - img.data[imgIdx + 0] = rgb.rasters[0][rgbIdx]; // Red - img.data[imgIdx + 1] = rgb.rasters[1][rgbIdx]; // Green - img.data[imgIdx + 2] = rgb.rasters[2][rgbIdx]; // Blue - img.data[imgIdx + 3] = mask // Alpha - ? mask.rasters[0][maskIdx] * 255 - : 255; - } - } - ctx.putImageData(img, 0, 0); - return canvas; + const ctx = canvas.getContext('2d')!; + const img = ctx.getImageData(0, 0, canvas.width, canvas.height); + for (let y = 0; y < canvas.height; y++) { + for (let x = 0; x < canvas.width; x++) { + const imgIdx = y * canvas.width * 4 + x * 4; + const rgbIdx = Math.floor(y * dh) * rgb.width + Math.floor(x * dw); + const maskIdx = y * canvas.width + x; + img.data[imgIdx + 0] = rgb.rasters[0][rgbIdx]; // Red + img.data[imgIdx + 1] = rgb.rasters[1][rgbIdx]; // Green + img.data[imgIdx + 2] = rgb.rasters[2][rgbIdx]; // Blue + img.data[imgIdx + 3] = mask // Alpha + ? mask.rasters[0][maskIdx] * 255 + : 255; + } + } + ctx.putImageData(img, 0, 0); + return canvas; } export function renderPalette({ - data, - mask, - colors, - min, - max, - index, + data, + mask, + colors, + min, + max, + index, }: { - data: GeoTiff; - mask?: GeoTiff; - colors?: string[]; - min?: number; - max?: number; - index?: number; + data: GeoTiff; + mask?: GeoTiff; + colors?: string[]; + min?: number; + max?: number; + index?: number; }) { - const n = 256; - const palette = createPalette(colors ?? ['000000', 'ffffff'], n); - const indices = data.rasters[index ?? 0] - .map((x) => normalize(x, max ?? 1, min ?? 0)) - .map((x) => Math.round(x * (n - 1))); - return renderRGB( - { - ...data, - rasters: [ - indices.map((i: number) => palette[i].r), - indices.map((i: number) => palette[i].g), - indices.map((i: number) => palette[i].b), - ], - }, - mask, - ); + const n = 256; + const palette = createPalette(colors ?? ['000000', 'ffffff'], n); + const indices = data.rasters[index ?? 0] + .map((x) => normalize(x, max ?? 1, min ?? 0)) + .map((x) => Math.round(x * (n - 1))); + return renderRGB( + { + ...data, + rasters: [ + indices.map((i: number) => palette[i].r), + indices.map((i: number) => palette[i].g), + indices.map((i: number) => palette[i].b), + ], + }, + mask, + ); } export function createPalette(hexColors: string[], size = 256) { - const rgb = hexColors.map(colorToRGB); - const step = (rgb.length - 1) / (size - 1); - return Array(size) - .fill(0) - .map((_, i) => { - const index = i * step; - const j = Math.floor(index); - const k = Math.ceil(index); - return { - r: lerp(rgb[j].r, rgb[k].r, index - j), - g: lerp(rgb[j].g, rgb[k].g, index - j), - b: lerp(rgb[j].b, rgb[k].b, index - j), - }; - }); + const rgb = hexColors.map(colorToRGB); + const step = (rgb.length - 1) / (size - 1); + return Array(size) + .fill(0) + .map((_, i) => { + const index = i * step; + const j = Math.floor(index); + const k = Math.ceil(index); + return { + r: lerp(rgb[j].r, rgb[k].r, index - j), + g: lerp(rgb[j].g, rgb[k].g, index - j), + b: lerp(rgb[j].b, rgb[k].b, index - j), + }; + }); } export function colorToRGB(color: string): { r: number; g: number; b: number } { - const hex = color.startsWith('#') ? color.slice(1) : color; - return { - r: parseInt(hex.substring(0, 2), 16), - g: parseInt(hex.substring(2, 4), 16), - b: parseInt(hex.substring(4, 6), 16), - }; + const hex = color.startsWith('#') ? color.slice(1) : color; + return { + r: parseInt(hex.substring(0, 2), 16), + g: parseInt(hex.substring(2, 4), 16), + b: parseInt(hex.substring(4, 6), 16), + }; } export function rgbToColor({ r, g, b }: { r: number; g: number; b: number }): string { - const f = (x: number) => { - const hex = Math.round(x).toString(16); - return hex.length == 1 ? `0${hex}` : hex; - }; - return `#${f(r)}${f(g)}${f(b)}`; + const f = (x: number) => { + const hex = Math.round(x).toString(16); + return hex.length == 1 ? `0${hex}` : hex; + }; + return `#${f(r)}${f(g)}${f(b)}`; } export function normalize(x: number, max: number = 1, min: number = 0) { - const y = (x - min) / (max - min); - return clamp(y, 0, 1); + const y = (x - min) / (max - min); + return clamp(y, 0, 1); } export function lerp(x: number, y: number, t: number) { - return x + t * (y - x); + return x + t * (y - x); } export function clamp(x: number, min: number, max: number) { - return Math.min(Math.max(x, min), max); + return Math.min(Math.max(x, min), max); } diff --git a/src/theme/colors.module.css b/src/theme/colors.module.css index bda17e2..cc061b7 100644 --- a/src/theme/colors.module.css +++ b/src/theme/colors.module.css @@ -15,241 +15,241 @@ */ .primary { - background-color: var(--md-sys-color-primary); + background-color: var(--md-sys-color-primary); } .primary-text { - color: var(--md-sys-color-primary); + color: var(--md-sys-color-primary); } .on-primary { - background-color: var(--md-sys-color-on-primary); + background-color: var(--md-sys-color-on-primary); } .on-primary-text { - color: var(--md-sys-color-on-primary); + color: var(--md-sys-color-on-primary); } .primary-container { - background-color: var(--md-sys-color-primary-container); + background-color: var(--md-sys-color-primary-container); } .primary-container-text { - color: var(--md-sys-color-primary-container); + color: var(--md-sys-color-primary-container); } .on-primary-container { - background-color: var(--md-sys-color-on-primary-container); + background-color: var(--md-sys-color-on-primary-container); } .on-primary-container-text { - color: var(--md-sys-color-on-primary-container); + color: var(--md-sys-color-on-primary-container); } .secondary { - background-color: var(--md-sys-color-secondary); + background-color: var(--md-sys-color-secondary); } .secondary-text { - color: var(--md-sys-color-secondary); + color: var(--md-sys-color-secondary); } .on-secondary { - background-color: var(--md-sys-color-on-secondary); + background-color: var(--md-sys-color-on-secondary); } .on-secondary-text { - color: var(--md-sys-color-on-secondary); + color: var(--md-sys-color-on-secondary); } .secondary-container { - background-color: var(--md-sys-color-secondary-container); + background-color: var(--md-sys-color-secondary-container); } .secondary-container-text { - color: var(--md-sys-color-secondary-container); + color: var(--md-sys-color-secondary-container); } .on-secondary-container { - background-color: var(--md-sys-color-on-secondary-container); + background-color: var(--md-sys-color-on-secondary-container); } .on-secondary-container-text { - color: var(--md-sys-color-on-secondary-container); + color: var(--md-sys-color-on-secondary-container); } .tertiary { - background-color: var(--md-sys-color-tertiary); + background-color: var(--md-sys-color-tertiary); } .tertiary-text { - color: var(--md-sys-color-tertiary); + color: var(--md-sys-color-tertiary); } .on-tertiary { - background-color: var(--md-sys-color-on-tertiary); + background-color: var(--md-sys-color-on-tertiary); } .on-tertiary-text { - color: var(--md-sys-color-on-tertiary); + color: var(--md-sys-color-on-tertiary); } .tertiary-container { - background-color: var(--md-sys-color-tertiary-container); + background-color: var(--md-sys-color-tertiary-container); } .tertiary-container-text { - color: var(--md-sys-color-tertiary-container); + color: var(--md-sys-color-tertiary-container); } .on-tertiary-container { - background-color: var(--md-sys-color-on-tertiary-container); + background-color: var(--md-sys-color-on-tertiary-container); } .on-tertiary-container-text { - color: var(--md-sys-color-on-tertiary-container); + color: var(--md-sys-color-on-tertiary-container); } .error { - background-color: var(--md-sys-color-error); + background-color: var(--md-sys-color-error); } .error-text { - color: var(--md-sys-color-error); + color: var(--md-sys-color-error); } .on-error { - background-color: var(--md-sys-color-on-error); + background-color: var(--md-sys-color-on-error); } .on-error-text { - color: var(--md-sys-color-on-error); + color: var(--md-sys-color-on-error); } .error-container { - background-color: var(--md-sys-color-error-container); + background-color: var(--md-sys-color-error-container); } .error-container-text { - color: var(--md-sys-color-error-container); + color: var(--md-sys-color-error-container); } .on-error-container { - background-color: var(--md-sys-color-on-error-container); + background-color: var(--md-sys-color-on-error-container); } .on-error-container-text { - color: var(--md-sys-color-on-error-container); + color: var(--md-sys-color-on-error-container); } .outline { - background-color: var(--md-sys-color-outline); + background-color: var(--md-sys-color-outline); } .outline-text { - color: var(--md-sys-color-outline); + color: var(--md-sys-color-outline); } .background { - background-color: var(--md-sys-color-background); + background-color: var(--md-sys-color-background); } .background-text { - color: var(--md-sys-color-background); + color: var(--md-sys-color-background); } .on-background { - background-color: var(--md-sys-color-on-background); + background-color: var(--md-sys-color-on-background); } .on-background-text { - color: var(--md-sys-color-on-background); + color: var(--md-sys-color-on-background); } .surface { - background-color: var(--md-sys-color-surface); + background-color: var(--md-sys-color-surface); } .surface-text { - color: var(--md-sys-color-surface); + color: var(--md-sys-color-surface); } .on-surface { - background-color: var(--md-sys-color-on-surface); + background-color: var(--md-sys-color-on-surface); } .on-surface-text { - color: var(--md-sys-color-on-surface); + color: var(--md-sys-color-on-surface); } .surface-variant { - background-color: var(--md-sys-color-surface-variant); + background-color: var(--md-sys-color-surface-variant); } .surface-variant-text { - color: var(--md-sys-color-surface-variant); + color: var(--md-sys-color-surface-variant); } .on-surface-variant { - background-color: var(--md-sys-color-on-surface-variant); + background-color: var(--md-sys-color-on-surface-variant); } .on-surface-variant-text { - color: var(--md-sys-color-on-surface-variant); + color: var(--md-sys-color-on-surface-variant); } .inverse-surface { - background-color: var(--md-sys-color-inverse-surface); + background-color: var(--md-sys-color-inverse-surface); } .inverse-surface-text { - color: var(--md-sys-color-inverse-surface); + color: var(--md-sys-color-inverse-surface); } .inverse-on-surface { - background-color: var(--md-sys-color-inverse-on-surface); + background-color: var(--md-sys-color-inverse-on-surface); } .inverse-on-surface-text { - color: var(--md-sys-color-inverse-on-surface); + color: var(--md-sys-color-inverse-on-surface); } .inverse-primary { - background-color: var(--md-sys-color-inverse-primary); + background-color: var(--md-sys-color-inverse-primary); } .inverse-primary-text { - color: var(--md-sys-color-inverse-primary); + color: var(--md-sys-color-inverse-primary); } .shadow { - background-color: var(--md-sys-color-shadow); + background-color: var(--md-sys-color-shadow); } .shadow-text { - color: var(--md-sys-color-shadow); + color: var(--md-sys-color-shadow); } .surface-tint { - background-color: var(--md-sys-color-surface-tint); + background-color: var(--md-sys-color-surface-tint); } .surface-tint-text { - color: var(--md-sys-color-surface-tint); + color: var(--md-sys-color-surface-tint); } .outline-variant { - background-color: var(--md-sys-color-outline-variant); + background-color: var(--md-sys-color-outline-variant); } .outline-variant-text { - color: var(--md-sys-color-outline-variant); + color: var(--md-sys-color-outline-variant); } .scrim { - background-color: var(--md-sys-color-scrim); + background-color: var(--md-sys-color-scrim); } .scrim-text { - color: var(--md-sys-color-scrim); + color: var(--md-sys-color-scrim); } diff --git a/src/theme/theme.dark.css b/src/theme/theme.dark.css index 863f06a..b4a69e5 100644 --- a/src/theme/theme.dark.css +++ b/src/theme/theme.dark.css @@ -15,34 +15,34 @@ */ :root { - --md-sys-color-primary: var(--md-sys-color-primary-dark); - --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); - --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); - --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); - --md-sys-color-secondary: var(--md-sys-color-secondary-dark); - --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); - --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); - --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); - --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); - --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark); - --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark); - --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark); - --md-sys-color-error: var(--md-sys-color-error-dark); - --md-sys-color-on-error: var(--md-sys-color-on-error-dark); - --md-sys-color-error-container: var(--md-sys-color-error-container-dark); - --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark); - --md-sys-color-outline: var(--md-sys-color-outline-dark); - --md-sys-color-background: var(--md-sys-color-background-dark); - --md-sys-color-on-background: var(--md-sys-color-on-background-dark); - --md-sys-color-surface: var(--md-sys-color-surface-dark); - --md-sys-color-on-surface: var(--md-sys-color-on-surface-dark); - --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark); - --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark); - --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark); - --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark); - --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark); - --md-sys-color-shadow: var(--md-sys-color-shadow-dark); - --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark); - --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-dark); - --md-sys-color-scrim: var(--md-sys-color-scrim-dark); + --md-sys-color-primary: var(--md-sys-color-primary-dark); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); + --md-sys-color-secondary: var(--md-sys-color-secondary-dark); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark); + --md-sys-color-error: var(--md-sys-color-error-dark); + --md-sys-color-on-error: var(--md-sys-color-on-error-dark); + --md-sys-color-error-container: var(--md-sys-color-error-container-dark); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark); + --md-sys-color-outline: var(--md-sys-color-outline-dark); + --md-sys-color-background: var(--md-sys-color-background-dark); + --md-sys-color-on-background: var(--md-sys-color-on-background-dark); + --md-sys-color-surface: var(--md-sys-color-surface-dark); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-dark); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark); + --md-sys-color-shadow: var(--md-sys-color-shadow-dark); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-dark); + --md-sys-color-scrim: var(--md-sys-color-scrim-dark); } diff --git a/src/theme/theme.light.css b/src/theme/theme.light.css index 12af4c4..f097159 100644 --- a/src/theme/theme.light.css +++ b/src/theme/theme.light.css @@ -15,34 +15,34 @@ */ :root { - --md-sys-color-primary: var(--md-sys-color-primary-light); - --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); - --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); - --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); - --md-sys-color-secondary: var(--md-sys-color-secondary-light); - --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); - --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); - --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); - --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); - --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light); - --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light); - --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light); - --md-sys-color-error: var(--md-sys-color-error-light); - --md-sys-color-on-error: var(--md-sys-color-on-error-light); - --md-sys-color-error-container: var(--md-sys-color-error-container-light); - --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light); - --md-sys-color-outline: var(--md-sys-color-outline-light); - --md-sys-color-background: var(--md-sys-color-background-light); - --md-sys-color-on-background: var(--md-sys-color-on-background-light); - --md-sys-color-surface: var(--md-sys-color-surface-light); - --md-sys-color-on-surface: var(--md-sys-color-on-surface-light); - --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light); - --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light); - --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light); - --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light); - --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light); - --md-sys-color-shadow: var(--md-sys-color-shadow-light); - --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light); - --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-light); - --md-sys-color-scrim: var(--md-sys-color-scrim-light); + --md-sys-color-primary: var(--md-sys-color-primary-light); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); + --md-sys-color-secondary: var(--md-sys-color-secondary-light); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light); + --md-sys-color-error: var(--md-sys-color-error-light); + --md-sys-color-on-error: var(--md-sys-color-on-error-light); + --md-sys-color-error-container: var(--md-sys-color-error-container-light); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light); + --md-sys-color-outline: var(--md-sys-color-outline-light); + --md-sys-color-background: var(--md-sys-color-background-light); + --md-sys-color-on-background: var(--md-sys-color-on-background-light); + --md-sys-color-surface: var(--md-sys-color-surface-light); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-light); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light); + --md-sys-color-shadow: var(--md-sys-color-shadow-light); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-light); + --md-sys-color-scrim: var(--md-sys-color-scrim-light); } diff --git a/src/theme/tokens.css b/src/theme/tokens.css index c1965d4..67e7d51 100644 --- a/src/theme/tokens.css +++ b/src/theme/tokens.css @@ -15,256 +15,256 @@ */ :root { - --md-source: #6750a4; - /* primary */ - --md-ref-palette-primary0: #000000; - --md-ref-palette-primary10: #21005d; - --md-ref-palette-primary20: #381e72; - --md-ref-palette-primary30: #4f378b; - --md-ref-palette-primary40: #6750a4; - --md-ref-palette-primary50: #7f67be; - --md-ref-palette-primary60: #9a82db; - --md-ref-palette-primary70: #b69df8; - --md-ref-palette-primary80: #d0bcff; - --md-ref-palette-primary90: #eaddff; - --md-ref-palette-primary95: #f6edff; - --md-ref-palette-primary99: #fffbfe; - --md-ref-palette-primary100: #ffffff; - /* secondary */ - --md-ref-palette-secondary0: #000000; - --md-ref-palette-secondary10: #1d192b; - --md-ref-palette-secondary20: #332d41; - --md-ref-palette-secondary30: #4a4458; - --md-ref-palette-secondary40: #625b71; - --md-ref-palette-secondary50: #7a7289; - --md-ref-palette-secondary60: #958da5; - --md-ref-palette-secondary70: #b0a7c0; - --md-ref-palette-secondary80: #ccc2dc; - --md-ref-palette-secondary90: #e8def8; - --md-ref-palette-secondary95: #f6edff; - --md-ref-palette-secondary99: #fffbfe; - --md-ref-palette-secondary100: #ffffff; - /* tertiary */ - --md-ref-palette-tertiary0: #000000; - --md-ref-palette-tertiary10: #31111d; - --md-ref-palette-tertiary20: #492532; - --md-ref-palette-tertiary30: #633b48; - --md-ref-palette-tertiary40: #7d5260; - --md-ref-palette-tertiary50: #986977; - --md-ref-palette-tertiary60: #b58392; - --md-ref-palette-tertiary70: #d29dac; - --md-ref-palette-tertiary80: #efb8c8; - --md-ref-palette-tertiary90: #ffd8e4; - --md-ref-palette-tertiary95: #ffecf1; - --md-ref-palette-tertiary99: #fffbfa; - --md-ref-palette-tertiary100: #ffffff; - /* error */ - --md-ref-palette-error0: #000000; - --md-ref-palette-error10: #410e0b; - --md-ref-palette-error20: #601410; - --md-ref-palette-error30: #8c1d18; - --md-ref-palette-error40: #b3261e; - --md-ref-palette-error50: #dc362e; - --md-ref-palette-error60: #e46962; - --md-ref-palette-error70: #ec928e; - --md-ref-palette-error80: #f2b8b5; - --md-ref-palette-error90: #f9dedc; - --md-ref-palette-error95: #fceeee; - --md-ref-palette-error99: #fffbf9; - --md-ref-palette-error100: #ffffff; - /* neutral */ - --md-ref-palette-neutral0: #000000; - --md-ref-palette-neutral10: #1c1b1f; - --md-ref-palette-neutral20: #313033; - --md-ref-palette-neutral30: #484649; - --md-ref-palette-neutral40: #605d62; - --md-ref-palette-neutral50: #787579; - --md-ref-palette-neutral60: #939094; - --md-ref-palette-neutral70: #aeaaae; - --md-ref-palette-neutral80: #c9c5ca; - --md-ref-palette-neutral90: #e6e1e5; - --md-ref-palette-neutral95: #f4eff4; - --md-ref-palette-neutral99: #fffbfe; - --md-ref-palette-neutral100: #ffffff; - /* neutral-variant */ - --md-ref-palette-neutral-variant0: #000000; - --md-ref-palette-neutral-variant10: #1d1a22; - --md-ref-palette-neutral-variant20: #322f37; - --md-ref-palette-neutral-variant30: #49454f; - --md-ref-palette-neutral-variant40: #605d66; - --md-ref-palette-neutral-variant50: #79747e; - --md-ref-palette-neutral-variant60: #938f99; - --md-ref-palette-neutral-variant70: #aea9b4; - --md-ref-palette-neutral-variant80: #cac4d0; - --md-ref-palette-neutral-variant90: #e7e0ec; - --md-ref-palette-neutral-variant95: #f5eefa; - --md-ref-palette-neutral-variant99: #fffbfe; - --md-ref-palette-neutral-variant100: #ffffff; - /* light */ - --md-sys-color-primary-light: #6750a4; - --md-sys-color-on-primary-light: #ffffff; - --md-sys-color-primary-container-light: #eaddff; - --md-sys-color-on-primary-container-light: #21005d; - --md-sys-color-secondary-light: #625b71; - --md-sys-color-on-secondary-light: #ffffff; - --md-sys-color-secondary-container-light: #e8def8; - --md-sys-color-on-secondary-container-light: #1d192b; - --md-sys-color-tertiary-light: #7d5260; - --md-sys-color-on-tertiary-light: #ffffff; - --md-sys-color-tertiary-container-light: #ffd8e4; - --md-sys-color-on-tertiary-container-light: #31111d; - --md-sys-color-error-light: #b3261e; - --md-sys-color-on-error-light: #ffffff; - --md-sys-color-error-container-light: #f9dedc; - --md-sys-color-on-error-container-light: #410e0b; - --md-sys-color-outline-light: #79747e; - --md-sys-color-background-light: #fffbfe; - --md-sys-color-on-background-light: #1c1b1f; - --md-sys-color-surface-light: #fffbfe; - --md-sys-color-on-surface-light: #1c1b1f; - --md-sys-color-surface-variant-light: #e7e0ec; - --md-sys-color-on-surface-variant-light: #49454f; - --md-sys-color-inverse-surface-light: #313033; - --md-sys-color-inverse-on-surface-light: #f4eff4; - --md-sys-color-inverse-primary-light: #d0bcff; - --md-sys-color-shadow-light: #000000; - --md-sys-color-surface-tint-light: #6750a4; - --md-sys-color-outline-variant-light: #cac4d0; - --md-sys-color-scrim-light: #000000; - /* dark */ - --md-sys-color-primary-dark: #d0bcff; - --md-sys-color-on-primary-dark: #381e72; - --md-sys-color-primary-container-dark: #4f378b; - --md-sys-color-on-primary-container-dark: #eaddff; - --md-sys-color-secondary-dark: #ccc2dc; - --md-sys-color-on-secondary-dark: #332d41; - --md-sys-color-secondary-container-dark: #4a4458; - --md-sys-color-on-secondary-container-dark: #e8def8; - --md-sys-color-tertiary-dark: #efb8c8; - --md-sys-color-on-tertiary-dark: #492532; - --md-sys-color-tertiary-container-dark: #633b48; - --md-sys-color-on-tertiary-container-dark: #ffd8e4; - --md-sys-color-error-dark: #f2b8b5; - --md-sys-color-on-error-dark: #601410; - --md-sys-color-error-container-dark: #8c1d18; - --md-sys-color-on-error-container-dark: #f9dedc; - --md-sys-color-outline-dark: #938f99; - --md-sys-color-background-dark: #1c1b1f; - --md-sys-color-on-background-dark: #e6e1e5; - --md-sys-color-surface-dark: #1c1b1f; - --md-sys-color-on-surface-dark: #e6e1e5; - --md-sys-color-surface-variant-dark: #49454f; - --md-sys-color-on-surface-variant-dark: #cac4d0; - --md-sys-color-inverse-surface-dark: #e6e1e5; - --md-sys-color-inverse-on-surface-dark: #313033; - --md-sys-color-inverse-primary-dark: #6750a4; - --md-sys-color-shadow-dark: #000000; - --md-sys-color-surface-tint-dark: #d0bcff; - --md-sys-color-outline-variant-dark: #49454f; - --md-sys-color-scrim-dark: #000000; - /* display - large */ - --md-sys-typescale-display-large-font-family-name: Roboto; - --md-sys-typescale-display-large-font-family-style: Regular; - --md-sys-typescale-display-large-font-weight: 400px; - --md-sys-typescale-display-large-font-size: 57px; - --md-sys-typescale-display-large-line-height: 64px; - --md-sys-typescale-display-large-letter-spacing: -0.25px; - /* display - medium */ - --md-sys-typescale-display-medium-font-family-name: Roboto; - --md-sys-typescale-display-medium-font-family-style: Regular; - --md-sys-typescale-display-medium-font-weight: 400px; - --md-sys-typescale-display-medium-font-size: 45px; - --md-sys-typescale-display-medium-line-height: 52px; - --md-sys-typescale-display-medium-letter-spacing: 0px; - /* display - small */ - --md-sys-typescale-display-small-font-family-name: Roboto; - --md-sys-typescale-display-small-font-family-style: Regular; - --md-sys-typescale-display-small-font-weight: 400px; - --md-sys-typescale-display-small-font-size: 36px; - --md-sys-typescale-display-small-line-height: 44px; - --md-sys-typescale-display-small-letter-spacing: 0px; - /* headline - large */ - --md-sys-typescale-headline-large-font-family-name: Roboto; - --md-sys-typescale-headline-large-font-family-style: Regular; - --md-sys-typescale-headline-large-font-weight: 400px; - --md-sys-typescale-headline-large-font-size: 32px; - --md-sys-typescale-headline-large-line-height: 40px; - --md-sys-typescale-headline-large-letter-spacing: 0px; - /* headline - medium */ - --md-sys-typescale-headline-medium-font-family-name: Roboto; - --md-sys-typescale-headline-medium-font-family-style: Regular; - --md-sys-typescale-headline-medium-font-weight: 400px; - --md-sys-typescale-headline-medium-font-size: 28px; - --md-sys-typescale-headline-medium-line-height: 36px; - --md-sys-typescale-headline-medium-letter-spacing: 0px; - /* headline - small */ - --md-sys-typescale-headline-small-font-family-name: Roboto; - --md-sys-typescale-headline-small-font-family-style: Regular; - --md-sys-typescale-headline-small-font-weight: 400px; - --md-sys-typescale-headline-small-font-size: 24px; - --md-sys-typescale-headline-small-line-height: 32px; - --md-sys-typescale-headline-small-letter-spacing: 0px; - /* body - large */ - --md-sys-typescale-body-large-font-family-name: Roboto; - --md-sys-typescale-body-large-font-family-style: Regular; - --md-sys-typescale-body-large-font-weight: 400px; - --md-sys-typescale-body-large-font-size: 16px; - --md-sys-typescale-body-large-line-height: 24px; - --md-sys-typescale-body-large-letter-spacing: 0.5px; - /* body - medium */ - --md-sys-typescale-body-medium-font-family-name: Roboto; - --md-sys-typescale-body-medium-font-family-style: Regular; - --md-sys-typescale-body-medium-font-weight: 400px; - --md-sys-typescale-body-medium-font-size: 14px; - --md-sys-typescale-body-medium-line-height: 20px; - --md-sys-typescale-body-medium-letter-spacing: 0.25px; - /* body - small */ - --md-sys-typescale-body-small-font-family-name: Roboto; - --md-sys-typescale-body-small-font-family-style: Regular; - --md-sys-typescale-body-small-font-weight: 400px; - --md-sys-typescale-body-small-font-size: 12px; - --md-sys-typescale-body-small-line-height: 16px; - --md-sys-typescale-body-small-letter-spacing: 0.4px; - /* label - large */ - --md-sys-typescale-label-large-font-family-name: Roboto; - --md-sys-typescale-label-large-font-family-style: Medium; - --md-sys-typescale-label-large-font-weight: 500px; - --md-sys-typescale-label-large-font-size: 14px; - --md-sys-typescale-label-large-line-height: 20px; - --md-sys-typescale-label-large-letter-spacing: 0.1px; - /* label - medium */ - --md-sys-typescale-label-medium-font-family-name: Roboto; - --md-sys-typescale-label-medium-font-family-style: Medium; - --md-sys-typescale-label-medium-font-weight: 500px; - --md-sys-typescale-label-medium-font-size: 12px; - --md-sys-typescale-label-medium-line-height: 16px; - --md-sys-typescale-label-medium-letter-spacing: 0.5px; - /* label - small */ - --md-sys-typescale-label-small-font-family-name: Roboto; - --md-sys-typescale-label-small-font-family-style: Medium; - --md-sys-typescale-label-small-font-weight: 500px; - --md-sys-typescale-label-small-font-size: 11px; - --md-sys-typescale-label-small-line-height: 16px; - --md-sys-typescale-label-small-letter-spacing: 0.5px; - /* title - large */ - --md-sys-typescale-title-large-font-family-name: Roboto; - --md-sys-typescale-title-large-font-family-style: Regular; - --md-sys-typescale-title-large-font-weight: 400px; - --md-sys-typescale-title-large-font-size: 22px; - --md-sys-typescale-title-large-line-height: 28px; - --md-sys-typescale-title-large-letter-spacing: 0px; - /* title - medium */ - --md-sys-typescale-title-medium-font-family-name: Roboto; - --md-sys-typescale-title-medium-font-family-style: Medium; - --md-sys-typescale-title-medium-font-weight: 500px; - --md-sys-typescale-title-medium-font-size: 16px; - --md-sys-typescale-title-medium-line-height: 24px; - --md-sys-typescale-title-medium-letter-spacing: 0.15px; - /* title - small */ - --md-sys-typescale-title-small-font-family-name: Roboto; - --md-sys-typescale-title-small-font-family-style: Medium; - --md-sys-typescale-title-small-font-weight: 500px; - --md-sys-typescale-title-small-font-size: 14px; - --md-sys-typescale-title-small-line-height: 20px; - --md-sys-typescale-title-small-letter-spacing: 0.1px; + --md-source: #6750a4; + /* primary */ + --md-ref-palette-primary0: #000000; + --md-ref-palette-primary10: #21005d; + --md-ref-palette-primary20: #381e72; + --md-ref-palette-primary30: #4f378b; + --md-ref-palette-primary40: #6750a4; + --md-ref-palette-primary50: #7f67be; + --md-ref-palette-primary60: #9a82db; + --md-ref-palette-primary70: #b69df8; + --md-ref-palette-primary80: #d0bcff; + --md-ref-palette-primary90: #eaddff; + --md-ref-palette-primary95: #f6edff; + --md-ref-palette-primary99: #fffbfe; + --md-ref-palette-primary100: #ffffff; + /* secondary */ + --md-ref-palette-secondary0: #000000; + --md-ref-palette-secondary10: #1d192b; + --md-ref-palette-secondary20: #332d41; + --md-ref-palette-secondary30: #4a4458; + --md-ref-palette-secondary40: #625b71; + --md-ref-palette-secondary50: #7a7289; + --md-ref-palette-secondary60: #958da5; + --md-ref-palette-secondary70: #b0a7c0; + --md-ref-palette-secondary80: #ccc2dc; + --md-ref-palette-secondary90: #e8def8; + --md-ref-palette-secondary95: #f6edff; + --md-ref-palette-secondary99: #fffbfe; + --md-ref-palette-secondary100: #ffffff; + /* tertiary */ + --md-ref-palette-tertiary0: #000000; + --md-ref-palette-tertiary10: #31111d; + --md-ref-palette-tertiary20: #492532; + --md-ref-palette-tertiary30: #633b48; + --md-ref-palette-tertiary40: #7d5260; + --md-ref-palette-tertiary50: #986977; + --md-ref-palette-tertiary60: #b58392; + --md-ref-palette-tertiary70: #d29dac; + --md-ref-palette-tertiary80: #efb8c8; + --md-ref-palette-tertiary90: #ffd8e4; + --md-ref-palette-tertiary95: #ffecf1; + --md-ref-palette-tertiary99: #fffbfa; + --md-ref-palette-tertiary100: #ffffff; + /* error */ + --md-ref-palette-error0: #000000; + --md-ref-palette-error10: #410e0b; + --md-ref-palette-error20: #601410; + --md-ref-palette-error30: #8c1d18; + --md-ref-palette-error40: #b3261e; + --md-ref-palette-error50: #dc362e; + --md-ref-palette-error60: #e46962; + --md-ref-palette-error70: #ec928e; + --md-ref-palette-error80: #f2b8b5; + --md-ref-palette-error90: #f9dedc; + --md-ref-palette-error95: #fceeee; + --md-ref-palette-error99: #fffbf9; + --md-ref-palette-error100: #ffffff; + /* neutral */ + --md-ref-palette-neutral0: #000000; + --md-ref-palette-neutral10: #1c1b1f; + --md-ref-palette-neutral20: #313033; + --md-ref-palette-neutral30: #484649; + --md-ref-palette-neutral40: #605d62; + --md-ref-palette-neutral50: #787579; + --md-ref-palette-neutral60: #939094; + --md-ref-palette-neutral70: #aeaaae; + --md-ref-palette-neutral80: #c9c5ca; + --md-ref-palette-neutral90: #e6e1e5; + --md-ref-palette-neutral95: #f4eff4; + --md-ref-palette-neutral99: #fffbfe; + --md-ref-palette-neutral100: #ffffff; + /* neutral-variant */ + --md-ref-palette-neutral-variant0: #000000; + --md-ref-palette-neutral-variant10: #1d1a22; + --md-ref-palette-neutral-variant20: #322f37; + --md-ref-palette-neutral-variant30: #49454f; + --md-ref-palette-neutral-variant40: #605d66; + --md-ref-palette-neutral-variant50: #79747e; + --md-ref-palette-neutral-variant60: #938f99; + --md-ref-palette-neutral-variant70: #aea9b4; + --md-ref-palette-neutral-variant80: #cac4d0; + --md-ref-palette-neutral-variant90: #e7e0ec; + --md-ref-palette-neutral-variant95: #f5eefa; + --md-ref-palette-neutral-variant99: #fffbfe; + --md-ref-palette-neutral-variant100: #ffffff; + /* light */ + --md-sys-color-primary-light: #6750a4; + --md-sys-color-on-primary-light: #ffffff; + --md-sys-color-primary-container-light: #eaddff; + --md-sys-color-on-primary-container-light: #21005d; + --md-sys-color-secondary-light: #625b71; + --md-sys-color-on-secondary-light: #ffffff; + --md-sys-color-secondary-container-light: #e8def8; + --md-sys-color-on-secondary-container-light: #1d192b; + --md-sys-color-tertiary-light: #7d5260; + --md-sys-color-on-tertiary-light: #ffffff; + --md-sys-color-tertiary-container-light: #ffd8e4; + --md-sys-color-on-tertiary-container-light: #31111d; + --md-sys-color-error-light: #b3261e; + --md-sys-color-on-error-light: #ffffff; + --md-sys-color-error-container-light: #f9dedc; + --md-sys-color-on-error-container-light: #410e0b; + --md-sys-color-outline-light: #79747e; + --md-sys-color-background-light: #fffbfe; + --md-sys-color-on-background-light: #1c1b1f; + --md-sys-color-surface-light: #fffbfe; + --md-sys-color-on-surface-light: #1c1b1f; + --md-sys-color-surface-variant-light: #e7e0ec; + --md-sys-color-on-surface-variant-light: #49454f; + --md-sys-color-inverse-surface-light: #313033; + --md-sys-color-inverse-on-surface-light: #f4eff4; + --md-sys-color-inverse-primary-light: #d0bcff; + --md-sys-color-shadow-light: #000000; + --md-sys-color-surface-tint-light: #6750a4; + --md-sys-color-outline-variant-light: #cac4d0; + --md-sys-color-scrim-light: #000000; + /* dark */ + --md-sys-color-primary-dark: #d0bcff; + --md-sys-color-on-primary-dark: #381e72; + --md-sys-color-primary-container-dark: #4f378b; + --md-sys-color-on-primary-container-dark: #eaddff; + --md-sys-color-secondary-dark: #ccc2dc; + --md-sys-color-on-secondary-dark: #332d41; + --md-sys-color-secondary-container-dark: #4a4458; + --md-sys-color-on-secondary-container-dark: #e8def8; + --md-sys-color-tertiary-dark: #efb8c8; + --md-sys-color-on-tertiary-dark: #492532; + --md-sys-color-tertiary-container-dark: #633b48; + --md-sys-color-on-tertiary-container-dark: #ffd8e4; + --md-sys-color-error-dark: #f2b8b5; + --md-sys-color-on-error-dark: #601410; + --md-sys-color-error-container-dark: #8c1d18; + --md-sys-color-on-error-container-dark: #f9dedc; + --md-sys-color-outline-dark: #938f99; + --md-sys-color-background-dark: #1c1b1f; + --md-sys-color-on-background-dark: #e6e1e5; + --md-sys-color-surface-dark: #1c1b1f; + --md-sys-color-on-surface-dark: #e6e1e5; + --md-sys-color-surface-variant-dark: #49454f; + --md-sys-color-on-surface-variant-dark: #cac4d0; + --md-sys-color-inverse-surface-dark: #e6e1e5; + --md-sys-color-inverse-on-surface-dark: #313033; + --md-sys-color-inverse-primary-dark: #6750a4; + --md-sys-color-shadow-dark: #000000; + --md-sys-color-surface-tint-dark: #d0bcff; + --md-sys-color-outline-variant-dark: #49454f; + --md-sys-color-scrim-dark: #000000; + /* display - large */ + --md-sys-typescale-display-large-font-family-name: Roboto; + --md-sys-typescale-display-large-font-family-style: Regular; + --md-sys-typescale-display-large-font-weight: 400px; + --md-sys-typescale-display-large-font-size: 57px; + --md-sys-typescale-display-large-line-height: 64px; + --md-sys-typescale-display-large-letter-spacing: -0.25px; + /* display - medium */ + --md-sys-typescale-display-medium-font-family-name: Roboto; + --md-sys-typescale-display-medium-font-family-style: Regular; + --md-sys-typescale-display-medium-font-weight: 400px; + --md-sys-typescale-display-medium-font-size: 45px; + --md-sys-typescale-display-medium-line-height: 52px; + --md-sys-typescale-display-medium-letter-spacing: 0px; + /* display - small */ + --md-sys-typescale-display-small-font-family-name: Roboto; + --md-sys-typescale-display-small-font-family-style: Regular; + --md-sys-typescale-display-small-font-weight: 400px; + --md-sys-typescale-display-small-font-size: 36px; + --md-sys-typescale-display-small-line-height: 44px; + --md-sys-typescale-display-small-letter-spacing: 0px; + /* headline - large */ + --md-sys-typescale-headline-large-font-family-name: Roboto; + --md-sys-typescale-headline-large-font-family-style: Regular; + --md-sys-typescale-headline-large-font-weight: 400px; + --md-sys-typescale-headline-large-font-size: 32px; + --md-sys-typescale-headline-large-line-height: 40px; + --md-sys-typescale-headline-large-letter-spacing: 0px; + /* headline - medium */ + --md-sys-typescale-headline-medium-font-family-name: Roboto; + --md-sys-typescale-headline-medium-font-family-style: Regular; + --md-sys-typescale-headline-medium-font-weight: 400px; + --md-sys-typescale-headline-medium-font-size: 28px; + --md-sys-typescale-headline-medium-line-height: 36px; + --md-sys-typescale-headline-medium-letter-spacing: 0px; + /* headline - small */ + --md-sys-typescale-headline-small-font-family-name: Roboto; + --md-sys-typescale-headline-small-font-family-style: Regular; + --md-sys-typescale-headline-small-font-weight: 400px; + --md-sys-typescale-headline-small-font-size: 24px; + --md-sys-typescale-headline-small-line-height: 32px; + --md-sys-typescale-headline-small-letter-spacing: 0px; + /* body - large */ + --md-sys-typescale-body-large-font-family-name: Roboto; + --md-sys-typescale-body-large-font-family-style: Regular; + --md-sys-typescale-body-large-font-weight: 400px; + --md-sys-typescale-body-large-font-size: 16px; + --md-sys-typescale-body-large-line-height: 24px; + --md-sys-typescale-body-large-letter-spacing: 0.5px; + /* body - medium */ + --md-sys-typescale-body-medium-font-family-name: Roboto; + --md-sys-typescale-body-medium-font-family-style: Regular; + --md-sys-typescale-body-medium-font-weight: 400px; + --md-sys-typescale-body-medium-font-size: 14px; + --md-sys-typescale-body-medium-line-height: 20px; + --md-sys-typescale-body-medium-letter-spacing: 0.25px; + /* body - small */ + --md-sys-typescale-body-small-font-family-name: Roboto; + --md-sys-typescale-body-small-font-family-style: Regular; + --md-sys-typescale-body-small-font-weight: 400px; + --md-sys-typescale-body-small-font-size: 12px; + --md-sys-typescale-body-small-line-height: 16px; + --md-sys-typescale-body-small-letter-spacing: 0.4px; + /* label - large */ + --md-sys-typescale-label-large-font-family-name: Roboto; + --md-sys-typescale-label-large-font-family-style: Medium; + --md-sys-typescale-label-large-font-weight: 500px; + --md-sys-typescale-label-large-font-size: 14px; + --md-sys-typescale-label-large-line-height: 20px; + --md-sys-typescale-label-large-letter-spacing: 0.1px; + /* label - medium */ + --md-sys-typescale-label-medium-font-family-name: Roboto; + --md-sys-typescale-label-medium-font-family-style: Medium; + --md-sys-typescale-label-medium-font-weight: 500px; + --md-sys-typescale-label-medium-font-size: 12px; + --md-sys-typescale-label-medium-line-height: 16px; + --md-sys-typescale-label-medium-letter-spacing: 0.5px; + /* label - small */ + --md-sys-typescale-label-small-font-family-name: Roboto; + --md-sys-typescale-label-small-font-family-style: Medium; + --md-sys-typescale-label-small-font-weight: 500px; + --md-sys-typescale-label-small-font-size: 11px; + --md-sys-typescale-label-small-line-height: 16px; + --md-sys-typescale-label-small-letter-spacing: 0.5px; + /* title - large */ + --md-sys-typescale-title-large-font-family-name: Roboto; + --md-sys-typescale-title-large-font-family-style: Regular; + --md-sys-typescale-title-large-font-weight: 400px; + --md-sys-typescale-title-large-font-size: 22px; + --md-sys-typescale-title-large-line-height: 28px; + --md-sys-typescale-title-large-letter-spacing: 0px; + /* title - medium */ + --md-sys-typescale-title-medium-font-family-name: Roboto; + --md-sys-typescale-title-medium-font-family-style: Medium; + --md-sys-typescale-title-medium-font-weight: 500px; + --md-sys-typescale-title-medium-font-size: 16px; + --md-sys-typescale-title-medium-line-height: 24px; + --md-sys-typescale-title-medium-letter-spacing: 0.15px; + /* title - small */ + --md-sys-typescale-title-small-font-family-name: Roboto; + --md-sys-typescale-title-small-font-family-style: Medium; + --md-sys-typescale-title-small-font-weight: 500px; + --md-sys-typescale-title-small-font-size: 14px; + --md-sys-typescale-title-small-line-height: 20px; + --md-sys-typescale-title-small-letter-spacing: 0.1px; } diff --git a/src/theme/typography.module.css b/src/theme/typography.module.css index fb06e73..8783396 100644 --- a/src/theme/typography.module.css +++ b/src/theme/typography.module.css @@ -15,166 +15,166 @@ */ .display-large { - font-family: var(--md-sys-typescale-display-large-font-family-name); - font-style: var(--md-sys-typescale-display-large-font-family-style); - font-weight: var(--md-sys-typescale-display-large-font-weight); - font-size: var(--md-sys-typescale-display-large-font-size); - letter-spacing: var(--md-sys-typescale-display-large-tracking); - line-height: var(--md-sys-typescale-display-large-height); - text-transform: var(--md-sys-typescale-display-large-text-transform); - text-decoration: var(--md-sys-typescale-display-large-text-decoration); + font-family: var(--md-sys-typescale-display-large-font-family-name); + font-style: var(--md-sys-typescale-display-large-font-family-style); + font-weight: var(--md-sys-typescale-display-large-font-weight); + font-size: var(--md-sys-typescale-display-large-font-size); + letter-spacing: var(--md-sys-typescale-display-large-tracking); + line-height: var(--md-sys-typescale-display-large-height); + text-transform: var(--md-sys-typescale-display-large-text-transform); + text-decoration: var(--md-sys-typescale-display-large-text-decoration); } .display-medium { - font-family: var(--md-sys-typescale-display-medium-font-family-name); - font-style: var(--md-sys-typescale-display-medium-font-family-style); - font-weight: var(--md-sys-typescale-display-medium-font-weight); - font-size: var(--md-sys-typescale-display-medium-font-size); - letter-spacing: var(--md-sys-typescale-display-medium-tracking); - line-height: var(--md-sys-typescale-display-medium-height); - text-transform: var(--md-sys-typescale-display-medium-text-transform); - text-decoration: var(--md-sys-typescale-display-medium-text-decoration); + font-family: var(--md-sys-typescale-display-medium-font-family-name); + font-style: var(--md-sys-typescale-display-medium-font-family-style); + font-weight: var(--md-sys-typescale-display-medium-font-weight); + font-size: var(--md-sys-typescale-display-medium-font-size); + letter-spacing: var(--md-sys-typescale-display-medium-tracking); + line-height: var(--md-sys-typescale-display-medium-height); + text-transform: var(--md-sys-typescale-display-medium-text-transform); + text-decoration: var(--md-sys-typescale-display-medium-text-decoration); } .display-small { - font-family: var(--md-sys-typescale-display-small-font-family-name); - font-style: var(--md-sys-typescale-display-small-font-family-style); - font-weight: var(--md-sys-typescale-display-small-font-weight); - font-size: var(--md-sys-typescale-display-small-font-size); - letter-spacing: var(--md-sys-typescale-display-small-tracking); - line-height: var(--md-sys-typescale-display-small-height); - text-transform: var(--md-sys-typescale-display-small-text-transform); - text-decoration: var(--md-sys-typescale-display-small-text-decoration); + font-family: var(--md-sys-typescale-display-small-font-family-name); + font-style: var(--md-sys-typescale-display-small-font-family-style); + font-weight: var(--md-sys-typescale-display-small-font-weight); + font-size: var(--md-sys-typescale-display-small-font-size); + letter-spacing: var(--md-sys-typescale-display-small-tracking); + line-height: var(--md-sys-typescale-display-small-height); + text-transform: var(--md-sys-typescale-display-small-text-transform); + text-decoration: var(--md-sys-typescale-display-small-text-decoration); } .headline-large { - font-family: var(--md-sys-typescale-headline-large-font-family-name); - font-style: var(--md-sys-typescale-headline-large-font-family-style); - font-weight: var(--md-sys-typescale-headline-large-font-weight); - font-size: var(--md-sys-typescale-headline-large-font-size); - letter-spacing: var(--md-sys-typescale-headline-large-tracking); - line-height: var(--md-sys-typescale-headline-large-height); - text-transform: var(--md-sys-typescale-headline-large-text-transform); - text-decoration: var(--md-sys-typescale-headline-large-text-decoration); + font-family: var(--md-sys-typescale-headline-large-font-family-name); + font-style: var(--md-sys-typescale-headline-large-font-family-style); + font-weight: var(--md-sys-typescale-headline-large-font-weight); + font-size: var(--md-sys-typescale-headline-large-font-size); + letter-spacing: var(--md-sys-typescale-headline-large-tracking); + line-height: var(--md-sys-typescale-headline-large-height); + text-transform: var(--md-sys-typescale-headline-large-text-transform); + text-decoration: var(--md-sys-typescale-headline-large-text-decoration); } .headline-medium { - font-family: var(--md-sys-typescale-headline-medium-font-family-name); - font-style: var(--md-sys-typescale-headline-medium-font-family-style); - font-weight: var(--md-sys-typescale-headline-medium-font-weight); - font-size: var(--md-sys-typescale-headline-medium-font-size); - letter-spacing: var(--md-sys-typescale-headline-medium-tracking); - line-height: var(--md-sys-typescale-headline-medium-height); - text-transform: var(--md-sys-typescale-headline-medium-text-transform); - text-decoration: var(--md-sys-typescale-headline-medium-text-decoration); + font-family: var(--md-sys-typescale-headline-medium-font-family-name); + font-style: var(--md-sys-typescale-headline-medium-font-family-style); + font-weight: var(--md-sys-typescale-headline-medium-font-weight); + font-size: var(--md-sys-typescale-headline-medium-font-size); + letter-spacing: var(--md-sys-typescale-headline-medium-tracking); + line-height: var(--md-sys-typescale-headline-medium-height); + text-transform: var(--md-sys-typescale-headline-medium-text-transform); + text-decoration: var(--md-sys-typescale-headline-medium-text-decoration); } .headline-small { - font-family: var(--md-sys-typescale-headline-small-font-family-name); - font-style: var(--md-sys-typescale-headline-small-font-family-style); - font-weight: var(--md-sys-typescale-headline-small-font-weight); - font-size: var(--md-sys-typescale-headline-small-font-size); - letter-spacing: var(--md-sys-typescale-headline-small-tracking); - line-height: var(--md-sys-typescale-headline-small-height); - text-transform: var(--md-sys-typescale-headline-small-text-transform); - text-decoration: var(--md-sys-typescale-headline-small-text-decoration); + font-family: var(--md-sys-typescale-headline-small-font-family-name); + font-style: var(--md-sys-typescale-headline-small-font-family-style); + font-weight: var(--md-sys-typescale-headline-small-font-weight); + font-size: var(--md-sys-typescale-headline-small-font-size); + letter-spacing: var(--md-sys-typescale-headline-small-tracking); + line-height: var(--md-sys-typescale-headline-small-height); + text-transform: var(--md-sys-typescale-headline-small-text-transform); + text-decoration: var(--md-sys-typescale-headline-small-text-decoration); } .body-large { - font-family: var(--md-sys-typescale-body-large-font-family-name); - font-style: var(--md-sys-typescale-body-large-font-family-style); - font-weight: var(--md-sys-typescale-body-large-font-weight); - font-size: var(--md-sys-typescale-body-large-font-size); - letter-spacing: var(--md-sys-typescale-body-large-tracking); - line-height: var(--md-sys-typescale-body-large-height); - text-transform: var(--md-sys-typescale-body-large-text-transform); - text-decoration: var(--md-sys-typescale-body-large-text-decoration); + font-family: var(--md-sys-typescale-body-large-font-family-name); + font-style: var(--md-sys-typescale-body-large-font-family-style); + font-weight: var(--md-sys-typescale-body-large-font-weight); + font-size: var(--md-sys-typescale-body-large-font-size); + letter-spacing: var(--md-sys-typescale-body-large-tracking); + line-height: var(--md-sys-typescale-body-large-height); + text-transform: var(--md-sys-typescale-body-large-text-transform); + text-decoration: var(--md-sys-typescale-body-large-text-decoration); } .body-medium { - font-family: var(--md-sys-typescale-body-medium-font-family-name); - font-style: var(--md-sys-typescale-body-medium-font-family-style); - font-weight: var(--md-sys-typescale-body-medium-font-weight); - font-size: var(--md-sys-typescale-body-medium-font-size); - letter-spacing: var(--md-sys-typescale-body-medium-tracking); - line-height: var(--md-sys-typescale-body-medium-height); - text-transform: var(--md-sys-typescale-body-medium-text-transform); - text-decoration: var(--md-sys-typescale-body-medium-text-decoration); + font-family: var(--md-sys-typescale-body-medium-font-family-name); + font-style: var(--md-sys-typescale-body-medium-font-family-style); + font-weight: var(--md-sys-typescale-body-medium-font-weight); + font-size: var(--md-sys-typescale-body-medium-font-size); + letter-spacing: var(--md-sys-typescale-body-medium-tracking); + line-height: var(--md-sys-typescale-body-medium-height); + text-transform: var(--md-sys-typescale-body-medium-text-transform); + text-decoration: var(--md-sys-typescale-body-medium-text-decoration); } .body-small { - font-family: var(--md-sys-typescale-body-small-font-family-name); - font-style: var(--md-sys-typescale-body-small-font-family-style); - font-weight: var(--md-sys-typescale-body-small-font-weight); - font-size: var(--md-sys-typescale-body-small-font-size); - letter-spacing: var(--md-sys-typescale-body-small-tracking); - line-height: var(--md-sys-typescale-body-small-height); - text-transform: var(--md-sys-typescale-body-small-text-transform); - text-decoration: var(--md-sys-typescale-body-small-text-decoration); + font-family: var(--md-sys-typescale-body-small-font-family-name); + font-style: var(--md-sys-typescale-body-small-font-family-style); + font-weight: var(--md-sys-typescale-body-small-font-weight); + font-size: var(--md-sys-typescale-body-small-font-size); + letter-spacing: var(--md-sys-typescale-body-small-tracking); + line-height: var(--md-sys-typescale-body-small-height); + text-transform: var(--md-sys-typescale-body-small-text-transform); + text-decoration: var(--md-sys-typescale-body-small-text-decoration); } .label-large { - font-family: var(--md-sys-typescale-label-large-font-family-name); - font-style: var(--md-sys-typescale-label-large-font-family-style); - font-weight: var(--md-sys-typescale-label-large-font-weight); - font-size: var(--md-sys-typescale-label-large-font-size); - letter-spacing: var(--md-sys-typescale-label-large-tracking); - line-height: var(--md-sys-typescale-label-large-height); - text-transform: var(--md-sys-typescale-label-large-text-transform); - text-decoration: var(--md-sys-typescale-label-large-text-decoration); + font-family: var(--md-sys-typescale-label-large-font-family-name); + font-style: var(--md-sys-typescale-label-large-font-family-style); + font-weight: var(--md-sys-typescale-label-large-font-weight); + font-size: var(--md-sys-typescale-label-large-font-size); + letter-spacing: var(--md-sys-typescale-label-large-tracking); + line-height: var(--md-sys-typescale-label-large-height); + text-transform: var(--md-sys-typescale-label-large-text-transform); + text-decoration: var(--md-sys-typescale-label-large-text-decoration); } .label-medium { - font-family: var(--md-sys-typescale-label-medium-font-family-name); - font-style: var(--md-sys-typescale-label-medium-font-family-style); - font-weight: var(--md-sys-typescale-label-medium-font-weight); - font-size: var(--md-sys-typescale-label-medium-font-size); - letter-spacing: var(--md-sys-typescale-label-medium-tracking); - line-height: var(--md-sys-typescale-label-medium-height); - text-transform: var(--md-sys-typescale-label-medium-text-transform); - text-decoration: var(--md-sys-typescale-label-medium-text-decoration); + font-family: var(--md-sys-typescale-label-medium-font-family-name); + font-style: var(--md-sys-typescale-label-medium-font-family-style); + font-weight: var(--md-sys-typescale-label-medium-font-weight); + font-size: var(--md-sys-typescale-label-medium-font-size); + letter-spacing: var(--md-sys-typescale-label-medium-tracking); + line-height: var(--md-sys-typescale-label-medium-height); + text-transform: var(--md-sys-typescale-label-medium-text-transform); + text-decoration: var(--md-sys-typescale-label-medium-text-decoration); } .label-small { - font-family: var(--md-sys-typescale-label-small-font-family-name); - font-style: var(--md-sys-typescale-label-small-font-family-style); - font-weight: var(--md-sys-typescale-label-small-font-weight); - font-size: var(--md-sys-typescale-label-small-font-size); - letter-spacing: var(--md-sys-typescale-label-small-tracking); - line-height: var(--md-sys-typescale-label-small-height); - text-transform: var(--md-sys-typescale-label-small-text-transform); - text-decoration: var(--md-sys-typescale-label-small-text-decoration); + font-family: var(--md-sys-typescale-label-small-font-family-name); + font-style: var(--md-sys-typescale-label-small-font-family-style); + font-weight: var(--md-sys-typescale-label-small-font-weight); + font-size: var(--md-sys-typescale-label-small-font-size); + letter-spacing: var(--md-sys-typescale-label-small-tracking); + line-height: var(--md-sys-typescale-label-small-height); + text-transform: var(--md-sys-typescale-label-small-text-transform); + text-decoration: var(--md-sys-typescale-label-small-text-decoration); } .title-large { - font-family: var(--md-sys-typescale-title-large-font-family-name); - font-style: var(--md-sys-typescale-title-large-font-family-style); - font-weight: var(--md-sys-typescale-title-large-font-weight); - font-size: var(--md-sys-typescale-title-large-font-size); - letter-spacing: var(--md-sys-typescale-title-large-tracking); - line-height: var(--md-sys-typescale-title-large-height); - text-transform: var(--md-sys-typescale-title-large-text-transform); - text-decoration: var(--md-sys-typescale-title-large-text-decoration); + font-family: var(--md-sys-typescale-title-large-font-family-name); + font-style: var(--md-sys-typescale-title-large-font-family-style); + font-weight: var(--md-sys-typescale-title-large-font-weight); + font-size: var(--md-sys-typescale-title-large-font-size); + letter-spacing: var(--md-sys-typescale-title-large-tracking); + line-height: var(--md-sys-typescale-title-large-height); + text-transform: var(--md-sys-typescale-title-large-text-transform); + text-decoration: var(--md-sys-typescale-title-large-text-decoration); } .title-medium { - font-family: var(--md-sys-typescale-title-medium-font-family-name); - font-style: var(--md-sys-typescale-title-medium-font-family-style); - font-weight: var(--md-sys-typescale-title-medium-font-weight); - font-size: var(--md-sys-typescale-title-medium-font-size); - letter-spacing: var(--md-sys-typescale-title-medium-tracking); - line-height: var(--md-sys-typescale-title-medium-height); - text-transform: var(--md-sys-typescale-title-medium-text-transform); - text-decoration: var(--md-sys-typescale-title-medium-text-decoration); + font-family: var(--md-sys-typescale-title-medium-font-family-name); + font-style: var(--md-sys-typescale-title-medium-font-family-style); + font-weight: var(--md-sys-typescale-title-medium-font-weight); + font-size: var(--md-sys-typescale-title-medium-font-size); + letter-spacing: var(--md-sys-typescale-title-medium-tracking); + line-height: var(--md-sys-typescale-title-medium-height); + text-transform: var(--md-sys-typescale-title-medium-text-transform); + text-decoration: var(--md-sys-typescale-title-medium-text-decoration); } .title-small { - font-family: var(--md-sys-typescale-title-small-font-family-name); - font-style: var(--md-sys-typescale-title-small-font-family-style); - font-weight: var(--md-sys-typescale-title-small-font-weight); - font-size: var(--md-sys-typescale-title-small-font-size); - letter-spacing: var(--md-sys-typescale-title-small-tracking); - line-height: var(--md-sys-typescale-title-small-height); - text-transform: var(--md-sys-typescale-title-small-text-transform); - text-decoration: var(--md-sys-typescale-title-small-text-decoration); + font-family: var(--md-sys-typescale-title-small-font-family-name); + font-style: var(--md-sys-typescale-title-small-font-family-style); + font-weight: var(--md-sys-typescale-title-small-font-weight); + font-size: var(--md-sys-typescale-title-small-font-size); + letter-spacing: var(--md-sys-typescale-title-small-tracking); + line-height: var(--md-sys-typescale-title-small-height); + text-transform: var(--md-sys-typescale-title-small-text-transform); + text-decoration: var(--md-sys-typescale-title-small-text-decoration); } diff --git a/svelte.config.js b/svelte.config.js index 58132ce..2102c6b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -15,26 +15,26 @@ */ import adapter from '@sveltejs/adapter-node'; -import { vitePreprocess } from '@sveltejs/kit/vite'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; import * as child_process from 'node:child_process'; /** @type {import('@sveltejs/kit').Config} */ const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors - preprocess: vitePreprocess(), - - kit: { - // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. - // If your environment is not supported or you settled on a specific environment, switch out the adapter. - // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter(), - - // https://kit.svelte.dev/docs/configuration#version - version: { - name: child_process.execSync('git rev-parse HEAD').toString().trim(), - }, - }, + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter(), + + // https://kit.svelte.dev/docs/configuration#version + version: { + name: child_process.execSync('git rev-parse HEAD').toString().trim(), + }, + }, }; export default config; diff --git a/tailwind.config.js b/tailwind.config.js index c4deb88..0d3285e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -16,9 +16,9 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.{html,js,svelte,ts}'], - theme: { - extend: {}, - }, - plugins: [], + content: ['./src/**/*.{html,js,svelte,ts}'], + theme: { + extend: {}, + }, + plugins: [], }; diff --git a/tests/test.ts b/tests/test.ts index c7e5529..3439de3 100644 --- a/tests/test.ts +++ b/tests/test.ts @@ -14,9 +14,8 @@ limitations under the License. */ -import { expect, test } from '@playwright/test'; +import { test } from '@playwright/test'; -test('about page has expected h1', async ({ page }) => { - await page.goto('/about'); - await expect(page.getByRole('heading', { name: 'About this app' })).toBeVisible(); +test('root page exists', async ({ page }) => { + await page.goto('/'); }); diff --git a/tsconfig.json b/tsconfig.json index 14b0202..544cab6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,18 @@ { - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "types": ["google.visualization"] - } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "types": ["google.visualization"], + }, + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in } diff --git a/vite.config.ts b/vite.config.ts index b97d4ae..dc46d42 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -18,8 +18,8 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vitest/config'; export default defineConfig({ - plugins: [sveltekit()], - test: { - include: ['src/**/*.{test,spec}.{js,ts}'], - }, + plugins: [sveltekit()], + test: { + include: ['src/**/*.{test,spec}.{js,ts}'], + }, }); diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 0000000..9f5d901 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,23 @@ +/* + Copyright 2024 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +export default { + test: { + deps: { + inline: ['proj4'], + }, + }, +};