From adc8681c8e8e0b48d3413667a524ccaf955a0636 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 11:48:42 +0545 Subject: [PATCH 01/52] feat(astro): scaffold app Astro 5 static scaffold: i18n routing (6 locales), react + sitemap integrations, redirect stubs, SVG icon sprite, base styles. --- astro/.gitignore | 18 + astro/astro.config.mjs | 64 + astro/package-lock.json | 6902 +++++++++++++++++++++++++++++ astro/package.json | 34 + astro/public/en/about.html | 10 + astro/public/en/data.html | 10 + astro/public/en/get-involved.html | 10 + astro/public/icons.svg | 26 + astro/public/img | 1 + astro/src/styles/global.css | 454 ++ astro/tsconfig.json | 9 + 11 files changed, 7538 insertions(+) create mode 100644 astro/.gitignore create mode 100644 astro/astro.config.mjs create mode 100644 astro/package-lock.json create mode 100644 astro/package.json create mode 100644 astro/public/en/about.html create mode 100644 astro/public/en/data.html create mode 100644 astro/public/en/get-involved.html create mode 100644 astro/public/icons.svg create mode 120000 astro/public/img create mode 100644 astro/src/styles/global.css create mode 100644 astro/tsconfig.json diff --git a/astro/.gitignore b/astro/.gitignore new file mode 100644 index 00000000..e0968e73 --- /dev/null +++ b/astro/.gitignore @@ -0,0 +1,18 @@ +# build output +dist/ +.astro/ + +# deps +node_modules/ + +# generated optimized images (emitted into dist/ at build time) +public/_img/ + +# persistent build-time image optimization cache. +# In CI, restore/save this dir as a build cache so warm builds reuse the +# webp encodes instead of refetching + re-encoding every remote image. +.image-cache/ + +# scratch build logs / measurements +build*.log +measure_*.txt diff --git a/astro/astro.config.mjs b/astro/astro.config.mjs new file mode 100644 index 00000000..79552653 --- /dev/null +++ b/astro/astro.config.mjs @@ -0,0 +1,64 @@ +import { defineConfig } from 'astro/config'; +import react from '@astrojs/react'; +import sitemap from '@astrojs/sitemap'; +import remarkGfm from 'remark-gfm'; +// Deduplicates the byte-identical inline island-hydration runtimes (~3.9 KB on +// each of ~14.6k pages, ~56 MB total) into one external cached +// /_astro/hydration..js at build:done. Registered LAST so it post-processes +// the final HTML after the other build:done hooks. +import hydrationDedup from './src/lib/hydrationDedupIntegration.ts'; + +const SITE = 'https://mapswipe.org'; + +// Faithful vertical slice of the Next Pages-Router app's projects/[id] page. +export default defineConfig({ + site: SITE, + output: 'static', + trailingSlash: 'always', + build: { format: 'directory' }, + // Root/locale-less redirect stubs (parity with the Next app's src/pages/*.tsx + // Redirect stubs). Next did client-side language detection; for a static + // export we redirect the locale-less path to the default-locale (en) variant. + // Emitted as meta-refresh HTML pages in dist. `/` is handled by + // src/pages/index.astro. + redirects: { + '/blogs': '/en/blogs/', + '/data': '/en/data/', + '/get-involved': '/en/get-involved/', + '/privacy': '/en/privacy/', + '/projects': '/en/projects/', + }, + integrations: [ + react(), + // Emit a sitemap with per-locale alternate links (hreflang). The i18n option + // groups the 6 locale-prefixed variants of each page and cross-links them, + // matching the hreflang alternates we emit in . + sitemap({ + i18n: { + defaultLocale: 'en', + locales: { en: 'en', ne: 'ne', hu: 'hu', de: 'de', cs: 'cs', pt: 'pt' }, + }, + }), + hydrationDedup(), + ], + // Blog markdown is rendered by Astro's built-in pipeline. Next used remark-gfm + // (see the removed remark().use(remarkGfm) in the Pages-Router detail page), so + // we enable it here for GFM parity (tables, strikethrough, autolinks, etc.). + // In-body relative images (./images/*) are optimized natively by astro:assets. + markdown: { + remarkPlugins: [remarkGfm], + }, + i18n: { + defaultLocale: 'en', + locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], + routing: { prefixDefaultLocale: true }, + }, + // NOTE: Remote project cover images are optimized by our own build-time, + // fail-soft resolver (src/lib/optimizeImage.ts + components/RemoteImage.astro), + // NOT by Astro's astro:assets pipeline — its optimize phase is all-or-nothing + // and one malformed remote image aborts the whole build. LOCAL blog images + // (blogs/images/*, a small trusted set) DO go through astro:assets (default + // sharp service): covers via the image() schema helper + , in-body + // relative markdown images natively. We don't declare remotePatterns, so + // astro:assets never touches a remote URL. +}); diff --git a/astro/package-lock.json b/astro/package-lock.json new file mode 100644 index 00000000..ae209697 --- /dev/null +++ b/astro/package-lock.json @@ -0,0 +1,6902 @@ +{ + "name": "mapswipe-astro", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mapswipe-astro", + "version": "0.0.1", + "dependencies": { + "@astrojs/react": "^4.2.0", + "@astrojs/sitemap": "^3.2.1", + "@fontsource/dm-sans": "^5.2.8", + "@fontsource/lato": "^5.2.7", + "astro": "^5.7.0", + "i18next": "^24.2.0", + "leaflet": "^1.9.4", + "papaparse": "^5.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-leaflet": "^4.2.1", + "sharp": "^0.33.5" + }, + "devDependencies": { + "@types/leaflet": "^1.9.12", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "typescript": "^5.7.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz", + "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz", + "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/react": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.4.2.tgz", + "integrity": "sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==", + "license": "MIT", + "dependencies": { + "@vitejs/plugin-react": "^4.7.0", + "ultrahtml": "^1.6.0", + "vite": "^6.4.1" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", + "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", + "react": "^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.3.tgz", + "integrity": "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fontsource/dm-sans": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/dm-sans/-/dm-sans-5.2.8.tgz", + "integrity": "sha512-tlovG42m9ESG28WiHpLq3F5umAlm64rv0RkqTbYowRn70e9OlRr5a3yTJhrhrY+k5lftR/OFJjPzOLQzk8EfCA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/lato": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/lato/-/lato-5.2.7.tgz", + "integrity": "sha512-k5mum1ADbDW5cTw1Ett1eQVWeoZ6gq0ct6SFBibEhB4LRxhniChJZTBgd6ph5yBxLkN1fcnsnmicBNA4S/3nbw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/leaflet": { + "version": "1.9.21", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.21.tgz", + "integrity": "sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz", + "integrity": "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/papaparse": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.5.2.tgz", + "integrity": "sha512-gFnFp/JMzLHCwRf7tQHrNnfhN4eYBVYYI897CGX4MY1tzY9l2aLkVyx2IlKZ/SAqDbB3I1AOZW5gTMGGsqWliA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/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==", + "license": "MIT" + }, + "node_modules/ansi-align/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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astro": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.2.tgz", + "integrity": "sha512-TnFwLnAXty5MXKPDGuKXqK4AMBXG+FH6RUdK7Oyc3gyfNoFIthT+4eRbzOK43bdRlLaZuxgciDSjgtggZ3OtGQ==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/markdown-remark": "6.3.11", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.27.3", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/astro/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/astro/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/astro/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/astro/node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/browserslist": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.388", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.388.tgz", + "integrity": "sha512-Pl/aJaqOOxYxda3vcx1IKSJimwYXHDkEnGn0F+kG2EE68dDtx2uCinaS+Vih8Z91B9t8CSAbiF/HKyWcnXjhzw==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "24.2.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.3.tgz", + "integrity": "sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.10" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.50", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz", + "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.7.0.tgz", + "integrity": "sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==", + "license": "MIT" + }, + "node_modules/papaparse": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.4.tgz", + "integrity": "sha512-SwzWD9gl/ElwYLCI0nUja1mFJzjq2D8ziShfNBa7zCHzkOozeOGDwHWQ+tvCzEZcewecWZ5U7kUopDnG+DFYEQ==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^2.1.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/sitemap/node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "deprecated": "unmaintained", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/astro/package.json b/astro/package.json new file mode 100644 index 00000000..2663709e --- /dev/null +++ b/astro/package.json @@ -0,0 +1,34 @@ +{ + "name": "mapswipe-astro", + "type": "module", + "private": true, + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "build": "node scripts/prefetch-images.mjs && astro build", + "prefetch": "node scripts/prefetch-images.mjs", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/react": "^4.2.0", + "@astrojs/sitemap": "^3.2.1", + "@fontsource/dm-sans": "^5.2.8", + "@fontsource/lato": "^5.2.7", + "astro": "^5.7.0", + "i18next": "^24.2.0", + "leaflet": "^1.9.4", + "papaparse": "^5.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-leaflet": "^4.2.1", + "sharp": "^0.33.5" + }, + "devDependencies": { + "@types/leaflet": "^1.9.12", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "typescript": "^5.7.0" + } +} diff --git a/astro/public/en/about.html b/astro/public/en/about.html new file mode 100644 index 00000000..96d04b19 --- /dev/null +++ b/astro/public/en/about.html @@ -0,0 +1,10 @@ + + + + + + +

This page has been moved.

+

If you are not redirected within 3 seconds, click here to go to the appropriate page.

+ + diff --git a/astro/public/en/data.html b/astro/public/en/data.html new file mode 100644 index 00000000..20b684a9 --- /dev/null +++ b/astro/public/en/data.html @@ -0,0 +1,10 @@ + + + + + + +

This page has been moved.

+

If you are not redirected within 3 seconds, click here to go to the data page.

+ + diff --git a/astro/public/en/get-involved.html b/astro/public/en/get-involved.html new file mode 100644 index 00000000..74806197 --- /dev/null +++ b/astro/public/en/get-involved.html @@ -0,0 +1,10 @@ + + + + + + +

This page has been moved.

+

If you are not redirected within 3 seconds, click here to go to the get involved page.

+ + diff --git a/astro/public/icons.svg b/astro/public/icons.svg new file mode 100644 index 00000000..b9b695c6 --- /dev/null +++ b/astro/public/icons.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astro/public/img b/astro/public/img new file mode 120000 index 00000000..4ed3b205 --- /dev/null +++ b/astro/public/img @@ -0,0 +1 @@ +../../public/img \ No newline at end of file diff --git a/astro/src/styles/global.css b/astro/src/styles/global.css new file mode 100644 index 00000000..122a84b6 --- /dev/null +++ b/astro/src/styles/global.css @@ -0,0 +1,454 @@ +/* Design tokens ported from the Next app's src/styles/variables.css (verbatim), + plus the two font-family vars that Next injected at runtime from next/font + (Lato body, DM Sans headings). Fonts are provided via @fontsource (see + BaseLayout.astro), so the family names are literal here. */ +:root { + --font-family-lato: 'Lato', sans-serif; + --font-family-dm-sans: 'DM Sans', sans-serif; + + --multiplier: 1.2599; /* Major third scale */ + + --font-size-base: 1.2rem; + --spacing-base: 1.125rem; + + --color-text: #5B5B5B; + --color-link: #0060C9; + --color-heading: #000000; + --color-heading-on-dark: #ffffff; + --color-text-on-dark: rgba(255, 255, 255, 1); + --color-text-on-dark-light: rgba(255, 255, 255, 0.8); + --color-brand: #0F193F; + --color-text-brand: var(--color-brand); + --color-accent: rgba(170, 190, 93, 1); + --color-accent-dark: #8a9b49; + --color-accent-light: rgba(170, 190, 93, 0.48); + --color-complement: #fff6ef; + --color-brand-dark: #020e3b; + --color-foreground: #ffffff; + + --color-finished: #AABE5D; + --color-active: #f59143; + --color-border-light: #d0d0d0; + --color-border: #000; + --color-background-bar: #60667d; + --color-background: var(--color-brand); + --color-background-brand-light: #f6f8ff; + --color-background-accent-light: #f5f5f5; + --color-background-leaflet: #d4dadc; + --color-separator: rgba(0, 0, 0, 0.1); + + --width-page-max: 80rem; + --width-heading-max: 50rem; + --width-separator-thin: 1pt; + + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 400; + --font-weight-semi-bold: 500; + --font-weight-bold: 600; + + --border-radius-small: 0.2rem; + --border-radius-medium: 0.5rem; + --border-radius-large: 1rem; + + --box-shadow-medium: 0 2pt 10pt -4pt rgba(0, 0, 0, 0.3); + + --font-size-super-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); + --font-size-extra-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier))); + --font-size-small: calc(var(--font-size-base) / var(--multiplier)); + --font-size-medium: var(--font-size-base); + --font-size-large: calc(var(--font-size-base) * var(--multiplier)); + --font-size-extra-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier)); + --font-size-super-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --font-size-mega-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --font-size-gigantic: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + + --spacing-tiny: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-ultra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-super-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-extra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier))); + --spacing-small: calc(var(--spacing-base) / var(--multiplier)); + --spacing-medium: var(--spacing-base); + --spacing-large: calc(var(--spacing-base) * var(--multiplier)); + --spacing-extra-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier)); + --spacing-super-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-mega-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-gigantic: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-enourmous: calc(var(--spacing-gigantic) * var(--multiplier)); + + /* Kept for backward-compat with the already-ported project/data/blog pages, + whose pragmatic classes below reference --color-primary. */ + --color-primary: #0d1136; +} + +/* Base element styles ported from Next's src/styles/globals.css. */ +* { box-sizing: border-box; line-height: 1.5; } +html { margin: 0; padding: 0; } +body { + margin: 0; + padding: 0; + min-height: 100vh; + color: var(--color-text); + font-family: var(--font-family-lato); + font-weight: var(--font-weight-medium); + font-size: 100%; +} +a { text-decoration: none; color: inherit; } +p { margin: 0; } +h1, h2, h3, h4, h5, h6 { margin: 0; font-family: var(--font-family-dm-sans); } + +/* --------------------------------------------------------------------------- + Pragmatic classes for the already-ported project / data / blog pages. + Kept intact (only re-scoped color var) so those pages don't regress. + New pages (home / get-involved / privacy / 404) use faithfully-ported, + component-scoped styles instead (see below + per-page diff --git a/astro/src/pages/[locale]/blogs/[slug]/index.astro b/astro/src/pages/[locale]/blogs/[slug]/index.astro new file mode 100644 index 00000000..ca7156e2 --- /dev/null +++ b/astro/src/pages/[locale]/blogs/[slug]/index.astro @@ -0,0 +1,64 @@ +--- +import type { GetStaticPaths } from 'astro'; +import { getCollection, render } from 'astro:content'; +import { Image } from 'astro:assets'; +import BlogLayout from '../../../../layouts/BlogLayout.astro'; +import { getT, LOCALES } from '../../../../i18n'; + +// Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing +// //blogs// with exact URL parity to Next (slug == entry.id == +// path.parse(filename).name). Markdown body is rendered by Astro's pipeline +// (remark-gfm enabled in astro.config.mjs); in-body relative images +// (./images/*) are optimized natively by astro:assets. +export const getStaticPaths = (async () => { + const entries = await getCollection('blogs'); + return entries.flatMap((entry) => + LOCALES.map((locale) => ({ + params: { locale, slug: entry.id }, + props: { entry }, + })), + ); +}) satisfies GetStaticPaths; + +const { locale } = Astro.params; +const { entry } = Astro.props; +const t = await getT(locale!, 'blog'); + +const { title, publishedDate, author, coverImage, description } = entry.data; +const blogTitle = title ?? entry.id; + +// Render the collection entry's markdown body to HTML (replaces Next's +// remark().use(remark-html).use(remark-gfm)). remark-gfm is applied via the +// project markdown config. +const { Content } = await render(entry); + +// {{date, datetime}} parity: Intl.DateTimeFormat(lng), default options. +const dateFmt = new Intl.DateTimeFormat(locale!); + +const tabTitle = String(t('blog-tab-head', { blogTitle })); +--- + +
+
+

{blogTitle}

+
+ {publishedDate && {dateFmt.format(publishedDate)}} + {author && {author}} +
+
+ {coverImage && ( + {blogTitle} + )} +
+ +
+
+ +
+
+
diff --git a/astro/src/pages/[locale]/blogs/index.astro b/astro/src/pages/[locale]/blogs/index.astro new file mode 100644 index 00000000..9dce49c5 --- /dev/null +++ b/astro/src/pages/[locale]/blogs/index.astro @@ -0,0 +1,87 @@ +--- +import type { GetStaticPaths } from 'astro'; +import { getCollection } from 'astro:content'; +import { Image } from 'astro:assets'; +import BlogLayout from '../../../layouts/BlogLayout.astro'; +import { getT, LOCALES } from '../../../i18n'; + +// Blog LIST page. One variant per locale (blog content is single-language +// English markdown; only the chrome is translated), producing //blogs/ +// with exact URL parity to the Next Pages-Router page. +export const getStaticPaths = (async () => + LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + +const { locale } = Astro.params; +const t = await getT(locale!, 'blogs'); + +// Load the collection and sort DESC by publishedDate, matching Next's +// compareDate(foo, bar, -1). Undated entries sort last (getTime NaN -> 0 floor). +const entries = await getCollection('blogs'); +const blogs = entries + .map((entry) => ({ + slug: entry.id, // == Next's path.parse(filename).name + title: entry.data.title ?? entry.id, + publishedDate: entry.data.publishedDate, + description: entry.data.description, + coverImage: entry.data.coverImage, + featured: entry.data.featured, + })) + .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)); + +const featuredBlogs = blogs.filter((b) => b.featured); +const otherBlogs = blogs.filter((b) => !b.featured); + +// i18next's {{date, datetime}} formatter renders via Intl.DateTimeFormat(lng) +// with default options. Reproduce that exactly, per-locale. +const dateFmt = new Intl.DateTimeFormat(locale!); +const fmtDate = (d?: Date) => (d ? dateFmt.format(d) : ''); + +const title = String(t('blogs-tab-head')); +--- + +
+

{t('blogs-hero-title')}

+
+ + {featuredBlogs.length > 0 && ( +
+

{t('featured-posts')}

+
+ {featuredBlogs.map((blog) => ( +
+ {blog.coverImage && ( + {blog.title} + )} +
+

{blog.title}

+ {blog.publishedDate && {fmtDate(blog.publishedDate)}} +
{blog.description}
+ {t('read-more')} +
+
+ ))} +
+
+ )} + + {otherBlogs.length > 0 && ( +
+

{t('other-posts')}

+
+ {otherBlogs.map((blog) => ( +
+ {blog.coverImage && ( + {blog.title} + )} +
+

{blog.title}

+ {blog.publishedDate && {fmtDate(blog.publishedDate)}} +
{blog.description}
+ {t('read-more')} +
+
+ ))} +
+
+ )} +
diff --git a/astro/src/pages/[locale]/data/index.astro b/astro/src/pages/[locale]/data/index.astro new file mode 100644 index 00000000..8189948b --- /dev/null +++ b/astro/src/pages/[locale]/data/index.astro @@ -0,0 +1,188 @@ +--- +import type { GetStaticPaths } from 'astro'; +import BaseLayout from '../../../layouts/BaseLayout.astro'; +import DataExplorer, { PAGE_SIZE } from '../../../components/DataExplorer.tsx'; +import { getDataExplorerPayload } from '../../../lib/dataExplorer'; +import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/optimizeImage'; +import { getDict, getT, LOCALES } from '../../../i18n'; +import '../../../styles/global.css'; + +// One static page per locale: //data/ (parity with the Next Pages-Router +// route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory +// format => dist//data/index.html. +export const getStaticPaths = (async () => + LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + +const { locale } = Astro.params; + +// Locale-independent slimmed payload (built once per page — cheap). +const payload = getDataExplorerPayload(); + +// The bulky, locale-independent dataset ({miniProjects, organizations, +// imageMap}) ships ONCE as /data-explorer.json — a static file endpoint (see +// src/pages/data-explorer.json.ts) — instead of being inlined into each +// locale's HTML. The island fetches it on mount. +const DATA_EXPLORER_JSON_URL = '/data-explorer.json'; + +// Initial slice: the first page of projects is SSR'd for SEO/no-blank-page; +// the island fetches the full dataset on mount. Resolve just these cards' +// covers through the build-time fail-soft optimizer (prefetch warmed these +// exact firebase URLs at COVER_WIDTH — pure cache hits). +const initialProjects = payload.projects.slice(0, PAGE_SIZE); +const initialImageMap: Record = Object.fromEntries( + await Promise.all( + initialProjects + .map((p) => p.image?.file?.url) + .filter((url): url is string => Boolean(url)) + .map(async (url) => { + const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); + return [url, src] as const; + }), + ), +); + +// Resolve the `data` namespace for THIS locale into a plain {key:string} dict +// and hand it to the island as a prop. Keeps the i18next runtime out of the +// island bundle. Raw templates (interpolation intact) so the island does its +// own tiny interpolation for the few dynamic keys. +const dict = await getDict(locale!, 'data'); +const t = await getT(locale!, 'data'); + +const title = String(t('data-tab-head')); + +// Static type-explainer cards (mirrors the Next page's type-section). +const typeCards = [ + { key: 'find', title: t('type-find-title'), points: [t('type-find-key-point-1'), t('type-find-key-point-2'), t('type-find-key-point-3')] }, + { key: 'compare', title: t('type-compare-title'), points: [t('type-compare-key-point-1'), t('type-compare-key-point-2'), t('type-compare-key-point-3')] }, + { key: 'validate', title: t('type-validate-title'), points: [t('type-validate-key-point-1'), t('type-validate-key-point-2'), t('type-validate-key-point-3')] }, + { key: 'completeness', title: t('type-completeness-title'), points: [t('type-completeness-key-point-1'), t('type-completeness-key-point-2'), t('type-completeness-key-point-3')] }, + { key: 'validate_image', title: t('type-validate-image-title'), points: [t('type-validate-image-key-point-1'), t('type-validate-image-key-point-2'), t('type-validate-image-key-point-3')] }, + { key: 'street', title: t('type-streets-view-title'), points: [t('type-street-key-point-1'), t('type-street-key-point-2'), t('type-street-key-point-3')] }, + { key: 'locate', title: t('type-locate-title'), points: [t('type-locate-key-point-1'), t('type-locate-key-point-2'), t('type-locate-key-point-3')] }, +]; +--- + + +
+
+

{t('data-page-heading')}

+

{t('data-page-description')}

+
+
+ + +
+

{t('type-section-heading')}

+

{t('type-section-description')}

+
+ {typeCards.map((card) => ( +
+

{card.title}

+
    + {card.points.map((p) =>
  • {p}
  • )} +
+
+ ))} +
+
+ + + + + +
+

{t('license-section-heading')}

+

{t('license-section-description')}

+
+
+

{t('contact-section-heading')}

+

{t('contact-section-description')}

+ {t('contact-link-label')} +
+
+ diff --git a/astro/src/pages/[locale]/get-involved/index.astro b/astro/src/pages/[locale]/get-involved/index.astro new file mode 100644 index 00000000..f2d84f7a --- /dev/null +++ b/astro/src/pages/[locale]/get-involved/index.astro @@ -0,0 +1,158 @@ +--- +import type { GetStaticPaths } from 'astro'; +import BaseLayout from '../../../layouts/BaseLayout.astro'; +import { getT, LOCALES } from '../../../i18n'; + +// Get-involved page. One static, translated variant per locale — +// //get-involved/ — faithful to the Next Pages-Router page. Uses shared +// chrome (BaseLayout) + ported Hero/Section/CenteredCard styles. +export const getStaticPaths = (async () => + LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + +const { locale } = Astro.params; +const t = await getT(locale!, 'get-involved'); +const title = String(t('get-involved-tab-head')); +--- + + {/* Hero */} +
+
+
+
+

{t('hero-title')}

+
{t('hero-description')}
+
+
+ {t('get-involved-banner')} +
+
+
+
+
+ + {/* Contribute now */} +
+
+
+

{t('contribute-now')}

+
{t('contribute-now-description')}
+
+ +
+
+ + {/* Individual */} +
+
+
+

{t('individual-heading')}

+ {t('individual-heading-image')} +
+
+
+
{t('possess-language-skills')}
+
{t('possess-language-skills-description')}
+ +
+
+
{t('possess-technical-skills')}
+
{t('possess-techincal-skills-description')}
+ +
+
+
+
+ + {/* Group */} +
+
+
+
+
{t('want-to-host-mapswipe-events')}
+
{t('want-to-host-mapswipe-events-description')}
+ +
+
+
{t('engage-your-csr')}
+
{t('engage-your-csr-description')}
+ +
+
+
+

{t('group-heading')}

+ {t('group-heading-image')} +
+
+
+ + {/* Organizational */} +
+
+
+

{t('organization-heading')}

+ {t('organization-logo')} +
+
+
{t('humanitarian-or-nonprofit')}
+
{t('humanitarian-or-nonprofit-description')}
+ +
+
+
+ + {/* Donate */} +
+
+
+
{t('interested-in-supporting')}
+
+

{t('interested-in-supporting-description-1')}

+ {t('download-financial-report')} +
+ +
+
+

{t('donate-heading')}

+ {t('donation-logo')} +
+
+
+ + {/* Contact */} +
+
+
+

{t('contact-section-heading')}

+
{t('contact-section-description')}
+
+ +
+
+
+ + diff --git a/astro/src/pages/[locale]/index.astro b/astro/src/pages/[locale]/index.astro new file mode 100644 index 00000000..b6b64c40 --- /dev/null +++ b/astro/src/pages/[locale]/index.astro @@ -0,0 +1,304 @@ +--- +import type { GetStaticPaths } from 'astro'; +import { getCollection } from 'astro:content'; +import { Image } from 'astro:assets'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import ProjectTypeIcon from '../../components/ProjectTypeIcon.astro'; +import Icon from '../../components/Icon.astro'; +import { getT, LOCALES } from '../../i18n'; +import { getCommunityStats } from '../../lib/data'; + +// Home page. One static, translated variant per locale — // — matching +// the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, +// key figures, mission-type cards, featured blogs, download/get-involved CTAs +// and partners, using the shared chrome (BaseLayout) + ported design tokens. +export const getStaticPaths = (async () => + LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + +const { locale } = Astro.params; +const t = await getT(locale!, 'home'); + +// Key figures. Next formatted these with Intl.NumberFormat('en-US'): swipes +// compact ("214M"), contributors grouped ("132,105"). Reproduce exactly. +const { totalContributors, totalSwipes } = getCommunityStats(); +const swipesFmt = totalSwipes == null + ? '-' + : new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(totalSwipes); +const contributorsFmt = totalContributors == null + ? '-' + : new Intl.NumberFormat('en-US').format(totalContributors); + +// Featured blogs: top 3 `featured` from the blogs collection, sorted DESC by +// publishedDate (parity with Next's compareDate(..,-1) + filter + slice(0,3)). +const entries = await getCollection('blogs'); +const featuredBlogs = entries + .filter((e) => e.data.featured) + .map((e) => ({ + slug: e.id, + title: e.data.title ?? e.id, + publishedDate: e.data.publishedDate, + description: e.data.description, + coverImage: e.data.coverImage, + })) + .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)) + .slice(0, 3); + +// i18next {{date, datetime}} => Intl.DateTimeFormat(lng) default options. +const dateFmt = new Intl.DateTimeFormat(locale!); +const fmtDate = (d?: Date) => (d ? dateFmt.format(d) : ''); + +const partners = [ + { altText: 'American Red Cross Logo', imageSrc: '/img/arc.svg', link: 'https://www.redcross.org/' }, + { altText: 'British Red Cross Logo', imageSrc: '/img/brc.svg', link: 'https://www.redcross.org.uk/' }, + { altText: 'Canadian Red Cross Logo', imageSrc: '/img/crc.svg', link: 'https://www.redcross.ca/' }, + { altText: 'HeiGIT logo', imageSrc: '/img/heigit.png', link: 'https://heigit.org/' }, + { altText: 'HOT logo', imageSrc: '/img/hot.png', link: 'https://www.hotosm.org/' }, + { altText: 'MSF logo', imageSrc: '/img/msf.png', link: 'https://msf.org.uk/' }, + { altText: 'Togglecorp logo', imageSrc: '/img/tc.png', link: 'https://togglecorp.com' }, +]; + +const missionTypes = [ + { type: 'FIND', coverImageUrl: '/img/find.svg', heading: t('type-find-title'), body: t('find-mission-type-description') }, + { type: 'COMPARE', beforeAfter: true, heading: t('type-compare-title'), body: t('compare-mission-type-description') }, + { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', heading: t('type-validate-title'), body: t('validate-mission-type-description') }, + { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', heading: t('type-completeness-title'), body: t('completeness-type-description') }, + { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', heading: t('type-validate-image-type'), body: t('validate-image-type-description') }, + { type: 'STREET', coverImageUrl: '/img/street_image.png', heading: t('type-street-type'), body: t('street-type-description') }, + { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', heading: t('type-locate-features-type'), body: t('locate-features-type-description') }, +] as const; + +const title = String(t('home-tab-head')); +--- + + {/* Hero */} +
+
+
+
+

{t('hero-title')}

+
{t('hero-description')}
+ +
+
+ +
+
+
+
+
+ + {/* Mobilizing volunteers + key figures */} +
+
+
+

{t('mobilizing-volunteer')}

+
+
+
+
+ {t('mobilize-volunteer')} +
+
+
+ {t('mapathon')} +
+
+ {t('field-mapping')} +
+
+
+
+

{t('mobilizing-volunteer-description-paragraph-1')}

+

{t('mobilizing-volunteer-description-paragraph-2')}

+
+
+
{swipesFmt}
+
{t('total-swipes')}
+
+
+
{contributorsFmt}
+
{t('total-contributors')}
+
+
+
+
+
+
+ + {/* Mission types */} +
+
+
+

{t('explore-mission-types')}

+
{t('explore-mission-types-description')}
+
+
+ {missionTypes.map((m) => ( +
+
+ {m.beforeAfter ? ( + <> + before-image + after-image + + ) : ( + card-cover-image + )} +
+
+
+ +
{m.heading}
+
+
{m.body}
+
+
+ ))} +
+
+
+ + {/* Start mapswiping (download + get involved) */} +
+
+
+

{t('start-mapswiping-title')}

+
+
+
+
{t('download-description')}
+ + +
+
+
{t('get-involved-description')}
+ {t('get-involved-link')} +
+
+
+
+ + {/* Recent news & updates (featured blogs) */} +
+
+
+

{t('news-and-updates-title')}

+
+
+ {featuredBlogs.map((blog, index) => ( +
+ {blog.coverImage && ( +
+ {blog.title} +
+ )} +
+ {blog.publishedDate && ( +
+ {fmtDate(blog.publishedDate)} +
+ )} +
{blog.title}
+
{blog.description}
+ {t('read-more')} +
+
+ ))} + +
+
+
+ + {/* Partners */} +
+
+
+

{t('partners')}

+
+
+ + {t('missing-maps')} + +
{t('missing-map-description')}
+
+ {partners.map((p) => ( + + + + ))} +
+
+
+
+
+ + diff --git a/astro/src/pages/[locale]/privacy/index.astro b/astro/src/pages/[locale]/privacy/index.astro new file mode 100644 index 00000000..ef6e37ab --- /dev/null +++ b/astro/src/pages/[locale]/privacy/index.astro @@ -0,0 +1,145 @@ +--- +import type { GetStaticPaths } from 'astro'; +import { unified } from 'unified'; +import remarkParse from 'remark-parse'; +import remarkGfm from 'remark-gfm'; +import remarkRehype from 'remark-rehype'; +import rehypeStringify from 'rehype-stringify'; +import BaseLayout from '../../../layouts/BaseLayout.astro'; +import { getT, LOCALES } from '../../../i18n'; + +// Privacy page. The policy body is a fixed English markdown string (identical +// in every locale — same as the Next app, which hardcoded it); only the tab +// title + hero title are translated. Rendered to HTML at build time via the +// same remark + GFM pipeline the Next page used (remark().use(html).use(gfm)), +// so the GFM contact tables render as . +export const getStaticPaths = (async () => + LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + +const { locale } = Astro.params; +const t = await getT(locale!, 'privacy'); +const title = String(t('privacy-tab-head')); + +// Policy content ported VERBATIM from src/pages/[locale]/privacy/index.tsx. +const policy = ` +We are committed to protecting your personal information and being transparent about what we do with it. We are committed to using your personal information in accordance with our responsibilities. We are required to provide you with the information in this Privacy Notice under applicable law which includes: + +* UK GDPR; the Data Protection Act 2018 (DPA 2018) (and regulations made thereunder) referred to as the 'data protection legislation' +* the Privacy and Electronic Communications Regulation (2003) + +We won't do anything with your information you wouldn't reasonably expect. + +Processing of your personal information is carried out by or on behalf of the British Red Cross Society, incorporated by Royal Charter 1908; registered as a charity in England and Wales (220949), Scotland (SC037738) and the Isle of Man (0752). + +If you have any queries about our Privacy Notice, please get in touch with our Information Governance team: + +| | | +| ------- | ---------------- | +| Email | [dataprotection@redcross.org.uk](mailto:dataprotection@redcross.org.uk) | +| Phone | 0344 871 1111 | +| Post | Head of Information Governance, British Red Cross, 44 Moorfields London, EC2Y 9AL | + +## How and when we collect information about you +### When you directly give us information +When you download the MapSwipe app, you will have to create an account and provide us with some information about you so that we can link your contributions to your account. We are hoping to introduce an option to map as a guest without you having to give us any information, however this is not yet available. + +### When you indirectly give us information +We monitor how the app is used, for example the pages you view and how you navigate the app, to help us improve the experience. This data is aggregated and anonymised, so we are not able to identify individual users. + +### What information we might collect +When you create an account, we will ask you to provide your email address and create a username and password for your account. If you use your OpenStreetMap account to signup or login, we will instead obtain your user identifier and username from OpenStreetMap. Your email address and OpenStreetMap identifier are referred to in this Privacy Notice as 'personal information', whereas your username will be publicly visible and tied to your contributions in the app. Your password is encrypted and not visible to anyone. + +### If you're under 16 +If you're aged under 16, you must get your parent/guardian's permission before you provide any personal information to us. + +### How and why we use your information +Your personal information is only used for the purpose of logging into your account or resetting your password. We do not use it for any other purpose including marketing or contacting you in any way. + +### Who do we share your information with? +We will only use your information for the purposes for which it was obtained. We will not, under any circumstances, sell or share your personal information with any third party for their own purposes, and you will not receive marketing from any other companies, charities or other organisations as a result of giving your details to us. + +### How we protect your information +We use technical and corporate organisational safeguards to ensure that your personal information is secure. We limit access to information on a need-to-know basis and take appropriate measures to ensure that our people are aware that such information is only used in accordance with this Privacy Notice. + +We undertake regular reviews of who has access to information that we hold to ensure that your information is only accessible by appropriately trained staff and volunteers. + +However, please be aware that there are always inherent risks in sending information by public networks or using public computers and we cannot 100% guarantee the security of data (including personal information) disclosed or transmitted over public networks. + +### How long will we keep your information? +We will keep your personal information for as long as you use the MapSwipe app. After two years of inactivity on your account (i.e. you have not logged in or opened the app), we will delete your account and all personal information. Your contributions will remain in our database but will no longer be linked to your public username or personal information. + +### International transfers of information +Our servers are located in the US, which means that your personal information is transferred, processed and stored outside the EEA. You should be aware that, in general, legal protection for personal information in countries outside the EEA may not be equivalent to the level of protection provided in the EEA. + +However, we take steps to put in place suitable safeguards to protect your personal information when processed by the supplier such as entering into the European Commission approved standard contractual clauses. By submitting your personal information to us you agree to this transfer, storing or processing at a location outside the EEA. + +### Your rights to your personal information +Data protection legislation gives you the right to erase the personal information about you which is collected through MapSwipe and processed by the British Red Cross. + +This can be done within the app by selecting the option to 'Delete my account' at the bottom of your account profile page. This will remove all of your personal data from our servers and unlink your map contributions from your public username, which will also be deleted. + +### How to make a complaint or raise a concern +If you would like more information, or have any questions about this policy, to make a formal complaint about our approach to data protection or raise privacy concerns please contact the Information Governance Team: + +| | | +| ------- | ---------------- | +| Email | [dataprotection@redcross.org.uk](mailto:dataprotection@redcross.org.uk) | +| Phone | 0344 871 1111 | +| Post | Head of Information Governance, British Red Cross, 44 Moorfields London, EC2Y 9AL | + +If you are not happy with the response you receive, then you can raise your concern with the relevant statutory body: +Information Commissioner's Office, Wycliffe House, Water Lane, Wilmslow, Cheshire, SK9 5AF + + +Alternatively you can [visit their website](https://ico.org.uk/). + +We are registered with the Information Commissioner's Office as a Data Controller under number Z5379882. + +### Changes to our Privacy Notice +Our Privacy Notice may change from time to time, so please check this page occasionally to see if we have included any updates or changes, and that you are happy with them. (Last updated: 24 May 2022) +`; + +const policyHtml = String( + await unified() + .use(remarkParse) + .use(remarkGfm) + .use(remarkRehype) + .use(rehypeStringify) + .process(policy.replace(/\\n/g, '\n')), +); +--- + + {/* Hero (no right content -> centered) */} +
+
+
+
+

{t('privacy-hero-title')}

+
+
+
+
+
+ +
+
+
+
+
+
+ + diff --git a/astro/src/pages/[locale]/projects/[id].astro b/astro/src/pages/[locale]/projects/[id].astro new file mode 100644 index 00000000..74cb8352 --- /dev/null +++ b/astro/src/pages/[locale]/projects/[id].astro @@ -0,0 +1,205 @@ +--- +import type { GetStaticPaths } from 'astro'; +import ProjectLayout from '../../../layouts/ProjectLayout.astro'; +import RemoteImage from '../../../components/RemoteImage.astro'; +import { COVER_WIDTH } from '../../../lib/optimizeImage'; +import MapIsland from '../../../components/MapIsland.tsx'; +import ProjectHistoryChart from '../../../components/ProjectHistoryChart.tsx'; +import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from '../../../lib/data'; +import { getFileSizeProperties, resolveAoiDownload } from '../../../lib/common'; +import { getT, LOCALES } from '../../../i18n'; + +export const getStaticPaths = (async () => { + let projects = getAllProjects(); + const limit = Number(import.meta.env.SLICE_LIMIT ?? 0); + if (limit > 0) projects = projects.slice(0, limit); + // One path per (project, locale). + return projects.flatMap((project) => { + const id = String(project.firebaseId); + return LOCALES.map((locale) => ({ + params: { locale, id }, + })); + }); +}) satisfies GetStaticPaths; + +const { locale, id } = Astro.params; +const project = getProjectByFirebaseId(id!)!; + +const t = await getT(locale!, 'project'); + +const { + name, + description, + projectType, + status, + region, + progress, + createdAt, + numberOfContributorUsers, + requestingOrganization, + image, + aoiGeometry, + firebaseId, +} = project; + +// Project type / status labels (ported mapping from the Next page). +const projectTypeLabels: Record = { + FIND: t('type-find-title'), + VALIDATE: t('type-validate-title'), + COMPARE: t('type-compare-title'), + COMPLETENESS: t('type-completeness-title'), + VALIDATE_IMAGE: t('type-validate-image-title'), + STREET: t('type-streets-view-title'), + LOCATE: t('type-locate-title'), +}; +const statusLabels: Record = { + PUBLISHED: t('active'), + FINISHED: t('finished'), +}; + +const roundedTotalArea = Math.round(aoiGeometry?.totalArea ?? 0); +const aoiDownload = resolveAoiDownload(project); + +const createdAtLabel = createdAt + ? new Date(createdAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }) + : undefined; + +const title = String(t('project-tab-head', { projectTitle: name })); + +// Download-cards config: mirrors the Next page's set exactly (same keys/order). +type CardDef = { asset?: UrlInfo; heading: string; description: string }; +const cards: CardDef[] = [ + { asset: project.exportAggregatedResults, heading: t('aggregated-results-title'), description: t('aggregated-results-description') }, + { asset: project.exportAggregatedResultsWithGeometry, heading: t('aggregated-results-with-geometry-title'), description: t('aggregated-results-with-geometry-description') }, + { asset: project.exportGroups, heading: t('groups-title'), description: t('groups-description') }, + { asset: project.exportHistory, heading: t('history-title'), description: t('history-description') }, + { asset: project.exportResults, heading: t('results-title'), description: t('results-description') }, + { asset: project.exportTasks, heading: t('tasks-title'), description: t('tasks-description') }, + { asset: project.exportUsers, heading: 'Users', description: 'This dataset contains information on the individual contributions per user.' }, + { asset: project.exportHotTaskingManagerGeometries, heading: t('hot-tasking-manager-geometries-title'), description: t('hot-tasking-manager-geometries-description') }, + { asset: project.exportModerateToHighAgreementYesMaybeGeometries, heading: t('moderate-to-high-agreement-yes-maybe-geometries-title'), description: t('moderate-to-high-agreement-yes-maybe-geometries-description') }, +]; + +const downloadSizeText = (fileSize?: number) => { + const { size, unit } = getFileSizeProperties(fileSize ?? 0); + return t('download-size', { + size, + formatParams: { size: { style: 'unit', unit, maximumFractionDigits: 1 } }, + }); +}; + +const historyUrl = project.exportHistory?.file?.url ?? undefined; +const imageUrl = image?.file?.url ?? undefined; +const lastFetched = project.exportHistory?.modifiedAt + ? t('data-last-fetched', { + date: new Date(project.exportHistory.modifiedAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }), + }) + : undefined; +--- + +
+
+

{name}

+
+ {projectType && {projectTypeLabels[projectType] ?? projectType}} + {status && {statusLabels[status] ?? status}} +
+
+ {region && {region}} + {requestingOrganization?.name && ( + {requestingOrganization.name} + )} + {createdAtLabel && {createdAtLabel}} +
+
+ {imageUrl && ( + + )} +
+ +
+

{t('overview-section-title')}

+ {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} +
+
+
+ {roundedTotalArea} + km2 +
+
+ {numberOfContributorUsers ?? 0} + {t('project-contributors-text')} +
+
+
+ +
+ {lastFetched &&

{lastFetched}

} + {aoiDownload && ( +
+ +
+ )} +
+
+
{t('project-progress-label')}
+
{t('project-card-progress-text', { progress: progress * 100 })}
+
+
+
+
+
+ +
+ +
+

{t('data-section-heading')}

+

{t('data-section-description')}

+
+ {cards.map((card) => + card.asset ? ( +
+

{card.heading}

+

{card.description}

+
+ {card.asset.mimetype} + {downloadSizeText(card.asset.fileSize)} +
+ {card.asset.file?.url && ( + + {t('download')} + + )} +
+ ) : null, + )} + {aoiDownload && ( +
+

{t('area-of-interest-title')}

+

{t('area-of-interest-description')}

+
+ {aoiDownload.mimetype} + {downloadSizeText(aoiDownload.fileSize)} +
+ + {t('download')} + +
+ )} +
+
+ +
+

{t('license-section-heading')}

+

{t('license-section-description-1')}

+

{t('license-section-description-2')}

+
+
diff --git a/astro/src/pages/data-explorer.json.ts b/astro/src/pages/data-explorer.json.ts new file mode 100644 index 00000000..6ee6c201 --- /dev/null +++ b/astro/src/pages/data-explorer.json.ts @@ -0,0 +1,43 @@ +// Static file endpoint: emits the ONE locale-independent data-explorer dataset +// as /data-explorer.json at build time (replaces the hand-rolled +// render-time write + build:done ensure integration). +// +// The 6 //data/ pages would otherwise each inline the full serialized +// ~2.4k-project payload (~3 MB of HTML apiece); the dataset is +// locale-independent, so it ships once and the DataExplorer island fetches it +// on mount (dataUrl prop, same /data-explorer.json URL as before — NO +// content-hash cache-busting; GH Pages serves with a ~10-minute cache and the +// site deploys ~daily, so a worst-case 10-minute skew is tolerable). +// +// Shape: { miniProjects, organizations, imageMap } — everything bulky the +// island needs. imageMap is {originalCoverUrl -> optimized /_img src}, +// resolved through the SAME build-time fail-soft optimizer as the SSR'd cards +// (scripts/prefetch-images.mjs warmed these exact URLs at COVER_WIDTH before +// the build, so these are pure cache hits). +import type { APIRoute } from 'astro'; +import { getDataExplorerPayload } from '../lib/dataExplorer'; +import { resolveRemoteImage, COVER_WIDTH } from '../lib/optimizeImage'; + +export const GET: APIRoute = async () => { + const payload = getDataExplorerPayload(); + + const uniqueUrls = [...new Set( + payload.projects.map((p) => p.image?.file?.url).filter((u): u is string => Boolean(u)), + )]; + const entries = await Promise.all( + uniqueUrls.map(async (url) => { + const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); + return [url, src] as const; + }), + ); + const imageMap = Object.fromEntries(entries); + + return new Response( + JSON.stringify({ + miniProjects: payload.projects, + organizations: payload.organizations, + imageMap, + }), + { headers: { 'Content-Type': 'application/json' } }, + ); +}; diff --git a/astro/src/pages/index.astro b/astro/src/pages/index.astro new file mode 100644 index 00000000..209be9eb --- /dev/null +++ b/astro/src/pages/index.astro @@ -0,0 +1,5 @@ +--- +// Root index. Redirects to the default-locale home (parity with the Next app's +// locale-prefixed routing). Astro's i18n requires this to exist. +return Astro.redirect('/en/'); +--- From 0e196c1b4dc32dcacfa47c540172e65a517f7d87 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 11:48:42 +0545 Subject: [PATCH 03/52] feat(astro): remote-image pipeline + hydration dedup Covers two Astro gaps: astro:assets aborts the whole build on one bad remote image (production data contains such images), and island hydration runtimes are force-inlined on every page (~57 MB across 14.6k pages). --- astro/scripts/prefetch-images.mjs | 93 +++++++ astro/src/components/RemoteImage.astro | 35 +++ astro/src/lib/hydrationDedupIntegration.ts | 185 ++++++++++++++ astro/src/lib/optimizeImage.ts | 284 +++++++++++++++++++++ 4 files changed, 597 insertions(+) create mode 100644 astro/scripts/prefetch-images.mjs create mode 100644 astro/src/components/RemoteImage.astro create mode 100644 astro/src/lib/hydrationDedupIntegration.ts create mode 100644 astro/src/lib/optimizeImage.ts diff --git a/astro/scripts/prefetch-images.mjs b/astro/scripts/prefetch-images.mjs new file mode 100644 index 00000000..df7f1957 --- /dev/null +++ b/astro/scripts/prefetch-images.mjs @@ -0,0 +1,93 @@ +// Concurrent image-prefetch step. Runs BEFORE `astro build` (see the npm +// `build` script) to warm the on-disk .image-cache/ with a bounded concurrency +// pool, so the per-page render pass hits pure cache and does NOT serialize +// thousands of remote fetches. +// +// Why: project cover images are fetched at render time. Every project renders +// across all 6 locales, so a naive render pass would fetch each cover ~6× +// serially. Deduping to unique URLs and fetching them in parallel here turns a +// ~27-min fetch-bound cold build into a short prefetch + fast render. +// +// This shares the SAME optimizer + cache as the per-page resolver: it calls +// prefetchRemoteImage() from src/lib/optimizeImage.ts (imported directly via +// Node's native TS type-stripping). The cache key is (url|width|webp), and we +// warm at COVER_WIDTH — the exact width the page renders — so the render pass +// finds a hit. No logic is forked. +// +// Fail-soft: prefetchRemoteImage never throws; a bad/slow image logs a +// passthrough warning and the pool moves on. rc stays 0. +import { createRequire } from 'node:module'; +import { join } from 'node:path'; +import { prefetchRemoteImage, COVER_WIDTH } from '../src/lib/optimizeImage.ts'; + +const require = createRequire(import.meta.url); + +// Bounded concurrency. Fetch-bound work: ~24 in-flight remote fetches saturates +// the link without exhausting sockets/RAM. Tunable via env for measurement. +const CONCURRENCY = Number(process.env.PREFETCH_CONCURRENCY ?? 24); + +// Collect the unique cover URLs the build will actually render. This mirrors +// src/lib/data.ts (same staticData path + same BAD_IMAGE_TEST / SLICE_LIMIT +// knobs) so the warmed set matches the render set exactly. +function collectCoverUrls() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const data = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); + let projects = (data?.publicProjects?.results ?? []); + + const limit = Number(process.env.SLICE_LIMIT ?? 0); + if (limit > 0) projects = projects.slice(0, limit); + + // Match data.ts's BAD_IMAGE_TEST knob: inject the bad URL into the first + // image-bearing project so the prefetch exercises the same (bad) cover the + // render will, proving fail-soft end to end. + if (process.env.BAD_IMAGE_TEST) { + const badUrl = process.env.BAD_IMAGE_TEST; + const target = projects.find((p) => p?.image?.file?.url); + if (target?.image?.file) target.image.file.url = badUrl; + } + + const urls = projects.map((p) => p?.image?.file?.url).filter(Boolean); + return [...new Set(urls)]; +} + +// Bounded pool: N workers drain a shared cursor over the URL list. +async function run() { + const start = Date.now(); + const urls = collectCoverUrls(); + const total = urls.length; + console.log( + `[prefetch] ${total} unique cover URLs, concurrency=${CONCURRENCY}, width=${COVER_WIDTH}`, + ); + + let optimized = 0; + let passthrough = 0; + let next = 0; + + async function worker() { + for (;;) { + const i = next++; + if (i >= total) return; + const ok = await prefetchRemoteImage(urls[i], { width: COVER_WIDTH }); + if (ok) optimized++; + else passthrough++; + const done = optimized + passthrough; + if (done % 250 === 0 || done === total) { + console.log(`[prefetch] ${done}/${total} (optimized=${optimized} passthrough=${passthrough})`); + } + } + } + + await Promise.all(Array.from({ length: Math.min(CONCURRENCY, total) }, worker)); + + const secs = ((Date.now() - start) / 1000).toFixed(1); + console.log( + `[prefetch] done: ${optimized} optimized / ${passthrough} passthrough / ${total} total in ${secs}s`, + ); +} + +// Fail-soft at the top level too: prefetch is a cache warm, never a build +// blocker. Any unexpected error still exits 0 so `astro build` runs. +run().catch((err) => { + console.warn('[prefetch] non-fatal error, continuing to build:', err); + process.exit(0); +}); diff --git a/astro/src/components/RemoteImage.astro b/astro/src/components/RemoteImage.astro new file mode 100644 index 00000000..549d888a --- /dev/null +++ b/astro/src/components/RemoteImage.astro @@ -0,0 +1,35 @@ +--- +import { resolveRemoteImage } from '../lib/optimizeImage'; + +// Remote project cover image, optimized at BUILD time via our own fail-soft +// resolver (see src/lib/optimizeImage.ts). We bypass Astro's /astro:assets +// because its optimize phase is all-or-nothing: one malformed remote image makes +// sharp throw fatally and aborts the whole build. resolveRemoteImage() wraps each +// fetch+sharp in try/catch and, on ANY failure, returns the raw remote URL +// (passthrough) — so a single bad image can never break the build. Good images +// are resized to `width`, encoded to webp, cached on disk, and shipped locally. +// +// Optimization is ALWAYS on now (no IMAGE_OPT gate) but always safe. +interface Props { + src: string; + alt: string; + class?: string; + width?: number; + height?: number; +} +const { src, alt, class: className, width = 640, height = 420 } = Astro.props; + +// Explicit width (inferSize:false semantics) so there is no render-time network +// fetch just to read dimensions. +const { src: resolvedSrc, optimized } = await resolveRemoteImage(src, { width }); +--- +{alt} diff --git a/astro/src/lib/hydrationDedupIntegration.ts b/astro/src/lib/hydrationDedupIntegration.ts new file mode 100644 index 00000000..e738a914 --- /dev/null +++ b/astro/src/lib/hydrationDedupIntegration.ts @@ -0,0 +1,185 @@ +// Astro integration: deduplicate the inline island-hydration runtimes into ONE +// external, cacheable file — a build:done post-process. +// build:done post-process pattern. +// +// Why: Astro hard-inlines its directive runtimes (the ~130 B `Astro.only` +// loader, the ~3.5 KB custom-element runtime, the ~370 B +// `client:visible` loader) into EVERY island-bearing page. With ~14.6k island +// pages that is ~55–57 MB of byte-identical duplication (~12% of dist). +// `vite.build.assetsInlineLimit: 0` has no effect on these (verified +// empirically) — hence this post-process. +// +// How: +// 1. DISCOVER (don't hardcode): read one project page from dist, extract its +// inline attribute-less classic (a +// classic BLOCKING script — synchronous execution at the same position +// preserves semantics); the other matched inline scripts are removed. +// This is safe because the runtimes only define globals / register the +// custom element and dispatch readiness events — they are +// position-independent among themselves, and running all of them at the +// first script's position (always before the first ) +// matches Astro's own ordering guarantees. Exact byte-sequence string +// replacement — the blocks are identical everywhere, no HTML parsing +// needed. Pages containing none of the blocks (zero-JS pages) are left +// untouched. +// +// Idempotency: a page already referencing "/_astro/hydration." is skipped. +// +// Ordering: registered LAST in astro.config.mjs so it runs after the other +// build:done hooks (sitemap). +import { createHash } from 'node:crypto'; +import { readFile, readdir, writeFile } from 'node:fs/promises'; +import { join, sep } from 'node:path'; +import type { AstroIntegration } from 'astro'; + +const DIST = 'dist'; +const BUNDLE_URL_PREFIX = '/_astro/hydration.'; +// How many sibling project pages each extracted script must appear on +// verbatim before we trust it as a shared hydration runtime. +const SANITY_SAMPLE = 8; +const SANITY_MIN_MATCHES = 5; +// Concurrent file rewrites — 14.6k small files, keep the wall-time low +// without exhausting file descriptors. +const POOL_SIZE = 16; + +// Inline classic scripts exactly as Astro emits its directive runtimes: an +// attribute-less `; + + // -- 3. Rewrite every HTML file. ---------------------------------- + let rewritten = 0; + let skipped = 0; + await asyncPool(POOL_SIZE, htmlFiles, async (file) => { + const html = await readFile(file, 'utf8'); + // Idempotent: already externalized (e.g. merged from a cached, + // previously-rewritten dist). + if (html.includes(BUNDLE_URL_PREFIX)) { + skipped += 1; + return; + } + // Find which of the discovered blocks this page carries, in + // document order. (Data pages carry a subset — the shared island + // runtime but a different directive loader — so match per-block.) + const present = scripts + .map((s) => ({ s, at: html.indexOf(s) })) + .filter((x) => x.at !== -1) + .sort((a, b) => a.at - b.at); + if (present.length === 0) { + skipped += 1; // zero-JS page — leave untouched + return; + } + // Replace the FIRST matched block with the src tag, drop the rest. + let out = html.replace(present[0].s, srcTag); + for (const { s } of present.slice(1)) { + out = out.replace(s, ''); + } + await writeFile(file, out); + rewritten += 1; + }); + + logger.info( + `hydration dedup: ${rewritten} page(s) rewritten, ${skipped} skipped, ` + + `bundle _astro/${bundleName} (${bundle.length} B, ${scripts.length} scripts)`, + ); + } catch (err) { + // Fail-soft: never break the build over an optimization. + const reason = err instanceof Error ? err.message : String(err); + logger.warn(`hydration dedup skipped: ${reason}`); + } + }, + }, + }; +} diff --git a/astro/src/lib/optimizeImage.ts b/astro/src/lib/optimizeImage.ts new file mode 100644 index 00000000..f5cab384 --- /dev/null +++ b/astro/src/lib/optimizeImage.ts @@ -0,0 +1,284 @@ +// Build-time, per-image, fail-soft remote image optimizer with an on-disk cache. +// +// Why this exists (and why we bypass Astro's /astro:assets): +// Astro's optimize phase is all-or-nothing — a single malformed remote image +// (e.g. a broken SVG mislabeled as raster) makes sharp throw fatally and aborts +// the entire 14k-page build (rc=1), uncatchable per-image. Here we own the +// fetch + sharp pipeline so we can wrap each image in try/catch and fail-soft to +// passthrough (serve the original remote URL) while still optimizing + caching +// the good ones. +// +// Runs at build time only (Node). Not for client bundles. +import { createHash } from 'node:crypto'; +import { mkdir, readdir, copyFile, writeFile, access, stat } from 'node:fs/promises'; +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import sharp from 'sharp'; + +// Anchor at the build's working directory (astro/) rather than import.meta.url: +// after Vite bundles this module into dist/pages/, an import.meta.url-relative +// path resolves from the emitted file's location and lands in the wrong place. +// The build always runs from astro/, so cwd is the stable anchor. +export const ROOT = process.cwd(); + +// Persistent cache: survives across builds. In CI this directory should be +// restored/saved as a build cache (see report) so warm builds reuse encodes. +export const CACHE_DIR = join(ROOT, '.image-cache'); +// Final output dir. We emit directly into dist/ because the public/ -> dist/ +// copy phase runs BEFORE static route generation (when these images are +// produced), so writing into public/ would be too late to ship. +export const OUT_IMG_DIR = join(ROOT, 'dist', '_img'); +// The public URL path the browser requests. +export const PUBLIC_IMG_URL = '/_img'; +// Per-image fetch timeout. Prevents a single slow/hung remote from stalling the +// build; on timeout we fail soft to passthrough. +const FETCH_TIMEOUT_MS = 15000; + +// Retry-after window for TRANSIENT failures (timeout / network / 5xx). We +// record the failure time in a .slow marker and skip refetching that URL until +// this window elapses. Without it, a chronically-slow origin image is refetched +// (and re-times-out at 15s) on EVERY build — 9 such covers cost ~135s per build +// in this dataset. With it, warm builds skip them and stay fast, while a +// genuinely-transient blip still retries after the window. Tunable via env. +const RETRY_AFTER_MS = Number(process.env.IMAGE_RETRY_AFTER_MS ?? 6 * 60 * 60 * 1000); + +// The render width used for project cover images (see projects/[id].astro). +// Exported so the prefetch pool warms the cache under the SAME width/key the +// per-page resolver will look up — otherwise prefetch would be a no-op. +export const COVER_WIDTH = 640; + +let dirsReady: Promise | null = null; +export function ensureDirs(): Promise { + if (!dirsReady) { + dirsReady = (async () => { + await mkdir(CACHE_DIR, { recursive: true }); + await mkdir(OUT_IMG_DIR, { recursive: true }); + })(); + } + return dirsReady; +} + +// Track keys already emitted into dist/ this process, so concurrent page +// renders don't redundantly copy. +const published = new Set(); + +// In-process negative cache for keys that failed this process. Covers the +// TRANSIENT failures (timeouts/network) that we deliberately don't persist to +// disk: within a single build a URL renders across 6 locales, and without this +// each locale would re-pay the full 15s fetch timeout. Process-scoped only, so +// a transient failure is retried on the next build (correct). +const failedThisProcess = new Set(); + +export interface ResolveOptions { + width: number; +} + +export interface ResolvedImage { + // URL to render in . Either a local optimized path or, on any + // failure, the original remote URL (passthrough). + src: string; + // True when we shipped a locally optimized webp; false when passthrough. + optimized: boolean; +} + +function cacheKey(url: string, width: number): string { + return createHash('sha1').update(`${url}|w=${width}|webp`).digest('hex'); +} + +// Negative cache. Two tiers of marker file sit next to the would-be .webp: +// .miss — PERMANENT: the URL failed deterministically (corrupt/empty image +// data or HTTP 4xx). Never refetched (until the cache dir is wiped). +// .slow — TRANSIENT with retry-after: the URL failed for a network reason +// (timeout / connection / 5xx). Skipped until RETRY_AFTER_MS elapses +// (judged by the marker's mtime), then retried. This is what stops a +// chronically-slow origin image from being refetched — and re-timing +// out at 15s — on every build, while still eventually retrying. +// Both let the render pass short-circuit to passthrough WITHOUT a refetch, +// keeping post-prefetch renders as pure cache hits. +async function writeMarker(key: string, ext: 'miss' | 'slow'): Promise { + await writeFile(join(CACHE_DIR, `${key}.${ext}`), ''); +} + +// True for failures that are the image's fault, not the network's — a corrupt +// or empty buffer, or a 4xx. sharp throws these with recognizable messages. +function isDeterministicFailure(reason: string): boolean { + return ( + reason.startsWith('HTTP 4') || + reason.includes('Input buffer') || + reason.includes('Input Buffer') || + reason.includes('unsupported image format') || + reason.includes('VipsForeignLoad') + ); +} + +// Shared negative-cache lookup used by BOTH the prefetch pool and the per-page +// resolver. Returns whether we should skip fetching this key (and why). +async function negativeCacheHit(key: string): Promise { + // Permanent bad -> always skip. + try { + await access(join(CACHE_DIR, `${key}.miss`)); + return true; + } catch { + // not permanently bad + } + // Transient slow -> skip only while the retry-after window is still open. + try { + const st = await stat(join(CACHE_DIR, `${key}.slow`)); + return Date.now() - st.mtimeMs < RETRY_AFTER_MS; + } catch { + return false; + } +} + +// Shared sharp encode: resize to `width` (never upscale) + webp. This is the +// SINGLE source of truth for the encode rules for remote covers. `input` may +// be a Buffer (remote) or a file path. Animated inputs (GIF pages>1) are decoded with +// { animated: true } and re-encoded as an animated webp so animation survives +// the resize (applied to every frame). Returns the encoded webp buffer. +export async function encodeImageBuffer( + input: Buffer | string, + width: number, +): Promise { + // Probe for animation. A multi-page (animated) source must be opened with + // { animated: true } or sharp collapses it to the first frame. + let animated = false; + try { + const meta = await sharp(input).metadata(); + animated = (meta.pages ?? 1) > 1 || meta.format === 'gif'; + } catch { + // If probing fails, treat as a normal static image; the encode below will + // surface any real decode error to the caller (fail-soft at that layer). + } + return sharp(input, animated ? { animated: true } : undefined) + .resize({ width, withoutEnlargement: true }) + .webp({ quality: 80 }) + .toBuffer(); +} + +// Cold path shared by both the per-page resolver and the prefetch pool: fetch +// the remote image, resize + encode to webp, and write it into the on-disk +// cache. NEVER throws — on any failure it logs a concise warning and returns +// false (caller falls back to passthrough). This is the single source of truth +// for the fetch+sharp+cache logic; do NOT duplicate it in the prefetch script. +async function encodeToCache(url: string, width: number, key: string): Promise { + const cacheFile = join(CACHE_DIR, `${key}.webp`); + try { + await ensureDirs(); + + // A hard timeout prevents one slow/hung remote server from stalling the + // build indefinitely (fetch has no default timeout) — on abort we fail + // soft to passthrough like any other error. + const res = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) }); + if (!res.ok) { + throw new Error(`HTTP ${res.status}`); + } + const input = Buffer.from(await res.arrayBuffer()); + + // Explicit width (no inferSize) so there is no render-time dimension fetch. + const output = await encodeImageBuffer(input, width); + + await writeFile(cacheFile, output); + return true; + } catch (err) { + const reason = err instanceof Error ? err.message : String(err); + // eslint-disable-next-line no-console + console.warn(`[optimizeImage] passthrough (${reason}): ${url}`); + // Negative-cache the failure so it isn't refetched: permanent for bad data, + // retry-after for transient network failures. Best-effort — a failed marker + // write just means we retry next time (still safe). + try { + await writeMarker(key, isDeterministicFailure(reason) ? 'miss' : 'slow'); + } catch { + // ignore + } + return false; + } +} + +/** + * Warm the on-disk cache for a single URL/width WITHOUT publishing into dist/ + * (dist is written per-page at render time). Cache hit -> no-op. Used by the + * prefetch pool. Returns whether an optimized webp exists in cache afterward. + * NEVER throws. + */ +export async function prefetchRemoteImage( + url: string, + { width }: ResolveOptions, +): Promise { + const key = cacheKey(url, width); + const cacheFile = join(CACHE_DIR, `${key}.webp`); + try { + await access(cacheFile); + return true; // already cached + } catch { + // not cached; check negative cache before spending a fetch + } + if (await negativeCacheHit(key)) return false; // known-bad / recently-slow + return encodeToCache(url, width, key); +} + +export async function publishFromCache(key: string): Promise { + if (published.has(key)) return; + const from = join(CACHE_DIR, `${key}.webp`); + const to = join(OUT_IMG_DIR, `${key}.webp`); + await ensureDirs(); + if (!existsSync(to)) { + await copyFile(from, to); + } + published.add(key); +} + +/** + * Resolve a remote image URL to a build-time optimized local webp, with an + * on-disk cache. NEVER throws: on any failure it logs a concise warning and + * returns the original remote URL (passthrough). + */ +export async function resolveRemoteImage( + url: string | null | undefined, + { width }: ResolveOptions, +): Promise { + if (!url) return { src: '', optimized: false }; + + const key = cacheKey(url, width); + const cacheFile = join(CACHE_DIR, `${key}.webp`); + + await ensureDirs(); + + // Warm path: cached optimized file exists (prefetch pool or a prior build/ + // page already encoded it) -> publish into dist/ + return immediately. + try { + await access(cacheFile); + await publishFromCache(key); + return { src: `${PUBLIC_IMG_URL}/${key}.webp`, optimized: true }; + } catch { + // not cached; fall through + } + + // Persistent negative cache (shared with the prefetch pool): a prior attempt + // marked this URL permanently bad (.miss) or recently-slow within the + // retry-after window (.slow). Passthrough WITHOUT refetching — this stops the + // known-bad / chronically-slow covers being refetched once per locale. + if (failedThisProcess.has(key) || (await negativeCacheHit(key))) { + return { src: url, optimized: false }; + } + + // Cold path: encode via the SAME implementation the prefetch pool uses. + // encodeToCache is fail-soft (never throws); false -> passthrough. + const ok = await encodeToCache(url, width, key); + if (!ok) { + failedThisProcess.add(key); + return { src: url, optimized: false }; + } + await publishFromCache(key); + return { src: `${PUBLIC_IMG_URL}/${key}.webp`, optimized: true }; +} + +/** Number of cached optimized images (diagnostic; safe if dir absent). */ +export async function cacheSize(): Promise { + try { + const files = await readdir(CACHE_DIR); + return files.filter((f) => f.endsWith('.webp')).length; + } catch { + return 0; + } +} From ae5bb3051fbd02fbed44995cfd492546486578b7 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 11:49:02 +0545 Subject: [PATCH 04/52] feat(blogs): co-locate images with content blogs/images/ + relative refs let astro:assets optimize natively (incl. animated GIF -> animated webp), replacing the custom local-image pipeline. --- blogs/2016-07-19-mapswipe-app.md | 2 +- blogs/2022-02-15-Mali-solid-waste.md | 2 +- .../2022-08-15-Madagascar-change-detection.md | 2 +- ...-01-31-tallying-community-contributions.md | 2 +- blogs/2023-08-22-investing-in-mapswipe.md | 12 ++--- blogs/2023-10-19-nigeria-building-data.md | 8 +-- blogs/2023-11-14-early-history-of-mapswipe.md | 2 +- .../2024-08-05-accessibility-improvements.md | 6 +-- blogs/2025-01-24-mapswipe-belgium-meetup.md | 12 ++--- ...ua-new-guinea-swiping-to-find-airstrips.md | 12 ++--- blogs/2026-01-19-mapswipe-2025-reflections.md | 48 ++++++++---------- .../images}/2016-07-19-MapSwipe-user.jpg | Bin .../2016-07-19-thanks-for-Maiduguri.jpg | Bin .../images}/2022-02-15-Mali-solid-waste.jpg | Bin ...2022-08-15-Madagascar-change-detection.jpg | Bin ...01-31-tallying-community-contributions.jpg | Bin .../images}/2023-08-22-community-page.jpg | Bin .../images}/2023-08-22-cover.jpg | Bin .../images}/2023-08-22-data-page.png | Bin .../images}/2023-08-22-noun-5960267.png | Bin .../images}/2023-08-22-validate.png | Bin .../images}/2023-08-22-website.png | Bin .../images}/2023-10-19-cover.jpg | Bin .../images}/2023-10-19-project-types.jpg | Bin .../images}/2023-10-19-tutorial.jpg | Bin .../images}/2023-10-19-volunteer.jpg | Bin .../images}/2023-11-14-cover.jpeg | Bin .../images}/2024-08-05-color-overlays.jpg | Bin .../images}/2024-08-05-cover.png | Bin .../images}/2024-08-05-with-icons.png | Bin .../2025-01-24-mapswipe-belgium-meetup-1.jpg | Bin .../2025-01-24-mapswipe-belgium-meetup-2.jpg | Bin .../2025-01-24-mapswipe-belgium-meetup-3.jpg | Bin .../2025-01-24-mapswipe-belgium-meetup-4.jpg | Bin .../2025-01-24-mapswipe-belgium-meetup-5.jpg | Bin .../images}/2025-04-03-cover.jpg | Bin .../images}/2025-04-03-papua-airstrips-1.jpg | Bin .../images}/2025-04-03-papua-airstrips-2.png | Bin .../images}/2025-04-03-papua-airstrips-3.png | Bin .../images}/2025-04-03-papua-airstrips-4.jpg | Bin .../images}/2025-04-03-papua-airstrips-5.jpg | Bin ...pswipe-2025-reflections-backend-revamp.png | Bin ...-2025-reflections-completeness-project.png | Bin ...ipe-2025-reflections-monthly-tech-call.png | Bin ...1-19-mapswipe-2025-reflections-roadmap.png | Bin ...swipe-2025-reflections-video-thumbnail.png | Bin ...-2025-reflections-view-streets-project.gif | Bin 47 files changed, 51 insertions(+), 57 deletions(-) rename {public/img/blogImages => blogs/images}/2016-07-19-MapSwipe-user.jpg (100%) rename {public/img/blogImages => blogs/images}/2016-07-19-thanks-for-Maiduguri.jpg (100%) rename {public/img/blogImages => blogs/images}/2022-02-15-Mali-solid-waste.jpg (100%) rename {public/img/blogImages => blogs/images}/2022-08-15-Madagascar-change-detection.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-01-31-tallying-community-contributions.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-community-page.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-cover.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-data-page.png (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-noun-5960267.png (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-validate.png (100%) rename {public/img/blogImages => blogs/images}/2023-08-22-website.png (100%) rename {public/img/blogImages => blogs/images}/2023-10-19-cover.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-10-19-project-types.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-10-19-tutorial.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-10-19-volunteer.jpg (100%) rename {public/img/blogImages => blogs/images}/2023-11-14-cover.jpeg (100%) rename {public/img/blogImages => blogs/images}/2024-08-05-color-overlays.jpg (100%) rename {public/img/blogImages => blogs/images}/2024-08-05-cover.png (100%) rename {public/img/blogImages => blogs/images}/2024-08-05-with-icons.png (100%) rename {public/img/blogImages => blogs/images}/2025-01-24-mapswipe-belgium-meetup-1.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-01-24-mapswipe-belgium-meetup-2.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-01-24-mapswipe-belgium-meetup-3.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-01-24-mapswipe-belgium-meetup-4.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-01-24-mapswipe-belgium-meetup-5.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-cover.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-papua-airstrips-1.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-papua-airstrips-2.png (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-papua-airstrips-3.png (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-papua-airstrips-4.jpg (100%) rename {public/img/blogImages => blogs/images}/2025-04-03-papua-airstrips-5.jpg (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-backend-revamp.png (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-completeness-project.png (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-roadmap.png (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png (100%) rename {public/img/blogImages => blogs/images}/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif (100%) diff --git a/blogs/2016-07-19-mapswipe-app.md b/blogs/2016-07-19-mapswipe-app.md index d15eb95f..f0fdcfbf 100644 --- a/blogs/2016-07-19-mapswipe-app.md +++ b/blogs/2016-07-19-mapswipe-app.md @@ -3,7 +3,7 @@ title: MapSwipe app lets public help deliver medical care to most vulnerable publishedDate: 2016-07-19 author: Médecins Sans Frontières (MSF) description: Médecins Sans Frontières (MSF) unveils a first-of-its-kind mobile phone app in which people across the globe can locate communities in remote parts of the world affected by natural disasters, disease outbreaks or conflict. -coverImage: /img/blogImages/2016-07-19-MapSwipe-user.jpg +coverImage: "./images/2016-07-19-MapSwipe-user.jpg" featured: false --- diff --git a/blogs/2022-02-15-Mali-solid-waste.md b/blogs/2022-02-15-Mali-solid-waste.md index b05c2848..01f6821c 100644 --- a/blogs/2022-02-15-Mali-solid-waste.md +++ b/blogs/2022-02-15-Mali-solid-waste.md @@ -3,7 +3,7 @@ title: Solid waste management in Mali - Sustaining livelihoods amidst COVID-19 s publishedDate: 2022-02-15 author: Jessica Bergmann description: To support economic livelihoods and resilience, the World Bank partnered with MapSwipe to identify solid waste in Bamako, Mali. -coverImage: /img/blogImages/2022-02-15-Mali-solid-waste.jpg +coverImage: "./images/2022-02-15-Mali-solid-waste.jpg" featured: false --- diff --git a/blogs/2022-08-15-Madagascar-change-detection.md b/blogs/2022-08-15-Madagascar-change-detection.md index c4fa5a97..8357878d 100644 --- a/blogs/2022-08-15-Madagascar-change-detection.md +++ b/blogs/2022-08-15-Madagascar-change-detection.md @@ -3,7 +3,7 @@ title: Change detection analysis in response to Cyclone Batsirai Madagascar publishedDate: 2022-08-15 author: Laurie Boobier description: To respond to the cyclone emergency in Madagascar, Médecins Sans Frontières (MSF) used a new MapSwipe method developed by the Heidelberg Institute of Geoinformation Technology (HeiGIT) and Laurent Savaete, a long-time MapSwipe software engineer. -coverImage: /img/blogImages/2022-08-15-Madagascar-change-detection.jpg +coverImage: "./images/2022-08-15-Madagascar-change-detection.jpg" featured: false --- diff --git a/blogs/2023-01-31-tallying-community-contributions.md b/blogs/2023-01-31-tallying-community-contributions.md index a303e335..34e77be6 100644 --- a/blogs/2023-01-31-tallying-community-contributions.md +++ b/blogs/2023-01-31-tallying-community-contributions.md @@ -3,7 +3,7 @@ title: Tallying the contributions of the MapSwipe community publishedDate: 2023-01-31 author: Dan Joseph and Kat Kinzer description: We are excited that the American Red Cross has supported the development and launch of new functionalities for contribution analytics including the concept of groups which allow users to aggregate tallies of their efforts. -coverImage: /img/blogImages/2023-01-31-tallying-community-contributions.jpg +coverImage: "./images/2023-01-31-tallying-community-contributions.jpg" featured: false --- diff --git a/blogs/2023-08-22-investing-in-mapswipe.md b/blogs/2023-08-22-investing-in-mapswipe.md index 4977576e..2b4c4831 100644 --- a/blogs/2023-08-22-investing-in-mapswipe.md +++ b/blogs/2023-08-22-investing-in-mapswipe.md @@ -3,7 +3,7 @@ title: "Investing in MapSwipe: Humanitarian technology, virtual volunteering, an publishedDate: 2023-08-22 author: Kat Kinzer description: To bolster and expand the impact of MapSwipe, the American Red Cross has supported upgrades to the app. -coverImage: /img/blogImages/2023-08-22-cover.jpg +coverImage: "./images/2023-08-22-cover.jpg" featured: false --- @@ -29,13 +29,13 @@ The MapSwipe app is open source, which means that its code is made public under Glad you asked! While artificial intelligence and machine learning hold great promise for accelerating mapping efforts, we have not yet reached the point where human insight and oversight is no longer needed. There is still a significant need for human judgment and discretion when validating map data, assessing quality, and ensuring responsible data practices. As AI and ML progress, our goal is to augment human abilities rather than replace them entirely. -![generic icon to represent artificial intelligence](/img/blogImages/2023-08-22-noun-5960267.png) +![generic icon to represent artificial intelligence](./images/2023-08-22-noun-5960267.png) ## MapSwipe Data Outputs MapSwipe provides volunteers with satellite imagery of specific areas of interest from around the world. Depending on a project's objectives, volunteers are asked to identify and locate various features on the ground, detect changes in environments or structures, or validate the accuracy of existing mapped data. Each completed project creates data that can be used for humanitarian mapping or research purposes. -![screen grab of the data page on the MapSwipe website](/img/blogImages/2023-08-22-data-page.png) +![screen grab of the data page on the MapSwipe website](./images/2023-08-22-data-page.png) All MapSwipe data outputs are open and available. They can be searched and downloaded from MapSwipe’s [data page](https://mapswipe.org/en/data/). @@ -49,19 +49,19 @@ To bolster and expand that impact, the American Red Cross has supported upgrades As a community-driven platform that crowdsources results, MapSwipe relies on the dedication of its volunteers. MapSwipe volunteers and partners can now easily track their contribution stats, as well as see how their efforts fit into the bigger picture on the new [Community page](https://community.mapswipe.org/) launched earlier this year. Details such as the number of tasks completed, number of organizations supported, and other impact metrics are refreshed daily. In addition, a new functionality allows groups of volunteers to aggregate their collective contributions to app projects. -![screen grab of the community page on the MapSwipe website](/img/blogImages/2023-08-22-community-page.jpg) +![screen grab of the community page on the MapSwipe website](./images/2023-08-22-community-page.jpg) ### MapSwipe website refresh The [MapSwipe website](https://mapswipe.org/en/) has been given a modern, visually-appealing makeover. The new design makes it easier for new volunteers to learn about the app and improved navigation and intuitive layouts help visitors find information relevant to them whether they want to get involved at an individual or community level, partner as an organization with MapSwipe, or access all app data outputs. -![screen grab of the landing page on the MapSwipe website](/img/blogImages/2023-08-22-website.png) +![screen grab of the landing page on the MapSwipe website](./images/2023-08-22-website.png) ### Enhanced customization of projects Behind the scenes, project creators can add more information into project tutorials, better supporting volunteers in their learning journey. Additionally, the Validate project type now has configurable answer options and sub-options, allowing more detailed quality assessment of mapped areas. These increases in flexibility expand the types of mapping MapSwipe supports. -![screen grabs from app showing validate project type with new sub options](/img/blogImages/2023-08-22-validate.png) +![screen grabs from app showing validate project type with new sub options](./images/2023-08-22-validate.png) ## How you can get involved! diff --git a/blogs/2023-10-19-nigeria-building-data.md b/blogs/2023-10-19-nigeria-building-data.md index 411ae922..bf280b4e 100644 --- a/blogs/2023-10-19-nigeria-building-data.md +++ b/blogs/2023-10-19-nigeria-building-data.md @@ -3,7 +3,7 @@ title: Using MapSwipe to validate OSM building quality data in Nigeria publishedDate: 2023-10-19 author: Paul Knight description: Using the MapSwipe data, the Nigerian Red Cross are now able to see the accuracy of the previous mapping and any edits that need to be made to the community map as it is today. -coverImage: /img/blogImages/2023-10-19-cover.jpg +coverImage: "./images/2023-10-19-cover.jpg" featured: false --- @@ -17,7 +17,7 @@ We have previously written ([1](https://medium.com/digital-and-innovation-at-bri With new states and communities selected this year, the Nigerian Red Cross is leading on similar activities conducted previously. One of which is through Digital Community Mapping for the Enhanced Vulnerability Capacity Assessment (EVCA). More information about what this is can be found in a [past blog](https://medium.com/digital-and-innovation-at-british-red-cross/first-time-this-community-has-been-on-a-map-nigeria-f592906b7be1). -![A woman standing outside and wearing a red British Red Cross ball cap and branded t-shirt looks at her phone.](/img/blogImages/2023-10-19-volunteer.jpg) +![A woman standing outside and wearing a red British Red Cross ball cap and branded t-shirt looks at her phone.](./images/2023-10-19-volunteer.jpg) _Digital Community Mapping — Carter Olayemi/Nigerian Red Cross_ Previously, the Nigerian Red Cross followed the Missing Maps methodology as presented on the [Missing Maps website](https://www.missingmaps.org/). First, digital volunteers, trace aerial imagery to create a basic digital map on OpenStreetMap. Next, using various data collection tools, community members with local knowledge add detail to the map, such as medical facilities or schools, and rank their capacity or vulnerability, with any public data added to OpenStreetMap. Lastly, the map data is used in products for local disaster risk management planning, for advocacy with stakeholders, and as reference maps during emergency responses. @@ -30,7 +30,7 @@ In one of the new states that the programme is expanding to, we saw that there w But how? We used MapSwipe — a mobile app, which allows users to **Find** and flag features such as building or roads in imagery, which then speeds up the mapping process as remote mappers map areas which are known to have a features in them. In the past year the project types have diversified and now include **Compare** imagery and **Validate** quality of mapping. For the Nigeria Programme where there was existing map data, we opted to use the Validate project type. -![Graphic showing different MapSwipe project types: find, compare, and validate.](/img/blogImages/2023-10-19-project-types.jpg) +![Graphic showing different MapSwipe project types: find, compare, and validate.](./images/2023-10-19-project-types.jpg) _Different MapSwipe projects — MapSwipe_ For communities without any previous mapping Nigerian Red Cross conducted a mapathon, as in the previous phase of the programme. @@ -40,7 +40,7 @@ In September 2023, the Nigerian Red Cross held a mapathon and mapswipe-athon, in - **5,733** buildings were validated using the Validate project type on Mapswipe. - **1,766** Buildings were mapped at the mapathon using the [HOT Tasking Manager](https://tasks.hotosm.org/). -![The screens of a tutorial for the MapSwipe validate project type.](/img/blogImages/2023-10-19-tutorial.jpg) +![The screens of a tutorial for the MapSwipe validate project type.](./images/2023-10-19-tutorial.jpg) _Tutorial for a MapSwipe Validate project type — MapSwipe_ Using the MapSwipe data, the Nigerian Red Cross are now able to see the accuracy of the previous mapping and any edits that need to be made to the community map as it is today. diff --git a/blogs/2023-11-14-early-history-of-mapswipe.md b/blogs/2023-11-14-early-history-of-mapswipe.md index 597ad44b..0b57fd7f 100644 --- a/blogs/2023-11-14-early-history-of-mapswipe.md +++ b/blogs/2023-11-14-early-history-of-mapswipe.md @@ -3,7 +3,7 @@ title: "The early history of MapSwipe" publishedDate: 2023-11-14 author: Ivan Gayton, Pete Masters, and Dan Joseph description: "The real story of MapSwipe is the volunteers who give their time to improve humanitarian mapping, the agencies that use the data to save and improve lives, and the incredible developers who continue to build and maintain MapSwipe and make it a key tool in the open mapping ecosystem. However, we hope people sometimes remember how we originally built MapSwipe." -coverImage: /img/blogImages/2023-11-14-cover.jpeg +coverImage: "./images/2023-11-14-cover.jpeg" featured: true --- diff --git a/blogs/2024-08-05-accessibility-improvements.md b/blogs/2024-08-05-accessibility-improvements.md index 0d90286d..f768df02 100644 --- a/blogs/2024-08-05-accessibility-improvements.md +++ b/blogs/2024-08-05-accessibility-improvements.md @@ -3,7 +3,7 @@ title: "Enhancing Accessibility in MapSwipe" publishedDate: 2024-08-05 author: Jenny Chan description: "The American Red Cross is excited to announce the launch of new functionality in the MapSwipe app. We supported an enhancement to make MapSwipe more accessible and easy to use for a wider community of users." -coverImage: /img/blogImages/2024-08-05-cover.png +coverImage: "./images/2024-08-05-cover.png" featured: false --- @@ -15,7 +15,7 @@ The MapSwipe 'Find' project type has users swipe through satellite images to sea In the current version of the MapSwipe app, the only indication of the number of taps is through transparent color overlays. However, feedback provided by users noted that this format posed challenges for users with color blindness or when color filters, such as night mode, are turned on, making it difficult to swipe and contribute to projects effectively. -![A screen grab from the MapSwipe app showing the 'Find' type project with only a color overlay on tiles. It is hard to distinguish between the different overlays on different tiles.](/img/blogImages/2024-08-05-color-overlays.jpg) +![A screen grab from the MapSwipe app showing the 'Find' type project with only a color overlay on tiles. It is hard to distinguish between the different overlays on different tiles.](./images/2024-08-05-color-overlays.jpg) _The 'Find' type project with only a color overlay on tiles. Top right: green, middle right: yellow, middle left: red._ @@ -31,7 +31,7 @@ Our recent MapSwipe [update v2.2.10](https://github.com/mapswipe/mapswipe/releas - A question mark icon for areas that need further review. - A bad imagery icon for areas that cannot be assessed due to poor image quality. -![A screen grab from the MapSwipe app showing the updated 'Find' type project with both a color overlay and descriptive icons.](/img/blogImages/2024-08-05-with-icons.png) +![A screen grab from the MapSwipe app showing the updated 'Find' type project with both a color overlay and descriptive icons.](./images/2024-08-05-with-icons.png) _The updated 'Find' type project with both color overlay and descriptive icons. Top right: check mark, top left: question mark, and the rest of the tiles: bad imagery._ diff --git a/blogs/2025-01-24-mapswipe-belgium-meetup.md b/blogs/2025-01-24-mapswipe-belgium-meetup.md index 18d3d0cc..c84fbdfc 100644 --- a/blogs/2025-01-24-mapswipe-belgium-meetup.md +++ b/blogs/2025-01-24-mapswipe-belgium-meetup.md @@ -3,7 +3,7 @@ title: MapSwipe Belgium Meetup publishedDate: 2025-02-20 author: Amar Shahi description: This article summarizes the key highlights of Mapswipe Belgium meetup 2024. -coverImage: /img/blogImages/2025-01-24-mapswipe-belgium-meetup-1.jpg +coverImage: "./images/2025-01-24-mapswipe-belgium-meetup-1.jpg" featured: true --- @@ -13,7 +13,7 @@ In mid-November 2024, the MapSwipe community gathered in Brussels for a four-day ## Day 1: Reflecting on Technology and Challenges The meetup kicked off with a deep dive into MapSwipe’s history and memories. From its beginnings in 2015 as a crowdsourcing tool to its current role in global humanitarian mapping, The group then revisited the platform’s history, reflecting on milestones such as its 2015 prototype, the 2016 app launch, and the evolution of the app, website refresh and now [MapSwipe for Web](https://web.mapswipe.org/#/en). -![Meetup Image One](/img/blogImages/2025-01-24-mapswipe-belgium-meetup-1.jpg) +![Meetup Image One](./images/2025-01-24-mapswipe-belgium-meetup-1.jpg) After reflecting on Mapswipe’s history from a prototype in 2015 to the mobile and web apps it is today, the latter half of the day was dedicated to examining the technical aspects of MapSwipe. The group reflected on the platform’s evolution from a web-based prototype in 2015 to the current app and web versions. The group also discussed various technical challenges that currently exist. Key technical topics included: * **System Complexity:** Participants discussed how the platform’s growing features have increased complexity, creating challenges in onboarding developers and maintaining the ecosystem. @@ -40,7 +40,7 @@ The third day of the meetup was dedicated to MapSwipe’s sustainability—fundi The day began with Amar presenting a recap of the financial overview of MapSwipe for the year 2024. The presentation also focused on the detailed contributions made by each organization and a check on MapSwipe financial health. There was also a discussion on any potential funding that the participants are willing to make in 2025. Check the detailed presentation [here](https://docs.google.com/presentation/d/1lWwv82gemDybxFjAF_vUJ4H58tpI1Vwh/edit#slide=id.g3145f004ab7_0_172). -![Meetup Image Two](/img/blogImages/2025-01-24-mapswipe-belgium-meetup-2.jpg) +![Meetup Image Two](./images/2025-01-24-mapswipe-belgium-meetup-2.jpg) The second half of Day 3 focused on a brainstorming session on funding ideas. The participants were divided into 3 groups: @@ -81,12 +81,12 @@ The roadmap was divided into 2 sections: Through rigorous discussion and voting, the participants decided on the following [roadmap](https://app.mural.co/t/katkinzer9715/m/katkinzer9715/1731585514072/0423daffb9fc8a287f3591a4db711e8c90474c8f): -![Meetup Image Three](/img/blogImages/2025-01-24-mapswipe-belgium-meetup-3.jpg) -![Meetup Image Four](/img/blogImages/2025-01-24-mapswipe-belgium-meetup-4.jpg) +![Meetup Image Three](./images/2025-01-24-mapswipe-belgium-meetup-3.jpg) +![Meetup Image Four](./images/2025-01-24-mapswipe-belgium-meetup-4.jpg) ## In Conclusion As we look to the future, the insights and plans generated during this workshop will help shape MapSwipe’s trajectory. Whether you’re a mapper, an organization, or a supporter, there’s a place for you in this journey. Together, we can continue to map what matters and make every swipe count. -![Meetup Image Five](/img/blogImages/2025-01-24-mapswipe-belgium-meetup-5.jpg) +![Meetup Image Five](./images/2025-01-24-mapswipe-belgium-meetup-5.jpg) #### Important Links from the MapSwipe Meetup 2024 Here are all the key resources and links shared during the meetup: diff --git a/blogs/2025-04-03-papua-new-guinea-swiping-to-find-airstrips.md b/blogs/2025-04-03-papua-new-guinea-swiping-to-find-airstrips.md index a0d3713f..9c132d82 100644 --- a/blogs/2025-04-03-papua-new-guinea-swiping-to-find-airstrips.md +++ b/blogs/2025-04-03-papua-new-guinea-swiping-to-find-airstrips.md @@ -3,7 +3,7 @@ title: Swiping to find airstrips in Papua New Guinea publishedDate: 2025-04-03 author: Jana Bauerová, based on Nashath Naufal’s work description: What would you do in the middle of the jungle in Papua New Guinea if you needed medical care? Volunteers have identified airstrips Médecins Sans Frontières can use to get to hard-to-reach communities. -coverImage: /img/blogImages/2025-04-03-cover.jpg +coverImage: "./images/2025-04-03-cover.jpg" featured: true --- @@ -11,7 +11,7 @@ What would you do in the middle of the jungle in Papua New Guinea if you had an Many settlements on the islands of Papua New Guinea are in areas so remote that there is no road and limited to no connections between communities. As a matter of fact, the only access to health may be via aid organizations using rural airstrips. Around eight million Papua New Guineans rely on rural airstrips (2024), according to the Mission Aviation Fellowship (MAF). However, owing to the challenges of economic sustainability in rural regions, many of those airstrips have become defunct. -![An aerial view of a grass airstrip in a forested area.](/img/blogImages/2025-04-03-papua-airstrips-1.jpg) +![An aerial view of a grass airstrip in a forested area.](./images/2025-04-03-papua-airstrips-1.jpg) [Médecins Sans Frontières (MSF)](https://www.msf.org/), a humanitarian medical organization and a founding member of the [Missing Maps ](https://www.missingmaps.org/)project, uses small airstrips to deliver supplies and personnel to remote regions. For MSF, it is thus essential to know whether there are existing airstrips and where they are located. In a MapSwipe project, MSF asked volunteers to identify rural airstrips in the Jiwaka province, where aid can be delivered to and from. @@ -31,7 +31,7 @@ The contributors seemed to be confused with other features, misidentifying fores The study compared the findings from the Mapswipe dataset against four different data sources: OpenStreetMap (OSM), [MAF in Papua New Guinea database, OurAirports](https://data.humdata.org/dataset/papua-new-guinea-airports?), and an internal MSF database. From analysing these datasets, it could be concluded that there are a total of 11 unique airstrips in Jiwaka Province. OSM was the most comprehensive dataset and contained 10 out of 11 airstrips. -![A map showing the locations of airstrips from different databases.](/img/blogImages/2025-04-03-papua-airstrips-2.png) +![A map showing the locations of airstrips from different databases.](./images/2025-04-03-papua-airstrips-2.png) Adapting the validation size to increase the number of contributors seeing each tile to five helped to improve accuracy. In the second project iteration, the contributors managed to detect all 11 airstrips within Jiwaka province, including four airstrips that were missed in the first project. The results of Project 2 are accessible on the MapSwipe website here: [Find - Airstrips in Jiwaka Province (2) | MapSwipe ](https://mapswipe.org/en/projects/-O-k29apT1Q8V8IAMrkS/) @@ -45,17 +45,17 @@ In both projects, MSF faced limitations due to satellite imagery: 1. The satellite imagery available for the projects consisted of a mosaic of different images, each taken on its own date. Retrieving the exact dates of every piece of imagery is not easy, and they do not match like perfect puzzle pieces. 2. Because of the humid climate in Papua New Guinea, a lot of areas are covered by clouds. Some regions, such as Tabibuga, are rarely cloud-free. Hence, cloud-free satellite imagery was not available for use in the MapSwipe projects, which made remote analysis of the airstrips difficult. The ‘latest’ imagery in some regions dated back to more than 12 years ago. -![Three satellite imagery tiles.](/img/blogImages/2025-04-03-papua-airstrips-3.png) +![Three satellite imagery tiles.](./images/2025-04-03-papua-airstrips-3.png) Most Mapswipe projects focus on identifying or validating buildings. This type of map feature was likely new to most MapSwipe contributors. Even though the tutorial for the projects integrated different examples to distinguish various classes of land use from airstrips, the MapSwipe contributors still identified forested land or river features as airstrips. The confusion could have arisen from roads, tracks, or clearings standing out from the forest background. More examples of forested land with roads that are distinctly different colours would possibly help in the tutorial. Even though an example of a river was included in the tutorial, it still was detected by MapSwipe contributors as an airstrip, so a solitary previous example does not necessarily ensure a correct visual interpretation. -![Several rural buildings.](/img/blogImages/2025-04-03-papua-airstrips-4.jpg) +![Several rural buildings.](./images/2025-04-03-papua-airstrips-4.jpg) ## Why mapping matters for health People in the Jiwaka province suffer from many types of violence, including election-related, inter-community, domestic, sexual and gender-based violence, and repercussions due to accusations of sorcery. In Spring 2024, MSF wanted to start a new project in the province to aid survivors of tribal and sexual and gender-based violence. As part of an initial exploration, the field team noted that there were no maps for some of the areas. This led to a GIS Adviser asking for a Missing Maps campaign. Soon, it was launched to help map basic features, enlisting volunteers. For example, in February 2024, volunteers from the Czech and Slovak Missing Maps community mapped shelters at a hybrid mapathon in Prague with support from international validators. -![Six people in a small room are engrossed in their work on laptops. Visible on the screens are the OSM iD editor.](/img/blogImages/2025-04-03-papua-airstrips-5.jpg) +![Six people in a small room are engrossed in their work on laptops. Visible on the screens are the OSM iD editor.](./images/2025-04-03-papua-airstrips-5.jpg) In June 2024, the MSF teams began working on a community-based approach to healthcare by strengthening the capacity of existing medical services, and this Mapswipe analysis was launched. The location of all airstrips is vital to ensuring that survivors of violence in the Jiwaka Province can have access to health. diff --git a/blogs/2026-01-19-mapswipe-2025-reflections.md b/blogs/2026-01-19-mapswipe-2025-reflections.md index 69aa6b05..1863e5d9 100644 --- a/blogs/2026-01-19-mapswipe-2025-reflections.md +++ b/blogs/2026-01-19-mapswipe-2025-reflections.md @@ -3,7 +3,7 @@ title: "Reflecting on MapSwipe in 2025: A Year of Growth and What Comes Next" publishedDate: 2026-01-19 author: Nicole Siggins description: MapSwipe had many successes in 2025 from new project types, to structural revamps. Nicole and Amar, from the MapSwipe Governance Team, get together to celebrate and discuss what's next. -coverImage: /img/blogImages/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png +coverImage: "./images/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png" featured: true --- @@ -37,11 +37,10 @@ Overall, the focus of the backend revamp was to make sure that the project manag ## *“The focus of the backend revamp was to make sure that the project manager experience is enhanced.”*
- An image showing what the MapSwipe project management page looks like in both the old and new backend. -
MapSwipe now has a new and improved backend!
+ +![An image showing what the MapSwipe project management page looks like in both the old and new backend.](./images/2026-01-19-mapswipe-2025-reflections-backend-revamp.png) + +
MapSwipe now has a new and improved backend!
**Nicole** @@ -64,11 +63,10 @@ It's nice that people who are into the technical side of MapSwipe have a place, ## *“We needed a dedicated space where technical contributors could come together and share knowledge.”*
- A group of MapSwipe technical contributors together on a monthly video call. -
MapSwipe technical contributors now have a consistent place to meet to share knowledge and ask questions. + +![A group of MapSwipe technical contributors together on a monthly video call.](./images/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png) + +
MapSwipe technical contributors now have a consistent place to meet to share knowledge and ask questions.
@@ -87,12 +85,10 @@ Yeah, absolutely. So this was a year for MapSwipe where quite a few different pr This is a project type where volunteers using MapSwipe are able to look at images from street level to then indicate some type of aspect of the features in that image. So for example, volunteers could look at images and indicate something like, is the road paved or not paved? Or is there something visible in this image? So for example, solid waste. Can you see piles of garbage? Things like that. You can also use it to indicate what type of features are in the image. So for example, is this building a hospital or a school? And it can also be used for things like, what is the surface quality of the road? So it's a really interesting project to be able to remotely view places of the world as if you were there on the street.
- A gif of the View Streets project. Zooming around at street level imagery to see if there are piles of trash on the street in the image. -
Validating the world as if you were there. + +![A gif of the View Streets project. Zooming around at street level imagery to see if there are piles of trash on the street in the image.](./images/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif) + +
Validating the world as if you were there.
@@ -113,11 +109,10 @@ Historically with MapSwipe, a lot of the project types have been looking FOR som ## *“It’s very easy to query for something that IS, but finding what isn’t has always been more difficult.”*
- An image of the Completeness MapSwipe project type, showing a blue overlay to indicate where OpenStreetMap data currently exists on top of aerial imagery. -
The Completeness project type helps get OpenStreetMap data gaps filled. + +![An image of the Completeness MapSwipe project type, showing a blue overlay to indicate where OpenStreetMap data currently exists on top of aerial imagery.](./images/2026-01-19-mapswipe-2025-reflections-completeness-project.png) + +
The Completeness project type helps get OpenStreetMap data gaps filled.
@@ -143,11 +138,10 @@ One of the main things is it's important for us to manage the knowledge of the s ## *“A one year maintenance contract was too short. Two years gives us enough time to manage and pass on knowledge.”*
- An image of the MapSwipe 2025 roadmap, in a tool called mural, which uses differently colored virtual post it notes to track brainstorming ideas. -
Progress was made on MapSwipe’s goals by upping the maintenance contract from 1 to 2 years. + +![An image of the MapSwipe 2025 roadmap, in a tool called mural, which uses differently colored virtual post it notes to track brainstorming ideas.](./images/2026-01-19-mapswipe-2025-reflections-roadmap.png) + +
Progress was made on MapSwipe’s goals by upping the maintenance contract from 1 to 2 years.
diff --git a/public/img/blogImages/2016-07-19-MapSwipe-user.jpg b/blogs/images/2016-07-19-MapSwipe-user.jpg similarity index 100% rename from public/img/blogImages/2016-07-19-MapSwipe-user.jpg rename to blogs/images/2016-07-19-MapSwipe-user.jpg diff --git a/public/img/blogImages/2016-07-19-thanks-for-Maiduguri.jpg b/blogs/images/2016-07-19-thanks-for-Maiduguri.jpg similarity index 100% rename from public/img/blogImages/2016-07-19-thanks-for-Maiduguri.jpg rename to blogs/images/2016-07-19-thanks-for-Maiduguri.jpg diff --git a/public/img/blogImages/2022-02-15-Mali-solid-waste.jpg b/blogs/images/2022-02-15-Mali-solid-waste.jpg similarity index 100% rename from public/img/blogImages/2022-02-15-Mali-solid-waste.jpg rename to blogs/images/2022-02-15-Mali-solid-waste.jpg diff --git a/public/img/blogImages/2022-08-15-Madagascar-change-detection.jpg b/blogs/images/2022-08-15-Madagascar-change-detection.jpg similarity index 100% rename from public/img/blogImages/2022-08-15-Madagascar-change-detection.jpg rename to blogs/images/2022-08-15-Madagascar-change-detection.jpg diff --git a/public/img/blogImages/2023-01-31-tallying-community-contributions.jpg b/blogs/images/2023-01-31-tallying-community-contributions.jpg similarity index 100% rename from public/img/blogImages/2023-01-31-tallying-community-contributions.jpg rename to blogs/images/2023-01-31-tallying-community-contributions.jpg diff --git a/public/img/blogImages/2023-08-22-community-page.jpg b/blogs/images/2023-08-22-community-page.jpg similarity index 100% rename from public/img/blogImages/2023-08-22-community-page.jpg rename to blogs/images/2023-08-22-community-page.jpg diff --git a/public/img/blogImages/2023-08-22-cover.jpg b/blogs/images/2023-08-22-cover.jpg similarity index 100% rename from public/img/blogImages/2023-08-22-cover.jpg rename to blogs/images/2023-08-22-cover.jpg diff --git a/public/img/blogImages/2023-08-22-data-page.png b/blogs/images/2023-08-22-data-page.png similarity index 100% rename from public/img/blogImages/2023-08-22-data-page.png rename to blogs/images/2023-08-22-data-page.png diff --git a/public/img/blogImages/2023-08-22-noun-5960267.png b/blogs/images/2023-08-22-noun-5960267.png similarity index 100% rename from public/img/blogImages/2023-08-22-noun-5960267.png rename to blogs/images/2023-08-22-noun-5960267.png diff --git a/public/img/blogImages/2023-08-22-validate.png b/blogs/images/2023-08-22-validate.png similarity index 100% rename from public/img/blogImages/2023-08-22-validate.png rename to blogs/images/2023-08-22-validate.png diff --git a/public/img/blogImages/2023-08-22-website.png b/blogs/images/2023-08-22-website.png similarity index 100% rename from public/img/blogImages/2023-08-22-website.png rename to blogs/images/2023-08-22-website.png diff --git a/public/img/blogImages/2023-10-19-cover.jpg b/blogs/images/2023-10-19-cover.jpg similarity index 100% rename from public/img/blogImages/2023-10-19-cover.jpg rename to blogs/images/2023-10-19-cover.jpg diff --git a/public/img/blogImages/2023-10-19-project-types.jpg b/blogs/images/2023-10-19-project-types.jpg similarity index 100% rename from public/img/blogImages/2023-10-19-project-types.jpg rename to blogs/images/2023-10-19-project-types.jpg diff --git a/public/img/blogImages/2023-10-19-tutorial.jpg b/blogs/images/2023-10-19-tutorial.jpg similarity index 100% rename from public/img/blogImages/2023-10-19-tutorial.jpg rename to blogs/images/2023-10-19-tutorial.jpg diff --git a/public/img/blogImages/2023-10-19-volunteer.jpg b/blogs/images/2023-10-19-volunteer.jpg similarity index 100% rename from public/img/blogImages/2023-10-19-volunteer.jpg rename to blogs/images/2023-10-19-volunteer.jpg diff --git a/public/img/blogImages/2023-11-14-cover.jpeg b/blogs/images/2023-11-14-cover.jpeg similarity index 100% rename from public/img/blogImages/2023-11-14-cover.jpeg rename to blogs/images/2023-11-14-cover.jpeg diff --git a/public/img/blogImages/2024-08-05-color-overlays.jpg b/blogs/images/2024-08-05-color-overlays.jpg similarity index 100% rename from public/img/blogImages/2024-08-05-color-overlays.jpg rename to blogs/images/2024-08-05-color-overlays.jpg diff --git a/public/img/blogImages/2024-08-05-cover.png b/blogs/images/2024-08-05-cover.png similarity index 100% rename from public/img/blogImages/2024-08-05-cover.png rename to blogs/images/2024-08-05-cover.png diff --git a/public/img/blogImages/2024-08-05-with-icons.png b/blogs/images/2024-08-05-with-icons.png similarity index 100% rename from public/img/blogImages/2024-08-05-with-icons.png rename to blogs/images/2024-08-05-with-icons.png diff --git a/public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-1.jpg b/blogs/images/2025-01-24-mapswipe-belgium-meetup-1.jpg similarity index 100% rename from public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-1.jpg rename to blogs/images/2025-01-24-mapswipe-belgium-meetup-1.jpg diff --git a/public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-2.jpg b/blogs/images/2025-01-24-mapswipe-belgium-meetup-2.jpg similarity index 100% rename from public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-2.jpg rename to blogs/images/2025-01-24-mapswipe-belgium-meetup-2.jpg diff --git a/public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-3.jpg b/blogs/images/2025-01-24-mapswipe-belgium-meetup-3.jpg similarity index 100% rename from public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-3.jpg rename to blogs/images/2025-01-24-mapswipe-belgium-meetup-3.jpg diff --git a/public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-4.jpg b/blogs/images/2025-01-24-mapswipe-belgium-meetup-4.jpg similarity index 100% rename from public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-4.jpg rename to blogs/images/2025-01-24-mapswipe-belgium-meetup-4.jpg diff --git a/public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-5.jpg b/blogs/images/2025-01-24-mapswipe-belgium-meetup-5.jpg similarity index 100% rename from public/img/blogImages/2025-01-24-mapswipe-belgium-meetup-5.jpg rename to blogs/images/2025-01-24-mapswipe-belgium-meetup-5.jpg diff --git a/public/img/blogImages/2025-04-03-cover.jpg b/blogs/images/2025-04-03-cover.jpg similarity index 100% rename from public/img/blogImages/2025-04-03-cover.jpg rename to blogs/images/2025-04-03-cover.jpg diff --git a/public/img/blogImages/2025-04-03-papua-airstrips-1.jpg b/blogs/images/2025-04-03-papua-airstrips-1.jpg similarity index 100% rename from public/img/blogImages/2025-04-03-papua-airstrips-1.jpg rename to blogs/images/2025-04-03-papua-airstrips-1.jpg diff --git a/public/img/blogImages/2025-04-03-papua-airstrips-2.png b/blogs/images/2025-04-03-papua-airstrips-2.png similarity index 100% rename from public/img/blogImages/2025-04-03-papua-airstrips-2.png rename to blogs/images/2025-04-03-papua-airstrips-2.png diff --git a/public/img/blogImages/2025-04-03-papua-airstrips-3.png b/blogs/images/2025-04-03-papua-airstrips-3.png similarity index 100% rename from public/img/blogImages/2025-04-03-papua-airstrips-3.png rename to blogs/images/2025-04-03-papua-airstrips-3.png diff --git a/public/img/blogImages/2025-04-03-papua-airstrips-4.jpg b/blogs/images/2025-04-03-papua-airstrips-4.jpg similarity index 100% rename from public/img/blogImages/2025-04-03-papua-airstrips-4.jpg rename to blogs/images/2025-04-03-papua-airstrips-4.jpg diff --git a/public/img/blogImages/2025-04-03-papua-airstrips-5.jpg b/blogs/images/2025-04-03-papua-airstrips-5.jpg similarity index 100% rename from public/img/blogImages/2025-04-03-papua-airstrips-5.jpg rename to blogs/images/2025-04-03-papua-airstrips-5.jpg diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-backend-revamp.png b/blogs/images/2026-01-19-mapswipe-2025-reflections-backend-revamp.png similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-backend-revamp.png rename to blogs/images/2026-01-19-mapswipe-2025-reflections-backend-revamp.png diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-completeness-project.png b/blogs/images/2026-01-19-mapswipe-2025-reflections-completeness-project.png similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-completeness-project.png rename to blogs/images/2026-01-19-mapswipe-2025-reflections-completeness-project.png diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png b/blogs/images/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png rename to blogs/images/2026-01-19-mapswipe-2025-reflections-monthly-tech-call.png diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-roadmap.png b/blogs/images/2026-01-19-mapswipe-2025-reflections-roadmap.png similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-roadmap.png rename to blogs/images/2026-01-19-mapswipe-2025-reflections-roadmap.png diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png b/blogs/images/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png rename to blogs/images/2026-01-19-mapswipe-2025-reflections-video-thumbnail.png diff --git a/public/img/blogImages/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif b/blogs/images/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif similarity index 100% rename from public/img/blogImages/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif rename to blogs/images/2026-01-19-mapswipe-2025-reflections-view-streets-project.gif From 8f591e1237b730a2d16cf42e228de0a9d1d555ac Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 11:49:02 +0545 Subject: [PATCH 05/52] chore(locales): drop stale *_old.json 18 unreferenced backup files; one had broken the i18next glob. --- public/locales/cs/common_old.json | 1 - public/locales/cs/data_old.json | 16 ---------------- public/locales/cs/project_old.json | 15 --------------- public/locales/de/common_old.json | 1 - public/locales/de/data_old.json | 16 ---------------- public/locales/de/project_old.json | 15 --------------- public/locales/en/common_old.json | 1 - public/locales/en/data_old.json | 12 ------------ public/locales/en/home_old.json | 0 public/locales/en/project_old.json | 15 --------------- public/locales/hu/common_old.json | 3 --- public/locales/hu/data_old.json | 16 ---------------- public/locales/hu/project_old.json | 15 --------------- public/locales/ne/common_old.json | 3 --- public/locales/ne/data_old.json | 16 ---------------- public/locales/ne/project_old.json | 15 --------------- public/locales/pt/data_old.json | 16 ---------------- public/locales/pt/project_old.json | 15 --------------- 18 files changed, 191 deletions(-) delete mode 100644 public/locales/cs/common_old.json delete mode 100644 public/locales/cs/data_old.json delete mode 100644 public/locales/cs/project_old.json delete mode 100644 public/locales/de/common_old.json delete mode 100644 public/locales/de/data_old.json delete mode 100644 public/locales/de/project_old.json delete mode 100644 public/locales/en/common_old.json delete mode 100644 public/locales/en/data_old.json delete mode 100644 public/locales/en/home_old.json delete mode 100644 public/locales/en/project_old.json delete mode 100644 public/locales/hu/common_old.json delete mode 100644 public/locales/hu/data_old.json delete mode 100644 public/locales/hu/project_old.json delete mode 100644 public/locales/ne/common_old.json delete mode 100644 public/locales/ne/data_old.json delete mode 100644 public/locales/ne/project_old.json delete mode 100644 public/locales/pt/data_old.json delete mode 100644 public/locales/pt/project_old.json diff --git a/public/locales/cs/common_old.json b/public/locales/cs/common_old.json deleted file mode 100644 index 0967ef42..00000000 --- a/public/locales/cs/common_old.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/public/locales/cs/data_old.json b/public/locales/cs/data_old.json deleted file mode 100644 index cfca417d..00000000 --- a/public/locales/cs/data_old.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "active-projects": "Aktivní", - "finished-projects": "Dokončeno", - "type-street-title": "", - "type-check-completeness-title": "", - "build-area": "Najít", - "footprint": "Ověření", - "change-detection": "Porovnání", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "", - "download-projects-with-geometry-heading": "Projekty s geometrií", - "type-locate-view-title": "" -} diff --git a/public/locales/cs/project_old.json b/public/locales/cs/project_old.json deleted file mode 100644 index 7bcfb2fc..00000000 --- a/public/locales/cs/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "Uživatelé", - "users-description": "Tento datový soubor obsahuje informace o jednotlivých příspěvcích jednotlivých uživatelů. Dozvíte se tak například o nejaktivnějších uživatelích tohoto projektu. (Všimněte si, že před použitím tohoto souboru .gz jej musíte rozbalit.)", - "date": "{{date, datetime}}", - "active-projects": "Aktivní", - "finished-projects": "Dokončeno", - "build-area": "Hledat", - "footprint": "Validovat", - "change-detection": "Porovnat", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "" -} diff --git a/public/locales/de/common_old.json b/public/locales/de/common_old.json deleted file mode 100644 index 0967ef42..00000000 --- a/public/locales/de/common_old.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/public/locales/de/data_old.json b/public/locales/de/data_old.json deleted file mode 100644 index 6f095d22..00000000 --- a/public/locales/de/data_old.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "active-projects": "Aktiv", - "finished-projects": "Erledigt", - "type-street-title": "", - "type-check-completeness-title": "", - "build-area": "Finden", - "footprint": "Bestätigen", - "change-detection": "Vergleichen", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "", - "download-projects-with-geometry-heading": "Projekte mit Geometrie", - "type-locate-view-title": "" -} diff --git a/public/locales/de/project_old.json b/public/locales/de/project_old.json deleted file mode 100644 index 0dcf6189..00000000 --- a/public/locales/de/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "Benutzer", - "users-description": "Dieser Datensatz enthält Informationen zu den einzelnen Beiträgen pro Benutzer. Dadurch erfahren Sie beispielsweise die aktivsten Benutzer dieses Projekts. (Beachte das du die .gz Dateien erst entpacken musst bevor du sie verwenden kannst.)", - "date": "{{date, datetime}}", - "active-projects": "Aktiv", - "finished-projects": "Beendet", - "build-area": "Finden", - "footprint": "Bestätigen", - "change-detection": "Vergleichen", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "" -} diff --git a/public/locales/en/common_old.json b/public/locales/en/common_old.json deleted file mode 100644 index 0967ef42..00000000 --- a/public/locales/en/common_old.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/public/locales/en/data_old.json b/public/locales/en/data_old.json deleted file mode 100644 index 27115f14..00000000 --- a/public/locales/en/data_old.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ready-to-process": "Ready to Process", - "draft": "Draft", - "discarded": "Discarded", - "processing-failed": "Proccessing Failed", - "processed": "Processed", - "ready-to-published": "Ready to Publish", - "publishing-failed": "Publishing Failed", - "paused": "Paused", - "download-projects-with-geometry-heading": "Projects with Geometry", - "type-locate-view-title": "" -} diff --git a/public/locales/en/home_old.json b/public/locales/en/home_old.json deleted file mode 100644 index e69de29b..00000000 diff --git a/public/locales/en/project_old.json b/public/locales/en/project_old.json deleted file mode 100644 index 0985b55d..00000000 --- a/public/locales/en/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "Users", - "users-description": "This dataset contains information on the individual contributions per user. This tells you for instance the most active users of this project. (Note that you need to unzip this .gz file before you can use it.)", - "date": "{{date, datetime}}", - "active-projects": "Active", - "finished-projects": "Finished", - "build-area": "Find Features", - "footprint": "Validate Footprints", - "change-detection": "Compare Dates", - "completeness": "Check Completeness", - "validate-image": "Access Images", - "street": "View Streets", - "published": "Published", - "withdrawn": "Withdrawn" -} diff --git a/public/locales/hu/common_old.json b/public/locales/hu/common_old.json deleted file mode 100644 index cec013f7..00000000 --- a/public/locales/hu/common_old.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "twitter": "" -} diff --git a/public/locales/hu/data_old.json b/public/locales/hu/data_old.json deleted file mode 100644 index 49343905..00000000 --- a/public/locales/hu/data_old.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "active-projects": "Aktív", - "finished-projects": "Befejezett", - "type-street-title": "", - "type-check-completeness-title": "", - "build-area": "Keresés", - "footprint": "Érvényesítés", - "change-detection": "Összehasonlítás", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "", - "download-projects-with-geometry-heading": "Projektek alakzatfájllal", - "type-locate-view-title": "" -} diff --git a/public/locales/hu/project_old.json b/public/locales/hu/project_old.json deleted file mode 100644 index 25915ef7..00000000 --- a/public/locales/hu/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "Felhasználók", - "users-description": "Ez az adatkészlet az egyes felhasználók egyedi közreműködéseit tartalmazza. Ebből lehet felismerni például a projekt legaktívabb felhasználóit. (Ne feledje, hogy használat előtt ki kell tömörítenie a .gz fájlt.)", - "date": "{{date, datetime}}", - "active-projects": "Aktív", - "finished-projects": "Befejezett", - "build-area": "Keresés", - "footprint": "Érvényesítés", - "change-detection": "Összehasonlítás", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "" -} diff --git a/public/locales/ne/common_old.json b/public/locales/ne/common_old.json deleted file mode 100644 index 3fcb18d5..00000000 --- a/public/locales/ne/common_old.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "twitter": "Twitter" -} diff --git a/public/locales/ne/data_old.json b/public/locales/ne/data_old.json deleted file mode 100644 index ece19d5f..00000000 --- a/public/locales/ne/data_old.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "active-projects": "सक्रिय", - "finished-projects": "समाप्त", - "type-street-title": "", - "type-check-completeness-title": "", - "build-area": "खोजी", - "footprint": "प्रमाणीकरण", - "change-detection": "तुलना", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "", - "download-projects-with-geometry-heading": "ज्यामिति का साथ परियोजनाहरू", - "type-locate-view-title": "" -} diff --git a/public/locales/ne/project_old.json b/public/locales/ne/project_old.json deleted file mode 100644 index 54372e94..00000000 --- a/public/locales/ne/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "प्रयोगकर्ताहरू", - "users-description": "यस डेटासेटमा प्रति प्रयोगकर्ताको व्यक्तिगत योगदानहरूको जानकारी समावेश गरिएको छ। उदाहरणका लागि यसले तपाईंलाई यस परियोजनाको सबैभन्दा सक्रिय प्रयोगकर्ताहरूको बारेमा बताउँछ। (ध्यान दिनुहोस् कि तपाईंले यो .gz फाइललाई प्रयोग गर्न अघि अनजिप गर्न आवश्यक छ।)", - "date": "{{date, datetime}}", - "active-projects": "सक्रिय", - "finished-projects": "समाप्त", - "build-area": "खोजी ", - "footprint": "प्रमाणीकरण", - "change-detection": "तुलना", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "" -} diff --git a/public/locales/pt/data_old.json b/public/locales/pt/data_old.json deleted file mode 100644 index f0de5e62..00000000 --- a/public/locales/pt/data_old.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "active-projects": "Ativo", - "finished-projects": "Terminado", - "type-street-title": "", - "type-check-completeness-title": "", - "build-area": "Encontrar", - "footprint": "Validar", - "change-detection": "Comparar", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "", - "download-projects-with-geometry-heading": "Projetos com geometria", - "type-locate-view-title": "" -} diff --git a/public/locales/pt/project_old.json b/public/locales/pt/project_old.json deleted file mode 100644 index 922c5b54..00000000 --- a/public/locales/pt/project_old.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "users-title": "Utilizadores", - "users-description": "Este conjunto de dados contém informações sobre as contribuições individuais por utilizador. Isto indica-lhe, por exemplo, os utilizadores mais ativos deste projeto. (Note que é necessário descompactar este ficheiro .gz antes de o poder utilizar).", - "date": "{{date, datetime}}", - "active-projects": "Ativo", - "finished-projects": "Terminado", - "build-area": "Encontrar", - "footprint": "Validar", - "change-detection": "Comparar", - "completeness": "", - "validate-image": "", - "street": "", - "published": "", - "withdrawn": "" -} From 43e21b9a86a7449385c52820623089f435d9f80b Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 11:49:02 +0545 Subject: [PATCH 06/52] feat(data): incremental fetch-data Trim the query to rendered fields (~20% smaller), paginate 100/page, refetch only projects whose modifiedAt/lastContributionDate changed (~50s -> ~6s warm). staticData.json doubles as the cache. --- scripts/fetchData.ts | 400 +++++++++++++++++++++++-------------------- 1 file changed, 213 insertions(+), 187 deletions(-) diff --git a/scripts/fetchData.ts b/scripts/fetchData.ts index c9eb0f1b..9679978d 100644 --- a/scripts/fetchData.ts +++ b/scripts/fetchData.ts @@ -4,224 +4,254 @@ import path from 'path'; import { AllDataQuery } from '../generated/types'; const datadir = path.join(__dirname, '../fullData'); +const outputPath = path.join(datadir, 'staticData.json'); const baseUrl = process.env.MAPSWIPE_API_ENDPOINT || 'http://localhost:8000/'; const GRAPHQL_ENDPOINT = `${baseUrl}graphql/`; // TODO: Validate the app environment env to be 'DEV', 'ALPHA-X' or 'PROD' const COOKIE_NAME = `MAPSWIPE-${process.env.APP_ENVIRONMENT}-CSRFTOKEN`; const pipelineType = process.env.PIPELINE_TYPE; +// Full project fetch is paged at 100; the cheap id+modifiedAt scan is paged +// large (tiny rows), so it costs 2-3 requests instead of ~25. +const PROJECTS_PAGE_SIZE = 100; +const SCAN_PAGE_SIZE = 1000; +// Force a full re-fetch (ignore the incremental cache). Use periodically as a +// safety net for changes that don't bump `project.modifiedAt`. +const forceFull = process.env.FORCE_FULL_FETCH === '1' || process.env.FORCE_FULL_FETCH === 'true'; + const graphQLClient = new GraphQLClient(GRAPHQL_ENDPOINT); const dummyData: AllDataQuery = { - publicProjects: { - results: [], - totalCount: 0, - }, + publicProjects: { results: [], totalCount: 0 }, communityStats: { - id: '0', - totalContributors: 1, - totalUserGroups: 1, - totalSwipes: 1, - }, - publicOrganizations: { - results: [], + id: '0', totalContributors: 1, totalUserGroups: 1, totalSwipes: 1, }, + publicOrganizations: { results: [] }, globalExportAssets: [], }; -const query = gql` - query AllData { - publicProjects( - filters: { - status: { - inList: [PUBLISHED, FINISHED], - }, - }, - pagination: { limit: 9999 }, - ) { - results { - id - exportAggregatedResultsWithGeometry { - id - fileSize - file { - name - url - } - mimetype - } - exportAggregatedResults { - id - fileSize - file { - name - url - } - mimetype - } - exportAreaOfInterest { - id - fileSize - file { - name - url - } - mimetype - } - exportGroups { - id - fileSize - file { - name - url - } - mimetype - } - exportHistory { - id - fileSize - file { - name - url - } - mimetype - modifiedAt - } - exportResults { - id - fileSize - file { - name - url - } - mimetype - } - exportTasks { - id - fileSize - file { - name - url - } - mimetype - } - exportUsers { - id - file { - url - name - } - mimetype - fileSize - } - exportHotTaskingManagerGeometries { - id - file { - url - name - } - mimetype - fileSize - } - exportModerateToHighAgreementYesMaybeGeometries { - id - file { - url - name - } - mimetype - fileSize - } - name - firebaseId - image { - id - file { - name - url - } - createdAt - } - description - requestingOrganization { - id - name - modifiedAt - } - progress - status - projectType - createdAt - modifiedAt - region - requestingOrganizationId - numberOfContributorUsers - totalArea - aoiGeometry { - centroid - id - totalArea - bbox - } - aoiGeometryInputAsset { - id - fileSize - file { - name - url - } - mimetype - } - } +// Only fields the pages render (see the page slim functions). Shared between the +// full and by-id project queries so the selection can't drift. +const PROJECT_FIELDS = ` + id + exportAggregatedResultsWithGeometry { id fileSize file { url } mimetype } + exportAggregatedResults { id fileSize file { url } mimetype } + exportAreaOfInterest { id fileSize file { url } mimetype } + exportGroups { id fileSize file { url } mimetype } + exportHistory { id fileSize file { url } mimetype modifiedAt } + exportResults { id fileSize file { url } mimetype } + exportTasks { id fileSize file { url } mimetype } + exportUsers { id fileSize file { url } mimetype } + exportHotTaskingManagerGeometries { id fileSize file { url } mimetype } + exportModerateToHighAgreementYesMaybeGeometries { id fileSize file { url } mimetype } + name + firebaseId + image { file { url } } + description + requestingOrganization { id name } + progress + status + projectType + createdAt + modifiedAt + lastContributionDate + region + requestingOrganizationId + numberOfContributorUsers + aoiGeometry { centroid id totalArea bbox } + aoiGeometryInputAsset { id fileSize file { url } mimetype } +`; + +const STATUS_FILTER = 'status: { inList: [PUBLISHED, FINISHED] }'; + +// Cheap change-detection scan: id + the two timestamps that signal a change. +// `modifiedAt` covers project edits; `lastContributionDate` covers new swipes/ +// contributions that update progress without bumping `modifiedAt`. +const scanQuery = gql` + query ProjectScan($limit: Int!, $offset: Int!) { + publicProjects(filters: { ${STATUS_FILTER} }, pagination: { limit: $limit, offset: $offset }) { + results { id modifiedAt lastContributionDate } totalCount } - communityStats { - id - totalContributors - totalUserGroups - totalSwipes - } - publicOrganizations(pagination: { limit: 9999 }) { - results { - id - name - } + } +`; + +// Full fetch of all projects (cold / forced-full path). +const projectsQuery = gql` + query PublicProjects($limit: Int!, $offset: Int!) { + publicProjects(filters: { ${STATUS_FILTER} }, pagination: { limit: $limit, offset: $offset }) { + results { ${PROJECT_FIELDS} } + totalCount } - globalExportAssets { - type - lastUpdatedAt - fileSize - file { - url - name - } + } +`; + +// Full fetch restricted to a set of ids (incremental path). +const projectsByIdsQuery = gql` + query ProjectsByIds($ids: [ID!], $limit: Int!, $offset: Int!) { + publicProjects(filters: { ${STATUS_FILTER}, id: { inList: $ids } }, pagination: { limit: $limit, offset: $offset }) { + results { ${PROJECT_FIELDS} } + totalCount } } `; +// The non-project data — small, singular, fetched every run. +const restQuery = gql` + query RestData { + communityStats { id totalContributors totalSwipes } + publicOrganizations(pagination: { limit: 9999 }) { results { id name } } + globalExportAssets { type lastUpdatedAt fileSize file { url name } } + } +`; + +type PublicProjects = NonNullable; +type ProjectResult = NonNullable[number]; + +async function fetchAllProjects(): Promise { + const results: ProjectResult[] = []; + let offset = 0; + let totalCount = 0; + for (;;) { + // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(projectsQuery, { + limit: PROJECTS_PAGE_SIZE, offset, + })) as AllDataQuery; + const pageResults = page.publicProjects?.results ?? []; + totalCount = page.publicProjects?.totalCount ?? totalCount; + results.push(...pageResults); + console.log(` full-fetch projects ${results.length}/${totalCount}`); + offset += PROJECTS_PAGE_SIZE; + if (pageResults.length < PROJECTS_PAGE_SIZE || results.length >= totalCount) { + break; + } + } + return { results, totalCount }; +} + +// A project is considered changed when either timestamp differs. Note the +// generated `AllDataQuery` type predates `lastContributionDate`; it is present +// at runtime (fetched in both the scan and PROJECT_FIELDS) so reads are safe. +type ChangeKeyFields = { modifiedAt?: string | null; lastContributionDate?: string | null }; +function changeSignature(p: ChangeKeyFields): string { + return `${p.modifiedAt ?? ''}|${p.lastContributionDate ?? ''}`; +} + +type ScanRow = { id: string; modifiedAt?: string | null; lastContributionDate?: string | null }; +type ScanResponse = { + publicProjects?: { results?: ScanRow[] | null; totalCount?: number | null } | null; +}; + +// Cheap scan → Map of the current published/finished set. +async function scanProjects(): Promise> { + const map = new Map(); + let offset = 0; + let totalCount = 0; + for (;;) { + // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(scanQuery, { + limit: SCAN_PAGE_SIZE, offset, + })) as ScanResponse; + const pageResults = page.publicProjects?.results ?? []; + totalCount = page.publicProjects?.totalCount ?? totalCount; + pageResults.forEach((p) => map.set(p.id, changeSignature(p))); + offset += SCAN_PAGE_SIZE; + if (pageResults.length < SCAN_PAGE_SIZE || map.size >= totalCount) { + break; + } + } + return map; +} + +// Full fetch for a specific set of ids, batched by inList. +async function fetchProjectsByIds(ids: string[]): Promise { + const out: ProjectResult[] = []; + for (let i = 0; i < ids.length; i += PROJECTS_PAGE_SIZE) { + const batch = ids.slice(i, i + PROJECTS_PAGE_SIZE); + // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(projectsByIdsQuery, { + ids: batch, limit: PROJECTS_PAGE_SIZE, offset: 0, + })) as AllDataQuery; + out.push(...(page.publicProjects?.results ?? [])); + } + return out; +} + +// Load the previous run's output as the incremental cache (id + modifiedAt + +// full data). In CI this file is restored from actions/cache before the run. +function loadPreviousProjects(): Map | null { + try { + const prev = JSON.parse(fs.readFileSync(outputPath, 'utf8')) as AllDataQuery; + const results = prev.publicProjects?.results ?? []; + if (results.length === 0) { + return null; + } + return new Map(results.map((p) => [p.id, p])); + } catch { + return null; + } +} + +async function fetchProjectsIncrementally(): Promise { + const prevById = forceFull ? null : loadPreviousProjects(); + if (!prevById) { + console.log(forceFull ? 'FORCE_FULL_FETCH set — full fetch' : 'no usable cache — full fetch'); + return fetchAllProjects(); + } + + const scan = await scanProjects(); + const changedIds: string[] = []; + scan.forEach((sig, id) => { + const prev = prevById.get(id); + if (!prev || changeSignature(prev) !== sig) { + changedIds.push(id); + } + }); + + const fresh = changedIds.length > 0 ? await fetchProjectsByIds(changedIds) : []; + const freshById = new Map(fresh.map((p) => [p.id, p])); + + // Assemble in the current scan order; deleted projects (in cache, not in + // scan) are naturally excluded. Missing new ids (edge race) are dropped. + const results: ProjectResult[] = []; + scan.forEach((_modifiedAt, id) => { + const project = freshById.get(id) ?? prevById.get(id); + if (project) { + results.push(project); + } + }); + + const reused = scan.size - changedIds.length; + let deleted = 0; + prevById.forEach((_project, id) => { + if (!scan.has(id)) { + deleted += 1; + } + }); + console.log(`incremental: ${changedIds.length} changed/new, ${reused} reused, ${deleted} deleted (of ${scan.size} current)`); + + return { results, totalCount: scan.size }; +} + async function getCsrfTokenValue() { const healthcheckUrl = `${baseUrl}health-check/?format=json`; try { const healthcheckData = await fetch(healthcheckUrl, { credentials: 'include' }); - const cookiesToSet = ( healthcheckData.headers as (Headers & { getSetCookie: () => string[] }) ).getSetCookie(); - const parsedCookiesToSet = cookiesToSet .flatMap((item: string) => item.split('; ')) .map((item: string) => { const [key, value] = item.split('='); return { key, value } as { key: string, value: string }; }); - const csrfToken = parsedCookiesToSet.find((item) => item.key === COOKIE_NAME); return csrfToken?.value; } catch (err) { // eslint-disable-next-line no-console console.error('failed to do the healthcheck', healthcheckUrl); } - return undefined; } @@ -231,28 +261,26 @@ async function fetchAndWriteData() { data = dummyData; } else { console.log('Fetching data from GraphQL endpoint from ', GRAPHQL_ENDPOINT); - const csrfTokenValue = await getCsrfTokenValue(); if (!csrfTokenValue) { console.error('Could not fetch crsf token'); return; } const referer = process.env.MAPSWIPE_REFERER_ENDPOINT ?? baseUrl; - console.log('CSRF Token exists:', !!csrfTokenValue); console.log('Referer exists:', !!referer); - graphQLClient.setHeader('X-CSRFToken', csrfTokenValue); graphQLClient.setHeader('Cookie', `${COOKIE_NAME}=${csrfTokenValue}`); graphQLClient.setHeader('Referer', referer); - data = (await graphQLClient.request(query)) as AllDataQuery; + + const publicProjects = await fetchProjectsIncrementally(); + const rest = (await graphQLClient.request(restQuery)) as AllDataQuery; + data = { ...rest, publicProjects }; } - // ensure the `data` directory exists if (!fs.existsSync(datadir)) { fs.mkdirSync(datadir, { recursive: true }); } - const outputPath = path.join(__dirname, '../fullData/staticData.json'); fs.writeFileSync(outputPath, JSON.stringify(data, null, 2)); console.log(`Data written to ${outputPath}`); console.log(`Top-level keys: ${Object.keys(data ?? {}).join(', ')}`); @@ -260,9 +288,7 @@ async function fetchAndWriteData() { const lastModifiedEpoch = Date.now(); if (process.env.GITHUB_ENV) { - console.log( - 'Setting MAPSWIPE_API_LAST_MODIFIED_EPOCH in GitHub Actions environment', - ); + console.log('Setting MAPSWIPE_API_LAST_MODIFIED_EPOCH in GitHub Actions environment'); fs.appendFileSync( process.env.GITHUB_ENV, `MAPSWIPE_API_LAST_MODIFIED_EPOCH=${lastModifiedEpoch}\n`, From 51f15615d44fec0fc00112a7eac3a131ac7dd677 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 12:37:37 +0545 Subject: [PATCH 07/52] feat(astro): restore incremental layer; fix activation + sitemap bugs Kept as owned code (nothing else does render-skip). Activation now requires ASTRO_INCREMENTAL=1 from the orchestrator; the sitemap is regenerated over the merged tree. No-op 5s; one-project change 6s. --- astro/.gitignore | 5 + astro/package.json | 1 + astro/scripts/incremental-build.mjs | 394 ++++++++++++++++++ astro/src/lib/incremental.ts | 193 +++++++++ .../pages/[locale]/blogs/[slug]/index.astro | 29 +- astro/src/pages/[locale]/blogs/index.astro | 32 +- astro/src/pages/[locale]/data/index.astro | 22 +- .../pages/[locale]/get-involved/index.astro | 16 +- astro/src/pages/[locale]/index.astro | 34 +- astro/src/pages/[locale]/privacy/index.astro | 15 +- astro/src/pages/[locale]/projects/[id].astro | 12 +- 11 files changed, 739 insertions(+), 14 deletions(-) create mode 100644 astro/scripts/incremental-build.mjs create mode 100644 astro/src/lib/incremental.ts diff --git a/astro/.gitignore b/astro/.gitignore index e0968e73..bfe01188 100644 --- a/astro/.gitignore +++ b/astro/.gitignore @@ -1,7 +1,12 @@ # build output dist/ +dist-cache/ .astro/ +# incremental build state (code-hash, manifest, per-page shards). +# In CI, restore/save this dir alongside dist/ so warm builds skip unchanged pages. +.astro-incremental/ + # deps node_modules/ diff --git a/astro/package.json b/astro/package.json index 2663709e..0ad67937 100644 --- a/astro/package.json +++ b/astro/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "astro dev", "build": "node scripts/prefetch-images.mjs && astro build", + "build:incremental": "node scripts/incremental-build.mjs", "prefetch": "node scripts/prefetch-images.mjs", "preview": "astro preview", "astro": "astro" diff --git a/astro/scripts/incremental-build.mjs b/astro/scripts/incremental-build.mjs new file mode 100644 index 00000000..2a9d8429 --- /dev/null +++ b/astro/scripts/incremental-build.mjs @@ -0,0 +1,394 @@ +#!/usr/bin/env node +/** + * Incremental static-build orchestration for the Astro app. + * + * `astro build` (output: 'static') re-renders every path returned by every + * getStaticPaths on every build. To avoid that we: + * 1. compute a global `codeHash` over code/content inputs (NOT the data), + * 2. move the previous build's `dist/` aside (restored from CI cache), + * 3. run the image prefetch + `astro build` with ASTRO_INCREMENTAL=1 — + * getStaticPaths (via src/lib/incremental.ts) reads the codeHash + + * previous manifest and returns ONLY the pages whose code or data + * changed, + * 4. merge the previous `dist/` *under* the fresh one (fresh wins), + * 5. prune project/blog page dirs whose record no longer exists, + * 6. regenerate the sitemap over the MERGED tree (the fresh build's sitemap + * only covers the pages rendered this run), + * 7. persist the new manifest for the next run. + * + * codeHash unchanged + data unchanged => ~0 pages rendered (compile only). + * codeHash changed => everything rebuilt (fresh authoritative). + * + * ASTRO_INCREMENTAL=1 is the ONLY thing that activates the per-page selection: + * a plain `npm run build` (which never sets it) is always a full build, even + * with a stale `.astro-incremental/` on disk. + * + * Always-full pages: routes WITHOUT a selectPaths-wired getStaticPaths are + * (cheaply) re-emitted on every run — the root/locale-less redirect stubs, the + * root index.astro, 404.astro, and the /data-explorer.json static endpoint. + * That last one matters: the endpoint has no getStaticPaths, so the JSON + * dataset regenerates on every incremental build and stays in sync with + * whatever data change triggered the run. + * + * This mirrors the Next app's scripts/incremental-build.mjs; the orchestration + * (manifest, move-aside, merge, prune, codeHash, sitemap) is framework- + * agnostic. The per-page selection lives in getStaticPaths via + * src/lib/incremental.ts. + */ +import { spawnSync } from 'node:child_process'; +import { createHash } from 'node:crypto'; +import { + closeSync, + cpSync, + existsSync, + mkdirSync, + openSync, + readFileSync, + readSync, + readdirSync, + renameSync, + rmSync, + statSync, + writeFileSync, +} from 'node:fs'; +import { join, relative, sep } from 'node:path'; + +const ROOT = process.cwd(); +const DIST = join(ROOT, 'dist'); +const DIST_CACHE = join(ROOT, 'dist-cache'); +const INCR_DIR = join(ROOT, '.astro-incremental'); +const SHARD_DIR = join(INCR_DIR, 'shards'); +const MANIFEST_PATH = join(INCR_DIR, 'manifest.json'); +const CODE_HASH_PATH = join(INCR_DIR, 'code-hash.txt'); + +// Keep in sync with astro.config.mjs (site + i18n.locales + i18n.defaultLocale). +// Not imported from there: astro.config.mjs pulls in integrations (a .ts file +// among them), which plain Node can't load. +const SITE = 'https://mapswipe.org'; +const LOCALES = ['en', 'ne', 'hu', 'de', 'cs', 'pt']; +const DEFAULT_LOCALE = 'en'; + +const startTime = process.hrtime.bigint(); +const elapsed = () => `${(Number(process.hrtime.bigint() - startTime) / 1e9).toFixed(1)}s`; +const log = (msg) => process.stdout.write(`[incremental-build +${elapsed()}] ${msg}\n`); + +function bin(name) { + const local = join(ROOT, 'node_modules', '.bin', name); + return existsSync(local) ? local : name; +} + +function run(command, args, extraEnv = {}) { + const resolved = command === 'node' ? 'node' : bin(command); + log(`$ ${command} ${args.join(' ')}`); + const before = process.hrtime.bigint(); + const result = spawnSync(resolved, args, { + stdio: 'inherit', + env: { ...process.env, ...extraEnv }, + shell: false, + }); + log(` └ ${command} took ${(Number(process.hrtime.bigint() - before) / 1e9).toFixed(1)}s`); + if (result.status !== 0) { + throw new Error(`${command} exited with ${result.status ?? result.signal}`); + } +} + +// --------------------------------------------------------------------------- +// 1. codeHash — hash of every code/content input that affects rendered output. +// Includes src/, astro.config.mjs, package.json, and the repo-root +// public/locales (the i18next glob in src/i18n reads ../public/locales — +// there is no astro/public/locales copy or symlink). +// EXCLUDES the data axis (fullData/ and blogs/ are tracked per-page via +// propsHash) and all build artifacts (dist/, .astro/, .image-cache/, +// .astro-incremental/) plus the generated optimized images (public/_img/). +// --------------------------------------------------------------------------- +function collectFiles(dir, acc) { + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const full = join(dir, entry.name); + if (entry.isDirectory()) { + collectFiles(full, acc); + } else if (entry.isFile()) { + acc.push(full); + } + } + return acc; +} + +function computeCodeHash() { + const files = []; + + // Recurse src/. + const srcDir = join(ROOT, 'src'); + if (existsSync(srcDir)) { + collectFiles(srcDir, files); + } + + // Translations affect output. They live at the REPO ROOT's public/locales + // (shared with the Next app; read via the ../../../public/locales glob in + // src/i18n/index.ts). Skip astro/public/ entirely — public/_img/ is + // generated per-build and other static assets are copied verbatim, so they + // never change what getStaticPaths returns. + const localesDir = join(ROOT, '..', 'public', 'locales'); + if (existsSync(localesDir)) { + collectFiles(localesDir, files); + } + + // Named root config/manifest files. + for (const name of ['astro.config.mjs', 'package.json']) { + const p = join(ROOT, name); + if (existsSync(p)) { + files.push(p); + } + } + + files.sort(); + const hash = createHash('sha1'); + for (const file of files) { + // Label with the ROOT-relative path (e.g. `../public/locales/...` for + // the repo-root translations) so the hash is machine-independent. + hash.update(relative(ROOT, file)); + hash.update('\0'); + hash.update(readFileSync(file)); + hash.update('\0'); + } + return hash.digest('hex'); +} + +// --------------------------------------------------------------------------- +// helpers for merge + prune +// --------------------------------------------------------------------------- +function readShards() { + const merged = {}; + if (!existsSync(SHARD_DIR)) { + return merged; + } + for (const name of readdirSync(SHARD_DIR)) { + if (!name.endsWith('.json')) { + continue; + } + const shard = JSON.parse(readFileSync(join(SHARD_DIR, name), 'utf8')); + Object.assign(merged, shard); + } + return merged; +} + +function isDir(p) { + try { + return statSync(p).isDirectory(); + } catch { + return false; + } +} + +/** + * Remove project/blog page directories that are no longer in the current path + * set (deleted projects/blogs). Static/aggregate pages are never tracked as a + * project/blog dir here, so they are never pruned. Orphaned optimised images + * for deleted projects are left behind (unreferenced, harmless). + * + * key format matches selectPaths: `${locale}/projects/${id}` and + * `${locale}/blogs/${slug}`. + */ +function pruneDeletions(validKeys) { + if (!isDir(DIST)) { + return 0; + } + let removed = 0; + const ASSET_DIRS = new Set(['_astro', '_img', 'img', 'locales']); + for (const localeEntry of readdirSync(DIST, { withFileTypes: true })) { + if (!localeEntry.isDirectory() || ASSET_DIRS.has(localeEntry.name)) { + continue; + } + const locale = localeEntry.name; + for (const section of ['projects', 'blogs']) { + const sectionDir = join(DIST, locale, section); + if (!isDir(sectionDir)) { + continue; + } + for (const child of readdirSync(sectionDir, { withFileTypes: true })) { + if (!child.isDirectory()) { + continue; // e.g. blogs/index.html (the list page) + } + const key = `${locale}/${section}/${child.name}`; + if (!validKeys.has(key)) { + rmSync(join(sectionDir, child.name), { recursive: true, force: true }); + removed += 1; + } + } + } + } + return removed; +} + +// --------------------------------------------------------------------------- +// sitemap regeneration over the MERGED tree +// +// On the merge path the fresh build's sitemap-0.xml covers ONLY the pages +// rendered this run (e.g. 13 URLs after a 1-project change) and, having been +// copied over the cached full sitemap, would silently shrink the published one +// to a sliver. So after merging we regenerate it from the merged dist itself, +// emitting the exact structure @astrojs/sitemap produces with our i18n config +// (verified structurally identical to a full build's sitemap): +// - one per page dir's index.html, +// - pages grouped by path-minus-locale-prefix; every member of a group +// carries the SAME list (all +// members, href-sorted; no x-default — our config doesn't set one), +// - locale-less pages (the root /) count as DEFAULT_LOCALE, which is why the +// root group has 7 alternates (/, /en/, + 5 others) with hreflang "en" +// twice — @astrojs/sitemap does the same, +// - the config-redirect stubs (/blogs/, /data/, ... meta-refresh pages) are +// EXCLUDED, as astro excludes redirect routes; the root / — also a +// meta-refresh page but a real page route (src/pages/index.astro) — is +// INCLUDED, again matching astro, +// - 404.html is naturally excluded (not an index.html). +// --------------------------------------------------------------------------- + +/** True when the file starts as one of our meta-refresh redirect pages. */ +function isMetaRefreshStub(filePath) { + const fd = openSync(filePath, 'r'); + try { + const buf = Buffer.alloc(512); + const n = readSync(fd, buf, 0, 512, 0); + return buf.toString('utf8', 0, n).includes('http-equiv="refresh"'); + } finally { + closeSync(fd); + } +} + +function regenerateSitemap() { + // 1. Collect every page URL from the merged dist. + const urlPaths = []; + for (const entry of readdirSync(DIST, { recursive: true })) { + const rel = String(entry); + if (rel !== 'index.html' && !rel.endsWith(`${sep}index.html`)) { + continue; + } + const dir = rel === 'index.html' ? '' : rel.slice(0, -`${sep}index.html`.length); + const urlPath = dir === '' ? '/' : `/${dir.split(sep).join('/')}/`; + // Config-redirect stubs are excluded from the sitemap; the root '/' + // (also a meta-refresh page, but a page route) is included. + if (urlPath !== '/' && isMetaRefreshStub(join(DIST, rel))) { + continue; + } + urlPaths.push(urlPath); + } + urlPaths.sort(); + + // 2. Group by path-minus-locale-prefix; hreflang from the prefix (or the + // default locale for unprefixed paths like '/'). + const groups = new Map(); // groupKey -> [{ urlPath, hreflang }] + for (const urlPath of urlPaths) { + const [first, ...rest] = urlPath.slice(1).split('/'); + const isLocale = LOCALES.includes(first); + const groupKey = isLocale ? `/${rest.join('/')}` : urlPath; + const hreflang = isLocale ? first : DEFAULT_LOCALE; + if (!groups.has(groupKey)) { + groups.set(groupKey, []); + } + groups.get(groupKey).push({ urlPath, hreflang }); + } + + // 3. Emit (single line, same as @astrojs/sitemap). + const loc = (urlPath) => `${SITE}${urlPath}`; + const parts = []; + for (const urlPath of urlPaths) { + const [first, ...rest] = urlPath.slice(1).split('/'); + const groupKey = LOCALES.includes(first) ? `/${rest.join('/')}` : urlPath; + const group = groups.get(groupKey); + const alternates = group.length > 1 + ? group + .map(({ urlPath: p, hreflang }) => ( + `` + )) + .join('') + : ''; + parts.push(`${loc(urlPath)}${alternates}`); + } + const urlset = '' + + '' + + `${parts.join('')}`; + writeFileSync(join(DIST, 'sitemap-0.xml'), urlset); + writeFileSync( + join(DIST, 'sitemap-index.xml'), + '' + + '' + + `${SITE}/sitemap-0.xml`, + ); + return urlPaths.length; +} + +// --------------------------------------------------------------------------- +// main +// --------------------------------------------------------------------------- +function main() { + // 1. codeHash → file (read by getStaticPaths via src/lib/incremental.ts). + mkdirSync(INCR_DIR, { recursive: true }); + rmSync(SHARD_DIR, { recursive: true, force: true }); + const codeHash = computeCodeHash(); + writeFileSync(CODE_HASH_PATH, codeHash); + + let prevManifest = { codeHash: '', paths: {} }; + try { + prevManifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8')); + } catch { + // cold build + } + const codeChanged = prevManifest.codeHash !== codeHash; + log(`codeHash ${codeHash}${codeChanged ? ' (changed → full rebuild)' : ' (unchanged → data-only)'}`); + + // 2. Move the restored previous dist/ aside so astro build starts clean. + rmSync(DIST_CACHE, { recursive: true, force: true }); + if (existsSync(DIST)) { + renameSync(DIST, DIST_CACHE); + log('moved previous dist/ → dist-cache/'); + } else { + log('no previous dist/ (cold build)'); + } + + // 3. Prefetch images, then build only the changed/new paths. + // ASTRO_INCREMENTAL=1 is what arms selectPaths — without it (any plain + // `astro build`) every getStaticPaths returns all its candidates. + run('node', ['scripts/prefetch-images.mjs']); + run('astro', ['build'], { ASTRO_INCREMENTAL: '1' }); + + // 4. Merge. On a full rebuild (codeChanged) the fresh tree already contains + // every current page, so there is nothing to merge and no stale page to + // prune — just discard the cache. On a data-only build the fresh tree is + // small (the changed pages + re-emitted images + shared JS/CSS) while the + // cache holds ~all 14.7k HTML, so overlay the SMALL fresh tree onto the + // LARGE cached one (fresh wins) via a copy into the cache, then rename the + // merged cache back to dist/ — keeping the 14.7k unchanged files in place. + const manifestPaths = readShards(); + if (codeChanged) { + rmSync(DIST_CACHE, { recursive: true, force: true }); + log('full rebuild — fresh dist/ is authoritative, skipped merge/prune/sitemap'); + } else if (existsSync(DIST_CACHE)) { + cpSync(DIST, DIST_CACHE, { recursive: true, force: true }); + rmSync(DIST, { recursive: true, force: true }); + renameSync(DIST_CACHE, DIST); + log('merged fresh dist/ onto cached tree'); + + // 5. Prune deleted projects/blogs from the merged tree. + const validKeys = new Set(Object.keys(manifestPaths)); + const prunedCount = pruneDeletions(validKeys); + log(`pruned ${prunedCount} deleted page dir(s); ${validKeys.size} tracked pages`); + + // 6. The fresh build's sitemap only lists the pages rendered THIS run + // and just clobbered the cached full one — regenerate it over the + // merged tree. + const urlCount = regenerateSitemap(); + log(`regenerated sitemap over merged tree (${urlCount} URLs)`); + } else { + log('no cached dist/ — fresh dist/ kept as-is (cold build)'); + } + + // 7. Persist the new manifest for the next run. + writeFileSync(MANIFEST_PATH, JSON.stringify({ codeHash, paths: manifestPaths })); + rmSync(DIST_CACHE, { recursive: true, force: true }); + log('done'); +} + +main(); diff --git a/astro/src/lib/incremental.ts b/astro/src/lib/incremental.ts new file mode 100644 index 00000000..b88927c8 --- /dev/null +++ b/astro/src/lib/incremental.ts @@ -0,0 +1,193 @@ +/** + * Incremental static-build support for Astro (`output: 'static'`). + * + * A plain `astro build` renders every path returned by every `getStaticPaths` + * on every build. To skip unchanged pages we compute, per candidate path, a + * `propsHash` of the page's *data* and compare it against the manifest + * persisted by the previous build. A page is (re)built only when: + * - the global `codeHash` changed (any code/content input changed), or + * - its `propsHash` changed (its data changed), or + * - it is new (no manifest entry). + * + * Unbuilt pages are supplied by merging the previous build's `dist/` over the + * fresh partial `dist/` in `scripts/incremental-build.mjs`. + * + * ACTIVATION: all of this happens ONLY when `ASTRO_INCREMENTAL=1` is set in the + * environment — which only `scripts/incremental-build.mjs` does when it spawns + * `astro build`. A plain `npm run build` is ALWAYS a full build, even when a + * stale `.astro-incremental/` (code-hash + manifest from an earlier incremental + * run) is sitting on disk. Gating on the env var rather than on the presence of + * the code-hash file is deliberate: file presence is stale state, not intent. + * + * Everything here runs only inside `getStaticPaths` (build time, Node). The + * Node `fs`/`crypto` imports are tree-shaken out of any client/island bundle + * because they are unreachable from a page component. + * + * This is the Astro port of the Next app's src/utils/incrementalBuild.ts; the + * design (per-path propsHash, per-page manifest shards, code-hash gate) is + * identical — only the integration point differs (getStaticPaths vs + * getStaticProps, static-export vs static-export). + */ +import { createHash } from 'node:crypto'; +import { + mkdirSync, + readFileSync, + writeFileSync, +} from 'node:fs'; +import { join } from 'node:path'; + +/** Gitignored dir shared with scripts/incremental-build.mjs. */ +const INCR_DIR = join(process.cwd(), '.astro-incremental'); +const SHARD_DIR = join(INCR_DIR, 'shards'); +const MANIFEST_PATH = join(INCR_DIR, 'manifest.json'); +const CODE_HASH_PATH = join(INCR_DIR, 'code-hash.txt'); + +export interface Manifest { + codeHash: string; + paths: Record; +} + +/** + * True ONLY when running under scripts/incremental-build.mjs, which sets + * ASTRO_INCREMENTAL=1 in the `astro build` child's environment. `process.env` + * is the real Node env here (getStaticPaths runs server-side at build time — + * same mechanism src/lib/data.ts uses for MAPSWIPE_DATA_FILE), not a Vite + * compile-time replacement. + */ +export function isIncrementalBuild(): boolean { + return process.env.ASTRO_INCREMENTAL === '1'; +} + +/** + * Hash a page's data. Volatile fields that change every build without + * representing a real content change are stripped first (otherwise every page + * would re-invalidate on each run). `buildDate` is the Astro equivalent of the + * Next `buildDate` prop. + * + * No key-sorting/canonicalisation: values come from staticData.json (written + * once at fetch time) via fixed code paths, so JSON key order is already + * deterministic across builds. Keeping this cheap matters — it runs for every + * candidate path (14k+). + */ +export function hashProps(propsData: unknown): string { + let payload = propsData; + if (propsData && typeof propsData === 'object' && !Array.isArray(propsData)) { + const rest = { ...(propsData as Record) }; + delete rest.buildDate; + payload = rest; + } + return createHash('sha1').update(JSON.stringify(payload)).digest('hex'); +} + +export function readCodeHash(): string { + try { + return readFileSync(CODE_HASH_PATH, 'utf8').trim(); + } catch { + return ''; + } +} + +let cachedManifest: Manifest | undefined; +export function readManifest(): Manifest { + if (!cachedManifest) { + try { + cachedManifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8')) as Manifest; + } catch { + cachedManifest = { codeHash: '', paths: {} }; + } + } + return cachedManifest; +} + +export interface Candidate { + /** + * Canonical dist/ out-path key, e.g. `en/projects/` — no leading or + * trailing slash. Used to correlate with the prior manifest and to drive + * pruning of deleted pages in the orchestration. + */ + key: string; + /** getStaticPaths params for this path. */ + params: Params; + /** + * The data whose change should trigger a rebuild. Pages that share one + * logical record (e.g. a project's 6 locale variants) SHOULD pass the SAME + * object reference here so the hash is memoised once across them. + */ + propsData: unknown; + /** Optional getStaticPaths props to forward for selected paths. */ + props?: Props; +} + +function toPath( + candidate: Candidate, +): { params: Params; props?: Props } { + return candidate.props === undefined + ? { params: candidate.params } + : { params: candidate.params, props: candidate.props }; +} + +/** + * Decide which candidate paths to (re)build and persist this page's shard of + * the manifest (the full candidate set with hashes — used by the orchestration + * to rebuild the merged manifest and to prune deleted pages). + * + * Outside the orchestration (no ASTRO_INCREMENTAL=1 → a normal full + * `astro build`) EVERY candidate is returned and NO state is read or written — + * the normal build path is completely unaffected, regardless of what a + * previous incremental run may have left in `.astro-incremental/`. + * + * Under the orchestration, a changed (or unreadable) codeHash also returns + * every candidate (full rebuild), and shards are always written so the + * orchestration can persist the complete current manifest. + * + * `computeProps` is not needed as a separate arg here (unlike the Next impl) + * because Astro's getStaticPaths already computes the data up front; the caller + * passes it in as `candidate.propsData`. Memoisation across shared references + * is still applied so the 6 locale variants of one project hash once. + */ +export function selectPaths( + pageId: string, + candidates: Candidate[], +): { params: Params; props?: Props }[] { + if (!isIncrementalBuild()) { + return candidates.map(toPath); + } + + const codeHash = readCodeHash(); + const prev = readManifest(); + // Empty/unreadable codeHash (defensive — the orchestration always writes it + // before spawning the build) or a changed codeHash => full rebuild. + const codeChanged = codeHash === '' || prev.codeHash !== codeHash; + + // propsData is often the SAME object reference for pages sharing data (a + // project's 6 locale variants), so memoise the hash by identity to avoid + // re-serialising the same data once per locale. + const hashByRef = new WeakMap(); + const memoHash = (propsData: unknown): string => { + if (propsData && typeof propsData === 'object') { + const cached = hashByRef.get(propsData); + if (cached !== undefined) { + return cached; + } + const computed = hashProps(propsData); + hashByRef.set(propsData, computed); + return computed; + } + return hashProps(propsData); + }; + + const shard: Record = {}; + const toBuild: { params: Params; props?: Props }[] = []; + for (const candidate of candidates) { + const propsHash = memoHash(candidate.propsData); + shard[candidate.key] = propsHash; + if (codeChanged || prev.paths[candidate.key] !== propsHash) { + toBuild.push(toPath(candidate)); + } + } + + mkdirSync(SHARD_DIR, { recursive: true }); + writeFileSync(join(SHARD_DIR, `${pageId}.json`), JSON.stringify(shard)); + + return toBuild; +} diff --git a/astro/src/pages/[locale]/blogs/[slug]/index.astro b/astro/src/pages/[locale]/blogs/[slug]/index.astro index ca7156e2..8634685e 100644 --- a/astro/src/pages/[locale]/blogs/[slug]/index.astro +++ b/astro/src/pages/[locale]/blogs/[slug]/index.astro @@ -4,20 +4,41 @@ import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../../layouts/BlogLayout.astro'; import { getT, LOCALES } from '../../../../i18n'; +import { selectPaths } from '../../../../lib/incremental'; // Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing // //blogs// with exact URL parity to Next (slug == entry.id == // path.parse(filename).name). Markdown body is rendered by Astro's pipeline // (remark-gfm enabled in astro.config.mjs); in-body relative images // (./images/*) are optimized natively by astro:assets. +// +// propsHash = the entry's stable frontmatter fields + raw markdown body, so +// only posts whose content/frontmatter changed are rebuilt. The cover hashes +// as its emitted `src` string (content-hashed by astro:assets) — the full +// resolved image() metadata object is NOT hashed (it can carry non-portable +// absolute paths). All 6 locale variants of a post share the SAME signature +// object so it hashes once. export const getStaticPaths = (async () => { const entries = await getCollection('blogs'); - return entries.flatMap((entry) => - LOCALES.map((locale) => ({ + const candidates = entries.flatMap((entry) => { + const signature = { + id: entry.id, + title: entry.data.title ?? null, + publishedDate: entry.data.publishedDate?.getTime() ?? null, + author: entry.data.author ?? null, + description: entry.data.description ?? null, + featured: entry.data.featured ?? false, + coverImage: entry.data.coverImage?.src ?? null, + body: entry.body ?? '', + }; + return LOCALES.map((locale) => ({ + key: `${locale}/blogs/${entry.id}`, params: { locale, slug: entry.id }, props: { entry }, - })), - ); + propsData: signature, + })); + }); + return selectPaths('blogs-detail', candidates); }) satisfies GetStaticPaths; const { locale } = Astro.params; diff --git a/astro/src/pages/[locale]/blogs/index.astro b/astro/src/pages/[locale]/blogs/index.astro index 9dce49c5..606ccb69 100644 --- a/astro/src/pages/[locale]/blogs/index.astro +++ b/astro/src/pages/[locale]/blogs/index.astro @@ -4,12 +4,40 @@ import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../layouts/BlogLayout.astro'; import { getT, LOCALES } from '../../../i18n'; +import { selectPaths } from '../../../lib/incremental'; // Blog LIST page. One variant per locale (blog content is single-language // English markdown; only the chrome is translated), producing //blogs/ // with exact URL parity to the Next Pages-Router page. -export const getStaticPaths = (async () => - LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; +// +// This page renders the blog INDEX (each blog's title/date/description/cover/ +// featured flag), so its propsData is a signature over exactly those fields for +// the whole blog set — it rebuilds when a blog is added/removed or one of those +// listed fields changes, but NOT on a project *data* edit (projects are absent +// from its data). Covers hash as the emitted `src` string (content-hashed by +// astro:assets), not the whole resolved image() metadata object. The key is +// `${locale}/blogs` (a file, blogs/index.html); the blog DETAIL pages use +// `${locale}/blogs/` (dirs) and pruneDeletions only scans the dir +// children, so there is no key collision or accidental prune. The same +// signature object is shared across all 6 locales so it hashes once. +export const getStaticPaths = (async () => { + const entries = await getCollection('blogs'); + const listSignature = entries + .map((entry) => ({ + slug: entry.id, + title: entry.data.title ?? entry.id, + publishedDate: entry.data.publishedDate?.getTime() ?? null, + description: entry.data.description ?? null, + coverImage: entry.data.coverImage?.src ?? null, + featured: entry.data.featured ?? false, + })) + .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)); + return selectPaths('blogs-list', LOCALES.map((locale) => ({ + key: `${locale}/blogs`, + params: { locale }, + propsData: listSignature, + }))); +}) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'blogs'); diff --git a/astro/src/pages/[locale]/data/index.astro b/astro/src/pages/[locale]/data/index.astro index 8189948b..64b83e61 100644 --- a/astro/src/pages/[locale]/data/index.astro +++ b/astro/src/pages/[locale]/data/index.astro @@ -5,13 +5,31 @@ import DataExplorer, { PAGE_SIZE } from '../../../components/DataExplorer.tsx'; import { getDataExplorerPayload } from '../../../lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/optimizeImage'; import { getDict, getT, LOCALES } from '../../../i18n'; +import { selectPaths } from '../../../lib/incremental'; import '../../../styles/global.css'; // One static page per locale: //data/ (parity with the Next Pages-Router // route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory // format => dist//data/index.html. -export const getStaticPaths = (async () => - LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; +// +// This aggregate page's propsData is the FULL data-explorer payload even though +// the page itself now SSRs only a slim slice (the first PAGE_SIZE cards + +// stats) and the island fetches the bulk from /data-explorer.json: the SSR'd +// slice (top-N by createdAt) and the stats can shift when ANY project changes, +// so the propsHash must cover the whole payload → the page rebuilds on any +// project change (correct). The SAME payload object is shared across all 6 +// locale candidates so it hashes once. When nothing changed under the +// orchestration, selectPaths returns [] and the page is skipped. (The +// /data-explorer.json static endpoint has no getStaticPaths at all, so it +// re-renders on every build and stays fresh regardless.) +export const getStaticPaths = (async () => { + const payload = getDataExplorerPayload(); + return selectPaths('data', LOCALES.map((locale) => ({ + key: `${locale}/data`, + params: { locale }, + propsData: payload, + }))); +}) satisfies GetStaticPaths; const { locale } = Astro.params; diff --git a/astro/src/pages/[locale]/get-involved/index.astro b/astro/src/pages/[locale]/get-involved/index.astro index f2d84f7a..2654d7e4 100644 --- a/astro/src/pages/[locale]/get-involved/index.astro +++ b/astro/src/pages/[locale]/get-involved/index.astro @@ -2,12 +2,26 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; +import { selectPaths } from '../../../lib/incremental'; // Get-involved page. One static, translated variant per locale — // //get-involved/ — faithful to the Next Pages-Router page. Uses shared // chrome (BaseLayout) + ported Hero/Section/CenteredCard styles. +// +// The page renders NO project/blog data — its only content input is the +// `get-involved` i18n namespace, which lives in the repo-root public/locales +// and is folded into the orchestration's codeHash. So its propsData is a stable +// per-locale constant: the propsHash never changes on a project/blog *data* +// edit → the page SKIPS on incremental data builds (matching Next, which never +// re-renders static pages on a data change). A translation edit bumps codeHash +// → the whole site (this page included) rebuilds anyway, so tracking +// translations here would be redundant. export const getStaticPaths = (async () => - LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + selectPaths('get-involved', LOCALES.map((locale) => ({ + key: `${locale}/get-involved`, + params: { locale }, + propsData: { page: 'get-involved', locale }, + })))) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'get-involved'); diff --git a/astro/src/pages/[locale]/index.astro b/astro/src/pages/[locale]/index.astro index b6b64c40..7a4e1ee7 100644 --- a/astro/src/pages/[locale]/index.astro +++ b/astro/src/pages/[locale]/index.astro @@ -7,13 +7,43 @@ import ProjectTypeIcon from '../../components/ProjectTypeIcon.astro'; import Icon from '../../components/Icon.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from '../../lib/data'; +import { selectPaths } from '../../lib/incremental'; // Home page. One static, translated variant per locale — // — matching // the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, // key figures, mission-type cards, featured blogs, download/get-involved CTAs // and partners, using the shared chrome (BaseLayout) + ported design tokens. -export const getStaticPaths = (async () => - LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; +// +// The home page renders ONLY the community stats (total swipes/contributors) +// and the top-3 featured blogs — it does NOT render the project set. So its +// propsHash tracks exactly those two inputs (matching Next's home). A project +// *name* (or any per-project data) change leaves community stats + featured +// blogs unchanged → home's propsHash is unchanged → home SKIPS (correct). It +// rebuilds only when a stat or a featured-blog field actually changes. The +// featured signature hashes the cover's emitted `src` string (content-hashed +// by astro:assets), NOT the whole resolved image() metadata object. The same +// propsData object is shared across all 6 locale candidates so it hashes once. +export const getStaticPaths = (async () => { + const stats = getCommunityStats(); + const entries = await getCollection('blogs'); + const featured = entries + .filter((e) => e.data.featured) + .map((e) => ({ + slug: e.id, + title: e.data.title ?? e.id, + publishedDate: e.data.publishedDate?.getTime() ?? null, + description: e.data.description ?? null, + coverImage: e.data.coverImage?.src ?? null, + })) + .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)) + .slice(0, 3); + const propsData = { stats, featured }; + return selectPaths('home', LOCALES.map((locale) => ({ + key: `${locale}`, + params: { locale }, + propsData, + }))); +}) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'home'); diff --git a/astro/src/pages/[locale]/privacy/index.astro b/astro/src/pages/[locale]/privacy/index.astro index ef6e37ab..3b694def 100644 --- a/astro/src/pages/[locale]/privacy/index.astro +++ b/astro/src/pages/[locale]/privacy/index.astro @@ -7,14 +7,27 @@ import remarkRehype from 'remark-rehype'; import rehypeStringify from 'rehype-stringify'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; +import { selectPaths } from '../../../lib/incremental'; // Privacy page. The policy body is a fixed English markdown string (identical // in every locale — same as the Next app, which hardcoded it); only the tab // title + hero title are translated. Rendered to HTML at build time via the // same remark + GFM pipeline the Next page used (remark().use(html).use(gfm)), // so the GFM contact tables render as
. +// +// The page renders NO project/blog data — its content inputs are the hardcoded +// policy string (part of this file → codeHash) and the `privacy` i18n namespace +// (repo-root public/locales → codeHash). So its propsData is a stable +// per-locale constant: the propsHash never changes on a project/blog *data* +// edit → the page SKIPS on incremental data builds. A policy/translation edit +// bumps codeHash → full rebuild, so tracking that content here would be +// redundant. export const getStaticPaths = (async () => - LOCALES.map((locale) => ({ params: { locale } }))) satisfies GetStaticPaths; + selectPaths('privacy', LOCALES.map((locale) => ({ + key: `${locale}/privacy`, + params: { locale }, + propsData: { page: 'privacy', locale }, + })))) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'privacy'); diff --git a/astro/src/pages/[locale]/projects/[id].astro b/astro/src/pages/[locale]/projects/[id].astro index 74cb8352..a3942358 100644 --- a/astro/src/pages/[locale]/projects/[id].astro +++ b/astro/src/pages/[locale]/projects/[id].astro @@ -8,18 +8,26 @@ import ProjectHistoryChart from '../../../components/ProjectHistoryChart.tsx'; import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from '../../../lib/data'; import { getFileSizeProperties, resolveAoiDownload } from '../../../lib/common'; import { getT, LOCALES } from '../../../i18n'; +import { selectPaths } from '../../../lib/incremental'; export const getStaticPaths = (async () => { let projects = getAllProjects(); const limit = Number(import.meta.env.SLICE_LIMIT ?? 0); if (limit > 0) projects = projects.slice(0, limit); - // One path per (project, locale). - return projects.flatMap((project) => { + // One candidate per (project, locale). The 6 locale variants of a project + // share the SAME `project` object reference as propsData, so selectPaths + // hashes each project's data exactly once and rebuilds all 6 (or none) + // together. Under the incremental orchestration, only projects whose data + // changed (or new/all-on-code-change) are returned; otherwise ALL are. + const candidates = projects.flatMap((project) => { const id = String(project.firebaseId); return LOCALES.map((locale) => ({ + key: `${locale}/projects/${id}`, params: { locale, id }, + propsData: project, })); }); + return selectPaths('projects', candidates); }) satisfies GetStaticPaths; const { locale, id } = Astro.params; From 51ef37047b6e57ce79911987f8aeba3fe911525d Mon Sep 17 00:00:00 2001 From: tnagorra Date: Fri, 10 Jul 2026 14:51:49 +0545 Subject: [PATCH 08/52] docs(upstream): issue refs in shim headers Hydration dedup: withastro/docs#2150, roadmap#36, astro#6247. Fail-soft images: no existing issue covers it. --- astro/src/lib/hydrationDedupIntegration.ts | 7 +++++++ astro/src/lib/optimizeImage.ts | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/astro/src/lib/hydrationDedupIntegration.ts b/astro/src/lib/hydrationDedupIntegration.ts index e738a914..c56b1bac 100644 --- a/astro/src/lib/hydrationDedupIntegration.ts +++ b/astro/src/lib/hydrationDedupIntegration.ts @@ -1,5 +1,12 @@ // Astro integration: deduplicate the inline island-hydration runtimes into ONE // external, cacheable file — a build:done post-process. +// +// UPSTREAM: force-inlining is documented, unconfigurable behavior. References: +// https://github.com/withastro/docs/issues/2150 (inlined even with assetsInlineLimit: 0 — we verified) +// https://github.com/withastro/roadmap/discussions/36 (the decision that inlined them) +// https://github.com/withastro/astro/issues/6247 (related cross-page inlining heuristic) +// Draft feature request ready to file: docs/upstream/astro-hydration-script-dedup.md. +// Delete this file when an external-hydration-scripts option lands. // build:done post-process pattern. // // Why: Astro hard-inlines its directive runtimes (the ~130 B `Astro.only` diff --git a/astro/src/lib/optimizeImage.ts b/astro/src/lib/optimizeImage.ts index f5cab384..9ca5212a 100644 --- a/astro/src/lib/optimizeImage.ts +++ b/astro/src/lib/optimizeImage.ts @@ -1,5 +1,12 @@ // Build-time, per-image, fail-soft remote image optimizer with an on-disk cache. // +// UPSTREAM: no existing Astro issue covers a per-image error policy (verified +// 2026-07-10). Draft feature request ready to file: docs/upstream/ +// astro-remote-image-fail-soft.md. Closest existing refs: +// https://github.com/withastro/roadmap/discussions/523 (global error handling) +// https://github.com/withastro/astro/issues/15920 (remote revalidation, adjacent) +// Delete this file when an upstream error policy lands. +// // Why this exists (and why we bypass Astro's /astro:assets): // Astro's optimize phase is all-or-nothing — a single malformed remote image // (e.g. a broken SVG mislabeled as raster) makes sharp throw fatally and aborts From 6d986d680adb88ed3cd68337070a7166fc8353ed Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 09:41:18 +0545 Subject: [PATCH 09/52] feat(packages): astro-hydration-dedup Workspace package: generic recurrence-based discovery, one external file per distinct inline script, in-place replacement; configurable threshold/output/globs. --- astro/astro.config.mjs | 17 +- astro/package-lock.json | 42 +++ astro/package.json | 6 + .../packages/astro-hydration-dedup/README.md | 117 +++++++ .../astro-hydration-dedup/package.json | 27 ++ .../astro-hydration-dedup/src/index.ts | 288 ++++++++++++++++++ astro/src/lib/hydrationDedupIntegration.ts | 192 ------------ 7 files changed, 490 insertions(+), 199 deletions(-) create mode 100644 astro/packages/astro-hydration-dedup/README.md create mode 100644 astro/packages/astro-hydration-dedup/package.json create mode 100644 astro/packages/astro-hydration-dedup/src/index.ts delete mode 100644 astro/src/lib/hydrationDedupIntegration.ts diff --git a/astro/astro.config.mjs b/astro/astro.config.mjs index 79552653..68ed96be 100644 --- a/astro/astro.config.mjs +++ b/astro/astro.config.mjs @@ -3,10 +3,10 @@ import react from '@astrojs/react'; import sitemap from '@astrojs/sitemap'; import remarkGfm from 'remark-gfm'; // Deduplicates the byte-identical inline island-hydration runtimes (~3.9 KB on -// each of ~14.6k pages, ~56 MB total) into one external cached -// /_astro/hydration..js at build:done. Registered LAST so it post-processes -// the final HTML after the other build:done hooks. -import hydrationDedup from './src/lib/hydrationDedupIntegration.ts'; +// each of ~14.6k pages, ~56 MB total) into external cached, content-hashed +// /_astro/dedup-.js files at build:done. Registered LAST so it +// post-processes the final HTML after the other build:done hooks. +import hydrationDedup from 'astro-hydration-dedup'; const SITE = 'https://mapswipe.org'; @@ -39,7 +39,9 @@ export default defineConfig({ locales: { en: 'en', ne: 'ne', hu: 'hu', de: 'de', cs: 'cs', pt: 'pt' }, }, }), - hydrationDedup(), + // Default minOccurrences (10): the 3 sitewide runtimes are externalized; + // the data pages' 6-page client:load loader stays inline by design. + hydrationDedup({ minOccurrences: 10 }), ], // Blog markdown is rendered by Astro's built-in pipeline. Next used remark-gfm // (see the removed remark().use(remarkGfm) in the Pages-Router detail page), so @@ -53,8 +55,9 @@ export default defineConfig({ locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], routing: { prefixDefaultLocale: true }, }, - // NOTE: Remote project cover images are optimized by our own build-time, - // fail-soft resolver (src/lib/optimizeImage.ts + components/RemoteImage.astro), + // NOTE: Remote project cover images are optimized by our build-time, + // fail-soft resolver (the astro-remote-images workspace package, configured + // in src/lib/remoteImages.ts + wrapped by components/RemoteImage.astro), // NOT by Astro's astro:assets pipeline — its optimize phase is all-or-nothing // and one malformed remote image aborts the whole build. LOCAL blog images // (blogs/images/*, a small trusted set) DO go through astro:assets (default diff --git a/astro/package-lock.json b/astro/package-lock.json index ae209697..148ddf7f 100644 --- a/astro/package-lock.json +++ b/astro/package-lock.json @@ -7,12 +7,18 @@ "": { "name": "mapswipe-astro", "version": "0.0.1", + "workspaces": [ + "packages/*" + ], "dependencies": { "@astrojs/react": "^4.2.0", "@astrojs/sitemap": "^3.2.1", "@fontsource/dm-sans": "^5.2.8", "@fontsource/lato": "^5.2.7", "astro": "^5.7.0", + "astro-hydration-dedup": "*", + "astro-incremental-static": "*", + "astro-remote-images": "*", "i18next": "^24.2.0", "leaflet": "^1.9.4", "papaparse": "^5.4.1", @@ -2319,6 +2325,18 @@ "sharp": "^0.34.0" } }, + "node_modules/astro-hydration-dedup": { + "resolved": "packages/astro-hydration-dedup", + "link": true + }, + "node_modules/astro-incremental-static": { + "resolved": "packages/astro-incremental-static", + "link": true + }, + "node_modules/astro-remote-images": { + "resolved": "packages/astro-remote-images", + "link": true + }, "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", @@ -6897,6 +6915,30 @@ "type": "github", "url": "https://github.com/sponsors/wooorm" } + }, + "packages/astro-hydration-dedup": { + "version": "0.1.0", + "engines": { + "node": ">=22.18" + }, + "peerDependencies": { + "astro": ">=4.0.0" + } + }, + "packages/astro-incremental-static": { + "version": "0.1.0", + "engines": { + "node": ">=22.18" + } + }, + "packages/astro-remote-images": { + "version": "0.1.0", + "dependencies": { + "sharp": "^0.33.5" + }, + "engines": { + "node": ">=22.18" + } } } } diff --git a/astro/package.json b/astro/package.json index 0ad67937..50fcac6a 100644 --- a/astro/package.json +++ b/astro/package.json @@ -3,6 +3,9 @@ "type": "module", "private": true, "version": "0.0.1", + "workspaces": [ + "packages/*" + ], "scripts": { "dev": "astro dev", "build": "node scripts/prefetch-images.mjs && astro build", @@ -14,6 +17,9 @@ "dependencies": { "@astrojs/react": "^4.2.0", "@astrojs/sitemap": "^3.2.1", + "astro-hydration-dedup": "*", + "astro-incremental-static": "*", + "astro-remote-images": "*", "@fontsource/dm-sans": "^5.2.8", "@fontsource/lato": "^5.2.7", "astro": "^5.7.0", diff --git a/astro/packages/astro-hydration-dedup/README.md b/astro/packages/astro-hydration-dedup/README.md new file mode 100644 index 00000000..4dd2677b --- /dev/null +++ b/astro/packages/astro-hydration-dedup/README.md @@ -0,0 +1,117 @@ +# astro-hydration-dedup + +Astro integration that deduplicates **byte-identical inline classic +`` blocks and tallies, + per distinct exact byte sequence, how many pages carry it. No hardcoded + paths, no assumptions about which scripts exist. +2. **Emit** — every block that recurs on ≥ `minOccurrences` pages is written + once as `/-.js` (content-hashed: the URL is + stable while the content is, and busts caches across Astro upgrades). +3. **Rewrite in place** — every inline occurrence is replaced *at its own + position* with `` (a classic **blocking** script, + so synchronous execution at the same document position preserves + semantics). Per-script in-place replacement preserves execution position + and order for arbitrary directive combinations across pages. + +Safety properties: + +- **Threshold as guard** — a script must recur verbatim on `minOccurrences` + pages before it is externalized, so page-specific inline scripts are never + touched. +- **Idempotent** — pages already rewritten (e.g. merged from a cached, + previously post-processed dist) carry no inline block anymore and are left + alone; already-externalized pages still count toward the threshold via + their ` blocks and tally, per +// distinct EXACT byte sequence, how many pages carry it. Pages that +// already reference a previously emitted file for the same content (a +// merged, already-rewritten dist) count toward the same tally. +// 2. EMIT one external content-hashed file PER distinct script whose page +// count reaches `minOccurrences` — e.g. `_astro/dedup-.js`. +// 3. REWRITE every occurrence in place: each qualifying inline block becomes +// `` (a classic BLOCKING script) at the exact +// position the inline block occupied. Per-script in-place replacement +// preserves execution position and order for ARBITRARY directive +// combinations across pages — no assumptions about which scripts co-occur. +// Pages carrying none of the qualifying blocks are left untouched. +// +// Idempotency: a page whose inline block was already externalized simply has +// no inline block left to match — re-running the integration over a merged, +// previously rewritten dist is a natural no-op for those pages. +// +// Fail-soft: any anomaly logs a warning and leaves dist as-is; the build never +// fails over an optimization. +// +// Ordering: register LAST in astro.config.mjs so it runs after other +// build:done hooks (e.g. @astrojs/sitemap). +import { createHash } from 'node:crypto'; +import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises'; +import { join, sep } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import type { AstroIntegration } from 'astro'; + +export interface HydrationDedupOptions { + /** + * A distinct inline script is externalized only when it appears verbatim + * on at least this many pages. This is also the safety guard against + * externalizing page-specific scripts: anything rarer stays inline. + * Default 10 — e.g. an island runtime shared by only 6 sibling pages + * stays inline at the default; lower the threshold to catch it. + */ + minOccurrences?: number; + /** Directory under the build output to emit the shared files into. Default `_astro`. */ + outDir?: string; + /** Emitted filename prefix: `-.js`. Default `dedup`. */ + filenamePrefix?: string; + /** + * Page globs (relative to the build output, `/`-separated, `**`/`*`/`?`) + * to consider. Default: every `**​/*.html`. + */ + include?: string[]; + /** Page globs to skip. Applied after `include`. Default none. */ + exclude?: string[]; + /** Master switch. Default true. */ + enabled?: boolean; +} + +// Inline classic scripts exactly as Astro emits its directive runtimes: an +// attribute-less `, + 'g', + ); + await asyncPool(POOL_SIZE, pages, async ({ rel }) => { + const html = await readFile(join(dist, rel), 'utf8'); + const found = html.match(INLINE_SCRIPT_RE) ?? []; + if (found.length > 0) { + const distinct = [...new Set(found)]; + pageBlocks.set(rel, distinct); + for (const block of distinct) { + const info = blocks.get(block); + if (info) { + info.pages += 1; + } else { + blocks.set(block, { pages: 1, refPages: 0 }); + } + } + } + for (const m of html.matchAll(REF_RE)) { + refCounts.set(m[1], (refCounts.get(m[1]) ?? 0) + 1); + } + }); + if (blocks.size === 0) { + logger.info(`no inline classic scripts found across ${pages.length} page(s) — nothing to do`); + return; + } + + // -- 2. Select + emit: one file per qualifying block. + interface Emitted { + block: string; + srcTag: string; + fileName: string; + bytes: number; + pages: number; + } + const emitted: Emitted[] = []; + for (const [block, info] of blocks) { + const body = block.replace(/^`, + fileName, + bytes: body.length, + pages: info.pages, + }); + } + if (emitted.length === 0) { + logger.info( + `no inline script recurs on >= ${minOccurrences} page(s) ` + + `(${blocks.size} distinct found) — nothing externalized`, + ); + return; + } + + // -- 3. Rewrite in place, only on pages known to carry a block. + let rewritten = 0; + const carriers = [...pageBlocks.entries()] + .filter(([, list]) => list.some((b) => emitted.some((e) => e.block === b))) + .map(([rel]) => rel); + await asyncPool(POOL_SIZE, carriers, async (rel) => { + const file = join(dist, rel); + const html = await readFile(file, 'utf8'); + let out = html; + for (const e of emitted) { + // Replace EVERY occurrence at its own position — + // preserves execution position/order per page. + out = out.split(e.block).join(e.srcTag); + } + if (out !== html) { + await writeFile(file, out); + rewritten += 1; + } + }); + + const saved = emitted.reduce((acc, e) => acc + e.bytes * Math.max(0, e.pages - 1), 0); + logger.info( + `${emitted.length} shared script(s) externalized, ${rewritten} page(s) rewritten ` + + `(${pages.length} scanned, ${blocks.size} distinct inline blocks, ` + + `~${(saved / 1024 / 1024).toFixed(1)} MB deduplicated): ` + + emitted.map((e) => `${outDir}/${e.fileName} (${e.bytes} B × ${e.pages} pages)`).join(', '), + ); + } catch (err) { + // Fail-soft: never break the build over an optimization. + const reason = err instanceof Error ? err.message : String(err); + logger.warn(`skipped: ${reason}`); + } + }, + }, + }; +} diff --git a/astro/src/lib/hydrationDedupIntegration.ts b/astro/src/lib/hydrationDedupIntegration.ts deleted file mode 100644 index c56b1bac..00000000 --- a/astro/src/lib/hydrationDedupIntegration.ts +++ /dev/null @@ -1,192 +0,0 @@ -// Astro integration: deduplicate the inline island-hydration runtimes into ONE -// external, cacheable file — a build:done post-process. -// -// UPSTREAM: force-inlining is documented, unconfigurable behavior. References: -// https://github.com/withastro/docs/issues/2150 (inlined even with assetsInlineLimit: 0 — we verified) -// https://github.com/withastro/roadmap/discussions/36 (the decision that inlined them) -// https://github.com/withastro/astro/issues/6247 (related cross-page inlining heuristic) -// Draft feature request ready to file: docs/upstream/astro-hydration-script-dedup.md. -// Delete this file when an external-hydration-scripts option lands. -// build:done post-process pattern. -// -// Why: Astro hard-inlines its directive runtimes (the ~130 B `Astro.only` -// loader, the ~3.5 KB custom-element runtime, the ~370 B -// `client:visible` loader) into EVERY island-bearing page. With ~14.6k island -// pages that is ~55–57 MB of byte-identical duplication (~12% of dist). -// `vite.build.assetsInlineLimit: 0` has no effect on these (verified -// empirically) — hence this post-process. -// -// How: -// 1. DISCOVER (don't hardcode): read one project page from dist, extract its -// inline attribute-less classic (a -// classic BLOCKING script — synchronous execution at the same position -// preserves semantics); the other matched inline scripts are removed. -// This is safe because the runtimes only define globals / register the -// custom element and dispatch readiness events — they are -// position-independent among themselves, and running all of them at the -// first script's position (always before the first ) -// matches Astro's own ordering guarantees. Exact byte-sequence string -// replacement — the blocks are identical everywhere, no HTML parsing -// needed. Pages containing none of the blocks (zero-JS pages) are left -// untouched. -// -// Idempotency: a page already referencing "/_astro/hydration." is skipped. -// -// Ordering: registered LAST in astro.config.mjs so it runs after the other -// build:done hooks (sitemap). -import { createHash } from 'node:crypto'; -import { readFile, readdir, writeFile } from 'node:fs/promises'; -import { join, sep } from 'node:path'; -import type { AstroIntegration } from 'astro'; - -const DIST = 'dist'; -const BUNDLE_URL_PREFIX = '/_astro/hydration.'; -// How many sibling project pages each extracted script must appear on -// verbatim before we trust it as a shared hydration runtime. -const SANITY_SAMPLE = 8; -const SANITY_MIN_MATCHES = 5; -// Concurrent file rewrites — 14.6k small files, keep the wall-time low -// without exhausting file descriptors. -const POOL_SIZE = 16; - -// Inline classic scripts exactly as Astro emits its directive runtimes: an -// attribute-less `; - - // -- 3. Rewrite every HTML file. ---------------------------------- - let rewritten = 0; - let skipped = 0; - await asyncPool(POOL_SIZE, htmlFiles, async (file) => { - const html = await readFile(file, 'utf8'); - // Idempotent: already externalized (e.g. merged from a cached, - // previously-rewritten dist). - if (html.includes(BUNDLE_URL_PREFIX)) { - skipped += 1; - return; - } - // Find which of the discovered blocks this page carries, in - // document order. (Data pages carry a subset — the shared island - // runtime but a different directive loader — so match per-block.) - const present = scripts - .map((s) => ({ s, at: html.indexOf(s) })) - .filter((x) => x.at !== -1) - .sort((a, b) => a.at - b.at); - if (present.length === 0) { - skipped += 1; // zero-JS page — leave untouched - return; - } - // Replace the FIRST matched block with the src tag, drop the rest. - let out = html.replace(present[0].s, srcTag); - for (const { s } of present.slice(1)) { - out = out.replace(s, ''); - } - await writeFile(file, out); - rewritten += 1; - }); - - logger.info( - `hydration dedup: ${rewritten} page(s) rewritten, ${skipped} skipped, ` - + `bundle _astro/${bundleName} (${bundle.length} B, ${scripts.length} scripts)`, - ); - } catch (err) { - // Fail-soft: never break the build over an optimization. - const reason = err instanceof Error ? err.message : String(err); - logger.warn(`hydration dedup skipped: ${reason}`); - } - }, - }, - }; -} From 42e040bbdcba92fec901dd21afb7a3d99f94625a Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 09:41:19 +0545 Subject: [PATCH 10/52] feat(packages): astro-remote-images createRemoteImages(options): widths/quality/cache/concurrency and split onError/onTransientError policies. Failed images render a bundled error SVG and warn; cache layout unchanged (zero re-encode). --- astro/packages/astro-remote-images/README.md | 159 ++++++ .../packages/astro-remote-images/package.json | 29 + .../astro-remote-images/src/RemoteImage.astro | 45 ++ .../packages/astro-remote-images/src/index.ts | 537 ++++++++++++++++++ astro/scripts/prefetch-images.mjs | 106 +--- astro/src/components/RemoteImage.astro | 31 +- astro/src/lib/optimizeImage.ts | 291 ---------- astro/src/lib/remoteImages.ts | 32 ++ astro/src/pages/[locale]/data/index.astro | 4 +- astro/src/pages/[locale]/projects/[id].astro | 4 +- astro/src/pages/data-explorer.json.ts | 2 +- 11 files changed, 841 insertions(+), 399 deletions(-) create mode 100644 astro/packages/astro-remote-images/README.md create mode 100644 astro/packages/astro-remote-images/package.json create mode 100644 astro/packages/astro-remote-images/src/RemoteImage.astro create mode 100644 astro/packages/astro-remote-images/src/index.ts delete mode 100644 astro/src/lib/optimizeImage.ts create mode 100644 astro/src/lib/remoteImages.ts diff --git a/astro/packages/astro-remote-images/README.md b/astro/packages/astro-remote-images/README.md new file mode 100644 index 00000000..282bc1dc --- /dev/null +++ b/astro/packages/astro-remote-images/README.md @@ -0,0 +1,159 @@ +# astro-remote-images + +Build-time, **per-image, fail-soft** remote image optimizer for Astro static +builds. Owns the fetch + [sharp](https://sharp.pixelplumbing.com/) pipeline so +that every image is individually try/caught: one malformed or unreachable +remote image can never abort your 14k-page build. Comes with an on-disk cache, +a bounded concurrent prefetch pool, a two-tier negative cache, and a +configurable per-image **error policy** (error image / passthrough / fail). + +## Why not `astro:assets` / ``? + +Astro's optimize phase is all-or-nothing for remote images: a single corrupt +image (e.g. a broken SVG mislabeled as raster) makes sharp throw fatally and +aborts the entire build, uncatchable per-image (verified against production +data containing 8 such images). And naive render-time fetching serializes +thousands of downloads (measured: 27 min cold vs ~90 s with this package's +prefetch pool). No upstream issue covers a per-image error policy (closest: +[withastro/roadmap#523](https://github.com/withastro/roadmap/discussions/523), +[withastro/astro#15920](https://github.com/withastro/astro/issues/15920)). +Delete this package when an upstream error policy lands. + +## Install + +In-repo workspace package (`private: true`, not published). From an app in the +same npm workspace: + +```jsonc +// package.json +{ + "workspaces": ["packages/*"], + "dependencies": { "astro-remote-images": "*" } +} +``` + +For a third-party project, copy the package into your workspace (or publish +it). Only dependency: `sharp`. Requires Node ≥ 22.18 (TypeScript entry point, +loaded via Node's built-in type stripping; Vite-based consumers transform it +natively). + +## Usage + +**1. Configure one instance for your app** (a small module both your pages and +your prefetch script import): + +```ts +// src/lib/remoteImages.ts +import { createRemoteImages } from 'astro-remote-images'; + +export const COVER_WIDTH = 640; + +export const remoteImages = createRemoteImages({ + width: COVER_WIDTH, + onError: 'error-image', // permanent failures (corrupt / 4xx) + onTransientError: 'error-image', // timeouts / 5xx / network +}); +``` + +The **last** `createRemoteImages()` call also becomes the *default instance* +used by the bundled `` component — make sure your config module +is imported before the component renders (importing it from the same file +that imports the component is enough). + +**2. Render images** — either through the bundled component: + +```astro +--- +import '../lib/remoteImages'; // config first +import RemoteImage from 'astro-remote-images/RemoteImage.astro'; +--- + +``` + +or by calling `resolve()` directly (e.g. to build a URL map inside an +endpoint): + +```ts +const { src, optimized } = await remoteImages.resolve(url, { width: 640 }); +``` + +**3. Prefetch before the build** so renders are pure cache hits +(`node scripts/prefetch-images.mjs && astro build`): + +```js +// scripts/prefetch-images.mjs +import { remoteImages } from '../src/lib/remoteImages.ts'; + +// You own the collector: return every remote URL the build will render. +async function collectUrls() { /* read your data source */ } + +remoteImages.prefetch(collectUrls).catch((err) => { + console.warn('[prefetch] non-fatal error, continuing to build:', err); + process.exit(0); // prefetch is a cache warm, never a build blocker +}); +``` + +## API + +```ts +createRemoteImages(options?): RemoteImages +// -> { options, resolve(url, {width?}), prefetch(urls | () => urls, {width?}), cacheSize() } +getDefaultRemoteImages(): RemoteImages // last created (or lazy bare-defaults) +encodeImageBuffer(input, width, format?, quality?) // the raw sharp encode rule +``` + +`resolve()` returns `{ src, optimized, error? }` — `src` is the local +optimized path, the error image, or the original remote URL depending on +outcome and policy. It never throws unless the matching policy is `'fail'`. +`prefetch()` never throws (a `'fail'` policy fires at resolve time, not +during the warm). + +## Options + +| Option | Type | Default | Description | +| --- | --- | --- | --- | +| `width` | `number` | `640` | Default render/prefetch width (px, never upscaled). | +| `widths` | `number[]` | `[width]` | Widths the prefetch pool warms per URL. | +| `quality` | `number` | `80` | Encoder quality. **Not part of the cache key** — wipe `cacheDir` when changing it. | +| `format` | `'webp' \| 'avif' \| 'jpeg' \| 'png'` | `'webp'` | Output format (part of the cache key). | +| `root` | `string` | `process.cwd()` | Anchor for all relative paths (the app dir the build runs from). | +| `cacheDir` | `string` | `'.image-cache'` | Persistent on-disk cache. Persist across CI builds (see below). | +| `distDir` | `string` | `'dist'` | Astro build output dir optimized files are published into. | +| `publicPrefix` | `string` | `'/_img'` | Public URL prefix (and folder under `distDir`). | +| `concurrency` | `number` | `24` | Prefetch pool size. | +| `fetchTimeoutMs` | `number` | `15000` | Per-image fetch timeout. | +| `transientRetryAfterMs` | `number` | 6 h | Retry-after TTL for transient failures (`.slow` markers). | +| `permanentTtlMs` | `number` | `Infinity` | TTL for permanent failures (`.miss` markers). | +| `allowedHosts` | `string[]` | off | Optional URL-host allow-list; other hosts are treated as permanent failures without fetching. | +| `onError` | `'error-image' \| 'passthrough' \| 'fail'` | `'error-image'` | Policy for **permanent** failures (corrupt data, 4xx). | +| `onTransientError` | same | `'passthrough'` | Policy for **transient** failures (timeout / 5xx / network). Default passthrough: the browser may still load a merely-slow origin. Set `'error-image'` for deterministic output — but then a chronically slow origin shows the placeholder even though the image exists. | +| `errorImage` | `string` | bundled SVG | Public URL path of a custom error image you ship yourself (e.g. under `public/`). The bundled default is a neutral, text-free "image unavailable" SVG published once as `/image-error.svg`. | + +Every substitution (error image or passthrough) logs +`[remote-images] (): ` — once per image per process. + +## Caching model + +- **Positive cache**: `/.` — the + encoded output; publish into `dist` is a cheap copy. Persist this directory + in CI (e.g. `actions/cache`) so warm builds skip every fetch+encode. + **CI cache key implication:** the key contains url+width+format, so + changing `width`/`format` (or `quality`, which is keyless) starts a full + re-encode; the old entries are dead weight until the CI cache is rotated. +- **Negative cache**, two tiers of marker next to the would-be output, each + storing the failure reason: + - `.miss` — permanent (corrupt data / 4xx). Skipped for `permanentTtlMs` + (default: forever, until the cache dir is wiped). + - `.slow` — transient (timeout / network / 5xx). Skipped until + `transientRetryAfterMs` elapses, then retried — a chronically-slow origin + stops costing a fetch timeout on every build while a genuine blip still + recovers. +- **In-process negative cache** on top, so one bad URL doesn't re-pay the + timeout once per locale within a single build. + +## Notes + +- Animated GIFs are re-encoded as **animated** webp (every frame resized). +- Build-time only (Node). Never import from client/island code. +- The error-image SVG is inlined in the module (not read from a file) so it + survives Vite bundling into the SSR build. diff --git a/astro/packages/astro-remote-images/package.json b/astro/packages/astro-remote-images/package.json new file mode 100644 index 00000000..74519379 --- /dev/null +++ b/astro/packages/astro-remote-images/package.json @@ -0,0 +1,29 @@ +{ + "name": "astro-remote-images", + "version": "0.1.0", + "description": "Build-time, per-image, fail-soft remote image optimizer for Astro static builds: on-disk cache, bounded concurrent prefetch, two-tier negative cache, configurable error policy (error image / passthrough / fail).", + "type": "module", + "private": true, + "exports": { + ".": "./src/index.ts", + "./RemoteImage.astro": "./src/RemoteImage.astro" + }, + "files": [ + "src", + "README.md" + ], + "keywords": [ + "astro", + "images", + "remote-images", + "sharp", + "fail-soft", + "static" + ], + "engines": { + "node": ">=22.18" + }, + "dependencies": { + "sharp": "^0.33.5" + } +} diff --git a/astro/packages/astro-remote-images/src/RemoteImage.astro b/astro/packages/astro-remote-images/src/RemoteImage.astro new file mode 100644 index 00000000..bb0a4a75 --- /dev/null +++ b/astro/packages/astro-remote-images/src/RemoteImage.astro @@ -0,0 +1,45 @@ +--- +import { getDefaultRemoteImages } from './index.ts'; + +// Remote image, optimized at BUILD time via the fail-soft resolver (see +// ./index.ts). Bypasses Astro's /astro:assets because its optimize +// phase is all-or-nothing: one malformed remote image makes sharp throw +// fatally and aborts the whole build. resolve() wraps each fetch+sharp in +// try/catch and applies the configured error policy (error image / +// passthrough / fail) — so a single bad image can never break the build +// unless you opted into 'fail'. Good images are resized to `width`, encoded, +// cached on disk, and shipped locally. +// +// Uses the DEFAULT instance (the last createRemoteImages() call). Make sure +// the module that configures your instance is imported before this component +// renders — e.g. import it from the same file that imports this component. +interface Props { + src: string; + alt: string; + class?: string; + width?: number; + height?: number; +} +const remoteImages = getDefaultRemoteImages(); +const { + src, + alt, + class: className, + width = remoteImages.options.width, + height = 420, +} = Astro.props; + +// Explicit width (inferSize:false semantics) so there is no render-time +// network fetch just to read dimensions. +const { src: resolvedSrc, optimized } = await remoteImages.resolve(src, { width }); +--- +{alt} diff --git a/astro/packages/astro-remote-images/src/index.ts b/astro/packages/astro-remote-images/src/index.ts new file mode 100644 index 00000000..84c3798c --- /dev/null +++ b/astro/packages/astro-remote-images/src/index.ts @@ -0,0 +1,537 @@ +// astro-remote-images — build-time, per-image, fail-soft remote image +// optimizer for Astro static builds, with an on-disk cache, a bounded +// concurrent prefetch pool, a two-tier negative cache, and a configurable +// per-image error policy (error image / passthrough / fail). +// +// UPSTREAM: no existing Astro issue covers a per-image error policy (verified +// 2026-07-10). Closest existing refs: +// https://github.com/withastro/roadmap/discussions/523 (global error handling) +// https://github.com/withastro/astro/issues/15920 (remote revalidation, adjacent) +// Delete this package when an upstream error policy lands. +// +// Why this exists (and why it bypasses Astro's /astro:assets): +// Astro's optimize phase is all-or-nothing — a single malformed remote image +// (e.g. a broken SVG mislabeled as raster) makes sharp throw fatally and +// aborts the entire build (rc=1), uncatchable per-image. Here we own the +// fetch + sharp pipeline so each image is wrapped in try/catch and fails soft +// per the configured policy while the good ones are optimized + cached. +// +// Runs at build time only (Node). Not for client bundles. +import { createHash } from 'node:crypto'; +import { + access, + copyFile, + mkdir, + readFile, + readdir, + stat, + writeFile, +} from 'node:fs/promises'; +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import sharp from 'sharp'; + +export type ErrorPolicy = 'error-image' | 'passthrough' | 'fail'; +export type ImageFormat = 'webp' | 'avif' | 'jpeg' | 'png'; + +export interface RemoteImagesOptions { + /** Default render/prefetch width (px, never upscaled). Default 640. */ + width?: number; + /** Widths the prefetch pool warms per URL. Default `[width]`. */ + widths?: number[]; + /** Encoder quality. Default 80. NOTE: not part of the cache key — changing it requires wiping `cacheDir`. */ + quality?: number; + /** Output format. Default `'webp'`. Part of the cache key. */ + format?: ImageFormat; + /** + * Anchor for all relative paths. Default `process.cwd()` — the app root + * the build runs from (deliberately NOT import.meta.url: after Vite + * bundles this module the emitted file's location is meaningless). + */ + root?: string; + /** Persistent on-disk cache dir (persist across CI builds). Default `.image-cache`. */ + cacheDir?: string; + /** Astro build output dir the optimized files are published into. Default `dist`. */ + distDir?: string; + /** Public URL prefix the browser requests (also the folder under distDir). Default `/_img`. */ + publicPrefix?: string; + /** Prefetch pool size (concurrent in-flight fetches). Default 24. */ + concurrency?: number; + /** Per-image fetch timeout. Prevents one hung origin from stalling the build. Default 15000. */ + fetchTimeoutMs?: number; + /** + * Retry-after TTL for TRANSIENT failures (timeout / network / 5xx), + * recorded as `.slow` markers: the URL is not refetched until the TTL + * elapses. Default 6 h. Without it a chronically-slow origin re-pays the + * full fetch timeout on EVERY build. + */ + transientRetryAfterMs?: number; + /** + * TTL for PERMANENT failures (corrupt data / 4xx), recorded as `.miss` + * markers. Default `Infinity` (never refetched until the cache dir is + * wiped). + */ + permanentTtlMs?: number; + /** Optional allow-list of URL hosts. A URL on another host is treated as a permanent failure (no fetch). */ + allowedHosts?: string[]; + /** Policy for PERMANENT failures (corrupt data, 4xx). Default `'error-image'`. */ + onError?: ErrorPolicy; + /** + * Policy for TRANSIENT failures (timeout / network / 5xx). Default + * `'passthrough'` — the original remote URL is served, so the browser may + * still load it even though the build-time fetch failed. Set + * `'error-image'` for deterministic output at the cost of hiding images + * from merely-slow origins. + */ + onTransientError?: ErrorPolicy; + /** + * Public URL path of a custom error image you ship yourself (e.g. under + * `public/`). Default: a bundled neutral SVG placeholder published once + * into `/image-error.svg`. + */ + errorImage?: string; +} + +export interface ResolveOptions { + width?: number; +} + +export interface ResolvedImage { + /** URL to render in : local optimized path, error image, or original remote URL. */ + src: string; + /** True when a locally optimized file is served. */ + optimized: boolean; + /** Failure reason when the image could not be optimized. */ + error?: string; +} + +export interface PrefetchSummary { + total: number; + optimized: number; + failed: number; + seconds: number; +} + +export interface RemoteImages { + /** Resolved options (defaults applied). */ + options: Required> + & Pick; + /** + * Resolve a remote URL to a build-time optimized local file, applying the + * configured error policy on failure. Never throws unless the matching + * policy is `'fail'`. + */ + resolve(url: string | null | undefined, opts?: ResolveOptions): Promise; + /** + * Warm the on-disk cache for many URLs with a bounded pool, WITHOUT + * publishing into the build output (that happens per-page at render + * time). Never throws — prefetch is a cache warm, not a build gate; a + * `'fail'` policy only fires at resolve time. + */ + prefetch(urls: string[] | (() => string[] | Promise), opts?: ResolveOptions): Promise; + /** Number of cached optimized images (diagnostic; safe if dir absent). */ + cacheSize(): Promise; +} + +// Bundled default error image: a neutral "image unavailable" placeholder +// (broken-frame iconography, no locale-dependent text). Inlined as a string — +// NOT read from a file next to this module — so it survives Vite bundling +// (import.meta.url-relative paths break once the module is emitted into the +// SSR bundle). +export const ERROR_IMAGE_FILENAME = 'image-error.svg'; +const ERROR_IMAGE_SVG = ` + + + + + + + + +`; + +const MARKER_EXTS = ['miss', 'slow'] as const; +type MarkerExt = (typeof MARKER_EXTS)[number]; + +// True for failures that are the image's fault, not the network's — a corrupt +// or empty buffer, or a 4xx. sharp throws these with recognizable messages. +function isDeterministicFailure(reason: string): boolean { + return ( + reason.startsWith('HTTP 4') + || reason.includes('Input buffer') + || reason.includes('Input Buffer') + || reason.includes('unsupported image format') + || reason.includes('VipsForeignLoad') + || reason.includes('host not allowed') + ); +} + +/** + * Shared sharp encode: resize to `width` (never upscale) + encode. `input` + * may be a Buffer (remote) or a file path. Animated inputs (GIF, multi-page) + * are decoded with { animated: true } and re-encoded animated (webp) so + * animation survives the resize. Returns the encoded buffer. + */ +export async function encodeImageBuffer( + input: Buffer | string, + width: number, + format: ImageFormat = 'webp', + quality = 80, +): Promise { + // Probe for animation. A multi-page (animated) source must be opened with + // { animated: true } or sharp collapses it to the first frame. + let animated = false; + try { + const meta = await sharp(input).metadata(); + animated = (meta.pages ?? 1) > 1 || meta.format === 'gif'; + } catch { + // If probing fails, treat as a normal static image; the encode below + // will surface any real decode error to the caller (fail-soft there). + } + return sharp(input, animated ? { animated: true } : undefined) + .resize({ width, withoutEnlargement: true }) + .toFormat(format, { quality }) + .toBuffer(); +} + +export function createRemoteImages(userOptions: RemoteImagesOptions = {}): RemoteImages { + const width = userOptions.width ?? 640; + const options: RemoteImages['options'] = { + width, + widths: userOptions.widths ?? [width], + quality: userOptions.quality ?? 80, + format: userOptions.format ?? 'webp', + root: userOptions.root ?? process.cwd(), + cacheDir: userOptions.cacheDir ?? '.image-cache', + distDir: userOptions.distDir ?? 'dist', + publicPrefix: userOptions.publicPrefix ?? '/_img', + concurrency: userOptions.concurrency ?? 24, + fetchTimeoutMs: userOptions.fetchTimeoutMs ?? 15000, + transientRetryAfterMs: userOptions.transientRetryAfterMs ?? 6 * 60 * 60 * 1000, + permanentTtlMs: userOptions.permanentTtlMs ?? Infinity, + onError: userOptions.onError ?? 'error-image', + onTransientError: userOptions.onTransientError ?? 'passthrough', + allowedHosts: userOptions.allowedHosts, + errorImage: userOptions.errorImage, + }; + + const CACHE_DIR = join(options.root, options.cacheDir); + // Published directly into distDir (public/ would be copied BEFORE static + // route generation, too early for render-time-produced files). + const OUT_IMG_DIR = join(options.root, options.distDir, ...options.publicPrefix.split('/').filter(Boolean)); + const PUBLIC_URL = options.publicPrefix.replace(/\/$/, ''); + const ext = options.format; + + let dirsReady: Promise | null = null; + function ensureDirs(): Promise { + if (!dirsReady) { + dirsReady = (async () => { + await mkdir(CACHE_DIR, { recursive: true }); + await mkdir(OUT_IMG_DIR, { recursive: true }); + })(); + } + return dirsReady; + } + + // Cache key: sha1 of url|width|format. Quality is deliberately NOT part + // of the key (changing it requires a cache wipe — documented) so the + // layout stays byte-compatible with pre-package caches (url|w=N|webp). + function cacheKey(url: string, w: number): string { + return createHash('sha1').update(`${url}|w=${w}|${options.format}`).digest('hex'); + } + + // Track keys already published into dist/ this process, so concurrent + // page renders don't redundantly copy. + const published = new Set(); + // In-process negative cache: keys that failed THIS process. Within one + // build a URL renders across every locale — without this each locale + // would re-pay the full fetch timeout. Process-scoped, so a transient + // failure is retried on the next build. Maps key -> { reason, permanent }. + const failedThisProcess = new Map(); + // Warn exactly once per key per process (a URL substitutes identically + // across locales — one line is signal, six are noise). + const warned = new Set(); + + // Two-tier persistent negative cache, marker files next to the would-be + // encoded file: + // .miss — PERMANENT (corrupt data / 4xx): skipped for permanentTtlMs + // (default forever, until the cache dir is wiped). + // .slow — TRANSIENT (timeout / network / 5xx): skipped until + // transientRetryAfterMs elapses (marker mtime), then retried. + // Both let render passes short-circuit WITHOUT a refetch. The marker body + // stores the original failure reason for later warnings. + async function writeMarker(key: string, kind: MarkerExt, reason: string): Promise { + await writeFile(join(CACHE_DIR, `${key}.${kind}`), reason); + } + + async function readNegativeCache( + key: string, + ): Promise<{ reason: string; permanent: boolean } | undefined> { + for (const kind of MARKER_EXTS) { + const marker = join(CACHE_DIR, `${key}.${kind}`); + try { + const st = await stat(marker); + const ttl = kind === 'miss' ? options.permanentTtlMs : options.transientRetryAfterMs; + if (Date.now() - st.mtimeMs < ttl) { + let reason = ''; + try { + reason = (await readFile(marker, 'utf8')).trim(); + } catch { + // legacy empty marker + } + return { + reason: reason || `previous ${kind === 'miss' ? 'permanent' : 'transient'} failure (cached)`, + permanent: kind === 'miss', + }; + } + } catch { + // no marker of this kind + } + } + return undefined; + } + + let errorImageReady: Promise | null = null; + // Publish the bundled error image once into the build output and return + // its public URL. A user-supplied errorImage path is returned as-is (the + // user ships that file, e.g. from public/). + function ensureErrorImage(): Promise { + if (options.errorImage) { + return Promise.resolve(options.errorImage); + } + if (!errorImageReady) { + errorImageReady = (async () => { + await ensureDirs(); + const out = join(OUT_IMG_DIR, ERROR_IMAGE_FILENAME); + if (!existsSync(out)) { + await writeFile(out, ERROR_IMAGE_SVG); + } + return `${PUBLIC_URL}/${ERROR_IMAGE_FILENAME}`; + })(); + } + return errorImageReady; + } + + // Apply the configured error policy for a failed image. ALWAYS warns + // (once per key per process) with URL + reason before substituting. + async function applyFailurePolicy( + url: string, + key: string, + reason: string, + permanent: boolean, + ): Promise { + const policy = permanent ? options.onError : options.onTransientError; + if (!warned.has(key)) { + warned.add(key); + // eslint-disable-next-line no-console + console.warn(`[remote-images] ${policy} (${reason}): ${url}`); + } + if (policy === 'fail') { + throw new Error(`[remote-images] failed to optimize ${url}: ${reason}`); + } + if (policy === 'error-image') { + const src = await ensureErrorImage(); + return { src, optimized: false, error: reason }; + } + return { src: url, optimized: false, error: reason }; + } + + // Cold path shared by the per-page resolver and the prefetch pool: fetch + // the remote image, resize + encode, write into the on-disk cache. NEVER + // throws — on failure it records the negative-cache marker and returns + // the classified failure. Single source of truth for fetch+sharp+cache. + async function encodeToCache( + url: string, + w: number, + key: string, + ): Promise<{ ok: true } | { ok: false; reason: string; permanent: boolean }> { + const cacheFile = join(CACHE_DIR, `${key}.${ext}`); + try { + await ensureDirs(); + if (options.allowedHosts) { + const host = new URL(url).host; + if (!options.allowedHosts.includes(host)) { + throw new Error(`host not allowed: ${host}`); + } + } + // Hard timeout: one slow/hung origin must not stall the build + // (fetch has no default timeout). + const res = await fetch(url, { signal: AbortSignal.timeout(options.fetchTimeoutMs) }); + if (!res.ok) { + throw new Error(`HTTP ${res.status}`); + } + const input = Buffer.from(await res.arrayBuffer()); + // Explicit width (no inferSize): no render-time dimension fetch. + const output = await encodeImageBuffer(input, w, options.format, options.quality); + await writeFile(cacheFile, output); + return { ok: true }; + } catch (err) { + const reason = err instanceof Error ? err.message : String(err); + const permanent = isDeterministicFailure(reason); + // Best-effort marker write — a failed write just means a retry + // next build (still safe). + try { + await writeMarker(key, permanent ? 'miss' : 'slow', reason); + } catch { + // ignore + } + failedThisProcess.set(key, { reason, permanent }); + return { ok: false, reason, permanent }; + } + } + + async function publishFromCache(key: string): Promise { + if (published.has(key)) { + return; + } + const from = join(CACHE_DIR, `${key}.${ext}`); + const to = join(OUT_IMG_DIR, `${key}.${ext}`); + await ensureDirs(); + if (!existsSync(to)) { + await copyFile(from, to); + } + published.add(key); + } + + async function resolve( + url: string | null | undefined, + opts: ResolveOptions = {}, + ): Promise { + if (!url) { + return { src: '', optimized: false }; + } + const w = opts.width ?? options.width; + const key = cacheKey(url, w); + const cacheFile = join(CACHE_DIR, `${key}.${ext}`); + + await ensureDirs(); + + // Warm path: cached file exists (prefetch pool or a prior build/page + // encoded it) -> publish into the build output + return. + try { + await access(cacheFile); + await publishFromCache(key); + return { src: `${PUBLIC_URL}/${key}.${ext}`, optimized: true }; + } catch { + // not cached; fall through + } + + // Negative caches (in-process, then persistent): a prior attempt + // failed — apply the policy WITHOUT refetching. + const processFailure = failedThisProcess.get(key); + if (processFailure) { + return applyFailurePolicy(url, key, processFailure.reason, processFailure.permanent); + } + const diskFailure = await readNegativeCache(key); + if (diskFailure) { + return applyFailurePolicy(url, key, diskFailure.reason, diskFailure.permanent); + } + + // Cold path: same implementation the prefetch pool uses. + const result = await encodeToCache(url, w, key); + if (!result.ok) { + return applyFailurePolicy(url, key, result.reason, result.permanent); + } + await publishFromCache(key); + return { src: `${PUBLIC_URL}/${key}.${ext}`, optimized: true }; + } + + /** Cache warm for one url/width. Cache hit -> no-op. Never throws. */ + async function prefetchOne(url: string, w: number): Promise { + const key = cacheKey(url, w); + try { + await access(join(CACHE_DIR, `${key}.${ext}`)); + return true; // already cached + } catch { + // not cached; consult negative cache before spending a fetch + } + if (failedThisProcess.has(key) || (await readNegativeCache(key)) !== undefined) { + return false; // known-bad / recently-slow + } + const result = await encodeToCache(url, w, key); + if (!result.ok && !warned.has(key)) { + warned.add(key); + // eslint-disable-next-line no-console + console.warn(`[remote-images] prefetch failed (${result.reason}): ${url}`); + } + return result.ok; + } + + async function prefetch( + urlsOrFn: string[] | (() => string[] | Promise), + opts: ResolveOptions = {}, + ): Promise { + const start = Date.now(); + const raw = typeof urlsOrFn === 'function' ? await urlsOrFn() : urlsOrFn; + const urls = [...new Set(raw.filter(Boolean))]; + const widths = opts.width !== undefined ? [opts.width] : options.widths; + const jobs = urls.flatMap((url) => widths.map((w) => ({ url, w }))); + const total = jobs.length; + // eslint-disable-next-line no-console + console.log( + `[remote-images] prefetch: ${urls.length} unique URLs × ${widths.length} width(s), ` + + `concurrency=${options.concurrency}`, + ); + + let optimized = 0; + let failed = 0; + let next = 0; + async function worker() { + for (;;) { + const i = next; + next += 1; + if (i >= total) { + return; + } + const ok = await prefetchOne(jobs[i].url, jobs[i].w); + if (ok) { + optimized += 1; + } else { + failed += 1; + } + const done = optimized + failed; + if (done % 250 === 0 || done === total) { + // eslint-disable-next-line no-console + console.log(`[remote-images] prefetch ${done}/${total} (optimized=${optimized} failed=${failed})`); + } + } + } + await Promise.all(Array.from({ length: Math.min(options.concurrency, total) }, worker)); + + const seconds = (Date.now() - start) / 1000; + // eslint-disable-next-line no-console + console.log( + `[remote-images] prefetch done: ${optimized} optimized / ${failed} failed / ${total} total ` + + `in ${seconds.toFixed(1)}s`, + ); + return { total, optimized, failed, seconds }; + } + + async function cacheSize(): Promise { + try { + const files = await readdir(CACHE_DIR); + return files.filter((f) => f.endsWith(`.${ext}`)).length; + } catch { + return 0; + } + } + + const instance: RemoteImages = { options, resolve, prefetch, cacheSize }; + defaultInstance = instance; // last created instance is the component default + return instance; +} + +// Default-instance registry for the component: the component +// can't receive the factory instance as a prop ergonomically, so the LAST +// createRemoteImages() call becomes the default. Apps should create their +// configured instance in a module the component's consumers import (import +// order then guarantees configuration happens first). If no instance was ever +// created, a bare-defaults one is created lazily. +let defaultInstance: RemoteImages | undefined; + +export function getDefaultRemoteImages(): RemoteImages { + if (!defaultInstance) { + defaultInstance = createRemoteImages(); + } + return defaultInstance; +} diff --git a/astro/scripts/prefetch-images.mjs b/astro/scripts/prefetch-images.mjs index df7f1957..23c12fc5 100644 --- a/astro/scripts/prefetch-images.mjs +++ b/astro/scripts/prefetch-images.mjs @@ -1,93 +1,43 @@ -// Concurrent image-prefetch step. Runs BEFORE `astro build` (see the npm -// `build` script) to warm the on-disk .image-cache/ with a bounded concurrency -// pool, so the per-page render pass hits pure cache and does NOT serialize -// thousands of remote fetches. +// Concurrent image-prefetch step — thin wrapper over the app's configured +// astro-remote-images instance. Runs BEFORE `astro build` (see the npm +// `build` script) to warm the on-disk .image-cache/ with a bounded pool, so +// the per-page render pass hits pure cache and does NOT serialize thousands +// of remote fetches. // -// Why: project cover images are fetched at render time. Every project renders -// across all 6 locales, so a naive render pass would fetch each cover ~6× -// serially. Deduping to unique URLs and fetching them in parallel here turns a -// ~27-min fetch-bound cold build into a short prefetch + fast render. -// -// This shares the SAME optimizer + cache as the per-page resolver: it calls -// prefetchRemoteImage() from src/lib/optimizeImage.ts (imported directly via -// Node's native TS type-stripping). The cache key is (url|width|webp), and we -// warm at COVER_WIDTH — the exact width the page renders — so the render pass -// finds a hit. No logic is forked. -// -// Fail-soft: prefetchRemoteImage never throws; a bad/slow image logs a -// passthrough warning and the pool moves on. rc stays 0. +// The app owns only the URL COLLECTOR below; the fetch+sharp+cache pipeline, +// pool, and negative caches live in the package (same instance = same cache +// keys the render pass looks up, warmed at COVER_WIDTH). import { createRequire } from 'node:module'; import { join } from 'node:path'; -import { prefetchRemoteImage, COVER_WIDTH } from '../src/lib/optimizeImage.ts'; +import { remoteImages, COVER_WIDTH } from '../src/lib/remoteImages.ts'; const require = createRequire(import.meta.url); -// Bounded concurrency. Fetch-bound work: ~24 in-flight remote fetches saturates -// the link without exhausting sockets/RAM. Tunable via env for measurement. -const CONCURRENCY = Number(process.env.PREFETCH_CONCURRENCY ?? 24); - -// Collect the unique cover URLs the build will actually render. This mirrors +// Collect the unique cover URLs the build will actually render. Mirrors // src/lib/data.ts (same staticData path + same BAD_IMAGE_TEST / SLICE_LIMIT // knobs) so the warmed set matches the render set exactly. function collectCoverUrls() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const data = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); - let projects = (data?.publicProjects?.results ?? []); - - const limit = Number(process.env.SLICE_LIMIT ?? 0); - if (limit > 0) projects = projects.slice(0, limit); - - // Match data.ts's BAD_IMAGE_TEST knob: inject the bad URL into the first - // image-bearing project so the prefetch exercises the same (bad) cover the - // render will, proving fail-soft end to end. - if (process.env.BAD_IMAGE_TEST) { - const badUrl = process.env.BAD_IMAGE_TEST; - const target = projects.find((p) => p?.image?.file?.url); - if (target?.image?.file) target.image.file.url = badUrl; - } - - const urls = projects.map((p) => p?.image?.file?.url).filter(Boolean); - return [...new Set(urls)]; -} - -// Bounded pool: N workers drain a shared cursor over the URL list. -async function run() { - const start = Date.now(); - const urls = collectCoverUrls(); - const total = urls.length; - console.log( - `[prefetch] ${total} unique cover URLs, concurrency=${CONCURRENCY}, width=${COVER_WIDTH}`, - ); - - let optimized = 0; - let passthrough = 0; - let next = 0; - - async function worker() { - for (;;) { - const i = next++; - if (i >= total) return; - const ok = await prefetchRemoteImage(urls[i], { width: COVER_WIDTH }); - if (ok) optimized++; - else passthrough++; - const done = optimized + passthrough; - if (done % 250 === 0 || done === total) { - console.log(`[prefetch] ${done}/${total} (optimized=${optimized} passthrough=${passthrough})`); - } + const data = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); + let projects = (data?.publicProjects?.results ?? []); + + const limit = Number(process.env.SLICE_LIMIT ?? 0); + if (limit > 0) projects = projects.slice(0, limit); + + // Match data.ts's BAD_IMAGE_TEST knob: inject the bad URL into the first + // image-bearing project so the prefetch exercises the same (bad) cover + // the render will, proving fail-soft end to end. + if (process.env.BAD_IMAGE_TEST) { + const badUrl = process.env.BAD_IMAGE_TEST; + const target = projects.find((p) => p?.image?.file?.url); + if (target?.image?.file) target.image.file.url = badUrl; } - } - - await Promise.all(Array.from({ length: Math.min(CONCURRENCY, total) }, worker)); - const secs = ((Date.now() - start) / 1000).toFixed(1); - console.log( - `[prefetch] done: ${optimized} optimized / ${passthrough} passthrough / ${total} total in ${secs}s`, - ); + return projects.map((p) => p?.image?.file?.url).filter(Boolean); } // Fail-soft at the top level too: prefetch is a cache warm, never a build -// blocker. Any unexpected error still exits 0 so `astro build` runs. -run().catch((err) => { - console.warn('[prefetch] non-fatal error, continuing to build:', err); - process.exit(0); +// blocker (the package's prefetch never throws; this guards the collector). +remoteImages.prefetch(collectCoverUrls, { width: COVER_WIDTH }).catch((err) => { + console.warn('[prefetch] non-fatal error, continuing to build:', err); + process.exit(0); }); diff --git a/astro/src/components/RemoteImage.astro b/astro/src/components/RemoteImage.astro index 549d888a..e3213f4e 100644 --- a/astro/src/components/RemoteImage.astro +++ b/astro/src/components/RemoteImage.astro @@ -1,15 +1,10 @@ --- -import { resolveRemoteImage } from '../lib/optimizeImage'; +// Thin wrapper over astro-remote-images' component: importing the app config +// module first guarantees the package's default instance is OUR configured +// one (fail-soft optimize, error-image policy, COVER_WIDTH default width). +import '../lib/remoteImages'; +import RemoteImage from 'astro-remote-images/RemoteImage.astro'; -// Remote project cover image, optimized at BUILD time via our own fail-soft -// resolver (see src/lib/optimizeImage.ts). We bypass Astro's /astro:assets -// because its optimize phase is all-or-nothing: one malformed remote image makes -// sharp throw fatally and aborts the whole build. resolveRemoteImage() wraps each -// fetch+sharp in try/catch and, on ANY failure, returns the raw remote URL -// (passthrough) — so a single bad image can never break the build. Good images -// are resized to `width`, encoded to webp, cached on disk, and shipped locally. -// -// Optimization is ALWAYS on now (no IMAGE_OPT gate) but always safe. interface Props { src: string; alt: string; @@ -17,19 +12,5 @@ interface Props { width?: number; height?: number; } -const { src, alt, class: className, width = 640, height = 420 } = Astro.props; - -// Explicit width (inferSize:false semantics) so there is no render-time network -// fetch just to read dimensions. -const { src: resolvedSrc, optimized } = await resolveRemoteImage(src, { width }); --- -{alt} + diff --git a/astro/src/lib/optimizeImage.ts b/astro/src/lib/optimizeImage.ts deleted file mode 100644 index 9ca5212a..00000000 --- a/astro/src/lib/optimizeImage.ts +++ /dev/null @@ -1,291 +0,0 @@ -// Build-time, per-image, fail-soft remote image optimizer with an on-disk cache. -// -// UPSTREAM: no existing Astro issue covers a per-image error policy (verified -// 2026-07-10). Draft feature request ready to file: docs/upstream/ -// astro-remote-image-fail-soft.md. Closest existing refs: -// https://github.com/withastro/roadmap/discussions/523 (global error handling) -// https://github.com/withastro/astro/issues/15920 (remote revalidation, adjacent) -// Delete this file when an upstream error policy lands. -// -// Why this exists (and why we bypass Astro's /astro:assets): -// Astro's optimize phase is all-or-nothing — a single malformed remote image -// (e.g. a broken SVG mislabeled as raster) makes sharp throw fatally and aborts -// the entire 14k-page build (rc=1), uncatchable per-image. Here we own the -// fetch + sharp pipeline so we can wrap each image in try/catch and fail-soft to -// passthrough (serve the original remote URL) while still optimizing + caching -// the good ones. -// -// Runs at build time only (Node). Not for client bundles. -import { createHash } from 'node:crypto'; -import { mkdir, readdir, copyFile, writeFile, access, stat } from 'node:fs/promises'; -import { existsSync } from 'node:fs'; -import { join } from 'node:path'; -import sharp from 'sharp'; - -// Anchor at the build's working directory (astro/) rather than import.meta.url: -// after Vite bundles this module into dist/pages/, an import.meta.url-relative -// path resolves from the emitted file's location and lands in the wrong place. -// The build always runs from astro/, so cwd is the stable anchor. -export const ROOT = process.cwd(); - -// Persistent cache: survives across builds. In CI this directory should be -// restored/saved as a build cache (see report) so warm builds reuse encodes. -export const CACHE_DIR = join(ROOT, '.image-cache'); -// Final output dir. We emit directly into dist/ because the public/ -> dist/ -// copy phase runs BEFORE static route generation (when these images are -// produced), so writing into public/ would be too late to ship. -export const OUT_IMG_DIR = join(ROOT, 'dist', '_img'); -// The public URL path the browser requests. -export const PUBLIC_IMG_URL = '/_img'; -// Per-image fetch timeout. Prevents a single slow/hung remote from stalling the -// build; on timeout we fail soft to passthrough. -const FETCH_TIMEOUT_MS = 15000; - -// Retry-after window for TRANSIENT failures (timeout / network / 5xx). We -// record the failure time in a .slow marker and skip refetching that URL until -// this window elapses. Without it, a chronically-slow origin image is refetched -// (and re-times-out at 15s) on EVERY build — 9 such covers cost ~135s per build -// in this dataset. With it, warm builds skip them and stay fast, while a -// genuinely-transient blip still retries after the window. Tunable via env. -const RETRY_AFTER_MS = Number(process.env.IMAGE_RETRY_AFTER_MS ?? 6 * 60 * 60 * 1000); - -// The render width used for project cover images (see projects/[id].astro). -// Exported so the prefetch pool warms the cache under the SAME width/key the -// per-page resolver will look up — otherwise prefetch would be a no-op. -export const COVER_WIDTH = 640; - -let dirsReady: Promise | null = null; -export function ensureDirs(): Promise { - if (!dirsReady) { - dirsReady = (async () => { - await mkdir(CACHE_DIR, { recursive: true }); - await mkdir(OUT_IMG_DIR, { recursive: true }); - })(); - } - return dirsReady; -} - -// Track keys already emitted into dist/ this process, so concurrent page -// renders don't redundantly copy. -const published = new Set(); - -// In-process negative cache for keys that failed this process. Covers the -// TRANSIENT failures (timeouts/network) that we deliberately don't persist to -// disk: within a single build a URL renders across 6 locales, and without this -// each locale would re-pay the full 15s fetch timeout. Process-scoped only, so -// a transient failure is retried on the next build (correct). -const failedThisProcess = new Set(); - -export interface ResolveOptions { - width: number; -} - -export interface ResolvedImage { - // URL to render in . Either a local optimized path or, on any - // failure, the original remote URL (passthrough). - src: string; - // True when we shipped a locally optimized webp; false when passthrough. - optimized: boolean; -} - -function cacheKey(url: string, width: number): string { - return createHash('sha1').update(`${url}|w=${width}|webp`).digest('hex'); -} - -// Negative cache. Two tiers of marker file sit next to the would-be .webp: -// .miss — PERMANENT: the URL failed deterministically (corrupt/empty image -// data or HTTP 4xx). Never refetched (until the cache dir is wiped). -// .slow — TRANSIENT with retry-after: the URL failed for a network reason -// (timeout / connection / 5xx). Skipped until RETRY_AFTER_MS elapses -// (judged by the marker's mtime), then retried. This is what stops a -// chronically-slow origin image from being refetched — and re-timing -// out at 15s — on every build, while still eventually retrying. -// Both let the render pass short-circuit to passthrough WITHOUT a refetch, -// keeping post-prefetch renders as pure cache hits. -async function writeMarker(key: string, ext: 'miss' | 'slow'): Promise { - await writeFile(join(CACHE_DIR, `${key}.${ext}`), ''); -} - -// True for failures that are the image's fault, not the network's — a corrupt -// or empty buffer, or a 4xx. sharp throws these with recognizable messages. -function isDeterministicFailure(reason: string): boolean { - return ( - reason.startsWith('HTTP 4') || - reason.includes('Input buffer') || - reason.includes('Input Buffer') || - reason.includes('unsupported image format') || - reason.includes('VipsForeignLoad') - ); -} - -// Shared negative-cache lookup used by BOTH the prefetch pool and the per-page -// resolver. Returns whether we should skip fetching this key (and why). -async function negativeCacheHit(key: string): Promise { - // Permanent bad -> always skip. - try { - await access(join(CACHE_DIR, `${key}.miss`)); - return true; - } catch { - // not permanently bad - } - // Transient slow -> skip only while the retry-after window is still open. - try { - const st = await stat(join(CACHE_DIR, `${key}.slow`)); - return Date.now() - st.mtimeMs < RETRY_AFTER_MS; - } catch { - return false; - } -} - -// Shared sharp encode: resize to `width` (never upscale) + webp. This is the -// SINGLE source of truth for the encode rules for remote covers. `input` may -// be a Buffer (remote) or a file path. Animated inputs (GIF pages>1) are decoded with -// { animated: true } and re-encoded as an animated webp so animation survives -// the resize (applied to every frame). Returns the encoded webp buffer. -export async function encodeImageBuffer( - input: Buffer | string, - width: number, -): Promise { - // Probe for animation. A multi-page (animated) source must be opened with - // { animated: true } or sharp collapses it to the first frame. - let animated = false; - try { - const meta = await sharp(input).metadata(); - animated = (meta.pages ?? 1) > 1 || meta.format === 'gif'; - } catch { - // If probing fails, treat as a normal static image; the encode below will - // surface any real decode error to the caller (fail-soft at that layer). - } - return sharp(input, animated ? { animated: true } : undefined) - .resize({ width, withoutEnlargement: true }) - .webp({ quality: 80 }) - .toBuffer(); -} - -// Cold path shared by both the per-page resolver and the prefetch pool: fetch -// the remote image, resize + encode to webp, and write it into the on-disk -// cache. NEVER throws — on any failure it logs a concise warning and returns -// false (caller falls back to passthrough). This is the single source of truth -// for the fetch+sharp+cache logic; do NOT duplicate it in the prefetch script. -async function encodeToCache(url: string, width: number, key: string): Promise { - const cacheFile = join(CACHE_DIR, `${key}.webp`); - try { - await ensureDirs(); - - // A hard timeout prevents one slow/hung remote server from stalling the - // build indefinitely (fetch has no default timeout) — on abort we fail - // soft to passthrough like any other error. - const res = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) }); - if (!res.ok) { - throw new Error(`HTTP ${res.status}`); - } - const input = Buffer.from(await res.arrayBuffer()); - - // Explicit width (no inferSize) so there is no render-time dimension fetch. - const output = await encodeImageBuffer(input, width); - - await writeFile(cacheFile, output); - return true; - } catch (err) { - const reason = err instanceof Error ? err.message : String(err); - // eslint-disable-next-line no-console - console.warn(`[optimizeImage] passthrough (${reason}): ${url}`); - // Negative-cache the failure so it isn't refetched: permanent for bad data, - // retry-after for transient network failures. Best-effort — a failed marker - // write just means we retry next time (still safe). - try { - await writeMarker(key, isDeterministicFailure(reason) ? 'miss' : 'slow'); - } catch { - // ignore - } - return false; - } -} - -/** - * Warm the on-disk cache for a single URL/width WITHOUT publishing into dist/ - * (dist is written per-page at render time). Cache hit -> no-op. Used by the - * prefetch pool. Returns whether an optimized webp exists in cache afterward. - * NEVER throws. - */ -export async function prefetchRemoteImage( - url: string, - { width }: ResolveOptions, -): Promise { - const key = cacheKey(url, width); - const cacheFile = join(CACHE_DIR, `${key}.webp`); - try { - await access(cacheFile); - return true; // already cached - } catch { - // not cached; check negative cache before spending a fetch - } - if (await negativeCacheHit(key)) return false; // known-bad / recently-slow - return encodeToCache(url, width, key); -} - -export async function publishFromCache(key: string): Promise { - if (published.has(key)) return; - const from = join(CACHE_DIR, `${key}.webp`); - const to = join(OUT_IMG_DIR, `${key}.webp`); - await ensureDirs(); - if (!existsSync(to)) { - await copyFile(from, to); - } - published.add(key); -} - -/** - * Resolve a remote image URL to a build-time optimized local webp, with an - * on-disk cache. NEVER throws: on any failure it logs a concise warning and - * returns the original remote URL (passthrough). - */ -export async function resolveRemoteImage( - url: string | null | undefined, - { width }: ResolveOptions, -): Promise { - if (!url) return { src: '', optimized: false }; - - const key = cacheKey(url, width); - const cacheFile = join(CACHE_DIR, `${key}.webp`); - - await ensureDirs(); - - // Warm path: cached optimized file exists (prefetch pool or a prior build/ - // page already encoded it) -> publish into dist/ + return immediately. - try { - await access(cacheFile); - await publishFromCache(key); - return { src: `${PUBLIC_IMG_URL}/${key}.webp`, optimized: true }; - } catch { - // not cached; fall through - } - - // Persistent negative cache (shared with the prefetch pool): a prior attempt - // marked this URL permanently bad (.miss) or recently-slow within the - // retry-after window (.slow). Passthrough WITHOUT refetching — this stops the - // known-bad / chronically-slow covers being refetched once per locale. - if (failedThisProcess.has(key) || (await negativeCacheHit(key))) { - return { src: url, optimized: false }; - } - - // Cold path: encode via the SAME implementation the prefetch pool uses. - // encodeToCache is fail-soft (never throws); false -> passthrough. - const ok = await encodeToCache(url, width, key); - if (!ok) { - failedThisProcess.add(key); - return { src: url, optimized: false }; - } - await publishFromCache(key); - return { src: `${PUBLIC_IMG_URL}/${key}.webp`, optimized: true }; -} - -/** Number of cached optimized images (diagnostic; safe if dir absent). */ -export async function cacheSize(): Promise { - try { - const files = await readdir(CACHE_DIR); - return files.filter((f) => f.endsWith('.webp')).length; - } catch { - return 0; - } -} diff --git a/astro/src/lib/remoteImages.ts b/astro/src/lib/remoteImages.ts new file mode 100644 index 00000000..56fa0b75 --- /dev/null +++ b/astro/src/lib/remoteImages.ts @@ -0,0 +1,32 @@ +// App-wide configured astro-remote-images instance (build-time only, Node). +// This module MUST be imported before the package's component +// renders (the component uses the default = last-created instance); every +// consumer here imports it directly, which guarantees the ordering. +import { createRemoteImages } from 'astro-remote-images'; + +// The render width used for project cover images (projects/[id].astro, the +// data page cards, the data-explorer imageMap). The prefetch pool warms the +// cache under the SAME width/key the per-page resolver looks up. +export const COVER_WIDTH = 640; + +export const remoteImages = createRemoteImages({ + width: COVER_WIDTH, + quality: 80, + format: 'webp', + cacheDir: '.image-cache', // persisted in CI so warm builds reuse encodes + publicPrefix: '/_img', + // Fetch-bound work: ~24 in-flight fetches saturates the link without + // exhausting sockets/RAM. Tunable via env for measurement. + concurrency: Number(process.env.PREFETCH_CONCURRENCY ?? 24), + fetchTimeoutMs: 15000, + // Chronically-slow origins are skipped (not refetched) within this window + // so warm builds stay fast; a genuinely-transient blip still retries. + transientRetryAfterMs: Number(process.env.IMAGE_RETRY_AFTER_MS ?? 6 * 60 * 60 * 1000), + // Project decision: broken covers (corrupt data / 4xx) AND transiently + // unreachable ones (timeout / 5xx) both render the bundled error image + // (/_img/image-error.svg) instead of passing the remote URL through. + onError: 'error-image', + onTransientError: 'error-image', +}); + +export const resolveRemoteImage = remoteImages.resolve; diff --git a/astro/src/pages/[locale]/data/index.astro b/astro/src/pages/[locale]/data/index.astro index 64b83e61..3d875d55 100644 --- a/astro/src/pages/[locale]/data/index.astro +++ b/astro/src/pages/[locale]/data/index.astro @@ -3,9 +3,9 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import DataExplorer, { PAGE_SIZE } from '../../../components/DataExplorer.tsx'; import { getDataExplorerPayload } from '../../../lib/dataExplorer'; -import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/optimizeImage'; +import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; import '../../../styles/global.css'; // One static page per locale: //data/ (parity with the Next Pages-Router diff --git a/astro/src/pages/[locale]/projects/[id].astro b/astro/src/pages/[locale]/projects/[id].astro index a3942358..1480034d 100644 --- a/astro/src/pages/[locale]/projects/[id].astro +++ b/astro/src/pages/[locale]/projects/[id].astro @@ -2,13 +2,13 @@ import type { GetStaticPaths } from 'astro'; import ProjectLayout from '../../../layouts/ProjectLayout.astro'; import RemoteImage from '../../../components/RemoteImage.astro'; -import { COVER_WIDTH } from '../../../lib/optimizeImage'; +import { COVER_WIDTH } from '../../../lib/remoteImages'; import MapIsland from '../../../components/MapIsland.tsx'; import ProjectHistoryChart from '../../../components/ProjectHistoryChart.tsx'; import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from '../../../lib/data'; import { getFileSizeProperties, resolveAoiDownload } from '../../../lib/common'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; export const getStaticPaths = (async () => { let projects = getAllProjects(); diff --git a/astro/src/pages/data-explorer.json.ts b/astro/src/pages/data-explorer.json.ts index 6ee6c201..97dff807 100644 --- a/astro/src/pages/data-explorer.json.ts +++ b/astro/src/pages/data-explorer.json.ts @@ -16,7 +16,7 @@ // the build, so these are pure cache hits). import type { APIRoute } from 'astro'; import { getDataExplorerPayload } from '../lib/dataExplorer'; -import { resolveRemoteImage, COVER_WIDTH } from '../lib/optimizeImage'; +import { resolveRemoteImage, COVER_WIDTH } from '../lib/remoteImages'; export const GET: APIRoute = async () => { const payload = getDataExplorerPayload(); From 646db34563788e86d75041527eb289a4defcde78 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 09:41:19 +0545 Subject: [PATCH 11/52] feat(packages): astro-incremental-static selectPaths page API + runIncrementalBuild(config). Hash globs, prune routes, sitemap locales, and build commands all move to config; the app orchestrator becomes a 34-line wrapper. --- .../astro-incremental-static/README.md | 143 +++++ .../astro-incremental-static/package.json | 25 + .../astro-incremental-static/src/index.ts} | 129 +++-- .../astro-incremental-static/src/runner.ts | 494 ++++++++++++++++++ astro/scripts/incremental-build.mjs | 424 ++------------- .../pages/[locale]/blogs/[slug]/index.astro | 2 +- astro/src/pages/[locale]/blogs/index.astro | 2 +- .../pages/[locale]/get-involved/index.astro | 2 +- astro/src/pages/[locale]/index.astro | 2 +- astro/src/pages/[locale]/privacy/index.astro | 2 +- 10 files changed, 770 insertions(+), 455 deletions(-) create mode 100644 astro/packages/astro-incremental-static/README.md create mode 100644 astro/packages/astro-incremental-static/package.json rename astro/{src/lib/incremental.ts => packages/astro-incremental-static/src/index.ts} (53%) create mode 100644 astro/packages/astro-incremental-static/src/runner.ts diff --git a/astro/packages/astro-incremental-static/README.md b/astro/packages/astro-incremental-static/README.md new file mode 100644 index 00000000..4663511d --- /dev/null +++ b/astro/packages/astro-incremental-static/README.md @@ -0,0 +1,143 @@ +# astro-incremental-static + +Incremental static builds for Astro (`output: 'static'`): a per-page +`propsHash` **render-skip** wired into `getStaticPaths`, plus a build +orchestration that merges the previous `dist`, prunes deleted pages, and +regenerates the sitemap over the merged tree. + +Nothing in the ecosystem does render-skip: Astro re-renders every page every +build (so do Next stable and canary — measured). On a ~14.7k-page site this +package turns a one-record data change into a ~6 s build instead of ~33 s. + +## ⚠️ Correctness contract (read this first) + +1. **`propsData` completeness is YOUR responsibility.** For every candidate + path you pass to `selectPaths`, `propsData` must cover *everything* that + can change the rendered page apart from code (the runner's `codeHash` + covers code/content inputs). Any data you render but leave out of + `propsData` produces **silently stale pages** — the page won't rebuild + when only that data changes. Aggregate pages (lists, stats) must hash the + whole payload they summarize, not just the visible slice. +2. **The stale-page footgun compounds silently.** A missed dependency isn't an + error — the build succeeds and the page is simply old until an unrelated + change happens to rebuild it. Audit every `selectPaths` call site when the + page's data sources change. +3. **Activation is explicit.** Selection only happens when the runner sets + `ASTRO_INCREMENTAL=1` in the spawned build's environment. A plain + `astro build` is ALWAYS a full build, even with a stale state dir on disk + (file presence is stale state, not intent). + +## Install + +In-repo workspace package (`private: true`, not published). From an app in the +same npm workspace: + +```jsonc +// package.json +{ + "workspaces": ["packages/*"], + "dependencies": { "astro-incremental-static": "*" }, + "scripts": { "build:incremental": "node scripts/incremental-build.mjs" } +} +``` + +Zero dependencies. Requires Node ≥ 22.18 (TypeScript source, loaded via +Node's built-in type stripping; Vite transforms it for page-side imports). + +## Usage + +**1. Page side** — wrap each `getStaticPaths` result in `selectPaths`: + +```ts +import { selectPaths } from 'astro-incremental-static'; + +export const getStaticPaths = (() => { + const candidates = records.flatMap((record) => LOCALES.map((locale) => ({ + key: `${locale}/projects/${record.id}`, // canonical dist out-path, no slashes at ends + params: { locale, id: record.id }, + propsData: record, // SAME reference across the record's locales -> hashed once + }))); + return selectPaths('projects', candidates); +}); +``` + +Outside the runner this returns every candidate and touches no state — the +normal build path is completely unaffected. + +**2. Orchestration** — a small script (`scripts/incremental-build.mjs`): + +```js +import { runIncrementalBuild } from 'astro-incremental-static/runner'; + +runIncrementalBuild({ + codeHash: { + include: ['src/**', 'astro.config.mjs', 'package.json'], + }, + prune: { routes: ['*/projects/*', '*/blogs/*'] }, + sitemap: { + site: 'https://example.org', + locales: ['en', 'de'], + defaultLocale: 'en', + }, + prefetch: { cmd: 'node', args: ['scripts/prefetch-images.mjs'] }, // optional +}); +``` + +Restore `dist/` and the state dir from your CI cache before running; persist +both afterward. + +## API + +```ts +// 'astro-incremental-static' +selectPaths(pageId, candidates, opts?) // the render-skip gate (memoised hashing) +isIncrementalBuild() // ASTRO_INCREMENTAL === '1' +hashProps(propsData) // sha1 of data minus volatile buildDate +readCodeHash(stateDir?) / readManifest(stateDir?) + +// 'astro-incremental-static/runner' +runIncrementalBuild(config) // the whole orchestration (throws on child failure) +``` + +`Candidate`: `{ key, params, propsData, props? }` — unchanged +contract from the original in-app implementation. + +## Config (`runIncrementalBuild`) + +| Key | Type | Default | Description | +| --- | --- | --- | --- | +| `root` | `string` | `process.cwd()` | App root the build runs from. | +| `distDir` | `string` | `'dist'` | Build output dir (root-relative). The merge staging dir is `-cache`. | +| `stateDir` | `string` | `'.astro-incremental'` | Manifest + code hash + shards. Gitignore it; persist in CI. Exported to the build via `ASTRO_INCREMENTAL_STATE_DIR`. | +| `codeHash.include` | `string[]` | — (required) | Root-relative globs (`**` crosses `/`, `../` allowed) of every code/content input that affects rendered output — EXCLUDING the data axis (tracked per page via `propsData`) and build artifacts. | +| `codeHash.exclude` | `string[]` | `[]` | Globs subtracted from the include set. | +| `prune.routes` | `string[]` | off | Dist-relative dir patterns whose children are per-record pages (e.g. `*/projects/*`). Matched dirs not present as manifest keys are removed after the merge. Segments may use `*`/`?`; `**` unsupported here. | +| `sitemap` | object \| `false` | `false` | `{ enabled?, site, locales, defaultLocale }`. Required when using @astrojs/sitemap — regenerates `sitemap-0.xml`/`sitemap-index.xml` over the MERGED tree (structurally identical to @astrojs/sitemap's i18n output: hreflang alternate groups, redirect stubs excluded, root `/` included as the default locale). | +| `buildCommand` | `{cmd, args}` | `astro build` | Resolved via `/node_modules/.bin` when present. Spawned with `ASTRO_INCREMENTAL=1`. | +| `prefetch` | `{cmd, args}` | off | Command run before the build (cache warm etc.). | + +## How a run proceeds + +1. Compute `codeHash` over the configured inputs; write it to the state dir. +2. Move the previous `dist` aside. +3. Run `prefetch` (if any), then `buildCommand` with `ASTRO_INCREMENTAL=1` — + every `selectPaths` returns only changed/new paths and writes its manifest + shard. +4. `codeHash` changed → the fresh (full) dist is authoritative; done. + Otherwise merge: copy the small fresh tree over the cached full tree. +5. Prune deleted record dirs (`prune.routes` minus manifest keys). +6. Regenerate the sitemap over the merged tree. +7. Persist the merged manifest for the next run. + +Routes *without* a `selectPaths`-wired `getStaticPaths` (the 404, static file +endpoints, redirect stubs) are cheaply re-emitted every run and therefore +always fresh. + +## Both historical bugs are fixed inside the package + +- **Env-var gating**: selection is armed ONLY by `ASTRO_INCREMENTAL=1`, never + by state-dir presence — a plain `astro build` after an incremental run is a + full build, not a silent partial one. +- **Merged-tree sitemap regen**: the runner rebuilds the full sitemap from the + merged dist, so an incremental run can't silently shrink the published + sitemap to just the pages it rendered. diff --git a/astro/packages/astro-incremental-static/package.json b/astro/packages/astro-incremental-static/package.json new file mode 100644 index 00000000..ad289f59 --- /dev/null +++ b/astro/packages/astro-incremental-static/package.json @@ -0,0 +1,25 @@ +{ + "name": "astro-incremental-static", + "version": "0.1.0", + "description": "Incremental static builds for Astro (output: 'static'): per-page propsHash render-skip in getStaticPaths + an orchestration that merges the previous dist, prunes deleted pages, and regenerates the sitemap over the merged tree.", + "type": "module", + "private": true, + "exports": { + ".": "./src/index.ts", + "./runner": "./src/runner.ts" + }, + "files": [ + "src", + "README.md" + ], + "keywords": [ + "astro", + "incremental", + "static", + "build", + "render-skip" + ], + "engines": { + "node": ">=22.18" + } +} diff --git a/astro/src/lib/incremental.ts b/astro/packages/astro-incremental-static/src/index.ts similarity index 53% rename from astro/src/lib/incremental.ts rename to astro/packages/astro-incremental-static/src/index.ts index b88927c8..15f8db08 100644 --- a/astro/src/lib/incremental.ts +++ b/astro/packages/astro-incremental-static/src/index.ts @@ -1,4 +1,6 @@ /** + * astro-incremental-static — page-side API. + * * Incremental static-build support for Astro (`output: 'static'`). * * A plain `astro build` renders every path returned by every `getStaticPaths` @@ -9,24 +11,25 @@ * - its `propsHash` changed (its data changed), or * - it is new (no manifest entry). * - * Unbuilt pages are supplied by merging the previous build's `dist/` over the - * fresh partial `dist/` in `scripts/incremental-build.mjs`. + * Unbuilt pages are supplied by merging the previous build's dist over the + * fresh partial dist — see ./runner.ts (`runIncrementalBuild`). + * + * ACTIVATION: all of this happens ONLY when `ASTRO_INCREMENTAL=1` is set in + * the environment — which only the runner does when it spawns `astro build`. + * A plain `astro build` is ALWAYS a full build, even when a stale state dir + * (code-hash + manifest from an earlier incremental run) is sitting on disk. + * Gating on the env var rather than on the presence of the code-hash file is + * deliberate: file presence is stale state, not intent. * - * ACTIVATION: all of this happens ONLY when `ASTRO_INCREMENTAL=1` is set in the - * environment — which only `scripts/incremental-build.mjs` does when it spawns - * `astro build`. A plain `npm run build` is ALWAYS a full build, even when a - * stale `.astro-incremental/` (code-hash + manifest from an earlier incremental - * run) is sitting on disk. Gating on the env var rather than on the presence of - * the code-hash file is deliberate: file presence is stale state, not intent. + * CORRECTNESS CONTRACT (yours to uphold): `candidate.propsData` must cover + * EVERYTHING that can change the rendered page apart from code (which the + * runner's codeHash covers). Data you render but leave out of propsData + * silently produces STALE pages — the page won't rebuild when only that data + * changes. * * Everything here runs only inside `getStaticPaths` (build time, Node). The * Node `fs`/`crypto` imports are tree-shaken out of any client/island bundle * because they are unreachable from a page component. - * - * This is the Astro port of the Next app's src/utils/incrementalBuild.ts; the - * design (per-path propsHash, per-page manifest shards, code-hash gate) is - * identical — only the integration point differs (getStaticPaths vs - * getStaticProps, static-export vs static-export). */ import { createHash } from 'node:crypto'; import { @@ -36,11 +39,16 @@ import { } from 'node:fs'; import { join } from 'node:path'; -/** Gitignored dir shared with scripts/incremental-build.mjs. */ -const INCR_DIR = join(process.cwd(), '.astro-incremental'); -const SHARD_DIR = join(INCR_DIR, 'shards'); -const MANIFEST_PATH = join(INCR_DIR, 'manifest.json'); -const CODE_HASH_PATH = join(INCR_DIR, 'code-hash.txt'); +/** + * State dir shared with the runner. The runner exports its configured + * `stateDir` to the spawned build via ASTRO_INCREMENTAL_STATE_DIR; outside + * the runner the default matches the runner's default. + */ +function stateDirPath(override?: string): string { + return override + ?? process.env.ASTRO_INCREMENTAL_STATE_DIR + ?? join(process.cwd(), '.astro-incremental'); +} export interface Manifest { codeHash: string; @@ -48,11 +56,10 @@ export interface Manifest { } /** - * True ONLY when running under scripts/incremental-build.mjs, which sets + * True ONLY when running under the incremental runner, which sets * ASTRO_INCREMENTAL=1 in the `astro build` child's environment. `process.env` - * is the real Node env here (getStaticPaths runs server-side at build time — - * same mechanism src/lib/data.ts uses for MAPSWIPE_DATA_FILE), not a Vite - * compile-time replacement. + * is the real Node env here (getStaticPaths runs server-side at build time), + * not a Vite compile-time replacement. */ export function isIncrementalBuild(): boolean { return process.env.ASTRO_INCREMENTAL === '1'; @@ -61,13 +68,13 @@ export function isIncrementalBuild(): boolean { /** * Hash a page's data. Volatile fields that change every build without * representing a real content change are stripped first (otherwise every page - * would re-invalidate on each run). `buildDate` is the Astro equivalent of the - * Next `buildDate` prop. + * would re-invalidate on each run) — currently the conventional `buildDate` + * top-level key. * - * No key-sorting/canonicalisation: values come from staticData.json (written - * once at fetch time) via fixed code paths, so JSON key order is already - * deterministic across builds. Keeping this cheap matters — it runs for every - * candidate path (14k+). + * No key-sorting/canonicalisation: values are expected to come from a data + * snapshot (written once at fetch time) via fixed code paths, so JSON key + * order is already deterministic across builds. Keeping this cheap matters — + * it runs for every candidate path (potentially 10k+). */ export function hashProps(propsData: unknown): string { let payload = propsData; @@ -79,19 +86,21 @@ export function hashProps(propsData: unknown): string { return createHash('sha1').update(JSON.stringify(payload)).digest('hex'); } -export function readCodeHash(): string { +export function readCodeHash(stateDir?: string): string { try { - return readFileSync(CODE_HASH_PATH, 'utf8').trim(); + return readFileSync(join(stateDirPath(stateDir), 'code-hash.txt'), 'utf8').trim(); } catch { return ''; } } let cachedManifest: Manifest | undefined; -export function readManifest(): Manifest { +export function readManifest(stateDir?: string): Manifest { if (!cachedManifest) { try { - cachedManifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8')) as Manifest; + cachedManifest = JSON.parse( + readFileSync(join(stateDirPath(stateDir), 'manifest.json'), 'utf8'), + ) as Manifest; } catch { cachedManifest = { codeHash: '', paths: {} }; } @@ -101,23 +110,29 @@ export function readManifest(): Manifest { export interface Candidate { /** - * Canonical dist/ out-path key, e.g. `en/projects/` — no leading or + * Canonical dist out-path key, e.g. `en/projects/` — no leading or * trailing slash. Used to correlate with the prior manifest and to drive - * pruning of deleted pages in the orchestration. + * pruning of deleted pages in the runner. */ key: string; /** getStaticPaths params for this path. */ params: Params; /** * The data whose change should trigger a rebuild. Pages that share one - * logical record (e.g. a project's 6 locale variants) SHOULD pass the SAME - * object reference here so the hash is memoised once across them. + * logical record (e.g. a record's per-locale variants) SHOULD pass the + * SAME object reference here so the hash is memoised once across them. + * MUST be complete — see the correctness contract in the module header. */ propsData: unknown; /** Optional getStaticPaths props to forward for selected paths. */ props?: Props; } +export interface SelectPathsOptions { + /** Override the state dir (default: ASTRO_INCREMENTAL_STATE_DIR env or `/.astro-incremental`). */ + stateDir?: string; +} + function toPath( candidate: Candidate, ): { params: Params; props?: Props } { @@ -128,40 +143,37 @@ function toPath( /** * Decide which candidate paths to (re)build and persist this page's shard of - * the manifest (the full candidate set with hashes — used by the orchestration - * to rebuild the merged manifest and to prune deleted pages). - * - * Outside the orchestration (no ASTRO_INCREMENTAL=1 → a normal full - * `astro build`) EVERY candidate is returned and NO state is read or written — - * the normal build path is completely unaffected, regardless of what a - * previous incremental run may have left in `.astro-incremental/`. + * the manifest (the full candidate set with hashes — used by the runner to + * rebuild the merged manifest and to prune deleted pages). * - * Under the orchestration, a changed (or unreadable) codeHash also returns - * every candidate (full rebuild), and shards are always written so the - * orchestration can persist the complete current manifest. + * Outside the runner (no ASTRO_INCREMENTAL=1 → a normal full `astro build`) + * EVERY candidate is returned and NO state is read or written — the normal + * build path is completely unaffected, regardless of what a previous + * incremental run may have left in the state dir. * - * `computeProps` is not needed as a separate arg here (unlike the Next impl) - * because Astro's getStaticPaths already computes the data up front; the caller - * passes it in as `candidate.propsData`. Memoisation across shared references - * is still applied so the 6 locale variants of one project hash once. + * Under the runner, a changed (or unreadable) codeHash also returns every + * candidate (full rebuild), and shards are always written so the runner can + * persist the complete current manifest. */ export function selectPaths( pageId: string, candidates: Candidate[], + opts: SelectPathsOptions = {}, ): { params: Params; props?: Props }[] { if (!isIncrementalBuild()) { return candidates.map(toPath); } - const codeHash = readCodeHash(); - const prev = readManifest(); - // Empty/unreadable codeHash (defensive — the orchestration always writes it + const stateDir = stateDirPath(opts.stateDir); + const codeHash = readCodeHash(opts.stateDir); + const prev = readManifest(opts.stateDir); + // Empty/unreadable codeHash (defensive — the runner always writes it // before spawning the build) or a changed codeHash => full rebuild. const codeChanged = codeHash === '' || prev.codeHash !== codeHash; - // propsData is often the SAME object reference for pages sharing data (a - // project's 6 locale variants), so memoise the hash by identity to avoid - // re-serialising the same data once per locale. + // propsData is often the SAME object reference for pages sharing data + // (a record's per-locale variants), so memoise the hash by identity to + // avoid re-serialising the same data once per locale. const hashByRef = new WeakMap(); const memoHash = (propsData: unknown): string => { if (propsData && typeof propsData === 'object') { @@ -186,8 +198,9 @@ export function selectPaths( } } - mkdirSync(SHARD_DIR, { recursive: true }); - writeFileSync(join(SHARD_DIR, `${pageId}.json`), JSON.stringify(shard)); + const shardDir = join(stateDir, 'shards'); + mkdirSync(shardDir, { recursive: true }); + writeFileSync(join(shardDir, `${pageId}.json`), JSON.stringify(shard)); return toBuild; } diff --git a/astro/packages/astro-incremental-static/src/runner.ts b/astro/packages/astro-incremental-static/src/runner.ts new file mode 100644 index 00000000..7ded7729 --- /dev/null +++ b/astro/packages/astro-incremental-static/src/runner.ts @@ -0,0 +1,494 @@ +/** + * astro-incremental-static — build orchestration (`runIncrementalBuild`). + * + * `astro build` (output: 'static') re-renders every path returned by every + * getStaticPaths on every build. The runner avoids that: + * 1. compute a global `codeHash` over the configured code/content inputs + * (NOT the data axis), + * 2. move the previous build's dist aside (e.g. restored from a CI cache), + * 3. run the optional prefetch command + the build command with + * ASTRO_INCREMENTAL=1 — getStaticPaths (via this package's selectPaths) + * reads the codeHash + previous manifest and returns ONLY the pages + * whose code or data changed, + * 4. merge the previous dist *under* the fresh one (fresh wins), + * 5. prune page dirs (matching the configured prunable route patterns) + * whose record no longer exists, + * 6. regenerate the sitemap over the MERGED tree (the fresh build's sitemap + * only covers the pages rendered this run), + * 7. persist the new manifest for the next run. + * + * codeHash unchanged + data unchanged => ~0 pages rendered (compile only). + * codeHash changed => everything rebuilt (fresh authoritative). + * + * ASTRO_INCREMENTAL=1 is the ONLY thing that activates the per-page + * selection: a plain `astro build` (which never sets it) is always a full + * build, even with a stale state dir on disk. + * + * Always-full pages: routes WITHOUT a selectPaths-wired getStaticPaths are + * (cheaply) re-emitted on every run — including static file endpoints, which + * therefore always stay in sync with whatever data change triggered the run. + */ +import { spawnSync } from 'node:child_process'; +import { createHash } from 'node:crypto'; +import { + closeSync, + cpSync, + existsSync, + mkdirSync, + openSync, + readFileSync, + readSync, + readdirSync, + renameSync, + rmSync, + statSync, + writeFileSync, +} from 'node:fs'; +import { + isAbsolute, + join, + relative, + resolve, + sep, +} from 'node:path'; + +export interface CommandSpec { + cmd: string; + args: string[]; +} + +export interface SitemapConfig { + /** Default true when the object is provided. */ + enabled?: boolean; + /** Site origin, e.g. `https://example.org` (no trailing slash). */ + site: string; + /** Locale path prefixes used to group hreflang alternates, e.g. ['en','de']. */ + locales: string[]; + /** Locale attributed to unprefixed paths (e.g. the root `/`). */ + defaultLocale: string; +} + +export interface IncrementalBuildConfig { + /** App root the build runs from. Default `process.cwd()`. */ + root?: string; + /** Build output dir, relative to root. Default `dist`. */ + distDir?: string; + /** State dir (manifest, code hash, shards), relative to root. Gitignore it. Default `.astro-incremental`. */ + stateDir?: string; + /** + * The code/content inputs whose change must trigger a FULL rebuild: + * root-relative globs (`**` crosses `/`; `../` prefixes allowed) plus + * optional excludes. Include everything that affects rendered output + * EXCEPT the data axis (which selectPaths tracks per page via propsHash) + * and build artifacts. + */ + codeHash: { include: string[]; exclude?: string[] }; + /** + * Dist-relative dir patterns whose child dirs are per-record pages that + * may be deleted between builds — e.g. star, "projects", star (every + * locale's per-project dirs; see the README for the literal spelling). + * Segments may contain `*` and `?`; `**` is unsupported here. A matched + * dir whose dist-relative path is not a manifest key is removed after + * the merge. Omit to skip pruning. + */ + prune?: { routes: string[] }; + /** + * Regenerate the sitemap over the merged tree — REQUIRED when the site + * uses @astrojs/sitemap, otherwise the fresh build's sliver of a sitemap + * clobbers the cached full one. `false` to skip. + */ + sitemap?: SitemapConfig | false; + /** Build command. Default `{ cmd: 'astro', args: ['build'] }` (resolved via node_modules/.bin). */ + buildCommand?: CommandSpec; + /** Optional command to run before the build (e.g. an image-prefetch script). */ + prefetch?: CommandSpec; +} + +/** Minimal glob → RegExp: `**` crosses `/`, `*` and `?` don't. */ +function globToRegExp(glob: string): RegExp { + let out = ''; + let i = 0; + while (i < glob.length) { + const c = glob[i]; + if (c === '*') { + if (glob[i + 1] === '*') { + if (glob[i + 2] === '/') { + out += '(?:.*/)?'; + i += 3; + } else { + out += '.*'; + i += 2; + } + } else { + out += '[^/]*'; + i += 1; + } + } else if (c === '?') { + out += '[^/]'; + i += 1; + } else { + out += c.replace(/[.+^${}()|[\]\\]/, '\\$&'); + i += 1; + } + } + return new RegExp(`^${out}$`); +} + +const hasGlobChars = (s: string) => /[*?]/.test(s); + +function toPosix(p: string): string { + return p.split(sep).join('/'); +} + +function collectFiles(dir: string, acc: string[]): string[] { + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const full = join(dir, entry.name); + if (entry.isDirectory()) { + collectFiles(full, acc); + } else if (entry.isFile()) { + acc.push(full); + } + } + return acc; +} + +function isDir(p: string): boolean { + try { + return statSync(p).isDirectory(); + } catch { + return false; + } +} + +export function runIncrementalBuild(config: IncrementalBuildConfig): void { + const ROOT = resolve(config.root ?? process.cwd()); + const DIST = join(ROOT, config.distDir ?? 'dist'); + const DIST_CACHE = `${DIST}-cache`; + const INCR_DIR = isAbsolute(config.stateDir ?? '') + ? (config.stateDir as string) + : join(ROOT, config.stateDir ?? '.astro-incremental'); + const SHARD_DIR = join(INCR_DIR, 'shards'); + const MANIFEST_PATH = join(INCR_DIR, 'manifest.json'); + const CODE_HASH_PATH = join(INCR_DIR, 'code-hash.txt'); + const buildCommand = config.buildCommand ?? { cmd: 'astro', args: ['build'] }; + const sitemapConfig = config.sitemap === false || config.sitemap === undefined + ? undefined + : config.sitemap; + const sitemapEnabled = sitemapConfig !== undefined && (sitemapConfig.enabled ?? true); + + const startTime = process.hrtime.bigint(); + const elapsed = () => `${(Number(process.hrtime.bigint() - startTime) / 1e9).toFixed(1)}s`; + const log = (msg: string) => process.stdout.write(`[incremental-build +${elapsed()}] ${msg}\n`); + + function bin(name: string): string { + const local = join(ROOT, 'node_modules', '.bin', name); + return existsSync(local) ? local : name; + } + + function run(command: CommandSpec, extraEnv: Record = {}): void { + const resolved = command.cmd === 'node' ? 'node' : bin(command.cmd); + log(`$ ${command.cmd} ${command.args.join(' ')}`); + const before = process.hrtime.bigint(); + const result = spawnSync(resolved, command.args, { + cwd: ROOT, + stdio: 'inherit', + env: { ...process.env, ...extraEnv }, + shell: false, + }); + log(` └ ${command.cmd} took ${(Number(process.hrtime.bigint() - before) / 1e9).toFixed(1)}s`); + if (result.status !== 0) { + throw new Error(`${command.cmd} exited with ${result.status ?? result.signal}`); + } + } + + // ----------------------------------------------------------------------- + // codeHash — hash of every configured code/content input. Files are + // labelled with their ROOT-relative posix path so the hash is + // machine-independent (and stable for `../`-reaching inputs). + // ----------------------------------------------------------------------- + function computeCodeHash(): string { + const excludeRes = (config.codeHash.exclude ?? []).map(globToRegExp); + const files = new Set(); + for (const pattern of config.codeHash.include) { + const segments = pattern.split('/'); + const staticSegs: string[] = []; + for (const seg of segments) { + if (hasGlobChars(seg)) { + break; + } + staticSegs.push(seg); + } + if (staticSegs.length === segments.length) { + // No glob chars: a literal file or directory. + const literal = join(ROOT, ...segments); + if (isDir(literal)) { + collectFiles(literal, []).forEach((f) => files.add(f)); + } else if (existsSync(literal)) { + files.add(literal); + } + continue; + } + const base = join(ROOT, ...staticSegs); + if (!isDir(base)) { + continue; + } + const re = globToRegExp(pattern); + for (const file of collectFiles(base, [])) { + if (re.test(toPosix(relative(ROOT, file)))) { + files.add(file); + } + } + } + + const sorted = [...files] + .filter((f) => !excludeRes.some((re) => re.test(toPosix(relative(ROOT, f))))) + .sort(); + const hash = createHash('sha1'); + for (const file of sorted) { + hash.update(toPosix(relative(ROOT, file))); + hash.update('\0'); + hash.update(readFileSync(file)); + hash.update('\0'); + } + return hash.digest('hex'); + } + + // ----------------------------------------------------------------------- + // helpers for merge + prune + // ----------------------------------------------------------------------- + function readShards(): Record { + const merged: Record = {}; + if (!existsSync(SHARD_DIR)) { + return merged; + } + for (const name of readdirSync(SHARD_DIR)) { + if (!name.endsWith('.json')) { + continue; + } + const shard = JSON.parse(readFileSync(join(SHARD_DIR, name), 'utf8')); + Object.assign(merged, shard); + } + return merged; + } + + /** Expand one prunable-route pattern into existing dist dirs (dist-relative keys). */ + function expandRoutePattern(pattern: string): string[] { + const segments = pattern.split('/').filter(Boolean); + let level: string[] = ['']; + for (const seg of segments) { + const re = globToRegExp(seg); + const nextLevel: string[] = []; + for (const relDir of level) { + const abs = join(DIST, relDir); + if (!isDir(abs)) { + continue; + } + for (const entry of readdirSync(abs, { withFileTypes: true })) { + if (entry.isDirectory() && re.test(entry.name)) { + nextLevel.push(relDir === '' ? entry.name : `${relDir}/${entry.name}`); + } + } + } + level = nextLevel; + } + return level; + } + + /** + * Remove per-record page directories (matching the configured prunable + * route patterns) that are no longer in the current path set (deleted + * records). Keys match selectPaths candidate keys, e.g. + * `en/projects/`. Anything outside the patterns is never touched. + */ + function pruneDeletions(validKeys: Set): number { + if (!isDir(DIST) || !config.prune) { + return 0; + } + let removed = 0; + for (const pattern of config.prune.routes) { + for (const key of expandRoutePattern(pattern)) { + if (!validKeys.has(key)) { + rmSync(join(DIST, ...key.split('/')), { recursive: true, force: true }); + removed += 1; + } + } + } + return removed; + } + + // ----------------------------------------------------------------------- + // sitemap regeneration over the MERGED tree + // + // On the merge path the fresh build's sitemap-0.xml covers ONLY the pages + // rendered this run (e.g. 13 URLs after a 1-record change) and, having + // been copied over the cached full sitemap, would silently shrink the + // published one to a sliver. So after merging we regenerate it from the + // merged dist itself, emitting the exact structure @astrojs/sitemap + // produces with its i18n option (verified structurally identical): + // - one per page dir's index.html, + // - pages grouped by path-minus-locale-prefix; every member of a group + // carries the SAME list + // (all members, href-sorted; no x-default), + // - locale-less pages (the root /) count as the default locale — the + // root group then has hreflang "" twice, matching + // @astrojs/sitemap, + // - meta-refresh redirect stubs are EXCLUDED (astro excludes redirect + // routes); the root / — also a meta-refresh page but a real page + // route — is INCLUDED, again matching astro, + // - 404.html is naturally excluded (not an index.html). + // ----------------------------------------------------------------------- + + /** True when the file starts as a meta-refresh redirect page. */ + function isMetaRefreshStub(filePath: string): boolean { + const fd = openSync(filePath, 'r'); + try { + const buf = Buffer.alloc(512); + const n = readSync(fd, buf, 0, 512, 0); + return buf.toString('utf8', 0, n).includes('http-equiv="refresh"'); + } finally { + closeSync(fd); + } + } + + function regenerateSitemap({ site, locales, defaultLocale }: SitemapConfig): number { + // 1. Collect every page URL from the merged dist. + const urlPaths: string[] = []; + for (const entry of readdirSync(DIST, { recursive: true })) { + const rel = String(entry); + if (rel !== 'index.html' && !rel.endsWith(`${sep}index.html`)) { + continue; + } + const dir = rel === 'index.html' ? '' : rel.slice(0, -`${sep}index.html`.length); + const urlPath = dir === '' ? '/' : `/${toPosix(dir)}/`; + // Redirect stubs are excluded from the sitemap; the root '/' + // (also a meta-refresh page, but a page route) is included. + if (urlPath !== '/' && isMetaRefreshStub(join(DIST, rel))) { + continue; + } + urlPaths.push(urlPath); + } + urlPaths.sort(); + + // 2. Group by path-minus-locale-prefix; hreflang from the prefix (or + // the default locale for unprefixed paths like '/'). + const groups = new Map(); + for (const urlPath of urlPaths) { + const [first, ...rest] = urlPath.slice(1).split('/'); + const isLocale = locales.includes(first); + const groupKey = isLocale ? `/${rest.join('/')}` : urlPath; + const hreflang = isLocale ? first : defaultLocale; + if (!groups.has(groupKey)) { + groups.set(groupKey, []); + } + groups.get(groupKey)!.push({ urlPath, hreflang }); + } + + // 3. Emit (single line, same as @astrojs/sitemap). + const loc = (urlPath: string) => `${site}${urlPath}`; + const parts: string[] = []; + for (const urlPath of urlPaths) { + const [first, ...rest] = urlPath.slice(1).split('/'); + const groupKey = locales.includes(first) ? `/${rest.join('/')}` : urlPath; + const group = groups.get(groupKey)!; + const alternates = group.length > 1 + ? group + .map(({ urlPath: p, hreflang }) => ( + `` + )) + .join('') + : ''; + parts.push(`${loc(urlPath)}${alternates}`); + } + const urlset = '' + + '' + + `${parts.join('')}`; + writeFileSync(join(DIST, 'sitemap-0.xml'), urlset); + writeFileSync( + join(DIST, 'sitemap-index.xml'), + '' + + '' + + `${site}/sitemap-0.xml`, + ); + return urlPaths.length; + } + + // ----------------------------------------------------------------------- + // main + // ----------------------------------------------------------------------- + + // 1. codeHash → file (read by getStaticPaths via selectPaths). + mkdirSync(INCR_DIR, { recursive: true }); + rmSync(SHARD_DIR, { recursive: true, force: true }); + const codeHash = computeCodeHash(); + writeFileSync(CODE_HASH_PATH, codeHash); + + let prevManifest: { codeHash: string; paths: Record } = { codeHash: '', paths: {} }; + try { + prevManifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8')); + } catch { + // cold build + } + const codeChanged = prevManifest.codeHash !== codeHash; + log(`codeHash ${codeHash}${codeChanged ? ' (changed → full rebuild)' : ' (unchanged → data-only)'}`); + + // 2. Move the restored previous dist aside so the build starts clean. + rmSync(DIST_CACHE, { recursive: true, force: true }); + if (existsSync(DIST)) { + renameSync(DIST, DIST_CACHE); + log(`moved previous ${config.distDir ?? 'dist'}/ → ${config.distDir ?? 'dist'}-cache/`); + } else { + log(`no previous ${config.distDir ?? 'dist'}/ (cold build)`); + } + + // 3. Optional prefetch, then build only the changed/new paths. + // ASTRO_INCREMENTAL=1 is what arms selectPaths — without it (any plain + // `astro build`) every getStaticPaths returns all its candidates. + if (config.prefetch) { + run(config.prefetch); + } + run(buildCommand, { + ASTRO_INCREMENTAL: '1', + ASTRO_INCREMENTAL_STATE_DIR: INCR_DIR, + }); + + // 4. Merge. On a full rebuild (codeChanged) the fresh tree already + // contains every current page — just discard the cache. On a data-only + // build the fresh tree is small while the cache holds ~every page, so + // overlay the SMALL fresh tree onto the LARGE cached one (fresh wins) + // via a copy into the cache, then rename the merged cache back — + // keeping the unchanged files in place. + const manifestPaths = readShards(); + if (codeChanged) { + rmSync(DIST_CACHE, { recursive: true, force: true }); + log('full rebuild — fresh dist is authoritative, skipped merge/prune/sitemap'); + } else if (existsSync(DIST_CACHE)) { + cpSync(DIST, DIST_CACHE, { recursive: true, force: true }); + rmSync(DIST, { recursive: true, force: true }); + renameSync(DIST_CACHE, DIST); + log('merged fresh dist onto cached tree'); + + // 5. Prune deleted records from the merged tree. + const validKeys = new Set(Object.keys(manifestPaths)); + const prunedCount = pruneDeletions(validKeys); + log(`pruned ${prunedCount} deleted page dir(s); ${validKeys.size} tracked pages`); + + // 6. The fresh build's sitemap only lists the pages rendered THIS run + // and just clobbered the cached full one — regenerate it over the + // merged tree. + if (sitemapEnabled && sitemapConfig) { + const urlCount = regenerateSitemap(sitemapConfig); + log(`regenerated sitemap over merged tree (${urlCount} URLs)`); + } + } else { + log('no cached dist — fresh dist kept as-is (cold build)'); + } + + // 7. Persist the new manifest for the next run. + writeFileSync(MANIFEST_PATH, JSON.stringify({ codeHash, paths: manifestPaths })); + rmSync(DIST_CACHE, { recursive: true, force: true }); + log('done'); +} diff --git a/astro/scripts/incremental-build.mjs b/astro/scripts/incremental-build.mjs index 2a9d8429..b0a71d21 100644 --- a/astro/scripts/incremental-build.mjs +++ b/astro/scripts/incremental-build.mjs @@ -1,394 +1,34 @@ #!/usr/bin/env node -/** - * Incremental static-build orchestration for the Astro app. - * - * `astro build` (output: 'static') re-renders every path returned by every - * getStaticPaths on every build. To avoid that we: - * 1. compute a global `codeHash` over code/content inputs (NOT the data), - * 2. move the previous build's `dist/` aside (restored from CI cache), - * 3. run the image prefetch + `astro build` with ASTRO_INCREMENTAL=1 — - * getStaticPaths (via src/lib/incremental.ts) reads the codeHash + - * previous manifest and returns ONLY the pages whose code or data - * changed, - * 4. merge the previous `dist/` *under* the fresh one (fresh wins), - * 5. prune project/blog page dirs whose record no longer exists, - * 6. regenerate the sitemap over the MERGED tree (the fresh build's sitemap - * only covers the pages rendered this run), - * 7. persist the new manifest for the next run. - * - * codeHash unchanged + data unchanged => ~0 pages rendered (compile only). - * codeHash changed => everything rebuilt (fresh authoritative). - * - * ASTRO_INCREMENTAL=1 is the ONLY thing that activates the per-page selection: - * a plain `npm run build` (which never sets it) is always a full build, even - * with a stale `.astro-incremental/` on disk. - * - * Always-full pages: routes WITHOUT a selectPaths-wired getStaticPaths are - * (cheaply) re-emitted on every run — the root/locale-less redirect stubs, the - * root index.astro, 404.astro, and the /data-explorer.json static endpoint. - * That last one matters: the endpoint has no getStaticPaths, so the JSON - * dataset regenerates on every incremental build and stays in sync with - * whatever data change triggered the run. - * - * This mirrors the Next app's scripts/incremental-build.mjs; the orchestration - * (manifest, move-aside, merge, prune, codeHash, sitemap) is framework- - * agnostic. The per-page selection lives in getStaticPaths via - * src/lib/incremental.ts. - */ -import { spawnSync } from 'node:child_process'; -import { createHash } from 'node:crypto'; -import { - closeSync, - cpSync, - existsSync, - mkdirSync, - openSync, - readFileSync, - readSync, - readdirSync, - renameSync, - rmSync, - statSync, - writeFileSync, -} from 'node:fs'; -import { join, relative, sep } from 'node:path'; - -const ROOT = process.cwd(); -const DIST = join(ROOT, 'dist'); -const DIST_CACHE = join(ROOT, 'dist-cache'); -const INCR_DIR = join(ROOT, '.astro-incremental'); -const SHARD_DIR = join(INCR_DIR, 'shards'); -const MANIFEST_PATH = join(INCR_DIR, 'manifest.json'); -const CODE_HASH_PATH = join(INCR_DIR, 'code-hash.txt'); - -// Keep in sync with astro.config.mjs (site + i18n.locales + i18n.defaultLocale). -// Not imported from there: astro.config.mjs pulls in integrations (a .ts file -// among them), which plain Node can't load. -const SITE = 'https://mapswipe.org'; -const LOCALES = ['en', 'ne', 'hu', 'de', 'cs', 'pt']; -const DEFAULT_LOCALE = 'en'; - -const startTime = process.hrtime.bigint(); -const elapsed = () => `${(Number(process.hrtime.bigint() - startTime) / 1e9).toFixed(1)}s`; -const log = (msg) => process.stdout.write(`[incremental-build +${elapsed()}] ${msg}\n`); - -function bin(name) { - const local = join(ROOT, 'node_modules', '.bin', name); - return existsSync(local) ? local : name; -} - -function run(command, args, extraEnv = {}) { - const resolved = command === 'node' ? 'node' : bin(command); - log(`$ ${command} ${args.join(' ')}`); - const before = process.hrtime.bigint(); - const result = spawnSync(resolved, args, { - stdio: 'inherit', - env: { ...process.env, ...extraEnv }, - shell: false, - }); - log(` └ ${command} took ${(Number(process.hrtime.bigint() - before) / 1e9).toFixed(1)}s`); - if (result.status !== 0) { - throw new Error(`${command} exited with ${result.status ?? result.signal}`); - } -} - -// --------------------------------------------------------------------------- -// 1. codeHash — hash of every code/content input that affects rendered output. -// Includes src/, astro.config.mjs, package.json, and the repo-root -// public/locales (the i18next glob in src/i18n reads ../public/locales — -// there is no astro/public/locales copy or symlink). -// EXCLUDES the data axis (fullData/ and blogs/ are tracked per-page via -// propsHash) and all build artifacts (dist/, .astro/, .image-cache/, -// .astro-incremental/) plus the generated optimized images (public/_img/). -// --------------------------------------------------------------------------- -function collectFiles(dir, acc) { - for (const entry of readdirSync(dir, { withFileTypes: true })) { - const full = join(dir, entry.name); - if (entry.isDirectory()) { - collectFiles(full, acc); - } else if (entry.isFile()) { - acc.push(full); - } - } - return acc; -} - -function computeCodeHash() { - const files = []; - - // Recurse src/. - const srcDir = join(ROOT, 'src'); - if (existsSync(srcDir)) { - collectFiles(srcDir, files); - } - - // Translations affect output. They live at the REPO ROOT's public/locales - // (shared with the Next app; read via the ../../../public/locales glob in - // src/i18n/index.ts). Skip astro/public/ entirely — public/_img/ is - // generated per-build and other static assets are copied verbatim, so they - // never change what getStaticPaths returns. - const localesDir = join(ROOT, '..', 'public', 'locales'); - if (existsSync(localesDir)) { - collectFiles(localesDir, files); - } - - // Named root config/manifest files. - for (const name of ['astro.config.mjs', 'package.json']) { - const p = join(ROOT, name); - if (existsSync(p)) { - files.push(p); - } - } - - files.sort(); - const hash = createHash('sha1'); - for (const file of files) { - // Label with the ROOT-relative path (e.g. `../public/locales/...` for - // the repo-root translations) so the hash is machine-independent. - hash.update(relative(ROOT, file)); - hash.update('\0'); - hash.update(readFileSync(file)); - hash.update('\0'); - } - return hash.digest('hex'); -} - -// --------------------------------------------------------------------------- -// helpers for merge + prune -// --------------------------------------------------------------------------- -function readShards() { - const merged = {}; - if (!existsSync(SHARD_DIR)) { - return merged; - } - for (const name of readdirSync(SHARD_DIR)) { - if (!name.endsWith('.json')) { - continue; - } - const shard = JSON.parse(readFileSync(join(SHARD_DIR, name), 'utf8')); - Object.assign(merged, shard); - } - return merged; -} - -function isDir(p) { - try { - return statSync(p).isDirectory(); - } catch { - return false; - } -} - -/** - * Remove project/blog page directories that are no longer in the current path - * set (deleted projects/blogs). Static/aggregate pages are never tracked as a - * project/blog dir here, so they are never pruned. Orphaned optimised images - * for deleted projects are left behind (unreferenced, harmless). - * - * key format matches selectPaths: `${locale}/projects/${id}` and - * `${locale}/blogs/${slug}`. - */ -function pruneDeletions(validKeys) { - if (!isDir(DIST)) { - return 0; - } - let removed = 0; - const ASSET_DIRS = new Set(['_astro', '_img', 'img', 'locales']); - for (const localeEntry of readdirSync(DIST, { withFileTypes: true })) { - if (!localeEntry.isDirectory() || ASSET_DIRS.has(localeEntry.name)) { - continue; - } - const locale = localeEntry.name; - for (const section of ['projects', 'blogs']) { - const sectionDir = join(DIST, locale, section); - if (!isDir(sectionDir)) { - continue; - } - for (const child of readdirSync(sectionDir, { withFileTypes: true })) { - if (!child.isDirectory()) { - continue; // e.g. blogs/index.html (the list page) - } - const key = `${locale}/${section}/${child.name}`; - if (!validKeys.has(key)) { - rmSync(join(sectionDir, child.name), { recursive: true, force: true }); - removed += 1; - } - } - } - } - return removed; -} - -// --------------------------------------------------------------------------- -// sitemap regeneration over the MERGED tree +// Incremental static-build orchestration — thin wrapper over +// astro-incremental-static (see packages/astro-incremental-static/README.md, +// incl. the propsData correctness contract). This file only holds THIS app's +// config; all mechanics (codeHash, dist merge, prune, merged-tree sitemap +// regen, manifest persistence) live in the package. // -// On the merge path the fresh build's sitemap-0.xml covers ONLY the pages -// rendered this run (e.g. 13 URLs after a 1-project change) and, having been -// copied over the cached full sitemap, would silently shrink the published one -// to a sliver. So after merging we regenerate it from the merged dist itself, -// emitting the exact structure @astrojs/sitemap produces with our i18n config -// (verified structurally identical to a full build's sitemap): -// - one per page dir's index.html, -// - pages grouped by path-minus-locale-prefix; every member of a group -// carries the SAME list (all -// members, href-sorted; no x-default — our config doesn't set one), -// - locale-less pages (the root /) count as DEFAULT_LOCALE, which is why the -// root group has 7 alternates (/, /en/, + 5 others) with hreflang "en" -// twice — @astrojs/sitemap does the same, -// - the config-redirect stubs (/blogs/, /data/, ... meta-refresh pages) are -// EXCLUDED, as astro excludes redirect routes; the root / — also a -// meta-refresh page but a real page route (src/pages/index.astro) — is -// INCLUDED, again matching astro, -// - 404.html is naturally excluded (not an index.html). -// --------------------------------------------------------------------------- - -/** True when the file starts as one of our meta-refresh redirect pages. */ -function isMetaRefreshStub(filePath) { - const fd = openSync(filePath, 'r'); - try { - const buf = Buffer.alloc(512); - const n = readSync(fd, buf, 0, 512, 0); - return buf.toString('utf8', 0, n).includes('http-equiv="refresh"'); - } finally { - closeSync(fd); - } -} - -function regenerateSitemap() { - // 1. Collect every page URL from the merged dist. - const urlPaths = []; - for (const entry of readdirSync(DIST, { recursive: true })) { - const rel = String(entry); - if (rel !== 'index.html' && !rel.endsWith(`${sep}index.html`)) { - continue; - } - const dir = rel === 'index.html' ? '' : rel.slice(0, -`${sep}index.html`.length); - const urlPath = dir === '' ? '/' : `/${dir.split(sep).join('/')}/`; - // Config-redirect stubs are excluded from the sitemap; the root '/' - // (also a meta-refresh page, but a page route) is included. - if (urlPath !== '/' && isMetaRefreshStub(join(DIST, rel))) { - continue; - } - urlPaths.push(urlPath); - } - urlPaths.sort(); - - // 2. Group by path-minus-locale-prefix; hreflang from the prefix (or the - // default locale for unprefixed paths like '/'). - const groups = new Map(); // groupKey -> [{ urlPath, hreflang }] - for (const urlPath of urlPaths) { - const [first, ...rest] = urlPath.slice(1).split('/'); - const isLocale = LOCALES.includes(first); - const groupKey = isLocale ? `/${rest.join('/')}` : urlPath; - const hreflang = isLocale ? first : DEFAULT_LOCALE; - if (!groups.has(groupKey)) { - groups.set(groupKey, []); - } - groups.get(groupKey).push({ urlPath, hreflang }); - } - - // 3. Emit (single line, same as @astrojs/sitemap). - const loc = (urlPath) => `${SITE}${urlPath}`; - const parts = []; - for (const urlPath of urlPaths) { - const [first, ...rest] = urlPath.slice(1).split('/'); - const groupKey = LOCALES.includes(first) ? `/${rest.join('/')}` : urlPath; - const group = groups.get(groupKey); - const alternates = group.length > 1 - ? group - .map(({ urlPath: p, hreflang }) => ( - `` - )) - .join('') - : ''; - parts.push(`${loc(urlPath)}${alternates}`); - } - const urlset = '' - + '' - + `${parts.join('')}`; - writeFileSync(join(DIST, 'sitemap-0.xml'), urlset); - writeFileSync( - join(DIST, 'sitemap-index.xml'), - '' - + '' - + `${SITE}/sitemap-0.xml`, - ); - return urlPaths.length; -} - -// --------------------------------------------------------------------------- -// main -// --------------------------------------------------------------------------- -function main() { - // 1. codeHash → file (read by getStaticPaths via src/lib/incremental.ts). - mkdirSync(INCR_DIR, { recursive: true }); - rmSync(SHARD_DIR, { recursive: true, force: true }); - const codeHash = computeCodeHash(); - writeFileSync(CODE_HASH_PATH, codeHash); - - let prevManifest = { codeHash: '', paths: {} }; - try { - prevManifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8')); - } catch { - // cold build - } - const codeChanged = prevManifest.codeHash !== codeHash; - log(`codeHash ${codeHash}${codeChanged ? ' (changed → full rebuild)' : ' (unchanged → data-only)'}`); - - // 2. Move the restored previous dist/ aside so astro build starts clean. - rmSync(DIST_CACHE, { recursive: true, force: true }); - if (existsSync(DIST)) { - renameSync(DIST, DIST_CACHE); - log('moved previous dist/ → dist-cache/'); - } else { - log('no previous dist/ (cold build)'); - } - - // 3. Prefetch images, then build only the changed/new paths. - // ASTRO_INCREMENTAL=1 is what arms selectPaths — without it (any plain - // `astro build`) every getStaticPaths returns all its candidates. - run('node', ['scripts/prefetch-images.mjs']); - run('astro', ['build'], { ASTRO_INCREMENTAL: '1' }); - - // 4. Merge. On a full rebuild (codeChanged) the fresh tree already contains - // every current page, so there is nothing to merge and no stale page to - // prune — just discard the cache. On a data-only build the fresh tree is - // small (the changed pages + re-emitted images + shared JS/CSS) while the - // cache holds ~all 14.7k HTML, so overlay the SMALL fresh tree onto the - // LARGE cached one (fresh wins) via a copy into the cache, then rename the - // merged cache back to dist/ — keeping the 14.7k unchanged files in place. - const manifestPaths = readShards(); - if (codeChanged) { - rmSync(DIST_CACHE, { recursive: true, force: true }); - log('full rebuild — fresh dist/ is authoritative, skipped merge/prune/sitemap'); - } else if (existsSync(DIST_CACHE)) { - cpSync(DIST, DIST_CACHE, { recursive: true, force: true }); - rmSync(DIST, { recursive: true, force: true }); - renameSync(DIST_CACHE, DIST); - log('merged fresh dist/ onto cached tree'); - - // 5. Prune deleted projects/blogs from the merged tree. - const validKeys = new Set(Object.keys(manifestPaths)); - const prunedCount = pruneDeletions(validKeys); - log(`pruned ${prunedCount} deleted page dir(s); ${validKeys.size} tracked pages`); - - // 6. The fresh build's sitemap only lists the pages rendered THIS run - // and just clobbered the cached full one — regenerate it over the - // merged tree. - const urlCount = regenerateSitemap(); - log(`regenerated sitemap over merged tree (${urlCount} URLs)`); - } else { - log('no cached dist/ — fresh dist/ kept as-is (cold build)'); - } - - // 7. Persist the new manifest for the next run. - writeFileSync(MANIFEST_PATH, JSON.stringify({ codeHash, paths: manifestPaths })); - rmSync(DIST_CACHE, { recursive: true, force: true }); - log('done'); -} - -main(); +// Keep sitemap site/locales in sync with astro.config.mjs (not imported from +// there: the config pulls in integrations plain Node shouldn't load here). +import { runIncrementalBuild } from 'astro-incremental-static/runner'; + +runIncrementalBuild({ + codeHash: { + // Everything that affects rendered output EXCEPT the data axis + // (fullData/ + blogs/ are tracked per page via propsHash) and build + // artifacts. Repo-root public/locales is read by src/i18n's glob. + include: [ + 'src/**', + '../public/locales/**', + 'astro.config.mjs', + 'package.json', + ], + }, + // Per-record page dirs that may disappear between builds (deleted + // projects/blogs). Keys match the selectPaths candidates. + prune: { routes: ['*/projects/*', '*/blogs/*'] }, + sitemap: { + site: 'https://mapswipe.org', + locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], + defaultLocale: 'en', + }, + prefetch: { cmd: 'node', args: ['scripts/prefetch-images.mjs'] }, + buildCommand: { cmd: 'astro', args: ['build'] }, +}); diff --git a/astro/src/pages/[locale]/blogs/[slug]/index.astro b/astro/src/pages/[locale]/blogs/[slug]/index.astro index 8634685e..7266f09e 100644 --- a/astro/src/pages/[locale]/blogs/[slug]/index.astro +++ b/astro/src/pages/[locale]/blogs/[slug]/index.astro @@ -4,7 +4,7 @@ import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../../layouts/BlogLayout.astro'; import { getT, LOCALES } from '../../../../i18n'; -import { selectPaths } from '../../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; // Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing // //blogs// with exact URL parity to Next (slug == entry.id == diff --git a/astro/src/pages/[locale]/blogs/index.astro b/astro/src/pages/[locale]/blogs/index.astro index 606ccb69..62878666 100644 --- a/astro/src/pages/[locale]/blogs/index.astro +++ b/astro/src/pages/[locale]/blogs/index.astro @@ -4,7 +4,7 @@ import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../layouts/BlogLayout.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; // Blog LIST page. One variant per locale (blog content is single-language // English markdown; only the chrome is translated), producing //blogs/ diff --git a/astro/src/pages/[locale]/get-involved/index.astro b/astro/src/pages/[locale]/get-involved/index.astro index 2654d7e4..892fe6c5 100644 --- a/astro/src/pages/[locale]/get-involved/index.astro +++ b/astro/src/pages/[locale]/get-involved/index.astro @@ -2,7 +2,7 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; // Get-involved page. One static, translated variant per locale — // //get-involved/ — faithful to the Next Pages-Router page. Uses shared diff --git a/astro/src/pages/[locale]/index.astro b/astro/src/pages/[locale]/index.astro index 7a4e1ee7..08f89308 100644 --- a/astro/src/pages/[locale]/index.astro +++ b/astro/src/pages/[locale]/index.astro @@ -7,7 +7,7 @@ import ProjectTypeIcon from '../../components/ProjectTypeIcon.astro'; import Icon from '../../components/Icon.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from '../../lib/data'; -import { selectPaths } from '../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; // Home page. One static, translated variant per locale — // — matching // the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, diff --git a/astro/src/pages/[locale]/privacy/index.astro b/astro/src/pages/[locale]/privacy/index.astro index 3b694def..d2074e95 100644 --- a/astro/src/pages/[locale]/privacy/index.astro +++ b/astro/src/pages/[locale]/privacy/index.astro @@ -7,7 +7,7 @@ import remarkRehype from 'remark-rehype'; import rehypeStringify from 'rehype-stringify'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../lib/incremental'; +import { selectPaths } from 'astro-incremental-static'; // Privacy page. The policy body is a fixed English markdown string (identical // in every locale — same as the Next app, which hardcoded it); only the tab From d6d2904f64707e956ede74c6954de70b5c511114 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 10:04:03 +0545 Subject: [PATCH 12/52] docs(packages): index + backlinks packages/README.md index; each package README links back to the decision records. --- astro/packages/README.md | 23 +++++++++++++++++++ .../packages/astro-hydration-dedup/README.md | 4 ++++ .../astro-incremental-static/README.md | 4 ++++ astro/packages/astro-remote-images/README.md | 4 ++++ 4 files changed, 35 insertions(+) create mode 100644 astro/packages/README.md diff --git a/astro/packages/README.md b/astro/packages/README.md new file mode 100644 index 00000000..724feed0 --- /dev/null +++ b/astro/packages/README.md @@ -0,0 +1,23 @@ +# packages/ — deliberately-owned build infrastructure + +Three reusable Astro packages (npm workspaces, `private: true`, publish-ready). +Each exists because Astro measurably cannot do the job via config or an +existing integration — the full evidence trail is in +[`docs/ownership-map.md`](../../docs/ownership-map.md) (what's platform vs. +ours, and why), [`docs/adr/0002-migrate-to-astro.md`](../../docs/adr/0002-migrate-to-astro.md) +(the migration decisions), and [`docs/benchmarks.md`](../../docs/benchmarks.md) +(every number cited below). + +| Package | One-liner | Configured in this app at | +| --- | --- | --- | +| [`astro-hydration-dedup`](astro-hydration-dedup/) | Externalizes Astro's force-inlined island hydration runtimes (was 57 MB / 12% of dist duplicated across 14.6k pages) into per-script cached files | `astro.config.mjs` (`hydrationDedup({ minOccurrences: 10 })`) | +| [`astro-remote-images`](astro-remote-images/) | Build-time remote-image optimization that cannot kill the build: per-image error policy (error-image/passthrough/fail), bounded concurrent prefetch, negative caching (production data contained 8 build-fatal images) | `src/lib/remoteImages.ts` (instance + policies), `scripts/prefetch-images.mjs` (URL collector) | +| [`astro-incremental-static`](astro-incremental-static/) | Render-skip incremental builds for `output: 'static'` — nothing else does this (verified vs Astro & Next stable/canary); one-project change 6 s vs 33 s full | `scripts/incremental-build.mjs` (runner config); pages import `selectPaths` | + +Two of the three are stopgaps we *want* to delete: ready-to-file upstream +feature requests live in [`docs/upstream/`](../../docs/upstream/). If either +lands in Astro, delete the corresponding package (see each README's caveats). + +Rules for adding a fourth: see "Rules of thumb" in the ownership map — +config → official integration → maintained community integration → only then +hand-roll, with a measured why and an exit path. diff --git a/astro/packages/astro-hydration-dedup/README.md b/astro/packages/astro-hydration-dedup/README.md index 4dd2677b..bcd3d341 100644 --- a/astro/packages/astro-hydration-dedup/README.md +++ b/astro/packages/astro-hydration-dedup/README.md @@ -115,3 +115,7 @@ _astro/dedup-1a2b3c4d.js (3542 B × 14574 pages), … semantics to the inline original at the same position, at the cost of one extra (immutable, shared, cached) request per distinct runtime. - Run it after any other integration that writes HTML. + + +--- +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* diff --git a/astro/packages/astro-incremental-static/README.md b/astro/packages/astro-incremental-static/README.md index 4663511d..ed744a0c 100644 --- a/astro/packages/astro-incremental-static/README.md +++ b/astro/packages/astro-incremental-static/README.md @@ -141,3 +141,7 @@ always fresh. - **Merged-tree sitemap regen**: the runner rebuilds the full sitemap from the merged dist, so an incremental run can't silently shrink the published sitemap to just the pages it rendered. + + +--- +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* diff --git a/astro/packages/astro-remote-images/README.md b/astro/packages/astro-remote-images/README.md index 282bc1dc..d06a91eb 100644 --- a/astro/packages/astro-remote-images/README.md +++ b/astro/packages/astro-remote-images/README.md @@ -157,3 +157,7 @@ Every substitution (error image or passthrough) logs - Build-time only (Node). Never import from client/island code. - The error-image SVG is inlined in the module (not read from a file) so it survives Vite bundling into the SSR build. + + +--- +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* From 78676a458a17dfa039113d5a1f0c5898eb6d82fd Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 10:13:00 +0545 Subject: [PATCH 13/52] docs(astro): app README Setup, commands, cache/state table with cold costs, env knobs, structure, gotchas. --- astro/README.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 astro/README.md diff --git a/astro/README.md b/astro/README.md new file mode 100644 index 00000000..59dcf7d4 --- /dev/null +++ b/astro/README.md @@ -0,0 +1,83 @@ +# MapSwipe website (Astro) + +Static, SEO-driven, 6-locale site (~14,700 pages: 2,400+ projects × en/ne/hu/ +de/cs/pt + blogs + static pages), deployed to GitHub Pages. Astro 5 with React +islands — most pages ship zero JS. + +**Why Astro / how it's built:** [docs/adr/0002-migrate-to-astro.md](../docs/adr/0002-migrate-to-astro.md) +(decisions), [docs/ownership-map.md](../docs/ownership-map.md) (what's platform +vs. ours), [docs/benchmarks.md](../docs/benchmarks.md) (measurements), +[docs/PLAN.md](../docs/PLAN.md) (path to cutover), [TODO.md](TODO.md) (live tasks). + +## Setup + +```sh +# Node 22+ (packages/* are .ts consumed via Node's type stripping) +npm ci # installs the app + the packages/ workspaces + +# Fetch site data (writes ../fullData/staticData.json — gitignored): +MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ \ +MAPSWIPE_REFERER_ENDPOINT=https://mapswipe.org/ \ +APP_ENVIRONMENT=PROD \ +npm --prefix .. run fetch-data # or run scripts/fetchData.ts from repo root +``` + +`fetch-data` is **incremental**: it scans `{id, modifiedAt, lastContributionDate}` +and refetches only changed projects, merging with the previous +`staticData.json` (which IS the cache — persist it in CI). `FORCE_FULL_FETCH=1` +forces a full refetch (~50 s; run weekly as a safety net). + +## Commands + +| Command | What | +| --- | --- | +| `npm run dev` | dev server | +| `npm run build` | **full** static build → `dist/` (always renders every page) | +| `npm run build:incremental` | render-skip build: only pages whose data changed, merged over the previous `dist/` (~5–6 s vs ~33 s warm). See the [package README](packages/astro-incremental-static/README.md) — correctness contract applies | +| `npm run preview` | serve `dist/` locally | + +A full warm build ≈ 33 s / 1.6 GB RAM; cold (empty image cache) ≈ 90–105 s +because 2,375 remote project covers are fetched + optimized. `dist/` ≈ 430 MB +(GitHub Pages limit is 1 GB). + +## Caches & state (all gitignored; persist the first two in CI) + +| Path | What | Cold cost if lost | +| --- | --- | --- | +| `.image-cache/` | optimized remote covers + negative cache (`.miss`/`.slow` markers) | ~70 s refetch/re-encode | +| `../fullData/staticData.json` | the site data AND the incremental-fetch cache | ~50 s full refetch | +| `.astro-incremental/` | manifest for `build:incremental` (`ASTRO_INCREMENTAL=1` runs only) | one full render | +| `node_modules/.astro/`, `.astro/` | Astro/Vite caches | a few seconds | + +## Env knobs + +| Var | Effect | +| --- | --- | +| `SLICE_LIMIT=N` | build only N projects — fast smoke builds / PR CI | +| `BAD_IMAGE_TEST=1` | inject a broken cover URL (tests the error-image path) | +| `MAPSWIPE_DATA_FILE=/path` | point the build at an alternate data file (perturbation tests) | +| `PREFETCH_CONCURRENCY=N` | image prefetch pool size (default 24) | +| `FORCE_FULL_FETCH=1` | fetch-data: ignore the incremental cache | +| `ASTRO_INCREMENTAL=1` | internal — set by the incremental runner; never set manually | + +## Structure + +- `src/pages/[locale]/…` — routes (exact URL parity with the old Next site) +- `src/components/` — `.astro` (static) + `.tsx` (React islands: data explorer, + project map, history chart) +- `src/lib/` — app/domain logic (data slimming, chart math) + thin package config +- `src/i18n/` — i18next over the repo-root `public/locales/*.json` (verbatim) +- `packages/` — reusable build infrastructure ([index](packages/README.md)): + hydration-script dedup, fail-soft remote images (error-image policy), + incremental static builds +- Blogs: markdown in repo-root `blogs/` (Content Collections; images co-located + in `blogs/images/`, optimized natively by `astro:assets`) + +## Gotchas + +- One malformed remote cover **cannot** break the build: it renders + `/_img/image-error.svg` and warns (`[remote-images] …`). Policy per failure + class is configured in `src/lib/remoteImages.ts`. +- Translations are build-time only — nothing under `/locales/` ships in `dist/`. +- The sitemap is authoritative from `@astrojs/sitemap` on full builds; the + incremental runner regenerates it over the merged tree. From 4eca1d13c5ae03ec58682009dd90ba09e5f447bf Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 19:50:45 +0545 Subject: [PATCH 14/52] style: comments explain why, not what Strip change-log/session narration from comments; keep constraint rationale, contracts, and upstream references. --- astro/astro.config.mjs | 5 ++--- astro/packages/astro-hydration-dedup/src/index.ts | 2 +- astro/packages/astro-remote-images/src/index.ts | 4 ++-- astro/src/components/DataExplorer.tsx | 4 ++-- astro/src/components/Icon.astro | 8 ++++---- astro/src/components/ProjectTypeIcon.astro | 4 ++-- astro/src/i18n/index.ts | 2 +- astro/src/layouts/BlogLayout.astro | 2 +- astro/src/layouts/ProjectLayout.astro | 2 +- astro/src/lib/remoteImages.ts | 7 ++++--- astro/src/pages/[locale]/blogs/[slug]/index.astro | 2 +- astro/src/pages/[locale]/data/index.astro | 2 +- astro/src/pages/data-explorer.json.ts | 9 ++++----- 13 files changed, 26 insertions(+), 27 deletions(-) diff --git a/astro/astro.config.mjs b/astro/astro.config.mjs index 68ed96be..c4cab764 100644 --- a/astro/astro.config.mjs +++ b/astro/astro.config.mjs @@ -10,7 +10,6 @@ import hydrationDedup from 'astro-hydration-dedup'; const SITE = 'https://mapswipe.org'; -// Faithful vertical slice of the Next Pages-Router app's projects/[id] page. export default defineConfig({ site: SITE, output: 'static', @@ -44,8 +43,8 @@ export default defineConfig({ hydrationDedup({ minOccurrences: 10 }), ], // Blog markdown is rendered by Astro's built-in pipeline. Next used remark-gfm - // (see the removed remark().use(remarkGfm) in the Pages-Router detail page), so - // we enable it here for GFM parity (tables, strikethrough, autolinks, etc.). + // (remark().use(remarkGfm) in its Pages-Router detail page), so we enable it + // here for GFM parity (tables, strikethrough, autolinks, etc.). // In-body relative images (./images/*) are optimized natively by astro:assets. markdown: { remarkPlugins: [remarkGfm], diff --git a/astro/packages/astro-hydration-dedup/src/index.ts b/astro/packages/astro-hydration-dedup/src/index.ts index e5684e1d..2a889fb9 100644 --- a/astro/packages/astro-hydration-dedup/src/index.ts +++ b/astro/packages/astro-hydration-dedup/src/index.ts @@ -4,7 +4,7 @@ // A `astro:build:done` post-process. // // UPSTREAM: force-inlining is documented, unconfigurable behavior. References: -// https://github.com/withastro/docs/issues/2150 (inlined even with assetsInlineLimit: 0 — we verified) +// https://github.com/withastro/docs/issues/2150 (inlined even with assetsInlineLimit: 0) // https://github.com/withastro/roadmap/discussions/36 (the decision that inlined them) // https://github.com/withastro/astro/issues/6247 (related cross-page inlining heuristic) // Delete this package when an external-hydration-scripts option lands. diff --git a/astro/packages/astro-remote-images/src/index.ts b/astro/packages/astro-remote-images/src/index.ts index 84c3798c..bac9d590 100644 --- a/astro/packages/astro-remote-images/src/index.ts +++ b/astro/packages/astro-remote-images/src/index.ts @@ -3,8 +3,8 @@ // concurrent prefetch pool, a two-tier negative cache, and a configurable // per-image error policy (error image / passthrough / fail). // -// UPSTREAM: no existing Astro issue covers a per-image error policy (verified -// 2026-07-10). Closest existing refs: +// UPSTREAM: no existing Astro issue covers a per-image error policy (as of +// 2026-07). Closest existing refs: // https://github.com/withastro/roadmap/discussions/523 (global error handling) // https://github.com/withastro/astro/issues/15920 (remote revalidation, adjacent) // Delete this package when an upstream error policy lands. diff --git a/astro/src/components/DataExplorer.tsx b/astro/src/components/DataExplorer.tsx index ad93b423..78298944 100644 --- a/astro/src/components/DataExplorer.tsx +++ b/astro/src/components/DataExplorer.tsx @@ -32,8 +32,8 @@ const ProjectsMapIsland = lazy(() => import('./ProjectsMapIsland')); // DATA: only the first PAGE_SIZE projects (the SSR'd cards) arrive as props; // the full ~2.4k-project dataset + organizations + cover-image map is a // SHARED, locale-independent /data-explorer.json fetched on mount (see -// src/pages/data-explorer.json.ts — previously it was inlined into every locale's -// HTML, ~3 MB apiece). While loading, the initial cards render and the filter +// src/pages/data-explorer.json.ts — inlining it into every locale's HTML would +// cost ~3 MB apiece). While loading, the initial cards render and the filter // inputs are disabled (loading flag); filters/search/map operate on the full // dataset once it arrives. Fail-soft: if the fetch fails we keep the initial // slice and warn. diff --git a/astro/src/components/Icon.astro b/astro/src/components/Icon.astro index 60e28ea9..585506ee 100644 --- a/astro/src/components/Icon.astro +++ b/astro/src/components/Icon.astro @@ -1,9 +1,9 @@ --- // External-SVG-sprite icon set. Each icon is defined once as a in -// public/icons.svg and referenced here via . This replaces the previous -// full inline- markup (paths repeated on every render across ~14.7k -// pages), cutting ~99 MB of duplicated inline SVG from the build. The sprite is -// fetched/cached once by the browser; each is a ~50 B reference. +// public/icons.svg and referenced here via . Inlining the full path +// markup instead would repeat the paths on every render — ~99 MB of duplicated +// SVG across ~14.7k statically built pages. The sprite is fetched/cached once +// by the browser; each is a ~50 B reference. // // The outer keeps the icon's own viewBox (so scaling stays correct) and // fill="currentColor" so CSS themes them exactly like before. Icons that use diff --git a/astro/src/components/ProjectTypeIcon.astro b/astro/src/components/ProjectTypeIcon.astro index 8e036ce2..4d55a72f 100644 --- a/astro/src/components/ProjectTypeIcon.astro +++ b/astro/src/components/ProjectTypeIcon.astro @@ -2,7 +2,7 @@ // External-SVG-sprite mission-type icons. Each type's symbol is defined once in // public/icons.svg (id "project-type-") and referenced via , // instead of inlining the full path markup on every render. See Icon.astro for -// the rationale (removes duplicated inline SVG across the static export). +// the rationale (avoids duplicated inline SVG across the static export). // // The outer keeps the per-type viewBox (aspect ratios differ across // types) and fill="currentColor" so CSS theming is preserved. @@ -17,7 +17,7 @@ interface Props { const { type, class: className, size = 'medium' } = Astro.props; const px = { small: 16, medium: 24, large: 40 }[size]; -// Per-type viewBox (unchanged from the original inline component). +// Per-type viewBox, matching ProjectTypeIcon.tsx's inline icons exactly. const viewBox: Record = { FIND: '0 0 138 162', VALIDATE: '0 0 138 162', diff --git a/astro/src/i18n/index.ts b/astro/src/i18n/index.ts index 362bdf18..76211ef2 100644 --- a/astro/src/i18n/index.ts +++ b/astro/src/i18n/index.ts @@ -13,7 +13,7 @@ const NAMESPACES = ['project', 'common', 'data', 'blog', 'blogs', 'home', 'get-i // Eagerly import every locale/namespace JSON at build time, straight from the // repo-root public/locales (relative to THIS file: src/i18n -> src -> astro -> // repo root). The JSONs are compiled into the build output — they never enter -// dist/ as files (no symlink under astro/public anymore). +// dist/ as files. // Narrow the glob to the namespaces this app uses; a broader glob would // eagerly parse unrelated (and occasionally malformed) locale files at build. const files = import.meta.glob(['../../../public/locales/*/project.json', '../../../public/locales/*/common.json', '../../../public/locales/*/data.json', '../../../public/locales/*/blog.json', '../../../public/locales/*/blogs.json', '../../../public/locales/*/home.json', '../../../public/locales/*/get-involved.json', '../../../public/locales/*/privacy.json'], { diff --git a/astro/src/layouts/BlogLayout.astro b/astro/src/layouts/BlogLayout.astro index f9104a44..6ae798aa 100644 --- a/astro/src/layouts/BlogLayout.astro +++ b/astro/src/layouts/BlogLayout.astro @@ -1,7 +1,7 @@ --- import BaseLayout from './BaseLayout.astro'; -// Shared chrome for the blog list + detail pages. Now delegates to BaseLayout +// Shared chrome for the blog list + detail pages. Delegates to BaseLayout // (nav/header + footer + fonts + OgMeta + hreflang x6 + x-default), so blog // pages get the same shared chrome as every other page type. Keeps the `blog` // main class the blog pages' pragmatic styles hang off. `path` is the diff --git a/astro/src/layouts/ProjectLayout.astro b/astro/src/layouts/ProjectLayout.astro index 45970472..a17abbc6 100644 --- a/astro/src/layouts/ProjectLayout.astro +++ b/astro/src/layouts/ProjectLayout.astro @@ -1,7 +1,7 @@ --- import BaseLayout from './BaseLayout.astro'; -// Chrome for the project detail page. Now delegates to BaseLayout so project +// Chrome for the project detail page. Delegates to BaseLayout so project // pages get the shared nav/footer/fonts + OgMeta + hreflang. hreflang points at // the SAME project in every locale (path = projects//), matching // the Next app's URL scheme. diff --git a/astro/src/lib/remoteImages.ts b/astro/src/lib/remoteImages.ts index 56fa0b75..f4ac7183 100644 --- a/astro/src/lib/remoteImages.ts +++ b/astro/src/lib/remoteImages.ts @@ -22,9 +22,10 @@ export const remoteImages = createRemoteImages({ // Chronically-slow origins are skipped (not refetched) within this window // so warm builds stay fast; a genuinely-transient blip still retries. transientRetryAfterMs: Number(process.env.IMAGE_RETRY_AFTER_MS ?? 6 * 60 * 60 * 1000), - // Project decision: broken covers (corrupt data / 4xx) AND transiently - // unreachable ones (timeout / 5xx) both render the bundled error image - // (/_img/image-error.svg) instead of passing the remote URL through. + // Broken covers (corrupt data / 4xx) AND transiently unreachable ones + // (timeout / 5xx) both render the bundled error image + // (/_img/image-error.svg) instead of passing the remote URL through — + // deterministic output over covers that may or may not load. onError: 'error-image', onTransientError: 'error-image', }); diff --git a/astro/src/pages/[locale]/blogs/[slug]/index.astro b/astro/src/pages/[locale]/blogs/[slug]/index.astro index 7266f09e..b2920901 100644 --- a/astro/src/pages/[locale]/blogs/[slug]/index.astro +++ b/astro/src/pages/[locale]/blogs/[slug]/index.astro @@ -48,7 +48,7 @@ const t = await getT(locale!, 'blog'); const { title, publishedDate, author, coverImage, description } = entry.data; const blogTitle = title ?? entry.id; -// Render the collection entry's markdown body to HTML (replaces Next's +// Render the collection entry's markdown body to HTML (Next's equivalent: // remark().use(remark-html).use(remark-gfm)). remark-gfm is applied via the // project markdown config. const { Content } = await render(entry); diff --git a/astro/src/pages/[locale]/data/index.astro b/astro/src/pages/[locale]/data/index.astro index 3d875d55..acc45510 100644 --- a/astro/src/pages/[locale]/data/index.astro +++ b/astro/src/pages/[locale]/data/index.astro @@ -13,7 +13,7 @@ import '../../../styles/global.css'; // format => dist//data/index.html. // // This aggregate page's propsData is the FULL data-explorer payload even though -// the page itself now SSRs only a slim slice (the first PAGE_SIZE cards + +// the page itself SSRs only a slim slice (the first PAGE_SIZE cards + // stats) and the island fetches the bulk from /data-explorer.json: the SSR'd // slice (top-N by createdAt) and the stats can shift when ANY project changes, // so the propsHash must cover the whole payload → the page rebuilds on any diff --git a/astro/src/pages/data-explorer.json.ts b/astro/src/pages/data-explorer.json.ts index 97dff807..a56e7592 100644 --- a/astro/src/pages/data-explorer.json.ts +++ b/astro/src/pages/data-explorer.json.ts @@ -1,13 +1,12 @@ // Static file endpoint: emits the ONE locale-independent data-explorer dataset -// as /data-explorer.json at build time (replaces the hand-rolled -// render-time write + build:done ensure integration). +// as /data-explorer.json at build time. // // The 6 //data/ pages would otherwise each inline the full serialized // ~2.4k-project payload (~3 MB of HTML apiece); the dataset is // locale-independent, so it ships once and the DataExplorer island fetches it -// on mount (dataUrl prop, same /data-explorer.json URL as before — NO -// content-hash cache-busting; GH Pages serves with a ~10-minute cache and the -// site deploys ~daily, so a worst-case 10-minute skew is tolerable). +// on mount (dataUrl prop). The URL is deliberately NOT content-hash +// cache-busted: GH Pages serves with a ~10-minute cache and the site deploys +// ~daily, so a worst-case 10-minute skew is tolerable. // // Shape: { miniProjects, organizations, imageMap } — everything bulky the // island needs. imageMap is {originalCoverUrl -> optimized /_img src}, From f1ea592dd3e3bccbee83a54ca79d36857ab2353e Mon Sep 17 00:00:00 2001 From: tnagorra Date: Sat, 11 Jul 2026 19:57:56 +0545 Subject: [PATCH 15/52] style: reword to activation/checklist 'activation' for the env-var mechanism, 'checklist' for the cutover go/no-go. --- astro/packages/astro-incremental-static/README.md | 4 ++-- astro/packages/astro-incremental-static/src/index.ts | 2 +- astro/packages/astro-remote-images/src/index.ts | 2 +- astro/src/components/DataExplorer.tsx | 4 ++-- astro/src/components/ProjectsMapIsland.tsx | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/astro/packages/astro-incremental-static/README.md b/astro/packages/astro-incremental-static/README.md index ed744a0c..6da95fd5 100644 --- a/astro/packages/astro-incremental-static/README.md +++ b/astro/packages/astro-incremental-static/README.md @@ -90,7 +90,7 @@ both afterward. ```ts // 'astro-incremental-static' -selectPaths(pageId, candidates, opts?) // the render-skip gate (memoised hashing) +selectPaths(pageId, candidates, opts?) // the render-skip selector (memoised hashing) isIncrementalBuild() // ASTRO_INCREMENTAL === '1' hashProps(propsData) // sha1 of data minus volatile buildDate readCodeHash(stateDir?) / readManifest(stateDir?) @@ -135,7 +135,7 @@ always fresh. ## Both historical bugs are fixed inside the package -- **Env-var gating**: selection is armed ONLY by `ASTRO_INCREMENTAL=1`, never +- **Env-var activation**: selection is armed ONLY by `ASTRO_INCREMENTAL=1`, never by state-dir presence — a plain `astro build` after an incremental run is a full build, not a silent partial one. - **Merged-tree sitemap regen**: the runner rebuilds the full sitemap from the diff --git a/astro/packages/astro-incremental-static/src/index.ts b/astro/packages/astro-incremental-static/src/index.ts index 15f8db08..cf37d367 100644 --- a/astro/packages/astro-incremental-static/src/index.ts +++ b/astro/packages/astro-incremental-static/src/index.ts @@ -18,7 +18,7 @@ * the environment — which only the runner does when it spawns `astro build`. * A plain `astro build` is ALWAYS a full build, even when a stale state dir * (code-hash + manifest from an earlier incremental run) is sitting on disk. - * Gating on the env var rather than on the presence of the code-hash file is + * Keying activation on the env var rather than on the presence of the code-hash file is * deliberate: file presence is stale state, not intent. * * CORRECTNESS CONTRACT (yours to uphold): `candidate.propsData` must cover diff --git a/astro/packages/astro-remote-images/src/index.ts b/astro/packages/astro-remote-images/src/index.ts index bac9d590..e632ba60 100644 --- a/astro/packages/astro-remote-images/src/index.ts +++ b/astro/packages/astro-remote-images/src/index.ts @@ -125,7 +125,7 @@ export interface RemoteImages { /** * Warm the on-disk cache for many URLs with a bounded pool, WITHOUT * publishing into the build output (that happens per-page at render - * time). Never throws — prefetch is a cache warm, not a build gate; a + * time). Never throws — prefetch is a cache warm and must never fail the build; a * `'fail'` policy only fires at resolve time. */ prefetch(urls: string[] | (() => string[] | Promise), opts?: ResolveOptions): Promise; diff --git a/astro/src/components/DataExplorer.tsx b/astro/src/components/DataExplorer.tsx index 78298944..87108fb7 100644 --- a/astro/src/components/DataExplorer.tsx +++ b/astro/src/components/DataExplorer.tsx @@ -12,7 +12,7 @@ import type { MiniProject, Organization, ExportAsset } from '../lib/dataExplorer // Leaflet touches window at import time and cannot SSR. We lazy-load the map // module via a dynamic import() so its (leaflet) top-level code only runs in the -// browser — the parent gates rendering behind a post-mount flag. This mirrors +// browser — the parent defers rendering behind a post-mount flag. This mirrors // the Next page's dynamic(() => import('ProjectsMap'), { ssr: false }). const ProjectsMapIsland = lazy(() => import('./ProjectsMapIsland')); @@ -468,7 +468,7 @@ export default function DataExplorer(props: Props) {
{/* Map is client-only: rendered after mount so SSR never touches leaflet. Placeholder keeps layout stable pre-hydration. Also - gated on the fetched dataset so it never draws just the 9-item + waits for the fetched dataset so it never draws just the 9-item initial slice and then re-jumps to the full set. */}
{mounted && !loading ? ( diff --git a/astro/src/components/ProjectsMapIsland.tsx b/astro/src/components/ProjectsMapIsland.tsx index 2a099c5a..d040c81f 100644 --- a/astro/src/components/ProjectsMapIsland.tsx +++ b/astro/src/components/ProjectsMapIsland.tsx @@ -8,7 +8,7 @@ import type { MiniProject } from '../lib/dataExplorer'; // Client-ONLY leaflet map for the data explorer. This module statically imports // leaflet/react-leaflet (which touch window at import time), so it must NEVER be // imported during SSR. DataExplorer loads it via React.lazy(() => import(...)) -// gated behind a post-mount flag, so the static leaflet import only runs in the +// deferred behind a post-mount flag, so the static leaflet import only runs in the // browser. Ported from the Next app's ProjectsMap (circle markers, per-status // colors, popups). From 3811f143692613e890bffc2499f10544a34d6216 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Mon, 13 Jul 2026 08:20:27 +0545 Subject: [PATCH 16/52] refactor: move Astro app to repo root, remove Next app The branch now transforms the project in place instead of carrying a parallel astro/ subdir. Next app + its tooling deleted (rollback = main); locales/ moved out of publicDir; fetch-data runs under plain node (ts-node/codegen deps dropped); single root package.json with workspaces. Build verified end-to-end after the move. --- .dockerignore | 38 - .eslintrc.json | 28 - .gitignore | 44 +- .pre-commit-config.yaml | 26 - .stylelintrc.json | 16 - .unimportedrc.json | 18 - .yarn/install-state.gz | Bin 1161766 -> 0 bytes .yarnrc.yml | 1 - Dockerfile | 11 - README.md | 276 +- astro/astro.config.mjs => astro.config.mjs | 0 astro/.gitignore | 23 - astro/README.md | 83 - astro/package.json | 41 - astro/public/img | 1 - astro/tsconfig.json | 9 - docker-compose.yml | 18 - export-images.config.js | 12 - generated/types.ts | 2955 ++++++ i18next-parser.config.js | 3 - {public/locales => locales}/cs/blog.json | 0 {public/locales => locales}/cs/blogs.json | 0 {public/locales => locales}/cs/common.json | 0 {public/locales => locales}/cs/data.json | 0 .../locales => locales}/cs/get-involved.json | 0 {public/locales => locales}/cs/home.json | 0 {public/locales => locales}/cs/privacy.json | 0 {public/locales => locales}/cs/project.json | 0 {public/locales => locales}/de/blog.json | 0 {public/locales => locales}/de/blogs.json | 0 {public/locales => locales}/de/common.json | 0 {public/locales => locales}/de/data.json | 0 .../locales => locales}/de/get-involved.json | 0 {public/locales => locales}/de/home.json | 0 {public/locales => locales}/de/privacy.json | 0 {public/locales => locales}/de/project.json | 0 {public/locales => locales}/en/blog.json | 0 {public/locales => locales}/en/blogs.json | 0 {public/locales => locales}/en/common.json | 0 {public/locales => locales}/en/data.json | 0 .../locales => locales}/en/get-involved.json | 0 {public/locales => locales}/en/home.json | 0 {public/locales => locales}/en/privacy.json | 0 {public/locales => locales}/en/project.json | 0 {public/locales => locales}/es/privacy.json | 0 {public/locales => locales}/fr/blogs.json | 0 {public/locales => locales}/fr/common.json | 0 {public/locales => locales}/fr/privacy.json | 0 {public/locales => locales}/hu/blog.json | 0 {public/locales => locales}/hu/blogs.json | 0 {public/locales => locales}/hu/common.json | 0 {public/locales => locales}/hu/data.json | 0 .../locales => locales}/hu/get-involved.json | 0 {public/locales => locales}/hu/home.json | 0 {public/locales => locales}/hu/privacy.json | 0 {public/locales => locales}/hu/project.json | 0 {public/locales => locales}/ne/blog.json | 0 {public/locales => locales}/ne/blogs.json | 0 {public/locales => locales}/ne/common.json | 0 {public/locales => locales}/ne/data.json | 0 .../locales => locales}/ne/get-involved.json | 0 {public/locales => locales}/ne/home.json | 0 {public/locales => locales}/ne/privacy.json | 0 {public/locales => locales}/ne/project.json | 0 {public/locales => locales}/pt/blog.json | 0 {public/locales => locales}/pt/blogs.json | 0 {public/locales => locales}/pt/common.json | 0 {public/locales => locales}/pt/data.json | 0 .../locales => locales}/pt/get-involved.json | 0 {public/locales => locales}/pt/home.json | 0 {public/locales => locales}/pt/privacy.json | 0 {public/locales => locales}/pt/project.json | 0 next-env.d.ts | 5 - next-i18next.config.js | 12 - next-sitemap.config.js | 19 - next.config.js | 18 - astro/package-lock.json => package-lock.json | 344 +- package.json | 119 +- {astro/packages => packages}/README.md | 8 +- .../astro-hydration-dedup/README.md | 2 +- .../astro-hydration-dedup/package.json | 0 .../astro-hydration-dedup/src/index.ts | 0 .../astro-incremental-static/README.md | 2 +- .../astro-incremental-static/package.json | 0 .../astro-incremental-static/src/index.ts | 0 .../astro-incremental-static/src/runner.ts | 0 .../astro-remote-images/README.md | 2 +- .../astro-remote-images/package.json | 0 .../astro-remote-images/src/RemoteImage.astro | 0 .../astro-remote-images/src/index.ts | 0 postcss.config.js | 20 - {astro/public => public}/en/about.html | 0 {astro/public => public}/en/data.html | 0 {astro/public => public}/en/get-involved.html | 0 {astro/public => public}/icons.svg | 0 public/screenshot.png | Bin 716973 -> 0 bytes redirects/about.html | 10 - redirects/data.html | 10 - redirects/get-involved.html | 10 - scripts/fetchData.ts | 6 +- .../scripts => scripts}/incremental-build.mjs | 4 +- .../scripts => scripts}/prefetch-images.mjs | 2 +- src/components/Button/index.tsx | 49 - src/components/Button/styles.module.css | 51 - src/components/Card/index.tsx | 136 - src/components/Card/styles.module.css | 95 - src/components/CenteredCard/index.tsx | 44 - src/components/CenteredCard/styles.module.css | 29 - .../src => src}/components/DataExplorer.tsx | 0 src/components/DropdownMenu/index.tsx | 93 - {astro/src => src}/components/Footer.astro | 0 src/components/Footer/index.tsx | 173 - src/components/Footer/styles.module.css | 83 - src/components/Heading/index.tsx | 133 - src/components/Heading/styles.module.css | 45 - src/components/Hero/index.tsx | 74 - src/components/Hero/styles.module.css | 99 - src/components/HtmlOutput/index.tsx | 27 - src/components/HtmlOutput/styles.module.css | 70 - {astro/src => src}/components/Icon.astro | 0 src/components/ImageWrapper/index.tsx | 56 - src/components/ImageWrapper/styles.module.css | 15 - src/components/KeyFigure/index.tsx | 49 - src/components/KeyFigure/styles.module.css | 58 - src/components/LanguageSwitcher/index.tsx | 61 - .../LanguageSwitcher/styles.module.css | 3 - src/components/LeafletGestureHandler.tsx | 29 - src/components/Link/index.tsx | 103 - src/components/Link/styles.module.css | 61 - src/components/ListItem/index.tsx | 32 - src/components/ListItem/styles.module.css | 14 - {astro/src => src}/components/MapIsland.tsx | 0 src/components/MultiSelectInput/index.tsx | 111 - .../MultiSelectInput/styles.module.css | 27 - {astro/src => src}/components/Navbar.astro | 0 src/components/Navbar/index.tsx | 126 - src/components/Navbar/styles.module.css | 125 - src/components/NumberOutput/index.tsx | 92 - src/components/NumberOutput/styles.module.css | 4 - {astro/src => src}/components/OgMeta.astro | 0 src/components/OgMeta/index.tsx | 49 - src/components/Page/index.tsx | 35 - src/components/Page/styles.module.css | 17 - src/components/Popup/index.tsx | 38 - src/components/Popup/styles.module.css | 11 - src/components/Portal/index.tsx | 26 - .../components/ProjectHistoryChart.tsx | 0 src/components/ProjectMap/index.tsx | 71 - src/components/ProjectMap/styles.module.css | 55 - .../components/ProjectTypeIcon.astro | 0 .../components/ProjectTypeIcon.tsx | 0 src/components/ProjectTypeIcon/index.tsx | 150 - .../ProjectTypeIcon/styles.module.css | 18 - src/components/ProjectsMap/index.tsx | 308 - src/components/ProjectsMap/styles.module.css | 67 - .../components/ProjectsMapIsland.tsx | 0 src/components/RadioInput/index.tsx | 112 - src/components/RadioInput/styles.module.css | 34 - src/components/RawInput/index.tsx | 56 - src/components/RawInput/styles.module.css | 16 - .../src => src}/components/RemoteImage.astro | 0 src/components/Section/index.tsx | 83 - src/components/Section/styles.module.css | 41 - src/components/SelectInput/index.tsx | 81 - src/components/SelectInput/styles.module.css | 23 - src/components/Tag/index.tsx | 61 - src/components/Tag/styles.module.css | 46 - {astro/src => src}/content.config.ts | 10 +- src/hooks/useBlurEffect.ts | 42 - src/hooks/useBooleanState.ts | 32 - src/hooks/useDebouncedValue.ts | 34 - src/hooks/useFloatPlacement.ts | 62 - src/hooks/useSizeTracking.ts | 43 - {astro/src => src}/i18n/index.ts | 17 +- {astro/src => src}/layouts/BaseLayout.astro | 0 {astro/src => src}/layouts/BlogLayout.astro | 0 .../src => src}/layouts/ProjectLayout.astro | 0 {astro/src => src}/lib/chart.ts | 0 {astro/src => src}/lib/common.ts | 0 {astro/src => src}/lib/data.ts | 10 +- {astro/src => src}/lib/dataExplorer.ts | 4 +- {astro/src => src}/lib/projectHistory.ts | 0 {astro/src => src}/lib/remoteImages.ts | 0 {astro/src => src}/pages/404.astro | 0 src/pages/404/index.tsx | 52 - src/pages/404/styles.module.css | 43 - .../pages/[locale]/blogs/[slug]/index.astro | 0 src/pages/[locale]/blogs/[slug]/index.tsx | 152 - .../[locale]/blogs/[slug]/styles.module.css | 40 - .../pages/[locale]/blogs/index.astro | 0 src/pages/[locale]/blogs/index.tsx | 165 - src/pages/[locale]/blogs/styles.module.css | 35 - .../pages/[locale]/data/index.astro | 0 src/pages/[locale]/data/index.tsx | 1013 -- src/pages/[locale]/data/styles.module.css | 360 - .../pages/[locale]/get-involved/index.astro | 2 +- src/pages/[locale]/get-involved/index.tsx | 309 - .../[locale]/get-involved/styles.module.css | 209 - {astro/src => src}/pages/[locale]/index.astro | 0 src/pages/[locale]/index.tsx | 499 - .../pages/[locale]/privacy/index.astro | 2 +- src/pages/[locale]/privacy/index.tsx | 166 - src/pages/[locale]/privacy/styles.module.css | 13 - .../pages/[locale]/projects/[id].astro | 0 src/pages/[locale]/projects/[id].tsx | 985 -- src/pages/[locale]/projects/styles.module.css | 323 - src/pages/[locale]/styles.module.css | 329 - src/pages/_app.tsx | 81 - src/pages/_document.tsx | 36 - src/pages/blogs.tsx | 3 - .../src => src}/pages/data-explorer.json.ts | 0 src/pages/data.tsx | 3 - src/pages/get-involved.tsx | 3 - {astro/src => src}/pages/index.astro | 0 src/pages/index.tsx | 3 - src/pages/privacy.tsx | 3 - src/pages/projects.tsx | 3 - src/pages/styles.module.css | 17 - {astro/src => src}/styles/global.css | 0 src/styles/globals.css | 46 - src/styles/variables.css | 79 - src/utils/chart.ts | 60 - src/utils/common.ts | 88 - src/utils/languageDetector.ts | 7 - src/utils/languages.ts | 31 - src/utils/queries.ts | 36 - src/utils/redirect.ts | 39 - src/utils/requests/getBlogs.ts | 74 - src/utils/requests/projectHistory.ts | 95 - transifex.yaml | 4 +- tsconfig.json | 56 +- tsconfig.scripts.json | 9 - types.d.ts | 7 - yarn.lock | 8292 ----------------- 234 files changed, 3484 insertions(+), 18303 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .eslintrc.json delete mode 100644 .pre-commit-config.yaml delete mode 100644 .stylelintrc.json delete mode 100644 .unimportedrc.json delete mode 100644 .yarn/install-state.gz delete mode 100644 .yarnrc.yml delete mode 100644 Dockerfile rename astro/astro.config.mjs => astro.config.mjs (100%) delete mode 100644 astro/.gitignore delete mode 100644 astro/README.md delete mode 100644 astro/package.json delete mode 120000 astro/public/img delete mode 100644 astro/tsconfig.json delete mode 100644 docker-compose.yml delete mode 100644 export-images.config.js create mode 100644 generated/types.ts delete mode 100644 i18next-parser.config.js rename {public/locales => locales}/cs/blog.json (100%) rename {public/locales => locales}/cs/blogs.json (100%) rename {public/locales => locales}/cs/common.json (100%) rename {public/locales => locales}/cs/data.json (100%) rename {public/locales => locales}/cs/get-involved.json (100%) rename {public/locales => locales}/cs/home.json (100%) rename {public/locales => locales}/cs/privacy.json (100%) rename {public/locales => locales}/cs/project.json (100%) rename {public/locales => locales}/de/blog.json (100%) rename {public/locales => locales}/de/blogs.json (100%) rename {public/locales => locales}/de/common.json (100%) rename {public/locales => locales}/de/data.json (100%) rename {public/locales => locales}/de/get-involved.json (100%) rename {public/locales => locales}/de/home.json (100%) rename {public/locales => locales}/de/privacy.json (100%) rename {public/locales => locales}/de/project.json (100%) rename {public/locales => locales}/en/blog.json (100%) rename {public/locales => locales}/en/blogs.json (100%) rename {public/locales => locales}/en/common.json (100%) rename {public/locales => locales}/en/data.json (100%) rename {public/locales => locales}/en/get-involved.json (100%) rename {public/locales => locales}/en/home.json (100%) rename {public/locales => locales}/en/privacy.json (100%) rename {public/locales => locales}/en/project.json (100%) rename {public/locales => locales}/es/privacy.json (100%) rename {public/locales => locales}/fr/blogs.json (100%) rename {public/locales => locales}/fr/common.json (100%) rename {public/locales => locales}/fr/privacy.json (100%) rename {public/locales => locales}/hu/blog.json (100%) rename {public/locales => locales}/hu/blogs.json (100%) rename {public/locales => locales}/hu/common.json (100%) rename {public/locales => locales}/hu/data.json (100%) rename {public/locales => locales}/hu/get-involved.json (100%) rename {public/locales => locales}/hu/home.json (100%) rename {public/locales => locales}/hu/privacy.json (100%) rename {public/locales => locales}/hu/project.json (100%) rename {public/locales => locales}/ne/blog.json (100%) rename {public/locales => locales}/ne/blogs.json (100%) rename {public/locales => locales}/ne/common.json (100%) rename {public/locales => locales}/ne/data.json (100%) rename {public/locales => locales}/ne/get-involved.json (100%) rename {public/locales => locales}/ne/home.json (100%) rename {public/locales => locales}/ne/privacy.json (100%) rename {public/locales => locales}/ne/project.json (100%) rename {public/locales => locales}/pt/blog.json (100%) rename {public/locales => locales}/pt/blogs.json (100%) rename {public/locales => locales}/pt/common.json (100%) rename {public/locales => locales}/pt/data.json (100%) rename {public/locales => locales}/pt/get-involved.json (100%) rename {public/locales => locales}/pt/home.json (100%) rename {public/locales => locales}/pt/privacy.json (100%) rename {public/locales => locales}/pt/project.json (100%) delete mode 100644 next-env.d.ts delete mode 100644 next-i18next.config.js delete mode 100644 next-sitemap.config.js delete mode 100644 next.config.js rename astro/package-lock.json => package-lock.json (95%) rename {astro/packages => packages}/README.md (83%) rename {astro/packages => packages}/astro-hydration-dedup/README.md (98%) rename {astro/packages => packages}/astro-hydration-dedup/package.json (100%) rename {astro/packages => packages}/astro-hydration-dedup/src/index.ts (100%) rename {astro/packages => packages}/astro-incremental-static/README.md (98%) rename {astro/packages => packages}/astro-incremental-static/package.json (100%) rename {astro/packages => packages}/astro-incremental-static/src/index.ts (100%) rename {astro/packages => packages}/astro-incremental-static/src/runner.ts (100%) rename {astro/packages => packages}/astro-remote-images/README.md (98%) rename {astro/packages => packages}/astro-remote-images/package.json (100%) rename {astro/packages => packages}/astro-remote-images/src/RemoteImage.astro (100%) rename {astro/packages => packages}/astro-remote-images/src/index.ts (100%) delete mode 100644 postcss.config.js rename {astro/public => public}/en/about.html (100%) rename {astro/public => public}/en/data.html (100%) rename {astro/public => public}/en/get-involved.html (100%) rename {astro/public => public}/icons.svg (100%) delete mode 100644 public/screenshot.png delete mode 100644 redirects/about.html delete mode 100644 redirects/data.html delete mode 100644 redirects/get-involved.html rename {astro/scripts => scripts}/incremental-build.mjs (92%) rename {astro/scripts => scripts}/prefetch-images.mjs (97%) delete mode 100644 src/components/Button/index.tsx delete mode 100644 src/components/Button/styles.module.css delete mode 100644 src/components/Card/index.tsx delete mode 100644 src/components/Card/styles.module.css delete mode 100644 src/components/CenteredCard/index.tsx delete mode 100644 src/components/CenteredCard/styles.module.css rename {astro/src => src}/components/DataExplorer.tsx (100%) delete mode 100644 src/components/DropdownMenu/index.tsx rename {astro/src => src}/components/Footer.astro (100%) delete mode 100644 src/components/Footer/index.tsx delete mode 100644 src/components/Footer/styles.module.css delete mode 100644 src/components/Heading/index.tsx delete mode 100644 src/components/Heading/styles.module.css delete mode 100644 src/components/Hero/index.tsx delete mode 100644 src/components/Hero/styles.module.css delete mode 100644 src/components/HtmlOutput/index.tsx delete mode 100644 src/components/HtmlOutput/styles.module.css rename {astro/src => src}/components/Icon.astro (100%) delete mode 100644 src/components/ImageWrapper/index.tsx delete mode 100644 src/components/ImageWrapper/styles.module.css delete mode 100644 src/components/KeyFigure/index.tsx delete mode 100644 src/components/KeyFigure/styles.module.css delete mode 100644 src/components/LanguageSwitcher/index.tsx delete mode 100644 src/components/LanguageSwitcher/styles.module.css delete mode 100644 src/components/LeafletGestureHandler.tsx delete mode 100644 src/components/Link/index.tsx delete mode 100644 src/components/Link/styles.module.css delete mode 100644 src/components/ListItem/index.tsx delete mode 100644 src/components/ListItem/styles.module.css rename {astro/src => src}/components/MapIsland.tsx (100%) delete mode 100644 src/components/MultiSelectInput/index.tsx delete mode 100644 src/components/MultiSelectInput/styles.module.css rename {astro/src => src}/components/Navbar.astro (100%) delete mode 100644 src/components/Navbar/index.tsx delete mode 100644 src/components/Navbar/styles.module.css delete mode 100644 src/components/NumberOutput/index.tsx delete mode 100644 src/components/NumberOutput/styles.module.css rename {astro/src => src}/components/OgMeta.astro (100%) delete mode 100644 src/components/OgMeta/index.tsx delete mode 100644 src/components/Page/index.tsx delete mode 100644 src/components/Page/styles.module.css delete mode 100644 src/components/Popup/index.tsx delete mode 100644 src/components/Popup/styles.module.css delete mode 100644 src/components/Portal/index.tsx rename {astro/src => src}/components/ProjectHistoryChart.tsx (100%) delete mode 100644 src/components/ProjectMap/index.tsx delete mode 100644 src/components/ProjectMap/styles.module.css rename {astro/src => src}/components/ProjectTypeIcon.astro (100%) rename {astro/src => src}/components/ProjectTypeIcon.tsx (100%) delete mode 100644 src/components/ProjectTypeIcon/index.tsx delete mode 100644 src/components/ProjectTypeIcon/styles.module.css delete mode 100644 src/components/ProjectsMap/index.tsx delete mode 100644 src/components/ProjectsMap/styles.module.css rename {astro/src => src}/components/ProjectsMapIsland.tsx (100%) delete mode 100644 src/components/RadioInput/index.tsx delete mode 100644 src/components/RadioInput/styles.module.css delete mode 100644 src/components/RawInput/index.tsx delete mode 100644 src/components/RawInput/styles.module.css rename {astro/src => src}/components/RemoteImage.astro (100%) delete mode 100644 src/components/Section/index.tsx delete mode 100644 src/components/Section/styles.module.css delete mode 100644 src/components/SelectInput/index.tsx delete mode 100644 src/components/SelectInput/styles.module.css delete mode 100644 src/components/Tag/index.tsx delete mode 100644 src/components/Tag/styles.module.css rename {astro/src => src}/content.config.ts (85%) delete mode 100644 src/hooks/useBlurEffect.ts delete mode 100644 src/hooks/useBooleanState.ts delete mode 100644 src/hooks/useDebouncedValue.ts delete mode 100644 src/hooks/useFloatPlacement.ts delete mode 100644 src/hooks/useSizeTracking.ts rename {astro/src => src}/i18n/index.ts (76%) rename {astro/src => src}/layouts/BaseLayout.astro (100%) rename {astro/src => src}/layouts/BlogLayout.astro (100%) rename {astro/src => src}/layouts/ProjectLayout.astro (100%) rename {astro/src => src}/lib/chart.ts (100%) rename {astro/src => src}/lib/common.ts (100%) rename {astro/src => src}/lib/data.ts (88%) rename {astro/src => src}/lib/dataExplorer.ts (97%) rename {astro/src => src}/lib/projectHistory.ts (100%) rename {astro/src => src}/lib/remoteImages.ts (100%) rename {astro/src => src}/pages/404.astro (100%) delete mode 100644 src/pages/404/index.tsx delete mode 100644 src/pages/404/styles.module.css rename {astro/src => src}/pages/[locale]/blogs/[slug]/index.astro (100%) delete mode 100644 src/pages/[locale]/blogs/[slug]/index.tsx delete mode 100644 src/pages/[locale]/blogs/[slug]/styles.module.css rename {astro/src => src}/pages/[locale]/blogs/index.astro (100%) delete mode 100644 src/pages/[locale]/blogs/index.tsx delete mode 100644 src/pages/[locale]/blogs/styles.module.css rename {astro/src => src}/pages/[locale]/data/index.astro (100%) delete mode 100644 src/pages/[locale]/data/index.tsx delete mode 100644 src/pages/[locale]/data/styles.module.css rename {astro/src => src}/pages/[locale]/get-involved/index.astro (99%) delete mode 100644 src/pages/[locale]/get-involved/index.tsx delete mode 100644 src/pages/[locale]/get-involved/styles.module.css rename {astro/src => src}/pages/[locale]/index.astro (100%) delete mode 100644 src/pages/[locale]/index.tsx rename {astro/src => src}/pages/[locale]/privacy/index.astro (99%) delete mode 100644 src/pages/[locale]/privacy/index.tsx delete mode 100644 src/pages/[locale]/privacy/styles.module.css rename {astro/src => src}/pages/[locale]/projects/[id].astro (100%) delete mode 100644 src/pages/[locale]/projects/[id].tsx delete mode 100644 src/pages/[locale]/projects/styles.module.css delete mode 100644 src/pages/[locale]/styles.module.css delete mode 100644 src/pages/_app.tsx delete mode 100644 src/pages/_document.tsx delete mode 100644 src/pages/blogs.tsx rename {astro/src => src}/pages/data-explorer.json.ts (100%) delete mode 100644 src/pages/data.tsx delete mode 100644 src/pages/get-involved.tsx rename {astro/src => src}/pages/index.astro (100%) delete mode 100644 src/pages/index.tsx delete mode 100644 src/pages/privacy.tsx delete mode 100644 src/pages/projects.tsx delete mode 100644 src/pages/styles.module.css rename {astro/src => src}/styles/global.css (100%) delete mode 100644 src/styles/globals.css delete mode 100644 src/styles/variables.css delete mode 100644 src/utils/chart.ts delete mode 100644 src/utils/common.ts delete mode 100644 src/utils/languageDetector.ts delete mode 100644 src/utils/languages.ts delete mode 100644 src/utils/queries.ts delete mode 100644 src/utils/redirect.ts delete mode 100644 src/utils/requests/getBlogs.ts delete mode 100644 src/utils/requests/projectHistory.ts delete mode 100644 tsconfig.scripts.json delete mode 100644 types.d.ts delete mode 100644 yarn.lock diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 078aaa7d..00000000 --- a/.dockerignore +++ /dev/null @@ -1,38 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc/sensitive -.DS_Store -.env -.env.local -secrets - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# typescript -*.tsbuildinfo - -# editor config -.vscode/ - -# generated types -src/generated/ -cache/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 9ef18a4b..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": [ - "next/core-web-vitals", - "airbnb", - "airbnb-typescript" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json" - }, - "ignorePatterns": [ - "./server/", - "src/generated/**", - "**/*.generated.ts", - "**/*.gen.ts" - ], - "rules": { - "strict": 1, - - "@typescript-eslint/indent": ["error", 4, { "SwitchCase": 1 }], - "react/destructuring-assignment": "off", - "react/jsx-indent": [2, 4], - "react/jsx-indent-props": [2, 4], - "react/jsx-filename-extension": ["error", { "extensions": [".js", ".ts", ".jsx", ".tsx"] }], - "react/react-in-jsx-scope": "off", - "react/require-default-props": "off" - } -} diff --git a/.gitignore b/.gitignore index 8d60ed8b..d8c450d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,29 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# deps +node_modules/ -# dependencies -/node_modules -/.pnp -.pnp.js +# site data (fetched via `npm run fetch-data`; also the incremental-fetch cache) +fullData/ + +# build output +dist/ +dist-cache/ +.astro/ + +# incremental build state (code-hash, manifest, per-page shards). +# In CI, restore/save this dir alongside dist/ so warm builds skip unchanged pages. +.astro-incremental/ -# testing -/coverage +# generated optimized images (emitted into dist/ at build time) +public/_img/ -# next.js -/.next/ -/out/ +# persistent build-time image optimization cache. +# In CI, restore/save this dir as a build cache so warm builds reuse the +# webp encodes instead of refetching + re-encoding every remote image. +.image-cache/ -# production -/build +# scratch build logs / measurements +build*.log +measure_*.txt # misc .DS_Store @@ -22,19 +32,9 @@ # debug npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* # typescript *.tsbuildinfo # editor config .vscode/ - -# generated types -generated -fullData/ - -cache/ -server/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index c3ac9346..00000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,26 +0,0 @@ -repos: - - repo: local - hooks: - - id: check-unused - name: check-unused - language: system - pass_filenames: false - entry: yarn check-unused - - - id: lint - name: lint - language: system - pass_filenames: false - entry: yarn lint - - - id: css-lint - name: CSS Lint - language: system - pass_filenames: false - entry: yarn css-lint - - - id: type-check - name: Typecheck - language: system - pass_filenames: false - entry: yarn typecheck diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 7d7a6560..00000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "plugins": [], - "extends": [ - "stylelint-config-recommended", - "stylelint-config-concentric" - ], - "rules": { - "indentation": 4, - "selector-pseudo-class-no-unknown": [ - true, - { - "ignorePseudoClasses": ["global"] - } - ] - } -} diff --git a/.unimportedrc.json b/.unimportedrc.json deleted file mode 100644 index 20a02fd4..00000000 --- a/.unimportedrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "entry": ["./src/pages/**/*.{jsx,tsx,js,ts}"], - "extensions": [".ts", ".js", ".tsx", ".jsx"], - "ignorePatterns": ["**/node_modules/**", "out/**", ".next/"], - "ignoreUnresolved": [], - "ignoreUnimported": ["**/*.d.ts"], - "ignoreUnused": [], - "rootDir": ".", - "typescript": true, - "aliases": { - "components/*": ["src/components/*"], - "fullData/*": ["fullData/*"], - "utils/*": ["src/utils/*"], - "hooks/*": ["src/hooks/*"], - "styles/*": ["src/styles/*"], - "generated/*": ["src/generated/*"] - } -} diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz deleted file mode 100644 index 4550ad876e36b4af8d6c89834069189682e0334c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161766 zcmV(>K-j+@iwFP!000001FXHv&b8Tb9%eaqWH<*W$Q}Hn3?g||)mpVyNwXwKCQ0t0 zj!`RO(_qtb3?YE;Ji)VDLMEILn*$R3$!7Qd_V>PZcuw{I{+r+a_;3I2r=S0?{@pMC z)4%`a_rLwk|Lni_zy9&x|HF@;{WtyNuYUX=zpeh?e_Q|l@A{Yj?eo|D_#b}!egE#4 zpMLxEkH3=t=eIxp0^G*S&Noz&ijJ&(%ZbuUentVBXj#@-5Tk$-nXCMR?HDyy4G9g z#wy$Et=W0=tT(q#X9{aJ&8V+CeRO<}>^V&$Wa}o;Sgw_`Y4PUHB}R9ZURo`EX$}qd zPU`#K44+q)p4ghpTRTIq2ia@$L$$hZyvX|Y^H-<8B38-6Rj<$0O+{7mZZ9Id z2+s9%E18$h(oS;SymRqQD$_mc`_`#@w%_Ep_s-xf8m*$*#c#@w?#Qjqb5e?%_Uf-c zzfwQn&THTG*qKkgbLEKI>N{(_9WR4OlpkJ!BR2P)y(QNX3bI{l!`5WyDt;6e5!;*f z5iga!lxuU8%{l&7t`(v|TeC>-(Y~5nN2;5TTc^6}kY=@)=-1ExkWsht+ghC0A59PG zvb#LInX9J8J2|>N*QC$Mc(G1q+=$Q~p|`r}T8K^(elmCKEA{r~P@ar4cWU^0(#q_N zO)B~A=Z_VK`|Y~5bRJD5tLbyCi1p6td*&=zGF{D{D?HW}>i5oEK5GRZ<$bPetk+U0 zsP}tGE{fBq-yT^^=jJ<1d;GmUtM@+l>-x#=`?=G-vwMlGcb7e*VO#quEgw{ty$a8K z_xAOwm`OJ|r`?<$!4IeOGS=;L__bGF5p!0WXLrBc?OVo|EopV~nR+|F{`}$Mw_fVo zHIuabS==Jg*UJvRa*fE|cdN?1YpTgsa<`0Mj(38zO`YSm*bW4nU(K&}p)*T(bi}6I}4O@4|>o_56dFuMU{@nGa@>~9D`pA_c5j7S)<*J3>wpF&;i`d_O z{&)6WDyOsx|2{X```*2B>DhKBk1Qp>DMg2_^49mN)zf?#)8Y2Ly2eE265E@gsPq-n zdABD~N*m|%b3}8E>b%Lz=6~S%|MBPj^WXnP{-%EX*YVTO|MnmM@Rxu4%U}KTKkCJ1 zU(?1Ees;@=a*}_-as{x zvzKr4!>3nz76;MQjAAXbJse5z1RkmNRJrOtjB8g;ovux9@ZRr5E7!|JZ*=E7M7*bq ztG|9RIye>?Q=NU5$9QzwDZkNsnZDWHoe^TEun&0jsdJfaR!>u4jKa^kx31gCR-$iZ zG1uI+@qjLrUHP=Vyi@Dg3F0KyuM6ul^OdEitwsF$)h%nM_C8`=rx&05v_|*b!HlFj zyq0h6*f+M$nseP&Qnl^Ieq=>1c1J}+I!!b4&ef0-){=X<7w=p4bz|UFHJ9g_-(~BX zc{(e5ZGLy1v?onuGJl`O1*NFUdUm) zvG&T=ZN~No8pDr&{qt|D|KdOV%}@C^KmMD){I{r1|NnpU$5p2|@7)!jA>R6?$3{Qq z{Ssff)CApZW#T6H@XMD%cfZ=<*j{MsTY|Q8POyo+c!in$o%W4d+jlt?ez&>KY^%-w z-iqAo`?bf-^7d9cekT1qd*dZk{O~)Q-s+ilmg<(lug=-%G^w#k+Mz4#EY>#i-0$1I z%X%eYB=6oQgZ)L$TkAPd@AXKXwwM2bx8uiu-oO0aPe1?u$G`dYH}mVC{^+)`Ff!a# z&3%?S0nf;D*`EwoTb-@S+}U#2ch2QLmrZlI>)!jm+2XnJI^TNR4t`lnN^a`XeR}VG zj@F@FJ>H?(dVM`DrmyFb9f#Iw4mRJuJVz_TRHYe%%C#8Ie5d5xW3Fq$O|dfct5ds{ z#kpcxiy|3+BYhHc&_z}~8rzk2_uaJ?d0}L^*Eu!g`?7Uyb>-w7)+T>reZ)5dqKREr zLvNWb^`NGDmDW`pb>wBlE~%T%uW4F_&)WQaj)vtVO^;h(UyL_ z&n@m}>rDBUSWNB!BhH*Hp*EDS7H#2`k?;B5DLQp(7Nv-Z gD(%)fs+PTAeQE4dG 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

ybWZU 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 z z>-;zWRZ}a#!~Sq zzItxsta=jnOgg9JvFcSBAC~LT+Gk74F1&p|r>}9_H29Olc|CglUcQW<&QrRASA3(z zh4?%ej!%vrkWYKfZ39N?R%_0dLUI`?Qz3`D-%sl>3{Q%!3c8d85d6|AV-B5>i>!-) zVpR)vcrEeRNnqYZT;Y zXN%3=mQ#BscB-3s#!_Nm&X2ma)3aq`ebqGnf9l?#S+XO!(p$`MhLlKAqBy3JMrP8` zOdFX!n1_2rc*IirC+;5ZKus6w)l?PG-CF3k%g(KO)kNld-P)z~t_cHy!o8U{o zeFu6C?zI;dt~dAfpT6DK`tKmunq^Zg5Odk;!ZJRkj-%h#K%t>}es~F%=Xon9I>a-jKecoh+!rj&a+{ zT3$uHZ|Sv0odBnqtZXl%o-1eXE|K8(FIjdbb;Co-7&X{!6F>r$qnE`*5D{gj?sLkN z!__+X)!JI&g6yiFQ;MjPCF9WfMv?X>`~3VW6!p=U@BS;x-$=JQdv7^`DCauf!r>-@ z_k!eH6m)#ra`oZU7RW_Cwh-H(DR}mS5HQYl))PC7mq>Kj6a$xP$+D@}fm?$ard%5H zOu*^F?r7A1ZT;v+U%t1V#0}N}XdtAa+Xv)tL1qeV%i3Ky6*!h0emIJ1&4Q>`47mb? zA;ww8fO-q2r-I4$bQtAFpx4+L2lpd=LoheA`!>c8;qI|?-L`mu>)A4!VYcgPnHL-% zt1xS{dcof<8}Q-Y&sw@1pwMV2JE2Y-4qim(+=sXScNdJ4*H20aM_!0KqD(D8!HMh1gjE`1ym z*PMtVX(HRBt}88V0i6Y*K?5v~XBhZKRsjxRA7~-9g>LWat{_C;j-mc~im{Kra4&cC z|9-Xfj^9{%`jCJ4@@E8hzp1|W;8hL~v|Iz~t|1%Wn}DQZ0kSc6L`nw(Z3))V6-c*Z z-*#rxXnnXJbeY6gAep;lCYPeHX1$rA{t#gMr-9IU|2cYD^`wlcg zWbY_)#u*Z~B|)s%5&ht|r|cpZc)hYojuSFn`q-PCm~j9yOoRV$l_8`Qvis9=OMO3x&3-E!3Z zT;s3iyZ-14_i{u3hwta-m+$u1W3&%v7Mg(TRycZ$1Ml9j2L?H6$RqHZ=bL31$Xsi8 ztQ9*3ZqBTy&kbfid|zV@7*h^*T^9y_`kWY^)}}SUj^%Ov*5Gft|6y(h;hQULE$H~9 zP@{&Tk6CeJ6T^}>cFm#DbBw72LuZ8WUAMtFiyv=wA)7FbwL!&u0uhZQq|L#bI$lO~ zGeA$~nR7HT?Jr;5fB8>8ezK20{nz)`kMems&+!Z1k-jn+zqz&EsPR4eirz05UTl?& z(+L7Bnw%4#LaPB_;1UczckA7q0X-UqQLksu)6?W^aTjfdO?Vh!rM>GZ=q^rp7OlQ{ zL-7|Qh48~OL0AX&iejO9dbsJq7=5mZZx)2r*Rdbh?AUomcdi8a5v6n|+(Ey^!7~>6xMCI!V=0{(=w_4O7 zk|N~Yi!ud$22i)ejCaSpv;s<@wzpp!y5@!albVm*Tl?DLIi&*8#6SWFVBdutijn6A z%L^F&69ZZ}U(jWX#cU9liQP^(`nMkxZy22vh)m(Xmo5>r*=Gm!q>f|=IM~nhpd!Y z8Ntq79KEF!>}+c6<~f~v&uoU|8w(OAw{OAQ*XcgoucOq!&l)W z&*DO=hJ( zu%Gssp`_V+1z`;A(=buiF_F_JyHso5T*F$U7FGiLn4(XOX;8Cly>&)P&aqchi|Jeq z+F$u=orxj`oq1OYhe}TNc*nFnww&t zv$sia9bgX+yhuz)PA>t)u!+T1qgtM7raST!SfDe-bh?kex3=B}yjd!M6rSUK3eVdc zT5GIjI&A}w342-^IEU=RdUVGbD0g#NSkR$=;d_tMXj=yPUcwO2PHBw6EfV5*wvEt( z2B)PWA&R3UiU1%n3HMBwX{0OfkR+coFbjD4*}i;vwYc}_>vvzo{I=ffbK5j@!;DLb zt2AVexmCr+25D|cA8{q(Nk#UUVGzyp*?_r1aMemK^3gWoxe;CIv8Pwa2w;RUE;wie zx3(A9W>Xa9h;{qu-8B0F?04^JnFt<3s02o^YZtRK*QQtQz78s0Tkt*j z3cht`!R4h|O$?0{Gj-lXMKiMt6oE+f!vTp!^8!}#oa>cKj_oUcJ4SIaq5kbaz@T$Q zN{J{B)~K>9!0CnKBwL$tcz7QZlK{Fc2mQ5y+#Y@T?m%wi#n&_UW}K)am^vpRQmIoV znnc@IWAy-swwd92|1+TXPK2 zq=5lU#qEk@ z;#WGY;5w;eR4xx)KSPG zhNMH1JKo5Ux5b{StDdy!o#)2tJYg!l9YP@Tu#lrz{gf*veQ+hUCWDS!&xwR1HzS^u zc(DO@sKpds!2pyqYL^G2sxo}Jk+Mk#`V2ElW!M9~4`C3jF}SM9Iq3vwhIg{rpE5ta zdwy-I^xzBkazp>|Pfy^dPx0;Gq&S5&2EINOVns$=dV6IYK*NzOWTez5G!!-ua=RO^ z8(61F;Lirki#aZWUwv9B`9>MA$P>2~5rlk|3t58L01jVDopV)i|?ZaA2Eg z5TA`#LL6YjZs-61E}q{%e|ohr@ZjtAa#Q~fH?{rHUn;k4vBXOBwD;yz`;(AJRD!itH3E`u{@<|#Y94^PZS*kO$Yh9L4b;+97?X=A);hVSb*0R7!G z!aLi_)**5{26I+hc-fr2OSU-@&EBLQ;yN`|AQMei$a z*Eb?<;>nBEBP=Oq_;CSkaIIrGvkC_G(1gvC2dm?hPxCTO+LRqQF`n}yG0%BZv!R9AhjdCi{q3XP$7I6 zre}n;9_xXoDd3EOQij@D(DV+iI6~T1mEr$3!J9Q@yC}SSwJvz6!pCzp**Ot%k#mIv z-EfNQ%zO*vbBqG?6qNNYnDMbPBlVB8*gEZm^zDJTZC`+hHlsB!Fd9UE++q&30)3Xw z0{Qs__U}TxQWVs6@eRk3kmA4^8%+9H;huE+Gy3oIGcpLTl>r`o;ePubLq9Zqnd5gu ziJFh@#4NnWvQh^JYm*E(O+~ze{D%_JGRNnV0-({pl@GTuS3jq>80VB%HG|C@A&=Hu zvg7Yr1Gck>&EWfLj83_U{LT~1yZH=`t_qk?Aar{~&) z*BJg zj|l{sONI{8f>^PUGtYtDHCEJXS?J`}aF!8pH1ICj$mYng&J7Shhmpx*#}K!U$y6W!Pht0M@IzLH|CNR`gsBi=ixwve+ zS8uZfE(Et^G~Xa&5Z_lqkM9C2I1oMkF8}!25b)8L?zZ*%aw;nLkwN*@(gUr`Ob8T0 z8`Q|)k~eEtwn?TzTQHE1VmvW+$mrFYf~$Yrc$OtTvl$x7HKJ&u_cxH@Eo5q(AbLui{^xp(m9VXzDdm%@uEdTgB>@qvDaJN@$0r{`aO{E1)7H$3>t{dQQ?zvmnD zY)m8s^|YS7ZR~fbPZbSd&QEQfiik3A^#6?ol@Lhbnq}ES53n^LF!~%ŮmSy7Ge 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

H=!6oL&>%4zE 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 z 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

`mBm3ls>6UZizqNBI@B6P z$SG*7vl>gIdr!$bcgp)A%V_beTNLmC*_{Cz=xWn_<=&+6m>XXw2UUe{NFi!oomml! z&&ww++G-nQ0w)??L!1Qw+bYdbyJhgnKZh?0v!njBXDHD?!@cK%&n$;=<{M_BW8;)> zYswDfq3$%fZ>OvMGOpGNFwItrMf1H|!6T?mHFiIV>~AhVIUjpANYwO2Coy2vkpaNbgIx>S(IhGO%@><;Jd3v0=^ zBr5*4qvPCg3*KIB!GI@2MYpQPhLRgIFXLn#%bMNI$Kb^4xtBu%kfW%j%&^_KFK%~q zlL5bHpq6HWc3-!as7{*{ZK2cxD!Rx!hEkiMc5dZf7}qhFty|kXM(dcZY-4y(38UAW zkLNMy;?Jkc=%fwGP?@@l9NhK<3C7S)agE^&)@a@lv;!#|D2oujbZx1c z8O#H20s%m=Knp8tSf~fG&-MrTh5SJuc#qTk5kGDrOODg9`aC>5$x?Q3u^`xHXN6dFj9#!U&wL+Li}bfpfM92=70tt3 z<~es$C2DSzWI*yfwQ07214W#HrixoJeG{x5(LKe`~@6b_eM*>RF zamK;Zx8Cvf!_*3b<9j<^u5W-LfmOn7}2ICFzW6jpUAihRHDugX2*SGKik))6bu|R-PIGWC3Cm&XD?M+f(?$Hvj_2iN*0|_ss|EhqY_Jc5`j&jf_pJR(lt0bYr zy?)4x1@?gtgYZ!;$F6(NU?hAxUs9XyDH93-qk{(3<0)|sq+my*-EoIIs0X{CNUKZuRg#hXr8CC{9&fg%HnE1{i|TSk)x z_KS)lC*atnD8Wh{MEV|RU?@mznw=Ova?j~Id(r4#--V z4@xQA)R))Fe#h=6EIOY|uR0Hgvv{~a{Tb|KkwNE8$d8cAAGw)tpC+#ZxOPXYKB$%1 z9+nH!W;6JPn-%Px3{$ys>VGWlpSdzO-~0if$XOJ~xv2j?+40+h>Ym?Y&SAz-5y za50zQT-w1?seC;K+nXfz(@FxP2==|oq%<$gzcMrurrZTYA=_fJ(MyX^av^4lHEy|ov6#B#i97_rhJdOa2 zEE>CJ0H-PiS|7ik26=Bxm=9$Z_-@Q$vs;lu82+q@xX5?rdmco9LqBwjA=^!>5A(vy zg(Rih*z;52$tOSm7}6b|Fo_sKMCD@Ff%0_Qxorr!h>M_f^Z3xz2OP~nrO-x1UVM+c z4y9Gh!M?Ro8VM3{flCx;Jp&lBrR6tXEWhKDS_V^`B~Xwf2Q7@dO9ip22dDefNdrD~ zd1uZys;?{vQZt2Rj6=Mg+$RkN-2af)ztGOLXq6smL@V z2VUN@&;+U7s>=WpRD9xT)W^r&kHafhl{M>p~?yTCkSt{yHdvvx&opZcgjL-`yi) zb(#amSr;{eD}1s`k7P~$lDw&-j$2B(S7>l-+2Sj8*0&^#Y7pfMy!dkzv@~R+1n8~32=L3h zN01eOmm6(P26ucItv*R@)BZq%`1Cv}Xf(fAJzu5)ER;GlIGQa7a5!Q?L_Af{RXz|R zDMOq+^p-16pC^@&(PZKBDy&4P^Ug~8?1?k)vJ&ZZ1@k+CJN8Q$vF9W%I=A>3ml`1I}wIt zZ&0)q(hrx5ugXeuvAfc9PEwlAx&G{6yh^5t%0os@f07!SEG4`O#q7Rr z!IJ@w?6%VCLN2z(xLgzKL+A46zYF$~V-=yA_238LefzUvQM%%&GF9o-xgQMKS=nWjAc-%C`N%OhVSE9D4$3oq4^hgIWF&!q z;2-r(>Ao7DdEzGwdU-Ty2Q>S7k&ybLtJ9<)oxAD_Gcp@prH1cS33*Ji2D!48z(To5 z#bLIT4K#SYr)Jp&eF6tKT)8)IxeCJ;UUb4z@V!TQvZpQ7k`(JS%j^M%8L#bS*5h%4oEfg=!Czx5JIBe35)>WF#@LnR#cC!ta5;VVSHApz`zD}IZ|n}K`#SZGRiDZ zTR<`t7xZXS`_+|%WA|Eg$k>7K=hofMGSZLrSZ(a*-)7q&LYDI)E8+n>?mFG61ycy| z-w5AS*v}jwtvUt4Qr^=K%G-X6p*h>4XURNbwsN`3IV);HcMGLhjM@|jsc`g)ekKz@ zx^4#P(S?0KoI*6cf+mPd3+bU6aE*6@pe}9J0znk`tmJMlU%{7>K{ah@wqP5eMIyX13;iYNiw1 zj2ov?ed(^M!2}$R-yDtSiU!CP#y)H~%bOR_$sAIk?9_l$JpoBhvgY;qJ!pgoS(76t zXkZp_M@fx*%{@RvR<0EyHp0e!@BVcjA^jIl&J6PCLE?G z8aS*tkF(VU!s077qA|stFWLSQ)q2CS}(Zc$(bWbKKmmCw%w&3 zoo%5%qYz2|fbrkEP2>9rQu0N&vS-y>((3?I&mXROo)|CPbx6QWc2GRdu!QlY1MX~F z2A+)fpCDgHbU&}4e>qBYuQ#r$>v-#>(B|!1@?2e#gDJ;q$k0eFx}z@CO$RA22?vjs z`B)q>7&>iAZ-qG?4SeDnb(96@hgT z)@|TJ3eBa%9-nIgD;W$&CtvO7&6+6085>zYR7KEytW<(SmGrFYYC%DJ!p;IPd;9T9 zNT5zUFP+=-rTDyngrDM}3k(`bgR={mTo-W9Ow@K1_H}sHta9UjRd1Zc!3;WU>~Y6q zcQ3WGF9&Y90{e}7XZ6e12zBCK$wD@j0-xbHOYvt zwXRJPvk=u~(13JtEJ&xFdH~(eZbz9y^j_X#XeB$Av4CUr#y91hIb@NgzGTd9yPcyS zCsTgOZjG7m$VNVh;j3Hg*_qnSxe+LkZdr7ltd;1i(>%+A2Fk3!5K*!p*o+OGS0hXJ z+I@YM9!i#zo;)r$kL<6^IH+q9wyL8o*{cU#6BZMM0SE!$(*pm_V%Q65eN1{Fqf5?7 zE&$@2m;^Q5Wo7|_gOb1a^W2`ghcvh!Me)jZa=7$r-q{fp9^q9FWgAhe*6L-&U3U@Z zT%CyU6{sn+-MFL>Ehh0nojMF{r0l7M{3p|FxuZi!W-S2!8md#^c|3WEmec^9&(pwP z=UyE%5rBn-5$f#4muR7A%@?cFLOHXZ;wbD{rp`&NQz!K+l{!fJZTJZnZ3bp@>P2_Y zeTAjWok_RlT}7)UTW@h+m;qnmolCt;EF0)20WiO=z&W$pNtNS_I)oq<8jQ&k>Er+% zJNG4$&$pwHyzaM@8@0So{rh~0>>-Oy6mX(RK=o4lIdE1s+MxFr0X1Xdn}C>mC|d6B zr#8^&q}bD|9!}E;h|Ac0_Xe-DZxW+{i0r@x-J>!eIg|RML*>Q>-sI@rMcH8Zya{W% z@^7`e_W0ljoUkbT#u;@v(ny*=sPp5E z6VLrM*GzX6NNZ&dO%E)-*lt%d!Uc1hJ|H+5bwfh~-AQQ*rD$CA!CH%Rny^_eg}f_C zvv5K_v;)x3ivS1t2HCJNniy~}C=mk#?o*#WgBvUZ-0aXz@ej}{?DY_wI<$s&{~_+J z#$=V#wPAl|*q;7#bP{Q5PNeg!GM76|7+Aaztxg{tS-f`|J~)`M%)at-mpa*OVasNq zgTaQ3<87yL^;K7#LOTV$20!@}S`(G3msCO-X2 zOY}>0udb&&LFHInN@*Zao!7h3HS*TsdvV{a$b%(O!d^Z_z`jP7sth1l6ez{H-IeePNROYWF6l)J4(-vuu1WOm%e)<{}L>XAq8AHq#2=GK+?1KNrks` zHX+9VPWYi{?TQ?Uzir*7J7{#4!)?i>d9q2+`JLYr`_48D9BhvUZI*# zGOBOoDzrj9Ns;yaqR)L9T* zHRV0iUNC6aeowTLoxeiqXGS^H26!1}J}4;WuzNbs`0Ba6BoIr>bx0~z@_39m8ki#P zox2@dm)7)U0icI=#D zF*$@0q(lm66r!diHU5wM7Q&gvijiqPBzr3YAz(F9llnnS#PX%aA+(cW@7{7fyf4QV zva3a7i^4ju-g9KG(;jeWLG~Rwu?2Y-TF4}@ckOY*cWXa&t|1A@gan$mSc{>1EO4~I zS^2*;p=HuGm}^yB^7qlqY9c=wgKFHUr=k%+t$U(fN=eYk4$FlY-AQ|%82LKB2@@#bBHRI-Jw zJ;$rF>jr6hX76#*-Q2WFw%+a&ewR!(`{-BbgQ9JlHJad( zhvdMX+Em{d9Mg2Xf%)aw{un;w1W?l5ApEhCP3MFzku$;mH28hs@Q8D+K*^iEu>OpaMBmX0{1v%wKt75j)*YtaY z9~?t6ujJr1$w)o2Ea{c$a`4S0`+UmFNjMNa9D-=3HC%5m=j_OAK972 z9D;%#vXni`L($#C>h196s$Q$1LH~AxbEfrr>ClcBoVEJKk7JKAu{YGg&3uxD0Ib#81f_4)M(?w}Z7sw8 z11>`k?la%zvK-bks&zanC+&JxCO}l@rmadrx7Yp}LIC`!el#nm={4v5GEcxO8x>Sj z8?f>Yrq*qk_zK^-Rx9$QS7vnDjD>$d*lW!|E|~XQWH)$txof2n#5K$Pp~wQjL>+<) zMr-ZON?^%ktLQ{nHY)E@J5NLaOh{A{IWEf~hG=*03HKx0@4QeUzVejSYc%2pYS=Pi z`2h*ywvL)7eB>>suZ%J_f4YM*EEjZFoMebPX~3Ivqg~4oSNOo4rKEmBQHb1dbL$tMpC zNj%LMX<8z@z4i72S%b~HZBQL{AK&o=`4|+2c*AJ5v92ttK>IjmmsSmcR--ew9Tq9( z-qFmWk~XdE4X{O8%{beJ@c**NoVQtRI}z352%|!C#)QX+l;%pv(-ypHzWZ*Y6wZh> z#hpvB0nY7$K(=D)Ss0$9Pa{g*SDc|wIZ>2_5Z}W+5LR({wq8N>8OzS)vu~Q%wkA( zP@jZXgrP<5E20VX0ph)e1iD@-c_csPbwsz zIuXfiv|g+3m36n--bRH5K3uQoRY=;!DHnquXBQjXS5+bQvRyET3b-CGqX;QgX9K$y*7!IY1DD+bK3 zB`e7uORL_yR&q@f{v)bbOb{4WiigS-*#HhPNsM;l*zEeG-Ya^4X7ISmJFCq`dx}TX z_CwJM0A7$6e8*+@wgZE>dTK6=5SkU9q}6qf`UMo$d>)dDg|?FKvC1JDM8}s65!u~t zz&_%cS#q*69%V$L`Y;-A{u}f(rpTkAEznsYQ4d;Z{(3T~bj#CxrxS1+HU_JSge2?K zyrmgyfSP2I=*X3f?k#Fr%S6bN?Sg@CEY(~^n-CGMY*e5AOg#*_A-{Ma9*nz~3U$aU zN4B4}3`FVf;jhC8%uH?s5uR40toMP54glG)c3t?;qH`6lki|TKy?7lRKH;Hqp)Vs` zw{y9dMrbFy>7IdsaICX3hn)(@$7$rAc`F7!mvNC~K*ie|ESl_I*5PGhr6hoa;JL)E zPOUZASj^)Fu^OZL@|cMSnoV&fa`g6;FcpBS;8VRBX_V6$y6WzfOE}%<%m1~dYsHCN1$|bnJxKBEwB>><Gv6#|}UQ=Y|o7`R%577~ppb(klyF$91N|m-zo1@gjJqNN}sh zxuk#3OaXyIs#Hm?E{S_YZO`}nVyy??2~eY3z_S9-)E8iKoZ!yjcq2}iZ~PWEH?X2k z6eO+P&R6q}mxvz&ctn}8{$z-xTzViXY&8sm zjYuvu>?3c*?vd8kCiFGnH%Rm4_4a)Rw(6wA?G;nRef8e=5_fBRG=Q0Fut+6^vj@M= zX4j8TY^Wv;Af=0!b*Sb$Aw!H-!)M>{f_0ejeJ*i3C0galTg4W|YxC&aDQ#MrP`G{q zVZYfkblpba)PJA0Rc8q{IIvL|+c&*WG=S)-wK9`T)7|@`4YhK0V&ultTzElnh{@t= zP3LtwZ@0rP9gHYQ(P;%J#)14NjcwHBdTs(PxM=vFDZM98kdJW79LW#m$ zcu7%8XtUW96CLhUaoA5U2+(VAel~H$qs9*NRHhgN2k)wn!}Bip{ZKnZ5C>aw7Af@- z;+JPmI+DEJ=*u_*{V*vHh}aUTtH@s#?A0`FQobYy`+F%Pn~ zHZxD(GI`iY!wO^EN`Ux1zDl7FS0D?rK}v#g&7UwxAj=JJ$CaL2i+-!?OoZ=Fb`(WP zFq`kC7L=TAt`|sGXjz68latRC8L(F&$f9FYOvP@%botv~Bt9P07!O*F!^o!`^0mzA zWZ02MT^X>$TD@fVpXVwUfFcDsf|rT&v-hG8F?r%_*xh67wgBMW`b_rtPk;ZEA+;5D zzprpTESmEn@wRp)p+K-~O;7~;RPLB;2R7Npq?+5n25y}Td>4vIDzuLvn@`^Gf#1TU z1S1rzOH{>!2?wahJWdf(%VPS)nLPS}VT{GYq`QL+963v{q3&~oE4sI0AVwQ4yca68 z=oxF^W*+Ru4+#D;$l}>w!0ZFRh2BtuDKPP|@_>tUyo0>G4xAg1S^C>^Fv3_ylBw+} z?6nz5(z)ycxda~T5Lh{}en%q8T zDc!h!^$Rib24%h|3~F8WS%WGEhc}MdF#W++;G$$;L}nVyCi&C_LxoC8qXx=ZjxAn8 zng9U#8C7^S7xtcYcpkhoeL9nz85JXAvwC!w#?fF4_27}0{x?7&W@_{aC)RIFx3?S` zNhs)UlJGfiat|5L@NnZ|;~Bs2U9JCEpPTa7U0Mh8Q0u~{fN6NKi=YYA4d6aKf`rSJ9Fq_wOzp|Q(_L%sAtYYb`YvgWnkaVMj$7*XasVjRjBMd*?xEZ_6; zjh7j(I$%mBjAv*@~gygfYr|&u+ zgpT(Yn|KPU&a&&cf(e+w4tmT%tg>`G9;+Lmf)(|uS~L#i1Ouj0q9W+D+DCp1t=Drq zHDvF`rnB6&iNhf2dH_1)2>_@-@xa0&P^$<_P&6un*&#hqe&^kLJbJ#jE5%8>;X^n0 zH8=~V2~zuQ{>BXFylt&M6yRM1ZQ~Xux?)8U7tkK9wLFhYYrzjqdHhlAi;Y&4qelts z2DQvVmX6GUc0SjV8u8DjXs0O|D_Q$(+O&A+oR4?RP7sG()O?E< zNozG$@yVm9l@=pbi#W6z-wC#FWc_7-ZJ zOPagg*{w~pj%rb1izOT?HPW2>;2DdNgFnu48D9-5FDO_WP0F z0??<dRH==Bl4~1N6~+$rls7!ci$y-Z8ju?q;L%>T;%m2nR~;eX?D)5G?od0 z3o+I3r|Cz#4*9QQ_lm3h4bBM;peb&8WUWhsE z49atrlfAcKe@fdr>g#F%VL+b06FZZ7XS*DRLM-{~7do+^W%_{ZwIIUTy@1fJ=L0dWpes- zDk1P=Nsea&ydmiJc#ASHu_?rC<4(Jrghz+DTT%vyzvnRT45wK1+@}1!?mGQm9Y3kd zpu?POi1!X+wn!otMz|OST1{{Eniv~V-H}nZ&SY)&&@SY8IVfi?b^WMD}*>; z)F?;*lK@iKhXnOKvct#)Ctvnc=k&{MbIcstKoqgl$ajw@7q%<#|J>wU7um>B>+A?M z=yfqIXvdVEh?kLl2PjREJtI0<4eLZ1K=qVq#wU!4d6 zx%MKLou&oVf$}J46Q&Q5&bOX`-j9^+I;7a{VlnyuxvOCsy9bWiF2!fU&|?A*KD|yW zPsfN4%Zo1fIlWXfU#od8Qpzv|9wz9ZHp1>u8Y7iNBem9pD<6jl8rx(wqbiZ3IWmAY z%JO^;URqN7E*a?rve@ryb_1QrLT9zH+F|?Ku=r))y=>%^b-XRYk8B8U$H@&$O9D)6 zk1iIA)}2r_OUnoKXXMmn3*Za>LCl>3WDXgG~_>Lgspu8o&r#q#zaPn`9Rt2E<=VT#$dqaJA zTLdYCzXPb%!!v7b2t1D;g}V$Jq!r^bP<8Y-VQjQ+Adg96kVsFd>wFnbm99&w8E&F5#8 zJDV6B9+bhiz0#7ww0dC!Ky;b|{3APN4mZqZFl_F=&L!b=S?B5HP6exnUrE_~f9@@p zz}@P})SmWbQU1}_DF>JZF!wr6-8!m|dwr3T&lkmBSkYv5*tjOdl`BlH+Hg-Y!`I|m zlyxg{paLpH-yfX>EidYD+7!J?y9sWM#G-Z?tH1D7ywVRe+C}T>OraJtx6tTcZ#Tt! zoqSg@fyiXRQ-fAE4G&(5bFq-g~1l0lL~% zcJ#N>YysG=ti~c3DjAQaNwb$$NHvz?rq~G@`l?Ozu#6`7370o!eX48n$Sn{1NBznc zPeUPgLM$m87U#o9n!49x#oXmovlxi~Xc%PC7b~dO7@E{6F->Ad?8R6k#2ol37tKke zb92{wkc?TtH&vRlligj16+CYPDS$VrTvSn5oit~(%^^i9E#wV*pK_Nq@G_P4yw0+I z<%BBU?*OvOKc~T75MP&5RVk8V)=G<}a!JULj9ZLzXh0L4(?X#2aS8WcU5WBHDSpo{ zlbI%D{_zbM3Ye<|Lmhi$oP1LjkXI-Y2#S{3d3xT?R8e{M^Hkat_5$$RDYbRqd-E-= z3oZ)+EJrrkfMTK&7sCINAFu=HmkanxRP&FJ2p6exNy+@8~x6)Q)`i3LG?a)3_y)7Rr$(dI`+(TnMOUCRZvyp50DEj+=;c0BJp=7OccLj%z}} zq~kT}0USlQk>FnEB-Uvr4@jnM0VW41&>-G7*3roiM}FAWcrfQ%^S(HZpK?a>+iF;N zF8kcFcD)0o3h1Sylzyplj7msYG)IV8)rZS7COEgGti~vFKR*7#@CoJ|k+8h>-VNpw zWQAMvRa_>N#PxKkvmMA6eiDaN88=ef1fWfvefxz{#N=}9DPz{ zJV;PCE%%vLu{`n|Qw9}0scz4g5_BYU^E`(NcMcS*zB&ku#2O;B7NFd6?aUVoaRH87 zh6wK!;=QAn#_N4|ig8aS4OoX^a)h4rJveS$eIw+FK&Fl%ZSmqj)HC{>Jh?ieY@r(T z63*s}qhuF?nB;Uh-k-J!L=Rc&faX2QmZU6))_0y0uNe>*D?8D}D);?~3!cv%(r3il zKoSXfc8^PlM=3UM<21xKqfk%a!@u~~M*)#pnSgfB(s#JRVzI~ z{tyDAv0UCSt5e3Db4DmFCn*dWF|2Cf(K-B?z&0ACyih2&Ivny)beL(Ul}O*|-RUfK zpmwY-Z(c>!%W~09DY`bB4e$Hu)hp|w-PvKjdiE12M)a+8Q?=e`fI=EsKgF!1O9~r7 z5>PivDSCH1-QWaI=yIiRA@|~YODqM-z#@6RsYLF!ac>*T_WuY7e|5n=YVbtBM*z?~ z9eh|v1S#2*NbEu}j$)^v9@Bb)|K6dB*{D}SC$n=>xwvpTaIfGULdzF=U2TULwHSh^e>F*0L!flN!< z-GGl&1VPr~!Xn1}YsnfgZn+JrGi;gHDt&$SLcEeSu28)2uyV6-CQ|O;>}T(0NiP(G z+oYy2K!MZYIW?%ocui){%h>L_!aiyV(bivEzP$IY`(h5y_YuQX*5A&0^k`Kqb)JGi ziSGU2GJ1EZHO9F6O6jH3yP+$=cS0b?5!c2VC6G_%86`~&?MA)CZUuT5=UUtB3}Qc- zo~kNqmB3qA-pjg1)UkxHey!M&Wg|R7L*qtK>qcm^P=Ru1lop~5az}NKoK0c6uod+n zTsy`^uzskB_Tax4O9)X>J7ctmrUhxH=c(}CBp!1+x*SLbR#7%j<2w zix(}WM9>6am~mafRIiKW$dx73%O}WN$VHx=2Ucz`&DPC3ILAPTPnwMZehZ@Oip`SU z@=09|Cto2^T!^UwMq_p}qr{RMfRk5t;}9Oiyy2x4^el~PKX0H|)aJamH!GiZHnQXV z(I`+z0xlYtSr2U9*5vu%K#pyDeM($dy_Y-ADZP}sGg^yXh2I#1wzk_q0%&=UFRVh` z7L`gIJ!1j*A4u%xg^-dUG3ZrsoLX7x^f?CPMif2tl+lX8+I)SB_on30*(p|IW}{fd zy@oplVZ(hpZ>GknR;hIn1TOm8j*U0&+!b)v%guuK$qLBpEU@X;$LI?z*TUbs`P(F4 zZL)@^zCbz0*EjPS-H1CDebWpkE^Ip-q-$kCzfbHE2aXVXnOX@qZjK$fY4zTyH*w~4 ztdk+wfEfzJ;x&vUM>ZDAWAL#aIiim!<7M2&Jz}p#pY9{rLf~XTmg$$Cd0&z;B+XO6&qSkatqhF>0|nn^00nNT5`fAN0Xc6)}cc zgFgNkN5}gdbSrOL`+*6#}$HpSt zmX}LCkvISYyx`ZYHR^?LKPX5-fzwe57E3L6lW(BpwI2f*<@VtzzOK{drvG%D=V5CG zv8U}bc-PguS;<;Fvnp2_9A%d8K!~@#5~AVZM>S`W_>pRNLH)ZN8<5>i3d608)BAed z^#@TS>PG^O;!>TeWgXII$TL`?lUEzR3jMKgOcjK=o>f^6O?5>d{sTJ9lpZ(iw@l$?|U_A$8@A963xHw6LvvE&ZkG?`77 z%|+^kmOW`d7OQ!V5KiZD-9Tv5a;OvT9*Rfd?jG$xq%bJ^{?-c{n#Pvua>gtDUsq;8ef7bw{JmJo!sE{8bGhdP{oY=x6ae+~_Ao>dI4;D()5$6*N!e2HnW z|Gr#LVA~VR+KM`AK@; z2Z-aCjuenzY^$eIycGoT!^y7SJBS)}PG;5xRn?q#pH7|R3YF>m8uoOQ-gzNmRh3vs zBIfB*a$<>$GkeIIGJoTT?l4lfI5gr zmBBfUFt&HVqtGZ0hkg|M5*B_zktox$$vN@#7o4CwH2ZO&Bn;NTPsa1idY%6v5w7V( zTT9jnHb=MXF-SOikjYZ)TEMM#!>rVUlqDL-z6%`AadRdfRe97+pS-nk2 z`Bt7LmzG^$Na4i$nnzY{*+KdRPeBdgt8;|L_6QZ~K$?n&jlOWhkHL)WjX#L?ld^X zcuSPrt#dHxf?7toWYC(eZk=Q8u0Y6h37Cl$jW_n@lRdqU>m7N3z@}J!#PskaH|U|= z>C64$$p?R}hO3M)kqHxIBT8CX7&}|IOdDg8DLH3MKEv&O7Qn*t;zTXKYIIgzms!M*gihPxLNIf-!V*{% zmo~s4)c2QcUho925#&C&ICDg1J8iZNQHMuRO#^?&W&KZatp^4)25Ef6DDOi3sPn)vyI)6I|JkHA~V{nvQtSb)Q+c*0a!hx z(Rk^6x@0n3rwjUx-vT6WNG4@JW^{V1eOjLbi;c`4EPV`-Rh~7^^63E7=a#(VHrwYZ ztZ%7&LJZU{;1j;rEI)=$N?Ma|Lkwc|C*Ou>(1|;xedD)KYU8xCCW98hraVzECV8Ut z^$6sg#+7n$=H4jj3q&weULP(g^Cdo-gDPw{Gm-xY4L77*3pQ?dNkCC?yTGwIgPY#6 zEH8MvEtU$7-la%h8EN}##cPEibdh!kYo5bcfvN8_sty6c&TN$K(Tn%DZuV2FcKT^+ zGTGzDE}&Y#BYWeMNb7Pt>9L1cqxQyDSHzq#*l-o*Ep198BIz~jq9-z>TYGErO6VJNu{DPW-xUbXh9rji z0shbBw!Zf7W-V>|ox0-=KJLyPaJDly`Tbf6sY468N*|%VSp)5Pf{5?I+mzJ-gX5Yo zUDj=oVO-q@~^5Hh;!&l2h|?S z@+CIoGB1bwJ~8-Bs0GgkZx^P#`~ZFCFD z4qlaGLu#QHVOh5ASsyL?nHdKtzWI#T6qxQlNdlW>7s`l&v z(QO72!A?wtShm!NMpWZr)a}r65ev@02KEOQ%|v4$Y^`6Mrbh)QF;E*a;hS(s$VbtE zCqH=D!u2N~7{x|M=?S5Qky<#R!N4QTSh5S@18gKf;NKgrjn0Cfw3fT~1n73r+QX|g zZ@*P3Q}-6Ikmw7rD1(=Nl5Wb3=HzhtfQUe`_3;mkKuh8=Cn_wP1~2y(&XfhG;hy|c zAx7dmc6RVhp>@qS@yQ$^7kPht$6O(V>x{If*W-!dS{bnsZtP7~fQ#j54m2aAGgt=G ze##&r!|IpR*tjI0CBwDa+wtP(s3Vdu(q>>X!$D+Ra{3gAerxl?fWywjG}?P5M6)Ry zIG-m*p9-_eC0Ff4BI`73Rm!u=1Mo<-$1*ArX5BIy^*3B)ER~SlM<-7m1~9NYql2q$ z&n)(%R#7LIKlMjd{-;RB4Z@U1p?l}3*|$_?!``?N>n?Vt1g9#QApKBz*=z!1^L9ZL z*sHJeSjiN%SgR}@NsFjY{IQEETWrn?GuuxVHV03OG)U4&VzKUY0i1rz24!`D=b!*c z_O`OwhBIU~cqZb!ASZ!jbfD;YfF+{&?zAV?1MU*u5-tglbuhiWiJOctc~VM{+@xWOO6COhzp(##2EJsCRJ(G_idib9D@q7s3;n!N+&R>zItN z)+SOK36E{$L-)a8*VYzO`QEl3AR>M^jrAWPV(n=r!qA0iN*i516ecl&+Hjj>77F*gMUM!my~N6uYX zklV7MK)zRdL>6YV?VNk=LI?EDiu@n_Zn(WLQUOk|ZqvMYdgY$APp?4$r3x(&8N4HQ z*LvvX)t#6Cv-x?3^?307#b^tYfa44S^IW!245im=tq}0oJLZwQ@xe8%6AW}Mu@->7 zeufvql13D_mwp=P(z4=E-hM+rAMm622Ewy|z3o9b(y6sLMz5tw1=`MlvT7aPW#zbx zfaWMBTt+~kwCeDl&+Lq=QiFv2T`pSG5qt33qK!u+lMvDSQhwk^cpjCa4z#hfRrG>K zY6FtDk2gGmk#+p(#7@8MaW*5yAgvRBDRX!iNzP(W;x8*O6gd<@3U~Wwdddvcm@QdP&nBWsz~- zr;fk;VM%nM(JDfwz9;%ZirDU(1m9&6dw3pWHE{FL*JqJ zyAW0gr>_Z_C|Fa&$Ozmj5u`%VGUo7dNdqpq?YyN#5&@uG(b_7c+>QFEX{Yy8YV>&V zTY@~nm1_ziDaeXG}G;?|(Z!4&MIjjrL9sSWJ~1%M6Z`B zAN>ioM%6Qzy&Q zt04H=*zA`k=`0>+mj+seIY5GScbpOa1Ct|_k>GB$Sh@$02@Ut*@)9zwnCe8>@(U`FD%odemB^n=`UAfO4*rcAnDo@Fy3U1yjWx^< zpOX1LSRwHLlPh74g}F0ZoLg$2w~W_{r?7aO48`1-GSv*p_?wPCfVx`|2;mU}>N}mX z_L0v*WmzQ4iLA8(iM=ePY;J29f4;62^Ykil;69I=EIv^WULtj?K|-ZiZeFMWkxFbB z9_)gxXbo<*F=noM>j8y&X=k1@&HW=Ax~a|tV|eF}&9AyI5dT9@!yV9RVnwB74&jqb zmfyM^A6VXb49iY8^sBenwN9Juz^5)YqrB0IB{fxcsL)Ir)d_@Jjc43PJ_|7i#~?VI z8CoRs9usD#Hp*stXP9zIuL|d$v~iwlAS2|y4>|&5XkKSyF%k)fp~Qg=mY&8g8y!^$ zPZ1oWvl`#2?cmH3C`&s%^^=`l z&^Pv!tr!*y$_ygV^@-RH;6xPVx{y{rAV#dyq=$g)IUGF-4o!j$7!>g_MLi9c`>XQQ zwVx7^XIn$e&`Pbn(~}N+1ME>`rGMi`z>RgJ&@tbemmJBk$a{+5Sfi{yc?Y1fO{zH; z|7;n9ors}dX`nXR+(Lht(KORf43SH5G~g28OIpua_`8;wpM4NLth+yQUZ`BkW073l zaC#)ca3K#|73U1B5o1k4h6}eY9WlV#Gu`fC4}EN=hGIR{!fQ_gI_t|R=;9|0k*+Zj z7O_&5e(Rz>dY@zH15Zbp!p91$#Z=n<%s!>ZBs3*Ky(z~5cvpxX$lmw@qIXIU;LP(- zY$+sN$kf$w*XHhPo!^Z1Y~zw~i{XiUmS+AsD5>|o^&_7J{*_R@lX^L`9Hsem_N>IP z;G(nGXt@2XNFmUJZg>$AfUTqmsM)S{x;2{)lswhnMon*_PMRbnbtGwMYs~Kl z#@p5iLbs>jYb^_w$aB>IU*cgAt`x%Mb=^tLz3S62nZxnmkuxT0(kS2f5m3!00qq*q zk)mWzy@10jF7mUhLRg_p?&cT|c&|B*pUv2b0Kw(1Kb`Dnl7})QFZMPszUKoQ%?m>S z=Q(aG#=?X<^(!}PB#)p{NsBsH>e&24i@De0I3c@L@{_Zp%$-kPICiF+E|fB9JM!XN zq6`cDY+T$=301*Kxuj{YmB9E|KLWx~xIb;LJ-_i=sAtpY={1C3!#EuNz;O9NAnv6v zI%k?ujh~3^e=7i_OQT=X4%#%)}itda{;Rb%> z9Wgiz(PW%*%Hi&-K{t&qCThZUizC|vQiPI{NHh&krt`3O$=NrKT@}*Rj#8H{4Zrj+ z#LJj6%A)sFC}eFy()d3IJvsCFjUNH5DaBEAcZIco0p%;cHn66E=nnIsV1XeQQK*$t ze;X5&06GeR=d{j1<-}khY4uormLi1b{0A}!gT1Yvz}>He-Iu?%`3HUk#{0KXLQ*ey zIF?(qtxHLq(A8U`p@_&)Uy<9!dPP6}G8zqYYP_J+X06=&8GB+tS4Yek%Y9cyswk}v zu&Z2!|0Fb<@nq5;_z`qyjoD8h#Cmv^cli2u4L+udMj0sZ_1cC0{9c>QgAyY_pCdsC zhmev5v8jQaep`+$3r5_w+3AjKayO$E`XX#`+W?PIO=URY z?$Dv`@mUMtQhMnw7fTRlKVra38@xI8fa@tr+Gd)) zvDDjcn~oF8wtn1r6X!Y5d>+MujN?aW`Gv6Zph188pPAu;g((2f!HE;njQ(aO1Z8=&Uo}sAj^SPkU zMvXX3?=78|XKMC-}x)_CMY*YI>b zOv2?eLp*Xy+4J=A7#+%Ly*3({+S)EU4tRADurW9M8NHlz5~YZ7a3B)8C57gjKyOJ}vxL_4T>nUE=o zr=->kONf0ZA7JeulIpmla}{TudE+CuDJ+xk6BXT=KW8>6K+xI%3`2)xg>wu$c4(Z^OpxTvi}@v219&z$RT zR?L;b*Xn0u9c_C)doKjmI?tuFuPzEQHI;Rt7)h=TEambSRSJW!wKy)CUq$T(;BUb5 z++{>prlTESu^#WjD)~OHOY|KLMZK?4Uwo+&=N>N&F4q=Y^+_-~ApA_a4#FeFjwf81 zS0e-N4UKD;Rib4=2if4p24!{&kO9E)kqI|Gk(jmx2tO59S!*cGhK`E^fiJv2vv2$e zgDf1E>QV$>nRWa^#Rr%On$e{aM@lSe+xn(1W=ie7jN$KhIY75b_uH})412)n-gMuQ z9Vf;;@3)>08=$LmK1~B@`XKFv%6^4lYq=8L?_0kSDz_X@$z(d&6`vOcN)#y5V1O^Uhny%}%Bg>(QcqDPrkmc`n5&O>$A zIm-%NL*G}|rr%>zS#R3nS#`$LB~%U=WJFRU;P*`>giTMUl29xp@2;iB1D$^3M~K;t zni1eGXj+VKdJ1Gdx^74{T5qM6lF~I7nWe#5Z0$PjzODs*#@iS9wRc)hSw}n%{*(kb zfl|Ez-J}NA-xDStW99J|KJX(r{N&paBfH^x0;5axfNOam5)qc%a)*~VW)tk9rR9C z94WM0o+790)%wF@K*H-z!J*YYwAu4%LVux?&=-dgU>c=!D1S_uEbAaIRP%#uXa%jj zF-OeS)ib{FBWx%>6dB14JH#078pCHjO%r%|DgsdYIuaLuXq^g^Z~+FPej*Jo;wx+k zQPVRRT1_JZ*9s{GvBP@Ph|u}s!ahti%Xrz>5BvxqbZx<%_6-w58xdIKs~p-Cy>sQc zy!V`apwfX`yGsd9V<9@Bc6ez$?4(qXp^5pn?pfiunbNH~r=A|9Hy851Aue6S9;E#P zKSC|T?TiLal%bT*;#avq>L#eL&YIa66Y`PTRcu=eLk8Z#JQ595*sSIiiW-bqWXH`o;m_VXZumHKky?!30>G% zBe*7>Ox983>CLrq>WX!3d5#r4x*<8Qba*@|?)G3l72Ww{d~!zK>9ze}>-#vEf|;pM zT`LL|;2s8O1()vYQ+^;5FBk+y)U$@wcLnylH`wvygX%|}-^>WFw#(TQjld%7Ky{=K zAEUy4;c^b+d@XFGDPsUYey)N|5%?Jki^sUN1M+y|{`QqUCA`Jm>BIplBl=o}5<}~^ zw~Npr*U2p~9rX>&hF!EE za_;56SOqc>kr#`9B>Tw8qgiV7&bZc(5GMye!6SrB^RhJH@t)s)M8-GIC}JQ|6tNcP(1ubq+9iXF~z5PpV#vEP1bVD2uXN z)j3C*2B#Noz`3negRJ|J?5j|eQe%HPx?No~MBaL(TfuEdyMAt(*@pJJR{%0UeI7#R z*ssON9Cp;KW!bsWg%r)!$$(h!77dr?nJe{%fgeUH4n_SNKLW0Xp=a#pw`^(KQTehh zd|Qcm&W)UHDMYn1HmQM`&gX0HUEq7c<(P|#q2m|KN15{w{)Ih@ADQEg&8R9*oa114 zH>}_LjT1EEhhn;il#B^3j+Wr$P*N?p;|Og}Co7TZAXP?>Z4P^W7^ROIVZa(3G?~>` z0059aUZ7Uh%9{P%Xjb7hPSmC26P>$!mJy4 z7bs+^gcu;+Z-TY8^*Hg;b5gy1q(j$P!`}iT z5bXYn)h_)fs>xBYaugZfFQpMZEr85MR2T0rAAAQpG5EB6`@B7tg)L<0bJ0zYdM4^y zMbndAZ-d9$pvRZ}B9|Zd5e5kXWxXx67fdV3g1tWIMQ4;I!`uoO1>qFEneF`=x z$5G99f=(<7Cf$#T*NV&C&p?`vt48ZauOxua@0#O~gj?VEEEF=&MR|5v&W$5&MwF_> z?5xKSS#DeIz#>v_rztD@?CW>1$-8Dgr_`B>Ol(4fEZ3(4vvS~?JjHniI1C@M($fSD zkK~o|k*8yuS{L9&&AustjNGTo9>8wvX8VhsZS7q#H3%Y=Q4woZ@I0hWH#zYQ&79Tf zv^b@h1-?r~#`qL>KH8^^keX7N}zOnGPI zY8&-;zsxbw=XetpYBEdhJhSm3)5sZHcfFd)OJ=pvYtTzsK$5ML-U|zdH=ws{p&ITP|=q+c` z+fF{Om;k4E?^CoR&DpW{Q&@c9W<7hM1Ngf2tu~I&WpF{pIaZtSwZ_VP-SnOmQkQ*m zhwL%>V~YsBhiCuZmBkQg6%D*Fx!YrXet=pPo_9pS*JWewkv#ub-B)Le z+PKt=r256vVTIu<7bW6Wtbot7aA&N4Te9J{2Jo|4S@&%6^{8ZI0c+?90Bk?rg<)N$ zF!E9y{hkVV#hQpK^m|f_aR$z$0HCClcNGPS>DaT9&KwP~7d@w=NOc_%=LICGRO zlP^zi8Q`DX3}}u$UEP|n1B+jv<=Mm)VQ_tH?eSp6(gqPy3cOjf? zbHO%24hdWZo+pqEeSnxM{a77)zb_fQSZRYe-@?m7{7sF4_+1#zg#^mH$n&&&g}rzX z4MRuPT!7`t$b2K+H4t*YC(Xqrw@kHr&lRN$5U{e&_0?M%0pBvtsW=_Mj9|W*Xr1M> z1w9ayki$)4&%7*gy0(4c8g9&Rj9JnZxW7#@!>S*dI|9okI)0-tC8&?ri;k3!U{38Q z%gz*nPPZHOS|gK=Mw3wEMQSFqOP*8Q@}NgrDECxvSCnikPY+PjP^MBwA2aSs!JzPw zN&MYEX4xqo;ft^5O_Wy@ggQP1#TPoe&v{FCUw4FE^jZ_i*HXucFb8vrOOtNnEFn?e zI5=G^)7vP6Y&4I-WV2q*YAd~O|Hfy*G?AiKUP$LUka-|Rb7^6k5I5ucu~$&onAhe4 zDiGsRBD5y=s~3x=D&ynwMI5Ug8|mIm~m+_h|Y6ujw*J-URK| zcG4erKMr6}q(FvslS)KUz=pC(fz)QD09->E<`0~8V$X)fzCB$ZZTI0;jL2B3MmFb8@>eur;l^o;mQwI)EGv zFW>ImS;k8<9=zdHhIh7O^dLf#R(T&pXq_hEG%L>#kDPK0EsY&SI^e(AM1Ved{Rq3O z_gd>IbYLtc-8a&0!?^i8qXtbcdc7i&de_uhqHego=ckOW6apC>pM7}~oPo*B`m@su z=Ta^gJ=)o$tASI;YuJdVKBaa8WYy$EVW>buPZJ2cJX;3$PYCQZ6lxCc(5ij=adpx; z9BU;WLy~~)#ez2i8=f<$`CJdI6~K((0op9w&NocH=Ab`Cdz8Z ztmq``4+wFkL0FkftJ|8RBiGZLWg+MEK8x3q#^S72@YhT|Jcn{_>b`G_QXjsH7&60Y zfPPa(WvM264axZslV$XqrCwt6qjMC@Yd#TDl2q(I%5fY;M^L%&`X})0d-gLX;Jh}O zh5;PK##xzJ*=fzRlm-!z%NNjkTW&q0N9$C7@~m;mo3M^uN+SCXDc%+0ak5-@f4?7ym+0-WXCREit9d4Vq zH!VO?q_tY=sbeT)Go-Vz`N=Q!ls-PfYr=J?;I`t)sn=%u|4#z+SHrP$~S(m-8jx8nn5*&PK1e>5#fLa}RW*_ZEmkWU*TsyxOU< z2Mr_WDq_KL&q4QsrpO^ePxj~od-VWO;OG11j^90%Glke-Str$YAG(bqo%G$2Q=R7o zp~j}26DOYB9yu+Tf$pisf9UCJg#@kJ>klU(Fy4OIG6%DX-nu=-?|gg~zO3&Xfw+*@ z(8Ph*&t>j}1NiB3kTe_`ghyi?m5rS_Eua_8Noa6o;_MBF_6GF*ane>pCfzCi|o0<~OpKgi(tzmNyeSR`?u; zjBs_VG^Sk}&f$wq%;#)pCF!-mt;%{ks?DR{Vra9L?(3b3PlCJeTRGnW;@u#| zdtvcQC;dh;EqbDnWsHo%C#8Mk->MyZU6d&AQ9M|NdYfIz4a`y<^$DK|?m}l0b04#P zXGh;{wv`~5w{aba`^D9f1PX;*#?z*W+t6OQ*=Fl$7s)OHLE5YlFIp2gv)|BM294ir zt<*q+K+(b`(I<&49`vFOHsxn>ZqtiqJqF3WQ)pgNu>i4;)|H2iqB2~H#`RIV-4Hi+ zyUebbL@zn(+_P3`q9(7EePG)GWVkk%`Nt)@+hwz}5OQW+`*B%(>?{Dw)7M*U7ui0) zcD47BKIc`;A#ZkL-;A=*yfB2qvz9szK-xY*G^}#P3%EYGmxN-fJpmKQ2 zY(|II$Y;T3m)RWInrz;3I>T-|708LgQ<>0jW$AEl(xpV5HP?G=!qvxl)~Y!cmoxG( zq$dHl83{*6dxzh2;mcuS!7Vh=-t@KF_;v0}M;LFzHtT+(-h3_TY@OU%cYxqf>r$#D zuI@S8=1mfpTCua#?;gGsmFFJH&as#7 z$^&ZJn!0Mg9dhqZId!=&S z!9z^*^)%>l2_J|;v;m!m>&Vm5T7NO$Xl&Ha*Su#kv4^6(Tu=Rgi8)?#1fN2(PiyBa z8~S+Hh}>SV^qga&lY#Cz$8juqQ1|9pZUbkRRb!+3>0B? z{V3YwZ4$IWJVm^&Tjylb8hUnb9GmyNtqE>CCL0WQ&*`nb1scS(27BswTmzNS&>7ln zyl;uLe+4#$*B8Vrt-0(xSd@fI$mD*ncX3OZcKZDEy47*~fU@N0U4p0a@QXd)rFoti zh!~58sP%W3&kD)wf*mydY$FZY;@%m;#7$-)T5XTsS4MrsnKvJaWX&L4kwi^mKEg~~(%yW*tg?(j7Q3%5-#cSzKuykwK+dHCId~P0KqXpxzuL8aX z{|qMU!Z*~a89n!_m-imZrk>^ekT%{aCR7h?`zP|C0v78w-KD8{88TS;;N6>!fbJNU zo7OLo6irfgG1t@i?7s4n z&3<5vjaNE5*Iq2gZ@+NcAJdQBU$=AiN)FA*PCRWH*E}v{pcwbqY`SY*;nKXCh}3Cx z^4qw(pvD}_j$6A{;onr$uExi{NwC1r5SKy)Eab*DeK2@o87#*nZ_KEvY zeK2?<33OZavDRJQ5p8tFtD{B1U)BEQpr1p)$P`0AybtOSfqt`&^`WjdX3^bV@%Fm2 z^NI*%u+*5!Hka$IF>#6&dfwu~m|VTK6BfL!2%SRsj`$jy46yL5ZHB{;2M8qjo9az3 zTyz?|?b@)u_eAg5E>DssCXNZCixgd528w&l!8o$D#Y=6^n!sul|F*KvN&a)J`&e9p z4kg$7dfTajT`h$yi@;~uVJ;)ok|)Pi<>3cP)%ohvxH0v&`}Mx38Bmw&clPnE?aW49 ziCP@jcy;?F1DEG=yW~K|Tc7k=6IUI9Sd1g)o8Rb@g3_bavqB!jzB|^bkBF5}ImW{L zeC{RUAP24`U`!Lphj3ui-(ev<fiNArALQ?dK#T!L9Q&*y zJPb=l_nqO&mb_}N)iayUyaBa^r)R70lFesqHaY7toBv2fi6Z=pMYDy-&_BDjcmvV? zPDffw^`S>TLh4J}_kqoq=Ue}*@i9W;1W(!F3>|PZo;7yZ(FrXodQJ^KtBC0tVDaI9 z-anVf5d%KR(_npSpXisQEH}Pk>9ad~Mz_}2>4fHrmjx>@+_I>(N8y!gf^vIRs&SfuQ|NLW zrJ=s{ISTG?LkHd`_)QPP!mbzDf@n`GpoDGVji=azRi6A36!TQabn6#wBRNdcikAZS z6o(4L8Qo8B<#SJ>99bCL;nsWQ+zd7rb*&Mu0@g1JuGN2D^;?*bV zStZQk`QF&XOBzRXdOh7X&YN7DRWGy28VjHZ>t8N>=8-@)R^_fX&7Fd;G8(z`rr&6R~slaDMdM= z?D&y7C-Z%`w$QzCVf%ha;7|^riF?DH&-Sz(vk|1Zyi^;YF+?F`qe*l%o_6mDoXqj% z7lP_okNc3FYC6)vLG%Kx^`S5mj;i)`0QqNq=cVJ=m)5HDtpz@XXye#*t^p(3CpqrJ z!0jt7HN(Qyq zXll>ZN?SymVx2N_K1GxCj^(7)hd`I75j~^%?9}nz#-ggzvj05yZ4p%(!6d&;PO9xY z|9no=wj)%JEil51IUZ2@d2NsPa>{w4`a7hI_6~O4gjg?v1JO76J|4B-jDmNZOmYpu zCY^)yXJA{)#~AxrlA$`Sxbsfl+FnJ7=7Zkwj9mw{*QAOZ@NrZ}e>7sbcmS%nwHgPt zKE^|A)5fe3L>9KLBHT8|Zl+cH;})Sae0qfvN+~h1Ad53L7E@%;rb#IG= z^LWa6Vi9|&@u8L)CsbpDOUdAh&;?tae&Lx{dGAOqY-2K~)f(}H%5+=b33`Tbw0Uf~ z_Bg|M(6z_!$x6K+0hd@CssK_zt-qV#M<0iY&Hj?7dybtkdge*?Y`S-@rJENyTE5W< zp)(00u%keo2;6NJpbWi!*IJg##Cw5@7k}bh-M8@GnHrol-niP58hsEOljFB>ggrIZ=`m43MKXe9LWWAJ^t&gcs4Eg;A(a8M^Zm~yhQmv$SoSVF6?o!ardzD)ZU%XfEPitX(1b{=(`Z>hlzi$4C9m^FDhw1$79 z<1b;p?7b&jwjjs3^>t4m^)|;^+12L-U3vM+FMm}<@NIOFG1j&5i?4kjM_!~;x#msi zbGApy^*EXE3O~f?V}fG3#&M=D8$q+T&X$Y>>K@(JTi=-FbozI6jG1uAWWYZARoTk4 z-1X?;%QWQJ{Vj$FFLgcRJPLe-nXC#6_~UM54WbJ!c?!!qL~0)vrE$3}ye6+~O-KO4 zNsQ_)@3S9Y&80gh!rO#kP@t(T&9-|S8u6(kzXIEAmp;I4ygB1u#6aH;`veQ=>aura z8sJ7p=CXke*sXp}%a5a*r={qmy)yGd^ zzh3ib@uso7<3zuNu8GT7!|0@~JtT$^i&30f-qpBz2#X}2_swy66M*K8@nuVL3(QC> zsU7W>d;gln1GD-~J)t_K?e;@VvOJVy>{&*5%&3w532B#Xj6MXbC3dbm#?3X}kVdD4 ziQ;&dS@IqH5whp&P0O0xoeI;idhoQro|0|USk|FE+-Q2Hj`MBk1konZ;1|=ree(Ex zCvUvMG^t(rG1qILB=QV?3msci*&3V?Vh#aDLpr3f09@>a5Tf@X#GsopMr&V=xxdbv zBO8q5@htje9AMTYl#~>kkYA4)w26lGCf2zQ3`#UlpLA7bSu(7Gd-D7{to9Tp3Ty4;mo>_x#U<4all`nuUa)2z$0}*xxulQZK ztmb^}<8NO$kZ+IRgeV^g`45~OTY<1uez>h}Od3=KTi$wO)%KH)N8w20(E*vGD9+uu zww6J+8M8Nn!Lu?bKmcB{|7z`pl5hUu-QP=IgPV#u5CqsQSTLxh?=YMWW7 zug|XY7q+#VamfXae>q6QGQqec$ZIaO+?Sx624CB4uFv6U|jVz38`99XOJ@25!!d`-KH)P-^PV=72Uxxzx(a%qh0p9^InbX z^HY*Bu^PgCO==SHiuMis;Bah;1D#N+kt#>i4#meCBx(I4{fN#@v8>Ak$*w}oZfIkU zK@|1TJ7Tkb`ZV$Wbf+_vl6mt}ICXYV&7Wz1dg{VveV3X5eLIi~x6Y#-dV1e;&RC1< zS^paQf8-mXW(2bQTliot?lpvC%k<62ZSB~HFw>zZd2fJh>u5px+fYdoM8L7$-xyuy z(f8gF@2#d71NhHN?>SmeRUquh4qGjI<9B4?%yBoHNl%m{W3sy7Lxn7--d3mt3>*7q zfRqjGHk<8Fb|R(7>mQM1Hhiu+BRU|{K@`SJ5v|AD_k&W%^Y#$Amp;;e^M$@6T|Zr&g%ODB4H zLvRxxHlcjH;ustDrWD2H%+|N}tLMFWT21#kls+0Wr%RE%4{FP$*PUYO^z$Pd{{Mdk zvaIBhutB_2HGP35T3@)8mFck-b7z(`;Ii|fAixzy&8bbc}d>wSM&?dfE4&*c6ARwh#9Qf;dAez zfh8&}qT=RO|XApTb?7rlhJD-Sf1L;Q#=-&2d4wC{x=_?F=2 zOZLc8hd&>W%v^Js`mx`HJ$MZ!{BKlt`x}1+SvA$88B~a=<1(8xbRm9W6LH5n#5-=) z6KjLICRwRV9G}9(p6if_+SIkXmukH)yKxT-?>yCswKaid@{N~S$#gyBxcqNC7tSYZ zK5`S^M(wYWL4K77^VKibkLR2lx7xzcb#md!p^`rvkrp(iSC@ls;jQ#!k(2@ONq(J& zHPPZCN{cjaz<;#Po(n~JcG3)+a)F2Wm)Xqx zVvrNs2x+qfe6>pjYu|!Pf6+H&vemNd-^!QyO*g_v;RD(+IY{0OBigH*@J0Z@ybLO4 z#0SUU_$)kbetkAAeUTR~%@u$(OnCy=Rx=+s*x*5#Y)F0_%}Wa#C8X-I3tufBEt_)Of_lbaoD%GZ|l5$UJ7%F)&9y~L2Rwl zLAA=cv)x57t8&oKpR%zs@#h$*@VIL4tvg@erRTM*wt!05t?XLtpmLss&Mru!7|rRl z#ch{SR+lj|A6vC_piK3RyX@`^;)JV5&C@S&5^v3Pa`!B@j~w|$4jEMHS1&fh#?bCS zRB3mG&0HHH^ZNqh?2F9rj$R}>jQk#-#x#rDCrF?r`XMG;W4)L!%90$pKTt15fQnQs z2*L$h_X`wlK)5Xak{Ra?j!4N;?{qTpaNPi7vm~Jg(QbVy2Lh(b-{b6zJEF#2=}frg zkC++zWC_ji=)B#yw(-woD7d-b>a4DKtMqIsibLHm9EONZpn?HpWLOg)fv6A*S@p%% zmv{gcAU6&orsf9%)rOjT*+EMt3E)RkQ)k@XZmu>+wzYiJ{BE%&W7Sp;u#lWU`WnQI zquz#3yM&c?#|G2aOy}~cetZ>K*sU>h&P{#MwzbEn>pZULm2E+<;;(QVwG9HITPs)h zF90Xi7J-;A0o&Qg4@6$1ZUUPD@kndF#s+6={O=!sm<%OD;L5~)w>~;aWSc};me=`M z7v1{&K$xoYZ=4;;4RJ#d?y=0K7R#Nx6av$?C|M+2_KWOtkrlmB=VNSPL72M0&^?bA zs(7biO|PB%JCu@PwRuf2yPvP4rD$z~>Zzo;{gH13t*2ddRi5`ASg}`n&DlJ{%Lakg zdQN*eWhK(ap$@1k&}U1J35M{(oJ&d>6ZTlU9K;XYqr>EADcC;bMcK{^`?h=cd@hmu zbdF$93&2jjq**SChgdSnWwb|!32K4169-7$lyts5dkgg7v9bX`Xiw-0Evq>%dFq%4 z>o?y9YV@>4_nUTTv>eCo_l1gJ!SvRobKQGjZ;vED^Rp`vWwduPvNvK1a^vy;m+)Gf z#45)n{0{4WTC+MUS1}>$%}K{sWozAGIIyYeUxRsNvwhCf`A2>V4a`@Qv*k`)TDf1W$esc)cA6Woo~~wYx+QY;2xg~WsIjf5Pr0~kAKqq{+QSwA9EtY`3Gd7D zmQfRn+Zl(l#m~?xx_}h!v*|08o27o3E5d^HkA1 z;+=In@Fz9i*90^9PMP~Sfgn0!d$wFQy&fW0+NB_LUJ>>0tOh^#_nYraceUPY7LWcu z*VK-2`T@FZgZ-FzIAF+2^Zc zu1<8EJ1{bZ1S|Z#BMKsAg*1BD*vl^#Tb&8$dW_X)^+uLuGH&Jth8K_S)*N}bJ56nu zl%p>(r}$0UPCu$i?e#R?&`1ZR%gDI1)?9FhS3C1#eI9YTBs9GB=KjhdyiV}ybt-hR zBeP$=Y3~s-v%7nBf9NRCI70Amq^{`0}hSf?T42yXg;YxlHQn)Q7XoFXK3U_Nd zoT)r?tVw6i{o=Gow3zW*k?m?+da~6}VNtrk^o_Gh2|gz5^yghkmSf|n(PBDpRGu<& z#13*g2iP+4aQftJtPpz+?RTU-S2-JrG3|&?DG)9Fkab%Pg|&d=1XJXPmpf{aCau z!b9V&#`|JMSwVW7FQfMQ0k+Ko3w&FAx%9*fK;mY<-)oL{1X;K-GS|DuZ8fedebSb;IXYcr z-=NI|g5}}3%q5x61kJkFsMEf5$#*8%`2)F`p6+f;!rSeWJR8Ofe#DL^aqD1uRK7ZS;R^nBGx=Pr28q&VmhBbDKy5_>=0$>bno4ZF?Ms@_5Ii zUALxH;{@27_IOTG z)qNUli6Lvl6Rj=hi#k2;cSp%~n+}|3jVmrhHolL_-R;6i8_r6vJ~sFo%|K`E%bUx% zvzB5C(qakAZ-Z47fn2A>#vK=a4rzC7>?`ks*)xvtk9bEr4;kBg)+djW@;5j{R0Qna z8MvW0OX%p|kwsbIwH_yW<2KR14`MUGdyn}-^e&G(H-GdnAt24|Q1@cfd!L!Leu#&o z2N^(O<#Tt|(|rzQaE>Q$K{6I0|I)n898~G~DkE=hMOGf& ztGRt=o8&}1P)QtFbM~x4Wd$$<`mGL*uj&R3rz|{c$jOzn<0tXbx)`$JWY}+s8I`^Uxl9*>gxiDTL z@AsbQn^E)OeKB)3lDl>rO_`T@z&-34FQ_tfiV$S?Ij=C z7l!KV%7+Z$dGXFik0~AMg|2+~P!crHZYRF4#0t)m_t9heooH^jF!MiKo!z1l48K}! zK_B2MW90ln7n01n8KOq*dJaxb!MVpOc=0%Es=J{t4=$IE(1pDg>;T{tr|ie;UzAmdgpx$~UI|D4}LQ0LW~ zL9YGuI#^p++(ZuTkGGnuK`;8j-)oIEWb_XR)f}HlyIh=)4C@RQzn_A{EpqwCJGVX- zLcNp=FbWI`vcwIj!n5X{E|dhaO|`_u^dOg`;#g0HY(PzOGPKVp3JsU9{aS>ZVi65P zH=FkBN$d~U4^V@ronMF^gYDLq4=XIe4`aW2Bk1>8!{oOH2YnG+?}H% zvp^=G7bm;cG)&HPuf1mDs{jQ<{Y@YjA3p3JdC&RE;qls69pT>X^)|!wTYL7Nn@ke; zu2pNA=c*1rg{dQ^`9V_0nKSJ1{q3lZ)x&7aCWrRMYFs)bp7;6gK@Gr!>i+QL6It_3 z3Ym3a#0)c@!44ID&69@#fKI+!5nCK21>JY6sa53^wccAb+i+jD`0#X!vk7AXn^t?! zhb^#W$c4FuwZ6;!UQ=9v0@=}a@G*kciU=lt2Rc0@waZ{nXQlnDamEuH5=y4yAweZxm-X3Mt^ zM1ScZM=&A1v+Y-3&TbF29nZ3i&GEVs4*L-3*u8m_~Geac>x}=3Z0j^wtv*;l;@jF8zg8*Yo3eC7s@w ztq8+<(rNkPlvB^?Htazen`~<>cQ+AovNJdL$1`EkO%7E|aD+?rC;A2dLHgUcPvnfxl^fzerr#g1 zbWZQbqv^jQs@Go%LO|4y4P`9fULhs=jip_40;;yl7pZyM}Z0 zir30pUu&;wgMS}uZgf7Wy?p0xf8(#9Y8z${jAUzm5vkng-|uE>jOXjwK76$KU~v&k z=CoLa##>|V7;N-0755Ke0+xX|SMNm~0d7vo*LzATvs4#eyE2$b#c$kIUK}NNlFD6l52*i5+Q`+pQpg1=v6UEA#Vu!C zG~-LY%=Oj>$mtX2)kO)i-rY1&z%5EX*E_E}8)UA+2kJBgP+lIBjKlE@R7tZ*4illm zsO`9ZHstAN%j=7JJJpxjoLj}$oth1W2H*|*P;z4{fUGue4XUDkv&a7WWt1}P1NkSx zkQ!3O9=jIckdg2*2zHuj2MvGvds9u%DG=GO59wzp_-?)2-#*-D>hUv;`m5wu?`<)_ zK!IaymX0z^cY*o`A2WAg8lOq7zmD!j)t!&8Gb6(8`??j~oi^gLuR9nQwP&PY9Skgv zatZ#1*@$<{F9>@nP<@yn7Fe7(1nh@w)zjMDWW6WE{*_r^nryVo>H3cHN$7lmlsIs7 zdvxlAFrp}N)3?2!{A5gY+b15T_-VqD7a zh)Y{vclGaqfj~Z;p6-NE%G3M6}u1^0`a)aBr=44u93 z0-fYIa{#LH3|jwC`fc}mz4Jz?jvil_q;U6rCc1iASZ`^fyjc>(3 zj7_^Vk-3=q+=g+SYMcPs-HUke$YcTDs6aoM6;$Nop^Qr7v}_$`PSo}fOF?jv@1Y=kEkI`Rbg1uj4~uN^PZ;z9+F`>O*qZQ_aWb%7NhM~s?wHJ; zM~+%E<0Ft6w>wg#Z`^r@Uu-O{^^}Jve}%XS9HJkpTNmLaJ*C-m@4P$6hu!_&X`5)h z*oUxX@^tNTUzj#5`Ce}6#Q-97w9#qULvjJ{jB;01?r!v^iSj6gPzUGrrNM2BtfE+p zo%jses2mw1>&&kJU>GPtZs}Z2iTyptsyAhznUJP^BB`J;)$I;!R>xxj8OOqmqf?l8 z-~uOPPY3YwTKuIrYEs5pt=~<@AqDkTw-c{Dr{ztQf_j@QHZ6zvKU+U0qJZ-{Xq@gV zlv9jh8{$#$mX{piuP2L>6B{4aVeF?y#_)>M?iV(62Ee+n)ynpaKi2PhJdcF8S$`2X zM(M`+0KuvdN^`XXrbhEGdR)W^usg7A;9uz%#do8S22LX?U%9eHU)eyvgz z)H{Qf6B4BjK+zK%IIB`Fd^addQ*n+k?}lyfUhxn1D2$FD>3_|R-u4nePC`TNQ;C2y zylmgIZc1a`b_)i|YyNW>w~rM@9N~=4BPOF&kX?9pGly@bz%=FIVeZ4Kjeba&Wb6F{ zI=$%psi2^W=P$aH%l;bi=obqa>q8^PF_vt4TwK42+E;AtS3g0B@^wvPn-qx5(r?uy zom6?h0W$Lk>8W?$3w`dHu42J);3zsyhaQnY1B zmUxr%d%}D8Ei&?xLbvy5mEX&{Q3;{BXdJ8Y37)QNg@foCyN}C`Er9y7Y*!%F?&POH znc8>lN0>M!KkkcJH|TdVV4XJBxF=B^^Go9Ey-1;wQr2FpzJ>A9O;w)~VkPQ%I1Rg1 z>l?Qw?^CYB8H`Lfr`cSPybDUeZ9T=AYR@&GveXu`&N$Q$umW}~>c&I0kS;PzW?J$b z04tb{Z*Be_O5NrFU15|T2F>k}?t4moMX{wtMliEBScyT`?)xif;X|>Qtuv-6;89l*Ibp z57Wx7#3%eM;8bO|X~(QJm|XiiqjKS*zGM-{QB*7F6*|l1vYNx>GpgW0et=gVt7|W7 z@LYMDGlDPn^U23+%6GzNIU)1gqmtTuA&Rlm$1{RgrCbI*9ot*~uB(I!2(E1l{4ma6 zrV&75jhG*W0woIyI7ZpP9>3Ba5ccu#=TfoMJ@dQCS%JgXxz_40>QbEr1zK&~1?j*J zF57U}5V-l?Yxw>4+N^I+YjS||t+iB6AFq8d=2%(i4B=niMOEtFW(L%JMF(%Y&*;2< zG6yhuxr64@+r$v>WADiaB}064iroO-$06tn_d;581G3lQx$q&w^GV;@eV%W=KwUo3 zOZTjkEA+8OkHPuyW;U@)OkX3l$9pru5Zv#O(#aBdu~A%?&RR;tM7k$EMCaRm;e&1t zb+MIq+MPI`cy&M1__!?GdHg729Z;mL0SZvoZ~?vpRmNEY?9 zae(oALpi`G(SiaSg}EHq%-8-t_Ody4^`eK|Ihs7W2EZQ~xZLU|`vy5Xz~G$f7+m@n zv*S%IIM9$lKW};DeaI!yRarnM4-II7jQv}3ku7)w=<=#yoj~;IAeq24#ktaYjeF=v3?7rvh7; zytPf*{Gv_PZ)}<1NLoW7ikP6f8{U~s*P5IRVJ#(LGN1z7e!qLf2MoZK9c_SRT0qhY zgctO1xa`e|kgT=urVI$y?;IX2EJnH>HuAXfcscm8v+TQ7;mr=orT`;nY=3)F{l2Y^ z<>ltf)|=&~+ILEvD-WM7j&r&glpQsWc>;rUNIJLKL zRvg$V8^Q}mUSiAICtVxu(UIgt_O)fG$pX@DGKQ3yjZLV)Ung&}EjWd6aJ%;mh*VF$ zsY;wUr;w@f)}i|H)S3xrVNgd4f)knn_#k(*+RYgx&V7;|NwkMc=cAb^6j{A0>@X)b z3Nl;gOTsn03M)9o@0x6A+1pD(E0uC!bZ9wG?A#V(f7t-GTMyr>Zj2*PQi$|LQ^e)b-PNm~xL8qqPmqaV}$*w%3|2ASGPu1m03( z{UAF5G|#21mH0W#Hl|DrC~P^}VwG8IH2S_w$-Q423Vpc=^mKyO7x-3~ZBcdaKgZB+ zn!Ec2<9njdLeJ68_{d+D&b)|21?GXGJ zP)qoZ=byLn?&`;5KRVl&&R2(YJ!dZTZYy-1J$&=Jw>Q3gQr<5;#y0|{(0<%c?M+8q z4r+w2n?fyJWeu@EAo#NKu+(6%({zL8X&BRF?`_R^DASYZprwnopH+BJU zmi;t&bY?cBPiwvPXfZe(P7rw@l%YH)&@%qq_njRZy=;O|<1Mr+D1>Iy-SrXV+y2_& z8N~=9NVcLRyVM+Q%&np9x}@_4B8pMY1a-t-@5(pkngHb#-2^7afIKfd7eC$cy{!EW z`IHN0IiWqF8QTJ7m|_;M92#rnA#udaz8nP2d$0>f+<7zXEklF7foBDBE54rVgT_87 zgE}R?6D=VvC#6vZjpLe_+60nQkD(tus#IOKJx%Q zg?jm@yQK2beCc=fZg>P|PA^d2AX# zjdD+p#$5VE8j}>to#%_>uc050e!2}nNAp!XtfGG7STG*8t`3k=JNG*l94jFR^?nbZ zNE$4QS%AHJHb!wzR#>b&)nv@rFZUA*tGUMFyAbfj4W-y>TC6oZ`@E0L8xL`e z4^s(&>iGEXkBCWkqzu%Nh*In(&THg>hkh?N`Z%Wf`$Fk!0N1%wnmU-&d;`qw_p4ACoT~6pehdeQaZ@m~_r&yRRSm3T@IwIfQev}&K!S`e? z;H*?ePs1Hotc5D)dmADPy$W#Za;Tb3ais~vu1dde#1Mjxh5=~F?mF95DR9>-H1i2_ z$g5wLXgSLr#P?jEI&kX#3>OzTd72g4_a}KN>1e3lhAh`F(0RbOn=!`M+<5KIC-yCj zh2)R)$#nWz^!GuJ5aHYz06%!jY6n-qeJP_4uiXys$16;f`2Nwz^P<01Ty5{L;p|_| znvk>0XJ2b>N*R3!FH}-g+4{$c=M41tvIm+v$esl9AGWkHZ`Yv;XqyTvec-%1e$iu&|LIihDKje`E*le(+}5;gg(bLZS!VTj^F z(Q9ki%-Iz*p+2*M*_1*hvHP;u*B+=?Fal9isRNo7TF^UoUORVfze+q-8|7XeF1&(P z0(U%LY01GNkgnYZ+|7fs4ikZ9^A>TXHefM*KvUR`Nz$C(A{g_&24ao=c0*#f$I?CA zLa3W>L}koeUfTsSiwXXGwJ`u!=;MRL$C0EXaj@1VEleWTohy7LVDgR-s}JDCS4dt& z#$v@aa=E|UjWO?b)`Y$hNi~8C?)SCt?$ST2NMgYnV>ZDoxbt#z8VBKR)n7l73WWaLW@*hQxRbLT!F$#DlB27@R&?^%b0 z^B(=canFfH>}I`}EcjpNd%sU$1y)7RbNNY5TzT zM0>=gir)I(gw;1iGM|gt;g~%sYaKduto=D&#jO_*HxYVwT(-h!Y$iDynXBOk4fzJZ zYkZDJPOJ^NJ*Jvjc_?&^@3KNlj<^#T%TX=n8V>oAtjJfE714F?yKkoNZ%CM+w#pe) zz_V10p_fhbg5Gq-nu|-xmxKP=h!i53{i0F{9%-E5CJmK4F6X($eLnzkfMo6Mdeesx ztX{r-30~0!l7(E1_v3C4-qWEZ|Ge9m|q3RyCk=NEBq^b2Hq8n4uDqXypD z8szL&!0-C>6SE&BrvQ9T&djCwbxHQL*sU*E#En$qzFSDM2Ik&`)g|@m*es9Uv>1d? z-eGb61=0bP#naB=drv21F#C4xa(#R&$EA;>yme`uBc9d3IU4Kfb{GO3S|hM6@Y=j=%4G+n-%^(@G#yvdD=6euTL5`1z9O)?Ly;SXmC^SsqK z6t~ap2q`f+yafdG^EJNf9ENq@Gz?*oWoy}mOni2y1h||HsuO&fzY}z~H^B{#!Tj>Q zt@p@+#Hu@(vSHF{OGo``MZu`1u|OKkU=4Mk@m@Q^1pDZHG zY}N)8S}-SnvnKR0tCRBCc5H7mX1G*Pd(3a*ai6OPApq8PtJAiNltdd@Z$KL^L?2U` zMV@(z);#S$Bnq|dgtFZ3qd2%*!pV!J^3j% zY#~1N-VO#7t(8N+RRhhAGdvedCmZ&y7TWE77g^p3_L#3h491cfC+{~VcyN2?ECkA9 zz9;XtWBDjAJz^b8PsP6(bWze9c`s9+I9~jZ$QcHB>#9MF*^JB%gEUOv*d5su!8(AE z5ByY+vvSP4B6}sNYpT+5_DAu0^ne(d?du!x_C{RvQ7+fkGTChYI(gem`cicr1RqL7 z8wNe2kstxlza~gNKKiw8YqL$@AYfg#2(u^*L6~%=>gG{7qNPTy`FLXve3irD+)3j# z#d!ov@v@MQ#dv3DgJ$pRvfzsGAQRCVrGnM_l21Ney}XUQp}ChIh&|FvA6xium(2)& zpHw%hrIARUUTa6V5Uv=t-rOI0cCo|094dywJ2ZNjEpx$G#=oJsmJ>#a<`Xi0xjTaR!g~p__OFtB$;(^5R$3Z}(z1E;`(X${fjSzh{V*)K# zGblvsccEj|5sMO(K^v7tFo0J3;Sw*k%1qiJD)Ly@W<>2809?%HM)h&jgs$@;7|3b~ zQh-T}Cd(*YLFlP9>Jgd+wKr+A0FjLES_^g0&boaf)>S%p1lqqGc@ODZsl3VaD*CYOvN);3u* zN1eBSADoa1&gF4RgSRP-uws^Sq8XT8CRkYRR-}@{EQ%@U8Ne11Obj1}Kk+re5;i)& zPU0IUHSBEbUrU7l4EDda8CSh8Gq{=!e@YRE6)Fi#Y-ZMp1XQxgKI7|PP4qra2+ms( zMica7?mWyeOg8d@00T+P@3|SOaY$^>A+*_dh^J}@)NAl3+$SLqIJ`bqI0uW-bfb_( zAG2a9GSkjlV(-f;nsaVXvf%Ib>-#h^O0M^92=ng_X0YrJyWKC|3VOGQdXMvo#f^?R z!)a3gLTd7Ht;JG*LK93c>J13Ty2_LG>yvQ zVNpVhXg(5l&)E>(bjr7nX!F^J7d{K+bF(EC1IIX{czP3d9mz2&(~j|N_t@XFWX52O z8LhPq_vh7OO-4duJbD>Q{@F0P0YvGYZZp{4?B^4y?JsOt9Vs&M!d#iCNBnS@MIt=PI=DSbGF?1 zV|SsnC^hQ4Iq;~X5AMZE#>mjpj2ZZOIXz)|XD?U6vzJ+0GHN3lb3ow66V&tfr4i&< zQ8nvb!Vv6c;q>|Z6_znuF_Zf^@%uLS$htP#r?~UekML+JOacyudEGl z*4J2{zRR~gTP5;2e#22 z_n?^KqMx67;I8*sGT2@Y$-nVa;0~0;<%6sVWdoFl&hpVYxAs7-+maOPt=I*V4oE!= zt9>oIGL0d}Lc3$Thg_o=`SOT`&ti~Cd#{H)kZuJL;(DHUzq#Wd_(r5HM>;r?>p2Ef z<-%fvdM8ZT;cL-albAkOG~6l~Pl2;CTEo{m(M4N&$l^JdK+1^7 zx-IS|VZ3^$ya-oNT+lzTzhkE|bHHk=@Ac6cbziy8$zwKTs7g$@s|xp(^eH0-`>=1m z@CSYhxC#h?pJbl4)1+K zi{Z>g*@1~Mme-HPaZv}oyB%pDlIdVCasqM#e_gn1d$!^-drk+^Q$n*Y))&ubGun0- zBaQ(&fTmQGuYKLs=Qz88-}l2&ka&3jz&aiAvE7fBfAiZPIei6t`|^2!WI@WHXa&Vx zfWW-1ZtP{>^!?E?@$)`pbmVqy^^X0>MV^I!WXxVh-h@^c)wjmjqt8Ciz}4MNwg1Q7 zd&OFoWa)Y2u&dn+TSI6dXgHwM$QKa=>gI|S5i25+kU#;1z!w=v^L&UEt~#fyGK-nn zW7K>SB*@cyGZej%muTb-p3yc2>dhdZux8u=y*dxT)3UgX-z^)W|x52wdZXVV-ax{E$ZghM}b8cqzKR_5-8&w zPak~Y@mx<{{4#(3m7^BN*1sDl+mNueINF75CC4qXZZzQn%af-XZ;4Nn5I`PJVzw%{ zxrk1yN+^3{aqg*)D5Gf?6t2DaoQr?|OqTlyG;c>`i9C4g`FQ&Nk_Vr8;_s~o-~XP! z|NO@uzrWu8vDKeHez6{W@4HWjzj*rW<@Mh8$M@h1&(>bg)|0UweD9AvefHJo@B3Jf zZXSH@N7u9GkDoqy@Rr=jO?dEq@A{K>zUJ?&zlopgb6&bY0yIAl>_{@7Qp@W|N2&s^^ zg3XmY73e%+3YaJBtf{62r*3cNvIbdv%n&M?_mV);hFk{2f|$Jw=)1ObqTORE0J<3b z0yLI3O1u23N2hTtvaG=!t$jn?jE0+jb_RlZ~?tn>jZQPQ4B#tAwoJ z(1%tU8vLU*0sgHGfaxkpL1f^hLbH&W zOU)BD-3rQL=qRKkBRtW$88gHUfePWko&oS}^KKlCMd!)`WLW++|$3R9>7y(OlxkP*ttWmXwewauZtWMpvS4vldv z&6yofX0)WnoRw|^Isq+H=!uf=OYSSd$}mO;^4iX85(X0StZ|LHc8^0fUjEFvBQdhy z(MjEHl5j-($^x|aq-(n&c})aAhhBMqAaWk?dr|tZC*{lx{U=ubz>8 zo`%M*z#=hpMm`ncsja}ICrlu719)(T|NhdhXY~K5to9g5E`RP^h0qu!YZ|@|F zNkUGx(or8Q*@*OE89KR>{tWbUp<7=nxkjWxpag=Z-8e{DGmVSnl1W0Uw%zt*X8`0c z3;?TL{`^^;?75J(0Pgr?49k3Ax=Ki>vD!RAuA9~loiBVwq}rmsD$G%4Z4fGf=8Tjg zB*orB+-YKd!Pq0vH9hv0dr4*Fh5M=ine5^6>(36pDg>|u_c3Kya3_O|$4O-wnaAiBdb+%GJpEL5;&UAMYE#N%|;^#@3g zVQZPsUf^snza8P=F%Z99e)Fj>a9B^~b#drMmLM?>nF^&ifRtEubu=5u9J8RGXn7_Q zwn2Ist(6i(iJR9EUP56WI*)>`;wEal;VofXE73Xlbj$-bK^0zp%cGOzj`b2L2zH6y z)^v;8M*#lN-K5O4!_K_Hg3Ao#a}_?{($5jUHw8z_++giK8i4=kh|I zTSYq@vMMdFIka4U>+NS@vudp=1wtnvHP(7O&(bk+;C+xmS8NynFyT;#1#(!NvqOk$ z!pl1Z{&xlRB!bDWEm{R5=~%-?w6^g8;q4}XFl8OfJYIg=sdBim+6m5(1G@uIogg7# zts3;YJTB;U14%mIM@L3Ij+m3#Q%6W%3X{9BVUOU)M_)&zH-@q` z1uv4zjDcY<1m4d0HWFxNXK;Z~aLrU&A|*vGzn#yb9Ab}HggIid5n$ZpRv!)>=XT9MG~SQMPNoavDVDx}^{!%LZ zjf{FSMF|jWamOAGc)$ElH%He5fEE8lWux4>%AijJP^U$7#0ZMbMS4=%5hD=Gv;wl~ zKD47xh494Oxz^gp;zuna8S91Nd^&BVJe^uA)yQ5u*hSm&%l~}d?6WEeUTEGC7@Ec$ zDViht1L?K`id-YLB*uhk17Q6mqLQ&V+o{qj3r?wtYlcp!u)t&wAwfR8Ow@l5>c z)xn1c0BJy$zqgXqa7jW|b0(U!fBM*Nw?6+8gbGt*>DZ@B-vp-awi9p2b)X%QzDPB9 zBFs$s<#(RC)4ZUzYk};|kOwZDZL1*N0a(f$Y*g*3*G+3X0pPj;)`uwFQt5}x z%E2rFE4L7|FClGhoDAejgAf=>TE&}9q`fP~JvmJv5-JTAFh(&dopqN+UcV9#TP|3kOcVGcAE0iaQ>$5N~v$?1KhO zo1s;m`P8(lAuT?ocL_ow5OmMW?|O8eRL>}22+D;rC1x5DUTJ>16bee}upJa+>^0>a zJ5RA^q$pFmQFm#Yj?ZV#ypaj#P>J`IP7Tz9Yz=OD(NFI+ zXP_j|A8bsk4GD5T77bLe+7=MD!uvR;UNY^GicKtIjet)8wWW?e!J0Kvf*LMt#U8A+ zz%B%4l^_Ko7oA@4mW9hdbl&W|J_~S)5d~9(l6W?&#)`Qau!RwYR9c2vx2$m}76hnN zfH2XaTG6GcZ9{a9VNk*D*ya*CFhtc&2!#ZioB@Z{t^~TN*URrdb*G?o8b+>?Wiq>X zP4z8&;D9pe!D=maC9An6#IGrl$_)suuba#V2~= zH95pgGKp|rB4r@_D{_uM)W_uvz;ui@b1XXr!LD@qy{GPk5IP-*PhGPM7?O;dW3ZIB zpH>*w)?|woNhVHwlYvAYPTf$7*|Ce^hM5aM7Wln29nf=(2^$pl&j?{MjFwDu8yO(w z3ia~8pB>yv@EADbX{gCV>9;Wj;5~AyI7S;}AB@Z+p@#6fHz7{Px70e@x1xK5E0^OS zFD0rfHiJ>}L|0DhVx<#$3qAnbORt`IoBh7?q}C7=&gE$jBGK7lZ#pIsM{6VvljO{@ zW2`kD9}<*X;&m&0Fz}2OxRF8(29P(UEpo{77(4V{SBJ$yiewQt{Ge-Qd~Yj_aryn{ zgh)0iNVyCxNl2MsAdj=Z=6RaUp&wH5UbKm(RNGacV~h#;4yHPS9~xn`w3geUnX!3g zs0I{iumk9(Bl1lk?KW}E0E6Z72hM33VxUQMEIDxMLv8~b{Gs86e$NE`2l*F6YC zuVq^&OpMVv+0VL7FaO7FtyKr^&jdJO9Iuteemu7$XNUw#G3~ZCl9x${Yuaek4f;X~atUoGEgw3Qw z%&d{T(=mLsfGrtGEM9)LBjqL9io?6&4G>N8Un28 zS-0yL9Z$gJ|2ijuNqYtkM0PSk^HEJkck6o;N@dL4Ak4+uRD?6rE55Pb0X z%8U?g1o2YLI*=*SR2`6eTigkjVB51@{?Mc27uR$f9zv`L>=Y>8HL{7uDRL-CGMd2& zWaN9L z=vaAM!+F}QGwQ1fJ$CuVtlf*w;V}%cpgwbj@=Ql}2mFj;m%r=bqjw*C|NCn_`=zfA z79ahr2jBndr15WDFPv}w!1eF^;1_;QfBfVZKl)i;{}L~Rwd=4mupva`mW!Unai^2; z2``6!2w?k?3E}WgVqrq*iqUos<_y+Whnmu?pu5Z=pbCw972F(oQU3x*C3|+Rzz`~z z*ju=oU*GpU?&bXY!53dVednEb*LeEu{grAa{%`%IKh5Mi3}myJxC_(5+pJ2MF_+>c%~5kHm>Psw z9$9P)2}>Ho6NKlHJBsdy`ET8}D-lvKSvc1?9$6s_k115Jg4Mh3NSt%(d$k%afA_;j z-}7;={Q}vjdS$yN$^gE|hJV}#NstEWG4Y1e)^dja5<>``wlbr&oocKrOiuY55_ao# zFTzH~%xTxyWEY?i=m@EC2J~_|`{U z{H(B#dD%gtz!{Jd0Y;>K!JybWBQXIX&k-UoKywtCj`%hwtd5N7_7){YMEl89=FlwC zqft{25IETobkHtfB$d6bVQ#jAjS0Tpu9n?>OHJ-vc3*hk`M+n+-&}k5{OP^1<>s4s zQ(oC}Z@>QNTkd^t2baJ1+fi(6P^wTpX{?Rn6*eP-T1&$kZ|uXx|Jj${_~@(u-bG)3-?yXSIFL>R)vJp1%&xj~N-2%( zPHWEkToD~@Z^o#&kl%X+yiRfiV@6T@%U&mTaFoIrG!^x*o6Q3IdyZwT z_MWbfnfLq|-?{qVI;;PUUH_gxxz`lZFIT?Y=qpSAb02)?qpy8RX|lyu?Mv6l&djry z63DC|9nNXAI)Qkl^>$Jr0`EDg(9sZvsG%~-G~PlC)w1l>OIm3j4yNMk$IlshOvknl z!W`PYxRlG^f0|yQ<3wJywOs}L3Jkl{_dHPrc)1w5wn$5K)H!5CMi-`L6P*$nWaH?! zo1Lt0{vpXJ5)%`5I=--x2(|^QPAJt_z4lOQLcsJ7JUsF`y00^plenv{HHS9i)?IsC zodG73-lQns2Sf`r6|pJ!*oK>NS1klzhzvzE6}H9VT>^N>y=bH{XR0yR?D2Hlt<4eJ zjz!|-AAI=evmblANuX81J)Oc`*mI~g#5c2dsYu=O&IEceUs4~!^c+GpA;Lv7Pii(z zx%lz?L}J`lLb5T0o@NF$5JeHj*Q~G@Xn0rD!`_vhNd7s2=xufe-J{kjAUt_zI4JEUw`xSL{Pw)G3uFP+r8_%C}ckj5Duz8W|u4JO{tj9n(YMEY^ZHGH-=Er>Z+f{2 zuTGUd`|=wf{Y^gz3?A8vbeP$Ps=6`PV^7@+EK@6EH%cxTfe9e8lO?wLl&pC*P&ee) zjaUusXmC%mGuWId&UX+>pB)>mEKfztF_Uj*{qn0Go=8SK%YEt2p)zthmSjFZ5b~Qp z(b*&x(Y%tQh7@B=6`7YXX@LOFTrP94I{mnq5p@h}a|UZn^g58@3QdB*oSxI5Wv67u zU4He$N1yrFp1lv()tCC?Cl6nKaq}b3AAQexC|B6zXqTyue|-|l$f*&;GGI^XQiA7` zxBmc1#&MJplM&HAw-nbp24? zx0mVaq5P}Y^LHOVdGYpm`eZ+T=WT!dtUu|ub=KL!-!L%W^QZad!&+V+0e|-8H$M8q zDyg?wa>DTMUO#{`*3touBkd;GyAr8A+X5h2A(o|LTFNle?(im5kUPBRq-pf#gm)JF zVu>u^KKdT##z3Unxur$Q3_(PfUvqb33K7-Dap*^&0bgY_)72d6>4<9v0A(n%MB)s3 z)|=(I7){TlrWhk~CGNLb3&@BZolX;LBs-zbKvo6EVv~B|#I~eB=-J9~$km#@@5{Nf zxcq^aEBpO-zxK}KCvQJ~@BOFGUffZe9NI?)Slg0Ynx408@adKY0oYPYcW%3{=Ce)d z1;8Z~v9ZXFloooH*rrr6r~sR#PO|1?3nh8dL&l*EIS#=u(G5#R*y#1j2erx1zO6CG z4xuz?RphAGT`K3;P7@iLW5*UBPJvsRnJcTL6B5;^`Obz1B7S9CeAkbq< zgM@Bip24nBk&2B-R8N`AZbI>^TYKM^bLXx7?Cq_+<7UEYAf9WVRP#O>tc2N&u3y^` z+K1+12TNO9+T^ext!g`An9q1T7@?SW9NqDmtRo07#7j*81bxy!*kyMx*rPyPA3!DY znDOdn3QphU!H%s!HINw|4o`^_Yk}#pb!<6dv7>eXpJ+|TD#KFAsY;t|v6&agLbR&+ zMt0YVZDv4YlleuCD_ehPOZf|1QqALf2y)+-bLY+c@`o>*w{P$3FaPDQJ-T8Dj-2+E^K7zH%qsWH6?(<9jCXh;$_bkW=d<2=p`LR zc{Z^&v`(^-dB>nHnzsc2DBzMt6mkHN^A)Q~NJT8TG&r@v!?_lf-S_3(d7FRmj@x|3 zzIUDd+YY%P9xi=~HKciTSP_Akw?Ww2Y(OgpQuoD8lZ_I zm`+HvbFe8S`m`f|aC<*{$(#kw-Mw#O!L82B?SmeYX%V6|Y|t?VmE%+Yqm z2I(J`bz3B26<0B=vj??JfsDRL>1Sw=P`eA%iCoP3=xAdBYz`K)MYXybF+-z7H0tCE z5;5@MgR3{1Z{qFte9w0O>+SiTFX!ske)D44;A*ch`Wy{kJkyX2V>mnRyPOg+!KswA z3H!mtc51ycitiFNpbgwng&)d_5oaxSOOY6ycDmTwAx}9ic_&3ucPlfGE+c$n7yfyd zaufANzWghH<(DrE)#U4MJ^KD{r5E(zulXfsmwNcq)sjyieE#YC9Qgg+AO8B!e(>dQ z{>N@Nx2xa(b6@`c+uwBci$C<*FTVaLz5ZJteg3t!@$uyX6d-?BGzCIK>LkO__J+<* zZq^B$MCYZ&3oaI^H4)BaUS=Cm$z!WI!MrzyrfW^ICl@giQ$ReL^mA_`0|Li)7*m{Y zjuq~gbMsBMrq?=D*KMi${s`Y}OSK!hNw2o0Zol!J-X%$dFFM|xXf*dfVb@ts{V?bnI z56fbN0fk!jnq!VKc~zt~RJzo%7_CPVU`IFbwr!2H3KO=hQc9hy{22)*C_*|PIRxwS zYnc-aSy<&so8Kdcvh}zVY)5icr4iiRcL{;)9%5=KW5UofbHq-#<@WTDl5Gbyw84Yt zFcm@)OnN{YPWXxkX+44C@4>L#m0s56*WIni`2=(vKW%`1+Zv$ShXe+7jtm=43V%l= zU%a*k(N#&Q<}k3@8e_NE^FXs<0IG`+)0@gjGt}N<99^6FoM~%d&K2_tsYgi7gux|p zFGz|KC}-~1J+u41oI7vrU-9~_{gLNC{Xe{SNa^J0lSyr5fkI=y3XD=ne_C86RCz5c46%*YtQrC|?beEF+ z>gH~2sl@f7#rHW)U@cJbFSDNFl)cwz6B89llSE07>R!E~cEE>}7LIW|W0Cq|ndNvO z1w@vN)ahHI-U%d70XG4~BW1>&$F(l@zAxwQPTA`>_f{kRm8Va?dYAGE?vAIuQwFt* zREKy?f96vRLZ^8sJ*8L4Xec-)- z#lokPguZKCU_fX@uIb%+=t<0mJ7Yu3qziAUaLe`^y65}8oICIDUw+5^z2nY;MgaUX z#c0)LB9@8dEW=SQ681t!GTspUk1L_yS|khUSe@IrhKXv1({Gx0*l7xE0brL?b>H2mPn%)iwr1FUGg03tpYHc^u5Rtmyl`UL85jW) zxCtjnPvQjI@#Zi}y&UScnfduh)x=jOh0c4x%$%XL)t>rE!I;|#(TE`W2^Q1|r?GQB zs>5+2wpB-1OZrkmQ$Flr+fBX+=ic5oOmTBd1YE|?ZWYJ=Lg#h?MsXUo#}Im;*#y|pDA($Ly>Vm)~^!MN{_@Qn$E-l)AMtbO^7k3PX5 zXODs|x4v^SSb41gGaR6A5~Q#m2v-diOh_Y)PGAN@CNZmOL{d^D9Sj7WNRFT|U zz`H}_F-FO-EH!L)HK!p0x!1O72IG}AGy;Z&Q({;Uz6&BOy6hfKj`k$rbdHiri*u$l z8xY$*ca{kV=>*za>^peB{Kn%5*cd!Ckyzlfc@;>rb(U%Lc)b7&^bK}Gmv8KtRtX3n zgHGrUKtHUgSEOT6;~0CO(aOe(loV~x-h&LK@tw#~7JjCn4&&_do45+2g=o`27iT@5 zqtwQ5V*Z+RC^JOY~u_UHXuoJq`=YU4gI?4@rYqYQ6lHhbODGh)0;9!^UWCTU&!n z9yJyl3wR&TI_V56Iv zlQ?cQqmG=H-+H?`mCONJAKKcgd85bCAq|gB-mA@SxorV}(L$V!4}J4v^q4&mxzJ9ccyEM10$jH}v98V$ zs`6{5aOqdaoE?eetk@}K%tatC)78q5JkVK~zSm3^x>^oo8N#XM+N#lA+)E2PCyNl^FIkr!8%5POMd0i>+4FXHQLt z=OyI8*rM91D;{L&gbtKi-Dz|ebZcb>7~I9Tk{YSqS{}KA!UbH|Ch4x-EQQPOdidz) z-#wqa@Al-U-O`V-TYBGm>QCj}-(Gq5eJgFhdxXE%D18W0ra@zAuAFu){!{I}GP`N3cE#`1pnt!qBNMFHuf&%V|+!Ns8-m#at&ZS)Z;eEZh8lZMbOTHFwo z=iG*tL^emGB5RhWUc!l5XWwg?f-CyW?(SQPcoAcA{?*b@)l9f?a{iKflWM5#}`RXU|S&=|}?X(7W1 z5oxh4&soUG2}ox$e1Q-Hsd5Vjd^VF_jlL|*nYq_CyzWE_#pv5o+{G9j(7~OT-}CU3 z&_epX=a6oj^AB1^Rp+hMouGlhUToUy4vQ?2j%j~%0)6)M5%9LzSN z!7OcJZCXU9ZQ|_4iS}Lz7OQGhV!fk8YqMQ`-vOsd<@wpd%)_hD)!u8>)Ce!~37|b4 zz=z~zW|`j0W{B4IEJIokbIzJ)w@Ju>%7~jNE(U@#=@fv3z)$W>`0F%LN6s^$rFb4Zu$BZkk=AMi0Rc6VTKX{&z zN;Zqsz$~9ca$Kg?YMLsNwSm;%yT;;S46M81@`pYNEu`z}=bkU;>h1D#zT$Vyh4(1ALM|Si$DO!b zcPbWK!Zq%igU+3+MFiDmwIv#qOOlq*Sqf37sBYqon0}T{)^1(Hi7E4}4Z>jayos^rO> z92<*Ri^G`NMm%Y>1XY%jV*wPLHhb|tVKS4nL0~?!$0{kVuH$T-JN1;x9#(oD&B^kc zc~JZJ@5&^^sL3YJp6mEFL~vbmE)R2hg>Pa~y#5^Mu3s43KiIq{^X zC4uQ6K*}&0v@iy*1PoDCYW`4W{!{bwNj4{ zi^S(*L3lrsAJ#OF98>OQ;PH}z-*qopRDY~UJ0+8fmf$MRfCAV(wjusm?jS8jQbzTE0!N!i-N znSssWVGt)gEyR|$^^|sBsUnUg6kfOD3sQwDI+v~7g(#RR>GF?q6(w77ngknm4@I^G zFw}8)p+PejaZh9REJBpL9>NDv3@xVMX)W9;L+OK;yaiN=)*1sbqAN&*;hVMZrfaGw zS{`B^6RDXy>E$0gy@Niwt1uzXW8z|@Ug*$-viC-~q9u{@?rT*bEmn!lNe4YFSHx(0 z?Lp}G%1l*9B0U!*V@J3>0}O>xoTrl&;S^yCLIv27 zX6H~660QI4F#0!u;gMz{taRnt>KZsvr#7`bB+9z{lP75~=H5!*+lZAuY085`4L=i; zR>(Gc*HqI?eq^UKD$8mEPgW18S9%N+gcYP0!fZX{Ox|?v-3SbmrjwqJlIU8+S}47j zlLy%@|J0EgAbHW5WX6t2a0}8FBCC?bhToVI3I8||kJ+Zwl(#b+;~bak4Cm09R*0>Q zT~CfJA;a5@3-nb-j6Jj1@>cM?tKtW&wmiqnKYfl^gy*CPhnLjhQax+|hD#%Fsf8w? z1>J|IUS*)7G1JrLy zE`Rh~g=dwtCX1uaFnT{Vq@|g{a%;MZ?od}FH6fQYQlu#r@r&)9OjB?kRNP5g1GOlL zfKZ`fLrbf~I}kgcMzsPzcAQk-XzD5L%O87)zVg$0{L^~;(|Y`l+gO53z!Z2j^GuXM zi`u-am(iEaq65xza3iRJo@44PK1F^rPJVNg(sMoO^VL&bJ?oIz6`RGBCM`2pPGGlV zs3S9bZ)~APg4|1$`(O9h%FR)^fBVYr0efQ-B_2}nN&;_NHME%HUM=HP&XczlRRrq3 zM7wVm4aIXI7^3h7GFpbC#M#@(CL3683|eaSwOdu7Vx#X4RwCwRZnf-^>-7WwonVW& zDz@+Y6MQ36r`*JF6J8mTeeQ$rd>5#T|M`IK){zSxmPrtnefJ}4L-wgJl=67UejRp7}R>h^i`TI z1E<$&)*4hDA9@LWyR}Btc$HoC^3Qw{)Wz4tntQ&Ss|Wb=^XYi;?D3Pk05y4e&{5UO zh9p3G2}hC@)?Pp+G%)%_-jC!`ad0!iDp67ZOEDU}_z9T+VO1}rH4jo1b01=>hZci# zaVwJ6$<_>#-ZjQtEZwXZm2$1_UcMj?`+hUDM;O(F~}doPWOEX zjLaNzmy}8~kP$Oc0812NH$3>3m`4uVQz03~t4k!x99AF&h4%?0|MJg1{3Ogo{<%-5 z5#N>5hOm$`qRAS z1fh+ySCl$iHm3Iz zt1e5a$3c{q)L4C*B=0*;SLEW&4LN^-_9`vGznSowQ#Xqir|yt6)ez|WMW+9K&Ru$J z+0g}gz5I)x2-*9;bY7>ft3?aW*}WHE>jXtjCx=FA+HQTsM(9OKv({4k2nSP5v%|6T zdz6%PwRZ5m!(+6X7ba=zGt%k~9OJ}Xt4%msc@b%cxCRx@3Wvuft5wN6hL%Rk z4g1!qNm|dfMn!e7YU?qQz|(c@R4f4>YO~jzea5}ksITvN_6_s-NtbmO)(qAOFz`!b zQ}v1&t;=pYWoA#c5(-~y*`x@?mcm>$Sa+v2<*vPgo>@7>7y&5`dY6a*X&QH~mc&{c zDf7PcQpHDkJpLTpcoxpyxR!~Hmm%XRbn-Br0N!lRhF*t6+-Vx9_ z?*BM?!|OGOsaG3rBQ#$6AqlcZqh-BqOWR?E=`EK4Ev#vbJCTH@aV(B{$#66rEz%nS zYi)!esi&QJ(Tvg)`|Lp zS7xraUw;frX{UGA3qh8MJXe$erlxH7twB9HGo2F|T}E0tTgkLv$c68v`L02!*x_j9N^E1q2FNyB zo2iCm4s1fi_JDSQ%&?6nJ4@YL0wvq-oGTJ8pj`I0whQ@K!8=0KRA;H$H>?Ay_nlMD zd0zhYqlmSfdaIoSmE;BoBULi?wo%S*r6fOe(H+MImG7VSW#M9HF#~g zx>pZ0m#Xfbi-=a=KGzu4J+|484A*tKQBw3Yl#|HHls9t=jjF+6y?y4?QjutZ?``BA$_F7$Y*rA0XRRArdEhV15M%9t|y_5hwWT7t`EN?l)u3mPV z=G}Xuw9b)12R?2QN9r?L8$;IjqVI zaqhmCtW^w3ZP${n%8LTpunR{drq#6ts`p54bhTd1o8ttDItLNZa2m_%)=MeMkslw^ zmO%|5R(EO{WrM`JgCw?%sT@LyLd5VAQg6eybm-=*%PI7ZXbYO1mfDTZ1f zYZfOg2Wfh6Pyl7@MaYhrY(u`U=peAtMvp)by7%BkdaQ~C&Zxf#I590276YT9JIEF` z@F3T9gaSEB$y1n)*dq1iJ8Lzad5c+SakZVaSrqFLd_4)eH4i(JrF0wm8OAoxO({c` zCnXIMw)!ZROAl7ClVl$<%q0e()3}*hy;>#T`_41}iMQYL7cbVcH^W-*_mg|0hDb={ zU#TH(zy9boM4u9=7OE6YD^^H3WeG1Mew2n!d4yh;AzbLyYg#@u^iUETGS)MmfHq3% zJNLb6>?=_7Y1wPIsb;mxjL96|z_e~%%8-kZJimc*hnu=upX>v@eL?5KMP z&AM(*->+ngD<<(13e7QOcnA^(1S}5$Utc`6rLT}eQZy>Psm|goq#dwUAnYeR6rq#u z%fJ2bw%uQ=7xP9BnC#l+VRY4=IaPFOmDNIzl@7TW?YWjQiuxMTTaCH|>s(N}6LIJ$ zt;RgcJi)}P)N(?pb6AE(ZbxO99nGcG)h_?eQ3;8q$-JdC^R-a@0Jw+aqH|8;)SVgg zl^H`>Ici^pa}r7C3TDwtpyEzbR%+f;^bEldq6117Z>#m~Os;B#rd&xV;>R1Y`MUhO zch?XfDKc7S*`-@eNp*}Yt|padepcvHb#V7bgB%$sB;86pB$EY=xzYR{A(b&`C@#(x zqVaf85}iGct$6}+SF&TJ!TWBMlv;PF<=O)JNqt{kdp_^^Q+qS+!*0s!DYUoW_=x)u zOY7rZZ<@<&t+qfGJ4cVbK+VVD8D9O$Vp>vMmO>6Ncwk64^8vJyxwxjf;ay?SZy^sn zwq0$_zR;cVJQb(KP6|7HWovEsA&u`YLzET%;$J z9k);}fJW0Q-G|;1x};6W_O(`;W?{`DlE=uwrdq^G>3OnJiCcbg_tJ7{R*4(5 zkfE}#I941pv^~XJEUlC4o}wbz>?7wrvy%M+P&t&A=4z2}bONs}j$FaBHJ$3RYJsmd z>s*y+gf3iNxO#k6>7F@uvI*}#8Z~+8IWH}HR+Q{CGV(` zlI3Mmax=n*hL+tkf}S0{BPp&i%B`fGV8SS5JFq@u9K@$yEx#{44)w|U@fUBu1Z-UQ zZ|?cSdt=enE6sfUm^AbE?sWh6&R}23FbP(|i36y^CR2=hqOb6;qRfrcoRVu;t|iuN z5sX{6ShMs*ID`lDK8({k#Mm}PCXy?5x@9ByVbvn0+BuEY+KMBDoy+ClKV2k-!j(yL zO>_6cKn{{%2r@X~99SZsk*0fIgVB7iJ&_ArMbrnX5MM)~^ zDM#XJjIJ0>OOrWzsDAkmP8TWpYKl^zE$vHj9C(lJB_4QcUL_Fpu8CY=B05u_D=f^t zfjL~Wf#7}VI+MBRr3Md%YKE!k6u_GnMzG{fgt(ZN5b!snM{xNMkKm(*u}8K-30h!$ z%|uPyS;~8%3~6QT*7KU$SmYhT`iy1u37dH#hv}&fME&O0dT>v&b7@PbIN#wUg$ZWP z+3G_4k)aLEZT<2eow@vsO$zMa)kf!m>;g5?Tuf@OD*%Siq(c-9m73a8ig<9Q9MoNk z8ZEaFlF8kz8x`m;nApZR0hP| zfd-`&FMfDhhOBdVprYs5h5+ z+(TvORi;UfB{{(^vLU4cBzIjk)+Dj)ToErcn!q6=uwroEOA|^$^))t~kP)SNb4uAc zIgeldSyrw1gUXw?`X2hE~#`OnTX(#I@}j~wI%v0AH<|4i~6qz&E( z!j4l&N?VHLT=F!gtaasB$o_@wX^F(F$YI8>oqUiM;m*b2JVfiT52*F1F7up`fyz5L^qQ(5ls>t3~k>zn>-wUyzDjszN<=6zsD-wVUW|@TD!fO8^g8}vEJ;U9m;dVFqhI*3 z9d;gk?qwnW;EVn7lZWHo$2ULn{L%N^ww`A!3ZTc>(F}pF=ytD~C2gG?HcImd{G!)3 zwT+Ohi-24+Y=yI0#RXQ8&!Q)g)txjnP{RZ)C}bNyVr! zx7A`9TIqx2T~qX_fkdfb>fP3fxJ;o^6I) z3|@$oqJNl9Xk`y8Pq2X34WE|>@Hg7d_x!2dao%pP#=E|C`}HU8yv=EjD8kr6AG|zQ zb{o@F)Mjlv=iE!f!eVJw8hHKSl>#rUXv^AYm1#9-wN=#`6lR1;!8j2OI<09AvM+b7 z%?63UPJdr!wd?bC$krqLDpUd;_)kGR)4RqRXCfe}G^&Zf7;2&tD`9P2tMbAmeQ%R1 zJSA6xlw5>3y~Rc!n8BA~eXrbi3S(4cwvdA~uT-h+uU6X+ox}F}ad`Z1Gc9`W@!!7Q ze*B)l^QK|_zCX!34C~>_upT~^!*^NIvn&aik^9m;euLULlIM=r<&$!-K*)s!xQXK&O97jC?j6QO$I#;x+n@Xb60Li5y`qj9{ zEQ}*ZKK_=FD$$tB(i)fl=HczO697Jk=!jY1m#b_@cBAAt#vuE#(C~{AQf#0QV=Zc2 zMzDTDyOLCdoJbM|nwmb8`PLW>0vtf~j7JaUL$j8s@G#_ZX1M&fpNQkle|L)MZfyuP zm;{AH=9S!pfg?GVVMm)03U#3O+S4wMe51vjy&c8*p3=uUhGW@v$*iKS#1xqVBtRxbbjE$nVssXbxkDuQKy zkuj7}?drlEjf~2=C#`cP&#{?NQHA2c8_+|QvIBQoBjH#%^^6|Yn(ew9avgG6Hx1v= z`8=o0P$wx>GhY7U!$)7bTh7wD#sC<`- zX|A)jbxidf*%*Q}q93@4b3`y^=FO zU_6o)+Ojm31;b+-1KpFoYK5v=1SI&A{0CLFs$>dmvcbcdmOMB1jP03m&N=6tZNP9& z7Y=ZapTIfiY&>g|Y;vE&mL*c&Y=P*D?z8tkect`P?|-dYRnPN#%mi`^oPhAk5DAT$ zb5aQ-Lws%}C~}Vo1-cMvc%`!nkqzx2Gz4%#=(~IR8Td7FL(JS?a~8eq<-GAx{`gZw z(fQyzZ?eyMWe-m90>Of@*tImOi?35tmiduB$e@YZ?EqfU;0}SMlgPo{)Wo_yOTf{H zZ86Re!^tFxZBfn`P9ldgP%*E1IN65#hD0)QL!gG1D2@wS&9SAxpJd7B393H8D#?u9*aKvq0Z&w&j&n%DbHr>M zP}uew9zjA|hp|m;sQV+*OG9g4c{VZD*h9)!nWwQ&l<-?)2eV%yr z!k6=`u>PV2wp=bVavB}!H<-#+%MlPjt4)OO+3JB(F?p?vFiu8$6C z0I1s;rQ0r@oz+hFCCFT&HRhh9O@plh&d`)To9z>) zP=U;y&n1H|eL2q!oIhxR9XFK9`kkt@|lUvUbZp>hlT)RgeE50bar+fTH3x?{+< zo@`AJPPY+?4~I;kkq%^Zdo{E=p;7U$Bbd*}AQu2}i~(&%9pPrc1z8_`i=|yr8))b^ zRH`~12cZ{5fzO2A_!P{{e&Dgu;^%wlOJB~jhx>)AZA?LLeb;ui7^8FToDk`O1(elY zy!B8uFo^qX(;!`6oHBx2?Y$*zv&!8Qvv&tRjKR|-ZEZ5mD@p6Xd}ENcGIDNjM?8A` z8V~lJZ~eNYp+EVtG!(1SGl2iMKK|C5vKD{(v){uf;LR}qAKXUx7CM0MzJKypzTX3s zeS>1tQBa6gG!6(n#_3v>9D6ltg?aG6VmPEj(t>Q4(dN=ASmrccc(1*H;W{elA`{f1 z&{{3rzyf|H(b_5~d#sue+?VTc4XwbB&6_2eHNN<zp1N zKAe6cQITr)i3(}XvAv}uaZ-o70V-1D@to*+65PdU6Fi`x_LPtOGyV7Aforh`p+{O7kT>wrrbDzXXDj%n9g7_tgzw9qyc1T^Oa0Z-$w zn+@a`EXVYvvI;$Z#0sG%&3&Z74=DmG7|kaSbuRJ6gRIt&5rvIO$~hkY#T^zd;19K+ z11E^$(Q>Yt4fQ2BwwQzG(i|PB3UI4qoSsx*Bdoy6t_g`~uD%Vq-Kd7G*5z-()|@k^ zWZlN8D)K0Mv&mTc%O3!YKy$zU%P78k@|=8gb%mr;f7dV>&V2# z(`?am9&HTT!0C)e(Sg!}+e9{TW%mjFSqIJ65GIxdOZ6^LZCFE3!o);wx#*k@2@B7@ zPxYeh*fIr%4gc&z{B;`0zW9{ziF@qXj`*`E?LYgKx4-ktuYUfgKl_!p;+J2&;pgI) zU%m6&Zv}$pleaxbWHfc(h2Gl?b7D9kyIF3BcCt{2CIpfFZ0!R>k-29h1810EwRQ(l z4!RI4M3Y3!N`&%cffy4s#_jD94~hkU*z>oH8xs^-L=&8oSi>8<+W`8A9_TL=wR@t6 zHamN#CMO3O4%^iPAFp|1kxeC3B9t$?rXw4Vg}SXqSGm>?PE|@Iv83Fsnp7> zMd9maxHp|L)z54b%pE|@r>yb#Z|=Q_n1kXVL<@Wu$aaD3WQ=opW!noDkA-n4=t(ft z^;SndmVS2Rm2T^sa0f{Ykf=czEAXk-am9jtd1BXt3{8d&J-ub1`hWblcN&Uzk?b>W zyJtp@-F;r#3{Jh1poie)OKf$m(P(6}Lom-ZiXJxi-laA$*X`jV8hQ3|pGFcG?onN{HWR1F2rLI(nEJ`oNt=6YE0V;ZJ-L?L1(BF5kQk*bDy)( zikRylhskUh+Q$5h`lEw1_l-c{H!cw98?nOTyQ}rR8zS)f zUchTSk7>?nt4-JxWCG9C?#{T{P)rpk$ytzB8;I+eQ>`_yHXs-{Apu3!1yU)F$)JV# zuc71yOMo3dy4jstbz-faeQ-?eGP^OR_UE}F=*Pcn_|J#0@_GC3rSIDtXqNMB`W(#? zfBxE8g3uf-^4_Ly{2mUw3D~fL7{%$>*P}HsAVBKF*)>5SI|jAIh(!ULq$5hKk%c3c z2K-5+FoZ^KaK$uSrd3Ts<0Lzco<#85JwGb|mnxoVF5zyw_ejeum)SuL!{*EN65C)-90qo1eqP4si#5`vxrPplwly0INZ_ z0e8Tt;nw?|&}tzny~zpS#t_uGXKRRF6s8#X=+&@kH30ll_8JlNz+;Fpdu0pu8R&)aKZyChb`L z#5~~RBHBg+lO?261foSv1x@GL&lk*>zMMCA7C(NC-=x{h6|@if!Hy4|s^>U^my@NI z#2H$16|fK@Orns&JHkF~*<$iJDs>~c6!8U}V$IS%qrs*xI?+r<8y)WZ?WZaFQRuGj zdEA~KcV9SZ@cD7~g)is%arcX#Bii)LxGCW(?xVX(tc~}udbF5mkrN!0rbED;jL~H2@!aUL4nyOJL8?~S znm#eqIBSv6w15u|uy&Z!LH|K7uN>XN=Whv5nu=Hj7~m8~>cDlWF7gFQD`5<}a}AqN z)5JgqN89@XVr=Plm{+T;_!c1sryLA63~%HHN>^o+EesSerCW&CIVMdHKTn(ZxlcB& zdM|&)f6p(ydaK_3mDeq-FMSi=P%(X8F}c19#pD|+rmw*|{mr)V&9?D1*fwwkLk0!U z6TOd{gk6Z*iYc3FFU%|fXaV?yjetn)%hrb1J5I`3Z8x@KjS$ns2nZiAWB})kY=H(l z&#rUeo@USOM{+JG$EAOIaR1SVzD;lc=I$ERp?O?mHjGD8&@5xHv2r7&IZKv=f%bCF z&~Af=FK8hH;~~)WE#@qWHZ&%J=ye+soXX8z5V*YhIg$oJN* zz&lM0q7mN??5Kv2Zpt-vz0~O)%@mv zg8YU_!HO+w6`~ne0gbTLeQbm3)gJ%DQ`lP1S=SZQ&)I{hqi{H<$7+fpM8UI#iz@e- z=X9NXBrRz5T4;vaJbSVzY!|BNW3)LBwvD<&vdi;;L3Pxxi zX3B-LY7G(u1y^s4mituahCtQM6G@-aM6B7g9Sh6#Ihf9m^lTj{R}N@dI%Gq1#ReI< zFbq?)hvY`EBKbCY=7ATmKmMn0zw@JS-o$G$Bu_&Ei4WfU(hYg?62(S2=Trhm&b3X% z-udojuE@Xx7C;eCcQDnTNSYu=Mu+s%=>{ZkL+^p4F@oH;=;+gnba(KenDu$L_N6c9 zjhpzl{KF5v_bNYp_1?R$-qgBXXy(lwhc4I*n37t%cU)!ipmC<#O^I&<5GavB%03$a zU00-}gE#}=v~|Y7&|t=boO)0)bD)z4f*sJ&v+pq%SZ3`&)P=~S&%4~esmp!~)n%u0 zH7Z_Ekfxw{yp8%gTG}Z)KV`@O*o9z5@dOHaH*Yq3=Eh>8efaG@JBVSttPy0wI>ntE zd=7+~MfM0oXpRJN#~Ud=pF3(^_;Q}>S$~a>CJefrB35DQ%4oC|hTw!|_Qp;mdso-9 zt>$n7Z!|83OZQD2O$I4su3g6ho*Rr_=7cKdTmxUwoCbR)K}3Wq?i3R2ngg!)$;15Z zzxWHkYkpH_f0;VFj}0By(c2S-r3)S(gJN$%F#z%q$Pza^_Q2}hYy)XGB?QsyiHdv9 z-hfbqnd%(p6`QN4m6t*TAON{n9wl417Zk(GSLlBlhqb^h3pkPhUuAt z4a%Tzt7@lBK#2tg&9VZVn>4ayql7!O>3RD`Rp1O|1g{TJ4Z9Iyxq3f)K?i{3E^AC@ zjV-OR2{PAddw}vhfvm-57AT!`Ai5ovFr@tmDn)?C@|83$0@$k!J_DY_t1p7`(ys%Q@Bt z9k|O}=>&`i@|wd=tz)g7V>k~x0}=4}-|opsXWJDQl^RK)gICPjpzA|hh=u+{>ZrDQ*beOvONNadUT?}pFYKkyO1b$l&)E`J9VCQ*(dmA2cD+goc9=+ z>v+q)9hhqb&J>&$kN@k56Nt8n;NqcRi(xKUrw3dvTC#aK9X-7VZMCxzE??XUV@+#I zAr{+^{0aD_0qs7-4SgW#3=uU79lir*w{7p}ek4{a08Y>J$N&B9rx3gu-ekd7I(#Q$ zv?o^!ZqOeOQUK@~+TU~`zd^~ew+qe%lV~T%x;{5_ILs57i{n71-wj1VM~9^$aTvVT z!5U#8L=&}$eEdI8py_d)JBG9nmzjd_*2d?Ydyr9G#hSGnjfu!`GU}LEH1UA8OW_}3 zJ&~J~&qf4=KyqKlA$aZ>d@NzU+1d^HxqOT-OA?@GFywKF>T(wDG&N;*bT)v_gr3Al z?dnEW?eVAMDrTFCE>q5(O)T4r2EZb^9yRuowyYSv4H$EF6L4vcsg@xFWH&)K0uciJ znqkPX4|Se4BfvozH@I4-A!dli0fLsb8*JWO{qg(THOc$zX~ParVF*@En>7rcn*q+b zu$1fwkUm>J;Vj_arqw-=@+bn^v;)w{H#-sk_MV9V*TRzRbjUy>?RjXz_9Qnf3>tHJ z{DF4Yi)w-`M-YNu^Ll-X5D)=Eup?yjpq<$9!dWh)UAJ{~ zMCQ_oXHaFbwm`Ih2;z$HP=tnIE@|}mGuqeSDE9a>+tsZ())m= z%)^e9jM(tlBiO7tvSo2m0D~GR%J|e)X2N6NL<{K44RtH&0Q9{#TXKrfv&Tntove)z5~sx3 z{I~?DQPH^6;c7D)XEolXV#5`SAzu6PY7u8rP^`UL!_{_85D6hOgdIYlEPR zL1eBmCd1BxVH;jeT8R6M3ZTIV=)ndmD)T_^amoT7Ye&v9g9}+R ztoy~@TWwL9ZKKED02?)*=F87~{Nblni>V`wWFNDEW)JUneDJ)#Fi7J2+_cJhabz9R zNp)-5WI^6C7daHEan5N$wEMs-G69Dm?+D%D<)91D8hf2BIFTZs%5r9V{MqfMD-JQl zGh$|s>`eGnd-XMjc3IMVb2|eEK&OrzyCoBNT9g2t$N}Hz(X_;51Pr)y)r`|Gcz;Hd zd24H9B(*ShkTZkN+=w!^$Dh-#u@)M9vQUVm&IuWZc6Vt10-tZ`$wRAaUiB7mYZcsf zrHl^EEr35=5kbS-j74htOihh&IRGbiFeLFAPS)7~;b{}qEBvaDKet`u0U>PQOb4=? z4;S5CAc@gw?d(YZW9-l3(DtLK-*&7Ao(uUHQ=4JW^M0CaWTS^1#~u_m7vc&za-XrW z40}*QA`a}@I6fYK-d#KK`Lk@K6E~=0tT5^as%54F5xUfx;C&#uc(#U>BNh#0eDy00 z1JPs#___G)5Nm6>=gr2eAzZm~px2{x`ij<RAU2?#30<-P?I@SVR#6Mnh=X-f9zAtDUEv-BNnv4J{lgGNN**W`mMXl;^_9goh{m z*$a;k%cCJBCZX%0;I<4TlHEDincVfDJ=EvpFTU>uhH;qm!Kn&=A~M~#V9X*htP##V zcV$$F4`;2+V+pIFpWDer=6je~Q@R|KC+(yVnhojQ*4`a)L5i%A217tpbd*0Pu^xZP zeInKo$qY-0h+@pQ*6fBXyeq&(M@p&|nRz4AE`2*~^Tr2Ju`pSy1yC$)0B6W!dAK~m zri2M;7Xm#EfoYv~I?9D3(D+WL$6tD{qM;%b0B5bWzBWJ;zWY3?AP6CV9TtJ)hE@q0 zWqFvbkHL|6SMl=tY%*p!j};_4Nc-T)?br#aUWGx;R`ewHzI-bgBg-`(f7#P+rqikO zDPKK!tw3SaP~9YhrWb3}5OCf{4nvtHV5?6YcV=iVE=(7YAcS{O?nL+G*)}JR&|7g8 zlI!xyy(-DdkzzT~52l=3W>Y!VSxe$y}m;wbJ#4yX%1GFhXfq5~GyqFW5$6s-4aK}hc1fwCmggb!b zSqMLC)ANAJ3+wgVRt(uTx>4oKhXdUi9JF=K6>uBr9(6rIh)1(#eR{+=A`vwgyz#D# zs4KkY)SwoA{FP7l0(OzEiWp^?Q}Ig6l`>5n2aqd?0&pM#@R)@*!$U0WQB7oTZEz7G zdTQ?UK)!v$Qm)*m4_&qiBbLT3Pf0azqp}?&w;cD!Uv;kn`SyJo_6*m?RE%SZAXuvx zOHJhWAW-I<-Kxf#NICLkZfA3Ar=_F3>AMb&TVo(f>INV5RCM=`w4j<@=Uzg*DbS7S zjr>e`{MEPm?PQi`qai7ffzb97fQ!Zv!EV_Q^9uyXytOb)Qj?PwEbVgUs%o(ctC}p+ z)92~s=NRH@fB}KS1W9up9SAafY>xx`49ZJA{+jzq_1Sy31#kmOK}-rb(%}ifGH2eKHq0kspC4_BX-3HE1L*nzaB828DvysA>>F(R(LmS-rEJk`8tC90 zYTRLE>Pr|cN=H_1*`V0wkf0;csR?uykH7AIMu-@13LLP4YzTPK&nd}6eNSz$cvBT7 zjYuLaxGQ(20`A|dAuVfbBdKFQ{rFktZQZT}?YmWuP5WO4fe-jdy2{gSP7G zxfwvxK9dHromw0p1NA+OrbGyLOTbT{TS=rCcQQVfwJDS~25!=EaD_c;pNhoWt>}=> zJq`}jypX*K{+Ot2$o9npvb)RWXS z<7|d1f1NWHcIEx}Tka<{91dbd!@xKf0vwCxfN&OTw8Dbxhz(Cg_BhP*Z4=tJlK~y= z*3@jzF4H>$L5HB~hL;DB(B7s%GBXwwYNS2loCVSzO5xQXf9pN7D=o;az{xP|7>NaR zBa)B@KGZuFfb+XM@2Ahe+7*U6z2`!rn;+~SAiq#gi`n66W81v}MCWCeP~NsG9c@<| zH-k+f-5&b*+wN7&-u8%C(1(;J4y;=dJZy+EQ_9%D4qjeh!2xS9Id^1xo>7ea_bLg! zMlCvCHdq{IMQC*_wxdUL;MVOmf$YWZFsvwNFMj;(?H&I{VEbEN$nnyX_8;28Ke7M^ z+*)zyY)8*-Bif#$LzahJ#)76RPMaX8N{pypx>dN9+n$Pbedn1^6bcLK7REs%~p3$g7+}I{+q{=qL zA((WB(PSNjQ;H3cdgI9NRyv!pxi zIy<1_pjjDS=m%2U(Vo2`Kl!l*I6ip)H7CYP-?=xybNA$zqG#=&~TFqBS zt9fZ&!4D}uK@bwR8a|biWMzxr3(gUPs^hb=n^^+EPN=}TZze*hcd+5UikX)(y%R}NCMlol+C z$`c8@4HXaal?K^{>>d4_LUcI82W*`H@nj4Tj=B`>b;5U;b#+U}Lz!m?4b*I_$C}>v zA`rpgBY5_10Qo7a_C71@YFpQ+E^Fb`-^E;$Fc$&Qro?Pj-y5gj4d6)i2Dha5Q`7s6MepL= z`X;ne{i+OT8CWD)Do8d=C?S~X@prT@G@84NrQP77NLh5Qg`XXxmw|mYG$lO5L(U8g z?~5niCR0Dh6*!dBWnkFdEslg~EA#T`hxfrzw{9FIl=!nXZk0PQk2sy5m%uN5Id4AD zeDeOj!JynJnxG$o#sW%nSvA%wi)sY1Sa-y+tuE;4bD%AaUG${Q1x3Y>HqXM?r3=Pt zt~rdl1yf=?O#=|$cCMfgEy5m?kt@td4*Did@0&EeZ>q>2iYoG@Q^w@qJR6NZ2yP8hoI?IKXI7u64J>ktLn2hMM&v z5)t?WOd2|h$N>T!Yna)*XmCp9)<&Vzh>dsqe*IbgI#cuhzd-OlUYUMl!Fivw5rJaG zqy?JDLxV=NEJF2q|gZB2g%;Im#8u0UIaDF@n1V zU0xQLc%>FbOLGRVV;Z26k6pmux-B49GhH!WgtDtkPki?E`Qrb_eVDHhC-{NC$`5~U ze)!gRKX~s~>)rR>d#$JV!ng4ad3ft{C&s5gf9-g916C8!=*hIvA%OsI$#LE(v!B|u zXJ^}hk3v&Hwvhw138+iMuvNn?^;~Pm(XPk=sFT$rmk&}{uAsFz)-hkiKsPvtS_wbr zEvLiizk3b}P5^dUVmjy?;24WQ9lhOCwH8eJ8LLxAT523cG~8(r=i&!!HX;kOwi{-z z*i}4ftd8t2N3j|TIqs+l68WyPpS^y+^VLVc`d+^G?)x9T6(77`@BR}0EAsu1K72Qx zzkx4(CtrI5`!l{!|B4bB%^f9?iEa$ifj=cf7KG<=C+Zh=nS`i`C8OZ%f(i?#aifT{ zxLNVSv8+QE-Uj0NFxsOP7_QIl&X_Gu=>Kgktpl@LlI3oXzw--w7Eu)-4_f01Mue3g zUoK^~&h8xvd{fFfbV)pApbEauNABLI6NJYk4Z#s{t;v|1 zB|rCpbdvyrCfm<)IJrt=^Hr+H@^-Up&^&#pp-^@7DKlT6~-$q1S{BsB7Y z5c+iABV$9arhXPd0!&b{hM=c|XaJ<3dLGlPaP6njhy%g-p)|!IPRCAcUrCF|SB`At zY;Yc+dx<<}*cV2Z`Mj8Z>C1UuO#k2~>4@u7n!QeE=#~J*8#WLbcr$NZYOT3bLwZ|u zCAIwkcfjuE?t&g8{G^;_?sg=+Te;`*_fOrR|eFR zbG5nP4n0$CFX(Nm+KT5ihCku8z3sz{55Dsq-167RuP=QoU)$XFGxF>HD#)*2G_rl^ zb^M!c<(qBgYqG6ON}9dz?y@3l0WChR$Wun)-9d2m?7Fa;34V{sJZbw%(5h=HlWyc7 zEceyk$O8%2DJw#b5!*q^WG&J)kDNWd^Kj(#iJ=;IeG2t(K&t3=TfzkW9Xv(KAeEGAG_P#x3LTAYXU|2YkWT|ZIOjPDNo9yZf_nwwVm|!HL2IYSe8TlT`_&ctl&`F4lbB?bcFYszVJwi)NZ_qgX8 z19_jism|~Y7$+tc+rWCEJCM27H7O;SF2Mj1qA5A8oenTGq{xleW*FI0ywHN~@Xu-V zy*~{v{B$1i5txzZHC*IN-?ca4BKLD#NWi!vR%cJ=CIzP9En-N0r(Ki z%OPV}%XDxr1#cXtiLUJLmCkUJ+0mrxwvh z@Rghe1ZFAe!nhQ81YVE7uRXuSf z;6K(gxF+wDeiRuL09Wo6H{X6Y95+Cy*;DrIZTrOPozel6PgtM!VkTc>DwR?Q~DrYe5{weYa++BB+df^i}ECL*Cc!g*tdNE>_h-;z}m$R#-XQ zAW3NxITI<;FPNMqG>%Oed5xR)ee3`(WWpPyym7|kAG~%RbDrpO4_GOxO$X9xo&nkQ z#QVg^0y}_{uA5K+6*f(^q*cSWo;EPNk2Tw&2)v98Jp<-(z|8D$aq2qzX#fXZbP$SG zWasMRAG)6rh&-MMJ;Ckblc3lg)&SCQg&JwtkhPFo4A#cwy z8R}?mj8U}v9>`x;-EaeSnOnfr0jA0Q0OJ9E{N^QTN$@c;7-@r=BNHxeN)*h4LXUss z+Pp;Pg=LMdI=3mqvjk&1cZ2y6uXV1**;d+h^Bi!2rjJA11mrszQT(tr+%axGc;1mzsfwVch zV!|F$vw`Xppw~7R94a<976eUx-udI-eB^H>n%;5yt%bBKBxg4{Q*d_>_mlws8x#!y zCXj6GMhEV^jbc>`7Q<6D@L>T4e9&?5s-~D2Di_~#i{6Jm;P#bB?y&#qbCTyvU(P2- z{y*Z?_u`ZE!ua6BeA8Kf=1$B$%BoPGQOYP{A0iP3-oq>dp(Wu#l)-8 z9>9b9(p98u=rJ0WI1UXRx`%ofD#W>;!7vpp-_^TeihZ(F-Hz-!icG!hS!1+f_JOg0 z^8^qKxlUwG+RHRnvs8H=Uii|N^QPzdJ$v;gRYq@ZrUIjtb>e!(ZFiwblVSn9h)rh6 ziSnAKwJqCtE;Nvs$&aEF<=K<5M7AVEuphLfDvf~DW-gsIcfbNKgS}V?rWNoA-uyfj z&^8G0-0Y->?ZO*1$1PfXH&~sbEoKY_7p(C_6e-AK0+vXS*b$H%qKpPBL$RwMq>VNp zmte=}tV@1?0r=)I4hpRi^*mtxr7!0TBDqo8zu^<=mz~m+%Onw3sKa-(03J#SsK*7h z{h56jL6WELLbJ~W&CkgJ*KmRG8c^8`Gi_5w6L<%;I`<2r7^T}X6V5f*ly#{OtMjZI zHwX3Z6IAaZzPK%gr4yEJ(IGCVr^|KJjMD6zq=CD#6YMQzQy?jqZ;OT_)(Ttdf}qp3 zmqCeC5dc*oHXSxkR&)lBh2z(LZlrqQ%lU%t>i6Pz|L!kXaod4)nG~KXu*^7?L+TaK zM1ZX0#N(_p+G(sETPA59?Di7KHIPjc?DC>r6yS?4!2P*PG$ANzXU^3Uf6tZdtWp4P zCd-l`&z`5wiDWlkd^%7(ZZ>o9)ZGhmS%<+hcCpd*ju1!a5skI6#)DZW%iDNI=adUEbEZ@Iu46#}CgjgS7y`KUmVewdEuW z3=`RNxhb~-E%qpZA<*aXHj@)&7zOcSqP>wrXXD1-aK40p0})Zl~IkT3{abZ#22IXhnZa-Q|~evL=T^3;WJLy`^f z^c8&Bhb@eO73;OKZ>fbNsh|(;n-eA~2Q^vLWYVF8NNvuEzTfD3ZDYu-c{6Rn|3A)r zrPG+l+F*GAnDoh`{E=V$h5okuz8`t#r+!_-k01Y&UwtpWjeX>qXz}SASdhLz&G_jC z^nKx{ zv};w|w2Z)19R^A_aI_7p`7+ekjtCp1`{JZiM+$S=O8^C=vGW*>Pi7iWExZUUrMY|t zxFpC!Z#y$yOYQ@gP0^2K%^b6+4%n`H=?0b&WgnQpAmwb;j(psV zH+xqS?T}EXm1Q26ege3khLCx*K%)bXMs+Dojh}zie$V^we&@R%eE5c_*_Xa?uXoem z?$5gEPha@*-Sj;OoG3uA5umi2TMqonOq=PT?*vX+CUPs4G`pfLn|<-rY&>|imGIGw zr~`I4I}ns0WvA8J{?3PDsgH>ye2ut39h zcrswry2+95cz|NzxUUZe(>}lkmbp*r2)Gf+q9~>NejFxlOEq*U=_$Jz}E0pgKeaU3=@sBoiG?C>dIS&4Xj*s6vWvOi-j|j~P(( z4o*i{(^|!7b8loNo5PL=#Yltk+Fyiq~Jb}X2Y0EbOA2631Oh%MQe6pFk0K-JY zHy8JXxc1d)OHFAoqf+M9DSgENgx+YgR6A=GR{sf*<(cz3Q@WqRK^ZJZ)x$jCSoX&s z#=U@|DytjFQ9($TKfZ{)j*4OsF&nzv2Tnz^921U)g~J*4HF&Bzw3KbaIt3xLOc2*A zJGBEl(%D6dZX6KjJs4BR1M?h3_T3);UWQ107UegHBu)9n{CU%R~HU&7?ptRI3X zA$!XYYs5Zq#*4DyY}%<;VK}A zooHlq(3*1&Me{Qcn4O4a0{g5kBm1(*42M}ljffxX2I834<>@8pab3zAK)xl^Lrg0z zd2_AK3HP2dZ)o9a(LN*j@lW3=ODd5Jw!#rT)us2d5MrP?F<8N~p5b~B+<-`R0Nd&$ zFX)-OW5xmOn$SQdLQjCA=3uzq_l8Mz^N?0M9T39Pmo@ka$DUDs9{iYT?Mxix5$RFl4{V%Oo`tHHBAPwNRQ8U!;oPxUh&|3Z86U;>=ADTGw;EZMP{0HHk- z97zIf9MS=!%M+x@v$J$eJPoAaHtT3%t)SEvGQ!Ad@#YB;kChI*T!Ls9%xb{?f@(=e z(Rloe?Q2lYKmMgV-vDG9{6;nyG!73Kz?IAgQ1_i15{Zc5?&Qi6hqz)}I|Hl%!KvRd zm?z;nqfNy+EP(wF8ws|V32J#)g(KY|X0hYIQ6AF$_?O!|f6`Z`%lKTO^fUhM```Zl zpHXZ6wp(j1(j%ORU7kp;!7SPG{>~;i!L|;8oo^(cz-Wy2)-Cav2zb$C@JSmmXa>YH zf|U%IZOpJoOi&XSUg$Heg$fJqiw3o(tF0dzRok;t^QG_GXG_hWyrt%RoA|S}<{$aV zSH66)xdvtknx&|+*s>3(*{{P!G| zgNO-uWe;|4gL&Q7X*z6f+6KF=8Fu5x?|AEbzx9O!%d<6mh{ z5CR3Jbg+Z3$uycEKLL9=A73?MY!YR`Qj|A09^GC@wS{EQjTnq$;@X*Qk6PpbKD%2V zuEetY!bpxy1Z9%dB3>EW+mL+xt9RLU&oz-Ffn!O-%&hMorwHc&>3bwrYeo$y!xUh) zPW|$k`@%i~wZ|ae8=E(VqIM%p6WQa?acsqsx}`*-51UtD3D7zCaPj!po;K16M>hIV zrJP39Cjzp%#`Ze>j6f}fa@R)(4@{~?Uznal&yWh&Z$}{V*)z;7I}{>2RT2iywVOdD z-aSahz+dA!E<71fp2xrbwJ5y*zV&b&qI# z(~}n5S*;R~%`JAufmb>=j?_q&0>o${@m3n9;}|atvVt!o3Zfw?=jXG+m%g0m3u)P_ zkKX#F_df79QBUZss17dz*_J@Dk@~U9A0P#uU?xzDgq3aK*`PK)RBgatexjR05G-{t zA01+ZV}a!Y;`3ruD;?1$geT2wAS>qN4jSuI+wWaR9|M%0{?zlFjMSJAQ09=p4B7-^ zY?Y9r4IkW&_-1tbl~+-BIqj%lE#J6>13ctxj%egq)_XzXF;|23YER4HT80FhY0wUi z)mi4XD~`v%(Y^*px@T|JOJB~jH|wVhO*ObHfAy`f_*33EyF@nH!pC*eG|&Q(&oMOj zQIKF8f_n{U&_Xi!9&|)~4+l5cL>HcO9^@XR#a^jfFj5(XJgnG^x>T)|$xes$AkZ*C z_V1)RpSIF(Pw2tO-+mf;;fRK=4Kvuzdm{Rc5mnhZL}W7}T|lxymlrbMlwgS3*he}% z*ZTkikM>hD58pugOD0hR=}GtQBX30v!NaKD2*_()1$^4$-@NOm0m&bQc(jI0$0Z0K z;DyGAZykVrBDsrz_Dx7s727RRBH(Ereu-T`@F41A1&-i|<$^YL6jhzYKu52+Y9)|+S=9z7bM0j^AER=Dw_0^8yfHH;;S`#5icbd<=2_0k|H3*GG zTg6CfkALTW;<0xHiXX%t_;QHZVsfScN!{y2|GzlygDd~98Q;y~An@b(r9iWf{_jV*Yx;P4Rm8HPzx&*MM1Z)X{z z1L8QzggQ_WG8vU3tybAYCn`2>K%2YmP@Gc-VsXzvzLgQO4jtejYhApitp&(B9{o9j zWJ^9x0vvIJ z^?V+jE=$lI1Suv-9{=%`$~FN=@c(7+O`0`3lJvZds+-;FZex?wg2s(RnU+YoM|eyy zvQ65{^bi3Jh5YWVBFm7a z3zX#wd2c2%&pqEc5gzXE`@CZWosSbS$2sagH<|%D#(mGlQRLJM+GWSr;4zq#xaIPq zU7;OrP7jgu4(V|z=_F?Lrni6h`b5Si1;saxr_fX4oS}>O z8bBI*G|ROlZmJ+vr??FOM$B2W8Bs_qP^g>z7Hd^~u7o?rA9IH;t6|)0TN)4I(944Iz3q$&& zGFGaQf(!#J$u)u6gOx>UT)lt>DRh=z@?`V25_bFduQyepwo@<)mst6G5EzebbFW?^ z&M2cok%z?AW|Y!UDxoQ7l*99hN6jnnDw$&+rY0_0mO4$|j`qKe$~m-iNZ6%?^tD2} z-u{DYPc5TvOJvFp%r}jK$5ZMYKrPC``9NwWo6#{s2kNf%+9dkfX9+$K>0!jCtfYYU zO?F|FcGgH8y7y(Lo?|t-g4D-roilYsz5R!mY?$?Vr-kS~mt>s?$CONx(YT_B1*f`N zxPe0U=u+LUG+fOgmE_x1Gcto+Ya;riwKl7*DO&D4lUi(w*3 zhBnHMu!<4T=E*1XgPsi2v#i$2?N5FeQULB7UC(?ucUANs_$p8P$Mcgf_eY=4*KhXg zr*xe|xAnrYhVF^1PJh^JTa7KJqW-m}RIfD%R~^KS7L2yUQ;(Uq?751xiB5`ItXG@J z%}*ow1#Bsa-DSkNa%f7Ale&bp*q+|4qyehRcLKeC`;V^uSvUDABu}}No~2z4`$9VS zDhcgzzt};TT})Q+R^`^{F3dumd7%{AUc^GSGkVNA+SWy^))bkpB`>fj zW+O?O$~1VoZH!}QA7KOc)^yQDS)1e~W=iMwpFCKcYWLxGVR;ykX|3Z56PY_G;w05d zYHb3xQ&J;s$|q%U8@1);J(L{UoHfhdL8b@G9zTjqHnW13GUvKgDvq7)V!7m1S1afC zpI%oHWb2J~RYru_l*0+gORdRkw^Ybi^F!V9b)43_Fr7*JgI#W)*)=fTI&q(V6;0hhSLMu7^aevKb~To>~dBq zQJs`h-q1PPyhOsA`ij}U2|3hRHpdewqcrjWh@{FBhQ#b6Bn>%!`!BEO!Uku&BZWxA zi==u=6d@~3lhFFoA!Ti5djm`EN#zt%jf-ujE-AGN2aq8UZ^`tHWWF&pX0lKfQqgJ> zYdZ%lC0^T?OHTRrUp;hj`-L=bJ_g~2LV$u0$5_gSZm=?;wKzYsSyp0~ST!5DzeoDs z>C`h7gJ+ob-JvwkKBb&S@>5c~ypU@&0B8JZVzMO`6;QqX*YfdS_WlM=-NO?qda}ceQK2M^?CR4OTB`gzb;HI*N+sz4A^==pbmDl^z z`TCDNf`mQuO?xbBvKR6qe^b`<@QrUjXlm*QHIvka+E~vlR-no;sD{TUmsfIIFk3OxBuoE%|j(N zB}znV-!*&yf_H{7gBu9#|N?-u~N%)Yb+Fk$4Q!t01hsN)PM%-OfEH&4nr=Kfsmp0(-zk5hFUY!g~ zoJ4eQ#%djsK5gvC#<}D=a9z6*rdQrr&x+tY)Vt8e8E?>&C%>3h2MCin?UZI&&Jg+NLhqzIuZ;FaN6`C`#cS=~t=U&qC z1_re-Rpuy_nBa214DB~hjl7@xrafAQ`irdZ5IWv|Z7oiakHNo;TRp^SqVZ&=*^=ZCn>*_370`cA2o;;T1lRYB6z=7S3>WHHy{ zknPbddPk^d6n0f?d#l~a3_b&-0zMn&0Our4jnip9NzY(p0iR3qp>{Nj<>~gn$ag{S z`oCV=Q@?^yh%(jgZWw{d{fYy)`9w3Sc&i)Tu9TeAGWqfvGYerF#VMS%6-h0f6q!~S z3q>6f3?7i{wAD!D);>uZEar9*KRn0nfBQ}h|NqpuoYr{^m_j=nN@dcD+v$K>itkO_ zSReCX-%J~fh|jYs(^bhh=VJ?=H<& ziz6eK1|Oh~R;v=rZgU1qg2~&YSxCyMxBufh;Pqg}jm~Av<1`O?FD?GH{{?BXe zM6rPMJkMeX1FCQ|PWZcOuKAGPS}KClO&*M=L>pLWh3sZ0k9y2XK1AzIA_z}#cXM}= zhvRC-(r;b1ARKHf~&9!X)Co<={1ncTdJ@iFQgj8uGi#qOiiM<|LbZ$5H_K$ z;{vu8X4BJkATFDvOJQRf3{e&V-+N^muN-YpFGOPZR(93dufsOYc~R2xwlB@FMn-5=&SJ%R#-M)Y%&DL$Pm8}Wt2|XK~>=n?t{puVGHkl>1|J@Vu>e(svPaWo~D7Adk+}u4=5|hvm(i8$Msyak#XM9 ztrotjEic!8`_tE0GE(08KwIxr%WwioU1+($3UwQ$=}PoMO0r_9_5#SMY2QueAfRJ2 zXC}gfSwWLPW!UPaU_qf?>zUh(WV18MK5XgHNw}^n-~MXlUf3J}O=qpqC*9?bU(iTt%aw8B!~=x;7l}@c^q-3%1?h+%4f*a#P~(lUTj{^4D<{%QyP>)LI>unX$|& zsr7u7Hd%S3Jg2!yM+)x6fp6#MM1Pbfu|2EcvCpgiIZY$uP8i zpmT&>sf;du5WoygDWw|FdC1DE*eShX5~^wtZ5T()Av+V{dw6#MIRTL)d65CpIt6Vv zRYlTw7e0BRFYH?QCee>u>eRGdHtf8@558)t9k)BC$p*um@V`XjRvs!Nnw?!63T485 z6ui}Rvt7lqX0+y&_wKlw3N2jOs$=C~EXnk#?Xv5+{q@(&ZV2!^pUk0Y^m0aPmO1xu z_|V*W0Xh8J1CxxM%EvWT2Z6S;HM9|Y_zNvZTnq=GI(2E#bzYLKBBHA0s=~tsac(C_H1p8di$HNt5{mw-ZOVi*g&o)sAV+tF;$WQZ(1x(fQS2#_2#!>Y4buPj`{h5>My>w(bZ%(~8uJ_u}3_5A3jZsRD5( zQ*5rKjici^kr{nv0~KU>-Tu~VTh4^N&8`eaQNiKA%arj&J9lvffqvlqctZMws~D?v z%e`wAOQH-T3u*?`;-%LlnW3Cu56x@hfM&QT^o?K_Zk#oZ#*^IZF`oN!?)CDYzWnUv zr}GPcYVoCM(dHzXEb1~Z%X-2icQI_S&6+5(HP5L1(E!l9$&G1&ojGbbmqCugx6(_A zmFY9?#gQjn{!g=pnP(NpcukubTK`yk=64t0{6b$m$mPkPJy4kw$oSm)p#Q01VJ8kLG7@UOw@b<&d=?LQW;Lgb;#DivdnK?MPM&P-vR@y{aV! zS;cMF0>c@}7AONmT^;9Iy`I}D_|*lE%6J@0w@yY%C~{QXH6z8ZP`Cc1@( zU;jk3FmNmMJtme@06blBnbtAAU{4!k$VJ90X{9LKf}Hgff~e-eq!&jwAmU@5DK79k z`q{NFuxWep#vbwzs!Jtnx?e}b#iZ=qr#Xto@iY3A#>tOb)FFg7{&shok&VWlYV5{7 zw#==Zs%pr%PnpS2p1PYK1YCm6$?TL8rVQ2_>#~j1S==lOZw;;q=YqQm*pS+1)T~z&g`@8l11O3O?$RV@Z z1#ILgu_(~*AuR{Wn7pI)RIk_}uz?ZFayIcyX6z_~BACJu==F!+9+TH! ze)h%7PoL@?Q+xRO7nY``47)+Vft{lRVL{ zirB|%&BEri#ZTUdQ+y!zr0gdf?Vy4u^t@tFI-S+%xB%c8$8yHprv>#VwBnKPSfbCZcl&N0Xk^iMS!H z>(G~!Rxq0^X&WKK5HAy^p6678PAbXSo~B(9oT$fxaB9z6X4=#j4_T3=rT_>t4vP&`d8)aU)8UF)xQ4KmE!r)&!4>Zn{QE|4>#p!#;z5Q-da&feOa5Q z(l9P#EE%Ks%q;we-eQ&}~6|9+^z3q17xM z1XAS`5HZqGP^bIHit$~dfwe(Ij@b`h_*M+zZLL|B5Ke%gi+%4b5nQX8m%CYLUfh%Fn|NKWAW@41b&M=3}I`yoCZNv6$=N{Qh2T|}Z8 zbFhop<(5kF`?K_OU(S=&%hxCBCjdbwfP`uSDyi*6o!y3aucxl2A*U^q-eZpxtFKsz zx(X?oj?!j6Gn9fxTl7qkyvjI7cD=Ocb8aQNRt__cJczc?*-Ae&@Y_$)VcwQ6n)Ai- z&Pqg;FCVip7;Sn%P-KOWuQTRiv6sPAoUl?t;mIc(Z5?<6-Hz?>DIlBa=0R z7`0~Klfe7EBCiJAodWZ|ANbst^K@3h!)_C=p2{j}Yh|uz zDeDAdIwaH(;iF9)9MqP~0G?Ww6Ji+r|I>5ii?DE+`9ftv-J^%HHe@-c1%Jwhg@5;X z#vE02^&uid%Qf~ZyI^U~Cab#iy-@6swRJ@&Qu1YDPF15BxpLlPCh~}44FtvLmli0T zDx|iFG1VzqTUr)p_d2i_9#}E=I=JV)oF_le-+1^uKbv2?{P9z}!pMUc5(0JLTQHpJ zdzed~6#!mtf=oTqkhv&WwP6i#*4E=i+x5e>ab{LkoxG-{bW6+I(L^4ep0!JmJl`7H zv$OX%g?wkyrDAv-LVET})P>t6mcv1$J;z|r^G4$agbCro+eK5@>^yJ}l{I%ctqkq1R z7xI?XK)%e(TC3!wL=Lr;V0Rvk9cA>WaRx%yQ>jube(Qe7`ozXqY^-cG!0H9qf|9){ zh{BYVq^VX=fN!=cIx7jN_JA{qlE%iqZ{`hns@xNTT*QV8IY#n=11FxWUjkw8P>;``1)+Kx>rJWz<>3Bp=d z$Iv$J-pn?#%nlW1q~yVrw)b3{D2&yX>L$?>p*#^sNK0l$=q}enHPboe=%DY28U~&~ zm`b$6Gg~&nUr=uwa^BofAxCq^$x^ZK+~=G>_vPGul7FTxvl1?;g@YWO0Ijln?JLz& z7ILzkuNVG6#;O=_23T6@BT`%p-6g}#dLj^RJBtv?pBQixti?bmri)t8bC$tjk{Qgt__{YETuA4hFF>WPRcl6%C z!m&{6Fgc@O-5YzRv1Ioni;NM!nAKiHJMr!X&H=Y zqVLl#4+PEb^=LzJ3>u@gH7}VKNP3~POSz3g>IKG92U)i0_6W|9lw-#rQ^JK#t6r%t zAxOPAc3;+(gzrNpIgowJW~JvZC<{9CnaQ2Z@B1hB&wYSOeDtF)KKYPQNN8 z?XM#Sg66T@97f?4G`x|Ut=0Ri8^q-`AE{~g z(}qZfjMGb>wUakb7Dv~rv)%q)v~V{1!qHSGt#TCDc^<=fSfm(vGFz{g$2sTq z%aOY#tQ96~ib@+`G>5|6PqpTaR@szN-QaxoB!p%)Ah^w>^tlcgzf$(JRc?RZrN}!4 zoL4zbbH$uBXv6J8C}iQ`034I8EeHnWV708XCoK&S<`EfkQV1Ri5}xg9eSyB6b(^fY zs9dk4k3r4JzddWwJUiLVK5l=%eg|+N_pjMAU(Wqu?aR+zo|ikG%J1B&HF$EN1b16- z6~?fwX%WUkcPFAIfKGW!mn^Ww>qbltEf4ERSxDx*r@W<&b=pb!fEy^Y)BUW~(hl*Z zMR~HdLv7sSDqg?YR#$m=$3Fh`_bmspIZi#T=!T>>2_IkDq^j+Vk)XsO%zbefP1TYz zIkKLKyUtbN0_@W`M4ON;O*T^{4SwKMq`{o!q_Zr7ya_lrvMf!!d2@|NwksmV7VRW# z?K_SVTP8gAUg$r?P73!2&pSSfU5urf8VtWTz&kjgb?&3H;Ge5DMy3aFwqy5J&QH#Y znTi&MU#pj#%8{n`L%LsoyIKG6e0slEKlhD$r2k+U{>Fgr2M=F=*r`A4)KBcx&IVI4 ztC1_UpcD8xGDm@TSVj>z82z}?G2xiHHPj9{I72m6i%1<)N;?iIM6Yb0IYyp-#*FLm zl#~QYZ*#PU1IdWXu`y%a{(;N$DU_eU+&d1|z9j`VeTlLXnRF87(4=a~lb z^DJF4Q%S8|er-K%6Ud$bMxLP5*ra&n0pNR)ppgz4R=tjua$Ua5?H~NGNB;8dk?$W* z7PXb-6H1>2Pgz=F^HjQrN9$Z+d6ez79B&ob4nMz^K4 zue;Z5C)c{&TL#Fq4!}|daeyILO_E|3GY|@ANob6V_M2n@za;TP2^U#GlJ5a2q{M2p z(%R~JCNXyc#(ZwFd8j(>9+Bt1ocq@6C$C<;0p9WBm*4d`eK+kS1^WiV9qqt^UzMbXV9eZ;PC3$m@}^Mu@w*UHS=!uZkTa=T z6!)@}G2Y!J^@YCOCCBPOZBi%eDhNZ#DR!R=xzt|Wol#nFLk|)lYY=cN3YxYYe4fpG zfT@E>N+`k_{mnUqCN<$Pi|`2}D5d3W0ET*PXIU;M+wC9vsS=jw9$|i%sJ_36>T~zj zzo)JKrfJxmEK>y67Dl6(<$>=mv^J7PTE#B^=>?##i$a_ry>f~G{j!m&3={IlGV|kt zsL$lYEJZD=Yz~SXCb1(V=&%VkS?*tJ9Deoou#NoOTH2q{v%izlMwfgI0bA_>wst^= zon<#AmwoP%H{s$5NJZII3OYdOi9Oszu)%i}#SN%HIa{ih29duc;Wx4!>uk|Oy)+9= zEwm8H+nRN|PqQ0_D*iyO#7tOAUV8^yuZLmmp}aIDLw6T-@wPE z2tNIH^t2D(`1YkpY|V9~a(WXtpNXI5&>|c&>24z}CFBMKat+H_EE4)LPN)d=h)STb zD*iw&@`;JgN7`yR_KI~SZbH=-kP@Rvu5-~*U!eRebq&N6mg&af08zEAQ7ojK(vM9MQk1Vjc<%#L0k-bqd3A)*i{&?gI!H5^ zb@bamqL&OxA{`c8cvcLHXN43%7ql+6~E{Y1dd zU0&LVv(Rhp6GK*&o*i5)`vUL;QjRfuPrd!47kofB6?eUI2NE5i3HF`#^&YZFcG}Wg zS?#d$^1+;x*`rPxi8I+*P)t0}M*Pglh5iuhX|#UMz$B6YDljbXDNS;lWshORRo&bE zpZjv|-rhg-_U(NLL;mRXe)H;+AMe*6U61|~%C=DiO#C#GGkYCV3c8zQe-XC$!P#kBxkM>AVbd&ZGoZd1mn{BG$|xg!3mN%!2t{bk!bGP%apPRRU&QR zG>MURs=mC;vHfh@snv~5$kFnb#G-m`|CnBde-PqZ_b$u*Fh*IKf4M5J=n>l$2qevg zaTPxM^jT~pIVsU~j6L(!(6L>!HmzgSf()XSvRgld&w9szmpTCSvd(I`%z=_29-Tv; z_j2xIb>4ONJv?zw)rYN+R#cEF_dcquRkMTipo3eHnQtwFV`>cFYlAwi^YU;F(o#+5 zB@mDv+A`S5NsjA6c?}_YyK>ca(yjxpS`{s9M~^)kZfW{(G!IF(-0$?VAqbpU$YMf}@ zD})^bL(SCxsPf;fj4fqqm9dAM>Xsncc?RZ6SR#=}k%}RiuQT8NN&WcueQ-zq(z_$c zW+*bYFOnfCIE<$hDoe@aYfUx1sP9Fv8O}|nQ&h_a=e1@_QP-(Uq%3@jfZK zJ%)U+yS^X0D-RkONY|;Nf}5){B?;)$1q5b9mMryj_2sExm_)UCrX!Y^%w|Xu@UsY0 zLEO-VI2A?*UZCv*Z}W351!ZI084vJaQi#9$7=Ig=S^lPv^`Tkk)2=fF)#etwRICb? zEzN8KkZrcKCJf({J)sLp{nGP6FgyxzsnlLjh!N3zG1*dJpX)V4g@$8Td-aoRM9#@4 zVXz(EalL;}pZjv|C)q#q4PDqzjw}x6sgJ`_Nxi0{L~n?64!L_|Ps|{t!qWizJo+Y+ zm`I*#B!R)NTYUq?jMZwh)N3qpW|4!cry<>`q9#|UcFpOSe?6xB)!+G}8C&VY6zAt? zrF`SZyOS^eEW`32{_VHF`P2UIkALM|NAt-b#zr+K2J<0~a1HmmVnk{EDyB~HMWC-R zn+qZt)yVomz0CvO3YM*w8@{-@h|1>4Up7)Bw4)E5N12wSGIsHHu=T;!yLTo*LyVa@ zq3l>fFaZv~a3IbHbzo`DyIUmy0;DyB^m9?Mb9e)TEU^c9af2#nrckDV&C(Ld zmdUv#Wwxd=ysVyM>pi3P*9oos(W@VR^t+E>8P9#=9=Bg!)c(T0*?xKW##UfJS?e`MWejXBO0;6LIr0G>2M;|JaEh_l$1K&B8$`}QEYj;xJHUTS~@F}LT{c)TZ8OBE34lj_BO4O)1XnvX(LA0 z=q{Cb?S`>v=P}pQ1?{i?aKHN9H?KZ>)Ovj8d-u&}|2KK|+pr5?_>Dp6ul?kEzX)K= zw|e&KAV$`%7(8FDx-*eAgThF704n%(UK|dw(o#Je`VP6aPQd71n>=?raJ;T}id1pQ zmb`Tkz}iXw9er!JwN5^5cc&+Gt*qZGKEU0x_uTjH(Ykx_0opg#-M8O(4>C1u|5{4u z3XihjnzuCTSYyJ-p3^{<5_O%NzRl3ROUqPbW2%toyDa-|2YhSv0$P?RtOaO)4q1k} z8T>3qX!r!Zs$7B3E4SM}{R>!ke+wpd-v3{ zpWcb-eEW^>|FeHTKz`=SxvNWm|Lgt3{n>uav+>bS2dSvYrfZs4q_s${fLXCqP9kg3 z39iTOA*O3Blq5E!xUbRaND-)xuRqtE`=ZJob&x!KVNxm`u|3Nn7Nom1WLRgHlOrcT zraQhm1O3KV84CG@>Mw!-h>tRmzZ~@xoHH-~QcmQ*)n$v$>`>iDS6WNRS?t-0^Io4F zeelu~T03}mIGXPYCLg^bp*pFw-fVP;9tEvh9IKM-3c7pD%lJMmD$jlIo>)}0-fgJY zH@^Ri%I%-|1#GBkPU~}$KxbQWmfmFap(hQoRuy(O+5?H!i|uVwI#GC9O=t4a{OptY zBrCZ<(l#fwJ;NIsu~hYt8P(mG8MEgIqySt{(aj&(9c0Y2Neo*%Z7&m=*J@2y9>fU2Ux4t7X-3N<-KOVAhaFWmDovn`Z5`Kon`vzoxLWRdSL}S6$isoB%Z*hKFfN zd%BtX`RiAofAsL3yT|{zZ{Je}#rC4SYf$7H-?>xFnt3+3S{<<;l%qaYBj=;D5X8p6 zvV2>!T61ecXv;u?LD*nRBrR!$=N35TdfhXNVPcJxY9U%?Et1!k^aYVlJ7Vk z5oJMFCf}`(ak>;trA}heiG@BScX$)4j?6UHd$@Q8h*uNXo*pHNWFJ?zkrDj5o-HYs z=NLO5I}7)KwW5tPDjgrDLrYsn3-C0g=#Bqq$Csb%*N2aJQ!7C+HCrJ{N43_OeANN5D-WHb zrIZv|+NmcsNu&1ZZ4F_AB`B9ss#m%1is!xg;I7Q{EomllVoCcwebMJn7PacOL=c?M zVTU}wOmOYYBZ=AR3EFlev5{O*JvFzvL z>GrhK=M*7zqaYtdaGSM6$vQ`=c100Hf+LtA{>`=5%&5+cIF~hd*Zb`i6a)`YlT}aK zDLdNY(UzIlv#lNE6K5bqrsHaPjXqoCwpU0=j68iT>jX#jO6{X_nw-+chRwovY{|M- z#E8++43Cma(>V2>4fJdN>eEl>XYqJ_d+z)81Wfwf=gq#G&)d<4IgABy z_{cOWsjtfxMo$J1nRLj~@gSwP@jlogmTa>h9&NKt+ika#m!Ft*yL7NGA$j9RX~xT4 zcVaM>a{j(PZ_j<-9@la5u6y-Y-hSgd_rz^G=u*mpE8vR2WQ7s2cMu1QL{4SRD+D@4 z-Bs{Kn3U11VjzjK*4Cua)m?{>Jt4K1hMq<_RnDAdjnWKJWk(?28?*vVGwwTb&z<^y z4>$4Guim`*=*{QzuXr>EdG0&+XpIAg{f&0q4<5dL4+89o-l&#Yr@+n~O=hvsLSlSi zYFmU6VxpLfbKhoExCsR&&l_K-SenKWsS>;_0*kjA0EtYBy%hKwiDdS4)M|?@WqMC$ zrN!-^y}Y#IXge1Iced8xHoPZ@^6c;zhj zN|QhMt{Y>%e7!zfAFcW3QI-AN_wi}mk=)~s-iJRF9q!13Y|jL`!gJoT;XN+Ru7eEO zUKg>1O=ZkTS0Z+p^yJQ>>wS(sy=UL)4DT2oOV%@Vd+R16$Ov!Mi{&7vuRG~n2bN5( zw}0UZ`E=mI-NxYy5pIrl{VSL=7TfAM0zdGqpzpFJ@lI1;=m zvBs%;_)0b9m~qP7Yt7uo6cQY2%8tvPL220~kE*@M%&8mhStI-Ufq+y zNXh8dYg7$f+3EBv_ghzr+TXPv*w;ayE_+ro4$ryJy@yjLZ)sLyxJR`**J;p*3I2{i zh_7h!N}gjWW8Tq|n$|Dml`eB^`nt=?QTi$7L3r~cocS|f&fUlQ zTW>$s{n;0YR3TTWzWg>htbt6U=Fegor*A;uL(SlL~>sJ<@Tg?XIC{!(dw34kgN{ z5COX*X`lDW2+w^v_d?Y-`_muq*H3(&DVA;@P=0Z8GNTafFzLa+)Q~))>>ZoQ9t)&x zJ#ySHK`L6c0V9~~3{A@VyGjR;5R!HuD`&^fh~=nN^S;idRx2~|+1vYlRA~OGSPCxo z*d}y51czElJ}PSGlu0b#$b?FQHYkzi44GEX9#Ti^ z);GdHavR&&Cu?@XwYzCtHmtW#|o~-n`@HZ z)}%6;=*dUOYMmk0nxqYrTrhMM9uMh#mE04Ap;QAW%H}~iQ;RU_OJIghgVsxE!2u}M z?u6#g?YsD319^`&kmt6t{c_1LNoTYuj-?=d(-4x=*M^Yv)pq-yV$J^WAA09E-+jjK`~rW@ zyY1|(@qEE>5UBUSqqc@i;@xbYPDjCNdYY0N}F=# z84{c0h@@Cay|TSZzV!Y|Q%Jb^_qwd__Ic~RMg7e8?#Ype-Hk-vhhd;j1k*1aagOs>X4-+N77FU1 zQ52JLLGLhFW+I>{*-4hz{!clJ)-mlHYis2^Vdg}h;w$ZRsD$o&-xuj}c2yelc*~ zJ%AJvHF#RvWA(nJG#3|b)4gkeJUVNE7dc}klc=q&wr>B5zJG`v|HM>VhIo|@^{j`5 zG`x1*NV4YW8Mb}mNR&q#dSabCJ*}B^fj`QW+)=x>+N6t z1x(jM&KZ#|iFdjB6e+HV4%6kmhfQSN)djDrXR3f^Ck7^sEz@+mZJinQg^$*vW(dMI z=W&csXK2kUrvp)^YfjbXSvxYS8F`!B?aJ>`OyBlEwj8Xf+?9EBuA(^K`s3JwTmZW*#n{0n;zJ5Lb z_(v~4^H08v#~ami-@GStGAvzh!h6K!;PMRU| zq>kidG&0EtAvn8l^d_r&U5NT)Y&D!jD|3r#KRzXP?q#)%4@}4eYICNx58b8i49ln7 z{z>g!lEsENN-%#GOSO87O-NYe zuADpxTin1AvJ$41d76r!COUjBU?U-`I9ldL1!O{@0QNuCZOh?!Ptw?+ zH+yJn0#nGaz7@Nm9u}Om8!ozgiP0apil7&tzkc<_D_XNJ&L{H`^7XlI;S*=}{Envj z;p-2j(1%j!Ln-v36#7sKeV{fYiFF?dmn{bNXFT=YTnmVUn8UoZV4?S zDYrg7Z(;#cpGVFbM}aw6nMu#--n#Zgdf3=yUuM}6MYJ#i>uv8j`?>uazkrcJ3v<*V z;rNIxue@eX9#cm%@US(_BZ#hX6wT!b(m`aGY%&rMZt8VlyWS*SsOXR*wYg+tEWh`7Qk|&R)k>leq;GT?Dgdj@2igIzGsiB zj`X6w7~iNm9=`teRfnyVk;!;D-if$FnR5{E4=g0h$oqtxWqEBdY_rmUlFUL|Rcc`x z(nriBxK03jLdxHoLu=p5tV-J(=cCH#JwiLsq%9y_%6 z5@;v#u4ebT$>+YDCv{i9_2$dZ(J#FD$X|W(>M0dv-b!wJUzI8Q6^z|Fv0jBk6Gkzw zXJk|-tCa=jzwHU2oMeUBu5^vn+W_XE6^312v9iKf%d=M!Hh|49OT}XcF6==J4mkl; z@AOx7tP{TT8AT-P@`i1sTz=b1++#XXYsV^7R9cA?t$K!*UQ$Zf+(nPMx$wU@mnD}E z=Zr$?#7XUxON@`$#?;0c86Q+a(s0jSeD2G+Zwvn!KhCxH;Vez_+Db{gry`KA!Nb}yW26JZIhl0O0WM;DnkRZ}i2pD2|Do7@X;vZ6J&xtmV$KK)p#_a~rFs%^?8VsU7KeXF2HWX&*?oK3!`g#j*+Z3&K?|Ax{X4>q7m;mx15Ccv~#Sv zKe2tEl7{XF>Cb#8A8mJ6($F`yyN9p8{dV`<#mDX6;VMqeku}ImTj%UTprY6~v(#Nq z8`Gv2O{p#c9G=Fs#oE)$$|*XH5Z{WBmle1dGXj?^aKdKKi-Z|sYUH$%w~eu_at?1} zwNvFDbB`%{`=~y(`e`G2v{))<5}z?iV{j|S&(2gZsrtx(+!?SbDdG;UG8>Sq z$m-r#fQAnf>aKJ2qz&RBRdgVROtB_Xx68f)e1^|Rr?sF4u{zxeH+{+)+~^F24Oib1yVHiZsn z>?x+rqI=J{zm9JlU7F6=vzSh-K)Xm5;)h~R6rI5Gm?G7oS7K04%^JUvr4)~T3cK3q zp+0Aq>$WRl$&Xn5&;6SH*)^}8`JO$Y9!lSYTmInT>tBKz|KI*loq7m z536LNwyXLsXVwz+tVDRTwITRYo~F}qYsl4wyeRnOLfLo<;!^#tT3PdLr(nwqgqDoOO~zEt`>@yfq= z{qnO%1^sj1wkHNN`c2l%4<5e$_IumhlYGJ@eWOa48CX|HIJKJ%3e)6$P=L1NEfkDa zENSJ`a>zN>?Kx|>56z=mxGhB*v3le)W{!@411-!cWLw5qwUxO`Eivy+htGXE_oeiH z^W_&WKY2$Bg;CGG6+7>OyUxDV&xHu zFs|IE2*|rxB_W>bqWQGW6Vns8uI)L%(&l8+-c<~w2QkR|M__wBTD2UqFLOGBq-rC? z9dG>b7^7+1DLD|<*~?=0BaBRoR3F^aXo@P>@L>)&}*yn#nqKOx`Z%h&Dqa zq4&dt{wM^`Goic!D8DCD1KuRonx|d7Mk#xkQlSQ9BI6t`Q;JWkg+Kz-XX7NvsZ49# zc_#WGjNpjQykxnoGP76RbEZAZi0zzI$QQp48+qGf{PYzd^N${$mHSfUneX5erAT{c zl=krT_rJIJz39O_wUEGrYpaxYbT4z7F{7-r^Ek4`o}tOo2%on7OkeY|Wwo^j8F$uO z&%10ZwIr2Tvzq9HDw?H|7gwY1y?tvhXU(~51xA;u09TZE7m};z@>3QPE*2d8sM`lI5Yh`v<=gwXk)my5P_FA!5?sxqU?&fCC^LuJ1s6#aQQTGsl zTZd?QQP^lkHng?c7NgGbjIny_kMrss{y+VaJNzqCcfm7A)FFE7t|cJlK0vm9b^+Bi z9=R6?Y$fTnfJ<9OrKeS;F@x|7nL|MdN zc?#FneOIAumPlf7rjAxB#aXhF{6$2`8-JWv@AE(VOYZaEsPnVPfB7{X`n1J8?dAlb z*zSO(b^*@}Vl@=_s+D!l zp>wMOnDvb#^DH$mqY<`t;a<{t`0COW0*4b3+*WBRoQvym&wQVeFXHac;!IwXPY8J8?@(hsNctq_&00A23rV}MZ z>c-pn7BQ@AQMEsGDr@-Z%o@|wi%hVc)k2n5_PrB2^PFqnK9p0c;WIFDN!@0x$44Ph z2iba~UI1X<`s4ik{{AB`Zt2fo++TWQZR3zv){mqMu0jasj?6?V`aB!l=$5K%EI2ZS28?D?F9w*8)u@-*l-Zcn6EpF_ zpCx-8G3I$Wd=H{_8NodDk&}&v$sVXzj&1kCDXz^tdTiY`HekwA z{PAGvgH^b~xyHEg7Os#jR)Mq~V;OtoK_>!9njeZGi`A=EisaeEXFv1S-}>V`-Qhob zi5%0K+U6OzMRqru8mER%FEy@-e+&my&RUMVRHNEMkN}v<9gF=w9@2Zj(}^Q;*WMSk zb;Lz6;Ygu$^0gCQD?q4&M+q31Pq+82`Kv!v9BfW3oZy1?Mfm6F>OL8pYEr`w$4kq% zOh#)B5vFT`$~(0aXB~(yKzUfm%j+o)>;F=Rgfeh&J3JHwqJt#Bi;NNkINq$mcD{F< z{n0=EXByJ~&g2Lp~|LcpA=dXUKb)Np>ujJVNmG5(G z{}z6&fBskh#4r8r{?EVq=U)FM|MIs#^h*o&Ct1Wl{{4W})kG$o7{LIhKv}<_|6wDk z$L6g8!N_9beY&SF;xvY-wt6cwU;RM4w3S<#@Ni?)@v=-fCs2gnV8@6iJh7k0E zjq8V+5N!PX);6-h(P&J|e2^ygwoaEJ%TS$wDzaG6JM4{FL-Hbq33&!WC{QvZh}8G? zwMcQCoP>CsjaBa;Ym!z*7#m;(7M>e%ltv?;`P_fckK@G{;;paPD}ape2XgU83giMq zhOgd}4&~OUtxM6!)TwHZ>#WBVWiu4bM(v)}!jzkwv{MP$H@0M=ILCLajzKvR(H#`LohS6Z8c1F~>bfj=V3;*`p~4-IcL- zJ?09RN75eKdv@)6Z0@ElND3G9qoK4U1fTCjW{N=%*yc!OFAQVq5wWv~XwaI&hhYX< zNQV~LS(EAN1Q*_3@La!ulY3XGefo1G@7xb0|jEp}flr zCsH3V$36;bRk$GM$+p>IGHahpc)jGp$ZtdnbbJAIbk9WIa(0y8GH3Zu^$S3ljY2T$?kRY$MZ95~sJ5sfbR9Fte6Rpna zWMvuytq10P^{QO&4pTIsqHYP$rlGX3TP}xT^)PfQ}>*nH_`r1 zrh2rA`qTqOx~KWccmLLJVBd@bc~1f_gv5e<@~+j$1K8_e6Bj6gw~)lFeZeC~G^T=A zOMFx`=raA*K5vIXFLc&=wj2uKC!H1?1c#gf^}`4i{97MGk<74HKBtC3! zvV{8LIuyiJM$Qjk@7nE%9M7VSkm}fhl6*0v=P`4)OK*$7LIgAFTB$xNJ z8x7gt+%((VEE3*9ju-hSEQCm3=Q$ZG*T9DmLfADs{#VZ>@?LYU6Y^+WXx%ei#nH9U z0bR`1siV;lx9J86>*Ma+*m45H*gJXAnrozF7p3IdB}~r`$>0BzFMj&PPhjDF-t*u3 zy1h!2A5TR2@iBDo34&U*9{93FpcdnqJ0B;^9hmFtYt5=1?H6Y0$}MnF{B zs=1oB!3kJ6zD`O$lk?8)(q;y6!A7j);yWcz&;76LP z&2`dWCXnHBWYVDf8F{Zw<-e%WAI?2$!WA_^7oE&W>GPLYPk6yBmn$);vKA zq1Tre9{uQ{iL=wAiRX!p$#(5)-gM0LIYRa?e)Im@l=7d&H$Q$+?!NWKd(kD5&so2V z5dNKSzwr@Tq}1wO1qy>`7^UP%uXJ7>h+=EyXXs3Do=)l}5kM+J=OcA?y=U$>> zF-YSe_S$k>R#TX5k8E^#$aR~-zljO7<83(a{vDvacR2zbfkKGBx6x! zqUWZzgwm_DbXB{!5>h$l7>}IXvv;3&|K0;@uJfW)nuli0$VFM@kBqS#z+-FnKrpdk zDBnD8t$R$)PL8?3U02KoIk%?dq@@VJyhZ`JWUuYj2=-ir2wV*O*SWAw-M*vj-M{}E zAc_{HHitlqvsB{hKm^~J=dAKoyrXbnRr9)Mlb$$u*r5FKnLPJC(s?Vli`lv(=sJ9w zNYT=QmdbF5b}t`FNqu;pZe#$D@!W8_Es$E5BGctg>fk#RUVhS<+e?PwdB0l?9 z{;0nGlNT`aH@fIK@%YLO+HsJZUNw%16fuE| zI?LB4#JpK6bXk@tIPNqebN1-7T!sSN4{`&U&`DXj96$z^o?{^lddhkCA3R>Zgd}J} z#%E*IV0Pk*IZ{BE=yR=`tb~h600LaiN9N8xNWzw88zWX@8U*z?x?_aZP!URZ_%N>e zO*3O#dYrta2IxYVe(<~hkUu^V1r?3D+omwt*3kOLW;VMDwtY+79vf-EHpCTKe7!*f z*#~m+&JM_jPNU;AklT(**tn}RJbWGWGla=jGd=9@2#)e ziz0wOALDyPz_;J{7)~A@9d2=hT29!S147f$d!P>?)KiWH zI29P3@WbUcoU26d9362w@mrL#o6c;#5c$?Xy6xNu^uVNNgoGa5m-F3!j88!$qpH|k zA)kZw>frUijRnI7blI~fFXogpD91i$9`zQt#i>U|F3BF3Ti*RYK4!Gqcb@L^#ZQ0EUHZ{q_^>WqI@hto!C)xt50b}`r7P;PM`g>{`i~kdO82W?|u7+zefD9WCyPZ(Zy!$jO7gf z(iOD#*5!dgAq4ey275iciTf6;s4}3{tHQc6moKhRt4Cv~Z){`&$R&w%RPMZok$OYj zvyZHEuUu5EHE7NkCh?81^xuM2_vyaA^~ZUx%+VkC?4d$?<(@)Ii58jU#2Z>eeGP!r zAl-~J05Dhxp3;SC0&^I>S}3$_k4c4nfLI8XQVpZf)K>1SWp`}+E?*Jtnl{Hnvd7+tgVVR05?oP!G5xC%u4w2c&Nwpk%`zcqI2M2nrLCkbiRx>V8*s1 zKIXujW^A0zd@!Lg3{RPYaZxm1-e~%$t@2-4CKw~ATPzFy=w(yaI8J=DyXA5~KWAc+ zJnKOXTpaV_n6|Ekkye!Qq|w1Lz%qcY2Q7(!(ARQ^O+JzrEpB-Pzt66d0%FIr8R-X7 zCcO1k`)--=e|wG5`Qh~NH$`;*=ttjH6o2i*5By(#9PfYp*Aj@g`{(g2@~O`FRA+pu zGd|TBpX!Xi({)C`O_*XNvInTVONJ42g^QOh@R+0mVdL}2R!Eq9smQ`uIb>!XvUY%a zbYDcWUys<6gxwrK4dYXI1tC+J^J3)71P8gvuouy%Ka4u#t*_d5>x_J@&iHO0;?GcR zeD}v*uQ@(-I6hS#pDK?}mB**b<5T7F>s21>3SN){bh*Tl{d1XoEyC+Z@^-7#p6GUKUW^p8YPE_ z(ij2s$O%|48J=w$2Q>a8%TC($JZFYABxQm38+H=ei}&T&(AD*}QIqx+JXdB~z2?z0 zrnse>TE>t8;-HY&zWaIQkN4kvaQuGOUw-vBUIw4O?ZtZ~Fo(XE9r5AoU$Z{IQ}=PF z@;0X|fg%1b*~j)0*pu3WL(TUpBkm22w1WV4WJAN@`{X8F?qjm8u)Xh|OvfPMF%%8# zMVw>O1L8qeN@oE8$%gp?79eEW{22hFJsuge{n3@#YGMS6Jln|MGzi5di@( zT^*T5QL@_3q%J9};i5hF@EO}CId#Fr$5Mll8?wzUU2nz+(P1y50pgE8I8t7h#k}>! zdxfMro}ljI*LQJ#{DSOsaofD6d(3k?2!?WZ+0PU> zUF)uA#Kk{$<0tiX{LyD$)?crmzW?zz^~FzLnCIX43chNd_b2nb|Moq31qF>?n%-@T zAfT~;D0EfA};lMwz!S#a6AogJ= z5~xcwvn+#f>%`0<}Ov~Ly{m!ipXdXgH=T$ZN^w4g^c5F}T%GMBVIEa&aG+I}BK zGow3Kg2uWPZ#HbiEA(6#0pRonksbV86HrS{R7cDM&ET__FXujNj@=Ll2^%7p`%d(k zfEHLouPDN@7BJ;CifdFMvFdux8OOKzsRK1Af=t%APPu_0T;VtCjs@neZu5%$_~p+b zj#)s3j*MZc~Rf2GZmn`BB%6GM+;fWnzulu;^q{q)V?{ob|laOJO@iX zm;P`4ab8qmUw<8c^4S+Z%`gAxzG@8&n!K+x?+mYb*=nGzF>)$8PIC9d%_kfqcBeY6 z4G+N0=|F5;LQ!cKK2*?oZ~8q$Cm#;98xUE=#m8ffgQiFB2fCZbfY$yQSznI7Soz=#9P(9{8EC7uL45FYHV&09r(gWr~Bq-RTxo0S|hsJXP137|Jj(c+K z9u96X*nz7+CcY;7v3?1mW9J5xs;+X#%x~hHFc8#X_l6_dg6};QtTR$!gwX^79Zx?p zEA8S#>^*#`1^HahD*Auu=ZnE--^3rhSkd14+Pzx0t*5%}V?-QEbk0c-oL9LD42D@w zTh3?;1e4^dJ7g|+2{yJCszq$GW2fu`~~0p!t-Z$m^*Xs@@G~i`?2} zgfNQ(Bj~&TEwn&vIsoa=YmUZA02gb7=6q$-VOG4&rM@4|FLKSaO2R zdK}BlKu%){Tpa#b!US<$5bNI!F61b^(=Hf3)o#yD-+6M-PSu&Q*Fehxvyi>^M5@ez zS*a7m=ZZU*P7$%AjwNzl<|`RnCaA{fu#tf&y14hf|(BoF8KwZ`cHSzEh;Pyw}v+PlN zaM@y3LOR!#nOQy%hLyWPB=Z7`+soq0N^H{=xYvHpN45{r| zge*|CK!{Q)ZnA41DIet+JdHfyg0n3^NGp2Gu6z7GJgwJ~L2Cu3_k!cjs~68fxG#hK z#ZmZo-q%n5dVT$3DSP9K_F^fs&*gg^zYkyk_MC!$aUuVYpZ`^iJU)E&`5(UjcIbhe zAeaGp`kXY}GIrl25X)qvKT^ncwbMkqcQcI5UbWML20bJZGsn1 z_kZ%!e9?$`ylg9ytI+Cs9a0pj@miaHK)Q@qFjKp_Cvc9w(bePHQdKZOn?krIw2$45TR}Z@fhIg z-FvZ-p)9nbYbEU4jz)_1y5rq{{u`(`{Cbj&3zQV#m2#JlCDraS)%Ln<1j3X*#;kr2 zSGusU*-dM^F>Gx3q`frPNQ26aDG;=Cj^8*^0*Oh)yi2Z)i`-2sP}dTnTm+cB8#czP`F zym@aV?-+IG4jha3bF}C0f06IszupIZ>kIc{v7b-j(eq=3N58t*V^1z#eI3AdOghel z_1&c1X-=Ojc8#?fdWAHNQ>1{8t<4@7hw$x-#DQou6$U9#P|7>!xT!aeE_0ABoA-%8 z;2}>7UxAs#elAqs`s2JBGxWPZ`|ABS`Tn)usMLgFaSrcOfrt1M@X-^kO~+|lyb(bj z1LQ+qp3LWe%e zkk)lX1YS-&u!olERj#l-YK>+`H)s1?nuz_JZ6HQC!H1r|X4tSaRAg?&I&g zbG+^U+TVu_;?EFr@E5=3>wo(jKGF35!uPpRiB3BLUCtsFWJlaVv>-Z+v2~gcy(U8n z($aO@2|0y&O?o7x61lAd*Cf%NywoyQ{Mf*9_Xk?#L>QvY)IFcMKX8r&E?B;l({Kbw0ZPkKo0sw8nBCd zbkOEC3@oJ`NCzzF=DK{I;m%->PG@w(8DJUCWWcC{Ezlh3I`96A*Xy<4g8k~#_W3cl zPdV~nAE({5S*7JHx1F9H7SLrxH5#?*V+SjmonzidEU{SVgGKLlrkz;Y6GXFJdVBDM zO1`Q=GIKvlJnAB1!cL(%)s**n`1aNx=k>e!&HG;#);9VgVr>7oh+WMataww4dUPKYY!6KO)<-}qfZ<7k}0zj5p4;u=~Us_!0O`Y z{izuGIK|K*XA|S(j^Q0sPi)LfZBF#NM3@|*$=HzYLKFkk-}jmvE5?>PFKZ2Wi>8-t z+K`wC2`%;&0%kRdjD3Y~H6)PqUD>~(V05ZSXIV zhy*>%9edbJOfR1eC_k^0KbXbde^!6|z)*i12==1Q^43@Lm71Bp*JkyRzdMRK z45F9d*f^PcV^STsM6rE!xcmnL_>~XY{#<38KgvEDab_b%RJ8#nZ;EaOxX?D zU#EK`w~Q8omvq>UyA?L@&C59D>Z94D(b58!Z%cK_JZsH&|K;n7zTbkq;?vgkY3us5 zb^RUPy4F@=ZHk#1HhRkTds%P9C~*hiM1bF(Hrse0KJ(nQcFr@m?9q4V04!o%mT6sh zK}S}zFFU?;L@ee8MW9nv*0>4oHmpkb`Q)=@9!UP$)@nnn-$~eM(CJ6?!-eFcU0tt+ zZtP)JFxY3FyAHQtf8vWhq%Liz9KqNxh~_yKff@g}@Kp?+Tbyk3I%w`6i)XX+Uw+=Y zuxEYw+4+;tZgu?8m*2dwPrvcyd^J>%oh=DbE<^V6y%!Y1lTM@eS&t< zs&qccnauRcqs<&Qiq?+l8&ll6#U{+uV3Wy9JI4f7yCT>1QQZxj`Ly3l>Jf( zOh;y^V4}0;ZP@3VHpf8BMh)XljHHClR9GArl1**s1|a>8qwY9dNFe` zny0FE&BkzUPu)+HrTOi|<t}zCo}FcA6kJv3<+dsdOiAYDaL|X>(Ykk!(r+Gxh~ii!n`7EjtE6ZEH|iJ0o1LNn-yT@G7rwkGj>_y581 zIo!48IW=i0b*!Tb{vhZMXD+~^5Rr?qMX1<@DZ>bu62#Ohd221LLXI3VkMFpc9N0lj z{l2W^a3+p6zsGr8j_FgvFiD>;q*!nLab6HTzsRrht1rL$`nBbZ#^?pb6pH7maUl^K z7Z?$@Gc5Wr^%=Ew@w79m??5(n?l$aVE{Kpvt|zfTlv9!ohnwEvQ8}pQXpTT%gG2@e z(b?5rBu%e^9kId)??#?{H@`Nx;A6Ud z|DJE&=U@3<7=7`F-}~nMgZujRU-<_=eCxwkKl*z=9QbvtW3$SZ09|oJ9P~rKy_v?P zn6d8>m5I>i1PSHB2E9z6>I)Dddfm0B-l?0y=RNbfx)hNruy-b|;L+Alk%`kB z2K^WQYR)`!A6uJlBOCYV0)A93ya!VU(R9p7YFwtEGvFrKSCD&cT9*Bc2>jtZmT!IG zUVSX}>9PE^EhlgFSe^n}q+sZW>2se6t5NsD*e8rbv(h~8>Ai6#T-|ye`t#Knj-9Xx z8aDL`mDs$|qYNK%_*&#Wr?QvD&2e`hmaRP2x`(Iu4|fxP>kIeY$MRqN5KZx?ANJdH zipM_wOJgbi^sj#>nd0#yA0jCx{AK*-r7VyUH-Od-_{{EvujH)UIXc!{XU7<|>H|jQ zl+uzt)>w4MxxUj*_dNy@(U1g1YR&zan-=LhVy8vgNA2L@UqOe;=lnf%sC<;{ z%{8sB`QSJK!WC~z+Luan+Gy3mYb;E#mw`g;azr(F%v@uuXx$Zp5FkK`EG-qiLNTO{ z4KP+WFu$8lLwZ(pLc!h=npd=+&Hr!xab6<9zWnmD^Tki^D{a-=LsF}W?~1*((4ite z54fBe7Ior@UaJytjkirEojZKnvfKff;$}uWvd=A(b4JsG13lN(p3O`90oL9%2nfmD z81v#E$n&zTIv#D+zNI}jni688w_Q;b9S&dYEeoW&IXT`&*brTSx)}zh&An$)-8h&? zc{@HOtnWjS3Ubq;kvF#MWUbb9jv(X*lg*$!C{Ui&ns5Dao^I(sa;v}iX?^yyufO_P zef`ZBuOhD3Z9%jZuU4o7?!8n#fn^7fo9sw$#O&d-A8lb|I1L=J^InxwStndH$A~-2 zb>$3zsz!{`x!F>A<3KH^k34wUHkTnuisp+9EdE>{w|4c^<#b#stK~w?La{(0QWj>0 z7@!i+Sn0BQL`Q*pfD7hm=^OWX1R?Ojc*(%acIYB$taN3-N;h8y>v(8bR20@|AB9B>Y#7$DpBq^ z2?~Tr($%{$blJ0)H|;JxCiQsg?Ot-KRf{LlkmZq5)7BmyO?`IreJ~YcFp_cPPbZ-utNO`0UH$3G$q`J0QA_V~6FcLyWSa3AS1ZF*SiDrif2~Iq76GrPd z&ehe=!oA-wy!|MWURuZA_`sw?O%vK zbfM*A?4{>X4wdu0ZHs%e&?c}H4$b3;NyV}?=h&ktGe$0!Qs_Sh#~jEn*+a9}wt^T8 zvXbFEMwCOacN&plG7%in{>6){#dLazXt@*U5s@mqhK=R~MKsBb>| z;-}wy{l!n;f03`;)&$BTOs1|eCp(69iKLbutB<7|rQE%t#HE5CDVyg`J<Ins~c_(y$hUjglX@*Yd*3|mk*B#Vr89^@p2`Wf9>!4(eHosvb_rvaXz*z zEV2Twk%W*`ulQ|g1kfDMR^!aQ@9p601TF}zgw(W>qxvXtW}r14Bp8(}Q%T(5dr#hj zG^jagAzAX)V)$mC)6%Pvj1)v|Cx@?*O*LdAtXH?hq22>?)KGUu@S(3(T95JmEoVdd z#+xI?@k&Fkmxvr&Hvxd91$UPrnoLF{J-F|xhcfS!e0oa$(tA80fAF2U{gI^Wy@tp*~@HWEjcjFdAc`9kg} zV92$G7@F2xqc>K;XK?5nf1Kx+^~dr4v-f}Ulk?T9{%Ok~E(cb4=?wy>r}vsbxIeUV zSWLuyc6*O1uD)xYHKXyIPV>z&IV5x-|A=M?`IH1i7kWLRKqT-zN2ki1j8tMA;re*& ze7U)PxT$3@b=NZYahONY40t>Pt6%jYI2A=MGC18qi-FPu#Jnj(bUDLOx7#Jg*b@_o zG)Ypnvw1toPNaz$4@S~d+@nDp#S=`Je)s=_Ev}*->{cQ>VDqxB7U8Uv1#A0^ZLqS( zm_&P6Tq*KK2F)Xq@}3wGfmZlhj1h;8)4hPl;n-J1oi(Im7O>$+AGkqLNTV7Z@BSNn z3fbEvd-A$S{-t4tlRdCS%&p$IBpY6O-N}hAyE7O}TYQ}{*ZA_#Bf(pgK!U`10K z1=?KTBzgOAF#mNp^l)pAku;|8yZ@Gd^bddR6BM9-NU=or7ILLj7Ugk0$YU3*0IYq+ zmJ9K`B+esa(BWaH?}T*~yBp#V{4|Y#ymOssONf6KqR=V!GysXXG>07*awz%u(DMn( zPdBM<(e~LF3hDtm_I5bpybNg)AgV)o?Q!vRod)8$OJs*JU0rgQ(bg@J_kihq3?arB z>o|<5k3eKOlNwgfb!1Oq+dE!l$$xeJu=1PFe;n_>`WrueJ~h4dwR?5iF`lL!<70%- zek!p)mDrz3>>o&p{qa-wc;(_MG@6eCx&lY{+!qP=@KGaB_rOMVwJ@+|goh%%V%>#& z(A^j13KDIW2{3iCdsH_TYZPO)rj{7+5^hrKt})iW`&6OkdY+EQDBR!xZuhLHDn#$z z&=JUJ=&+Nr5qz(D-It$agkd_6?vXoB2&s8Y+&mrZ%j~D;55Ac-dzSsQsE)(Xm0}##D_O(uXeJ%|}B9VYh_-d9pni{ko_3K%6Np$u$?URXS#lrZkVJ zp?B~id-va=M$=PPBaR?4W^m039>7?mAEp$xfMFj?{I2u^(4e5lS~vpemeB+>zoiuq zE}}walPsQ(fA~b^NM}WeRlxeSX8GNrwg?HM@BaG-#-Tt>U^9?9lg^dY_C@=k@*dLo zcoqbL(?&Wq0y8Aw=f*K}1MQ&zNF(EO#eP67GaG7ZbdtgCfgHP0^nS>|K_v9thPlzP zcmKn0!1Axqk7!;=7Dwr7GsR|%F@e(d9(wX{2Sg?tHg&SR_xOQ@4d~90u1$Uq&<9Q9 zI+CfB=2-UN9Z2ASiK4xermFQevhOSl$a(z~F#V!Q0(Yh{lhxYc|=UF22kA7Pz z_Sawiq;PtFxfs0l1$&&b#1FZBNM}R^I3{)^g75lW#Xx;5wyo6BoOccveR7o2z*}?j=Ma$ z&jKou2Tlp=2t9(6CQs_IEr2Qk*U;wJq$7#e9t%b1sj|ruOMgCS|11B@AAB7@`|-c> z<)iw)pWUzWkFfiH2qpXQ0R6rB)z>d%+HZY1UyV}brzq85`&97DVxe@3$*e1$-GlCN zk1-ips|j5cKynQ$Ii&SIa^mkc^8!xoj;V0h(j>d%0AOix;yjR}baSz@&hVVe)|h3U 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¬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

*Yc3 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�tfUhOv-fTnC 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


^frriCA*nb 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 +v?+&e-e#2L|2ao@+Wwyy1<4xML~u_2$#R^=n9Y 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

MvfMXW#kEt} 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
cq zbP81)5HXNuy5RKebJ>LGABlTy3AiPy)~ie3H3QRiB)KV;!9WM4}EZ7 zx+?EBT7Y2JBu;tZ`r33`WF|2_`hk9+m?{i|{i)?3e5QMAzT_~p{R#6G6! z=A2x#a;NS!WT`I8G1qK6S-jrwGpV-p?Ss852B>+VS{*`0`sgpl|!~|DTSSZ$EqS^1OKQ z_>X@1HUF;hfSqsO$ku>~s2DM-JD3e1b$OWO#atBLlLt-B2}cN!aak0sNnp<-ol|u5 z-6!`EQ*>g)Rh6@g_WHMnnh;-)ezsB%WzzP4gZ9BQ?l znJ^PJw=CH$jLIm{zHsAK7iW9i8;}6Ootu$&n7J|8=aTZ14I6gxK_mymcsNHr{^N8D zXz=?#ivHtLZ|_*>|G?Q!gynQJZti6b%qtT*o%GpkQ>SaQhOTp-V57^MTj14w<^ zK`;Ox2m~UGEd~hXT?lKj_<^)ATRV|G#r_lt#>TFL*c;IhX{+s+Emz!pu0ltv<Sw4r@j||*B9S)qXGPV_{JzBrFyT`7FeIn0oW@G4H=SxaN43W z<#h8=_-F6DL`IJ}{HzcrnO!wjKk#ktHKt-3LB+cUfwnXbto#!zjV0IKiz_=m4I~Sz z<5CgThE7jd)`D5{9-%y9&^Q|w+_Kw{=IrW#^eUp24hf1Y!$Dh6GMh(At=|2>tfKFY z@Sc?iWY*x#I!=?8S9jgN{q9}&YF7T@QGVUa=XTz0i0%~V4}F?9eeb=GaQ@@u1LB)M zIEdVEf&OQ10%iZ~eGBv-xGvDw!S)^^F_6s55)}3cHUff#dg*{d0z#mHaku+wmn5`i zpehca#BMPqQ^8`}Tc@HP<=T##6XGKn{~fT=y|}0y(&nc~xt(?eTKf_d=~W6_L9FYs z(>{tq+f{o^?#PT@J^IC7teIxb+~;^qr;@#0C|KvtXnVE8Mq^BaILg&*dD|Ser!$Q$ ztLY}J(i*wiz5=bEe+^o|sHczo^N%9SKKt|z;p?G~^M+BYU!hk2fKcn9XHJiQ@J6r` znHoAnIFSnHDA+x~k8lOq5O#mf^ayP`6-2|Q$VkfUM(tFIbJba^qQ+`7PN&YgEp`X1 zXVV1hD7r==QM06k`6($9%u$fr|^PU%r6Q^hUWn^EIPuGZd2W013l`9L1@CIkH3pvx9ofH zd*pB2#69vi?|YB@@7MPTB!G*?CFC}F(V7Tik&ZknI5Mw|q93`0y{}bLX=@&LlLZFe zHqi2=!q?pG&?w*`BVzrszR{k0LDHzuBn6p-1v?@S-Cd4f-6KY`76%9m-juc4vdi8G zHXIvrNbp>7eW2kO8t84yuz`c%d8`1vT@5_;y-%%*xskya1>&uX;UN+hq&au1=#)$dYw(@g9GMYxe37hU+xQ-KX?t8 zGZxsgOhh9VWB@km>;#w$BdpP3-`>XP;8)MKM{Tx`hub2l}+G&la zj@H&0xI~>!t)S>Um&t@se5TgE)`vAmkSv;LsAFm_qiUNjT(zADm<7q4U$LTByQD>{ za^E{@2G1n{QLOpF5HJ((UcT}Ya*~;Bm=ww!CDRy878O3_-FR&o*VBT3{TeX8)}DSg z?+ghZ`VemzF+a5B_Fugb+`d`F{QEb7nE&9ui20B1l$e`sHd@sqxdEo&iI$^?mFAh` zle#XvIE4X8T4@iEY8LM`HCaPcF*)BewG%gSOW#tbU}3U}RhJgYwl1Lauwcf?1#30B z<~mIF9Bx9+okjJyYQ=(q1cB4Foz~12$0;GPOt65~V$-I`xX16}>Y=Nx0}Z7g8|Zel zriJt5T{Li_yKV4$7Sa=Tn`48Icg=Np@$&OeGamio7hiX$u6*Ew`_d?x2d*4bd*b4O zF~#nnUe|862uvy?xZ21tLEDLZ5sCrP&E+@S4ctSrQP$F%wM7=7}#Y#YLt zk)fdKb*|MLbK6HHqgQLI&YIBB6s{3dFPH&dS_M^|(say_v-Y~&(2sxMqP)_*ZHXX= zSMe7u>B>}Ix-YH@T(Ejr)Y!BDM!d|MXNM?i4z2;=pUkmWa&`uEEO-aatxF9x<)#E6 z=-P$6))0IQs+(PMDD+hf`G3Wu9v zPG|5ynU+R21Mvhv5%wHrfDWk7UI~K zFr9A2P1Q{oh`AO+Gho9}g(o+R5irCu#;~@XV=Xfq>Qdw6P^y8XgfkS5jW(ydc^VRU z;I4#X{4^DN{C!U@J}=CbhXT#$h84JDC@77oBV1)))LO@FXV^5I&6sJ4i$;~{+^cU( z+q>&V?17;Qf&!D~F*{o&OV=LQXY1(b6c$^yKrru|kN*^2#d4TWB6t@n7zgJUFBH~S zeH|V{cfp^N)*`kt8QTMF*Rv4=E1mc<%JdC4kV-DW9XRb&hm%f?gR z*$BUIY1ochEtq?Yz0sSW(X~qy)Lh8LCdL!d9LA$2cuF7tnJ2gK;QZMqa9H^f+~NP~ zFT&^i=||7A=lS>tp1kqXFJHc^G5U<1=g(d|{tHju__BBI`sZoq<>SBjk~~BuOYkbJI>=pvOQZP!8D;0+ak=VmmaoU9U2h!*qBi zQ)kFciI8GGq4pk^aCT%h6%!r}_nr~Fy2ea91mxW(mi3FA2hrYREzP5?_dpfdNs^B? z_2&4%?KxJsWhe#Bm_k?e!N2itN9E6-eeOj*e{`OG<}>-$-NoxeALDEEO0|wbka^G= z41;UM(ThS|4-#JHF~m|sbq<@xNxm;|PBL=v2BHMnusMgt;3KNO(z#ajxsa0PBV9G& zA5j=y&)x!?XRM^^N3W;)*uV6p@1`0$ZFZSw7#uKotPOkVF&A2g-ut44u;$hJDVh$x zjW1--A#rOVk2!KR*!t2TN4neOV6u+6{3YCnW>d^L_guo=i`GVgh-!`>f9uC@p_}<# zcok95q?8V#9*L%ywh@n51-nI7zKHl@u%ULG4(Aw%C1B&62?I-842eaz?QpizVU7C6 zi+|QYOtay+8i1KYj~6)$jiJkC5JS-BbPEkH7KL--XmyF!18( zlNT=^|Gtl3$v!c9?pwCdI4EISg4^M%Tt@3Y7mNnOqPWeHRt1O9(o)+J1f{xO)Q(JZ zB%ClupWUot*G`rO>j@~s`;i{4#V!p9^v4XR)vkHvlFfW)(+Ye`Mq_0#e8 zyldtD6VHnmFP}Yo`r>*_b?n8l$VX4@^ZEP^q(1a%erZTul??(z!b=fRP-H+YC8@bK zZXP7SOIu5!k1BJ?q@5u{l4x=p(Pb3Zu7JqX*v1M&uHf!*c25?wlQ#Q>Bh*k_E|QIT z(0Y{~LstzLeNYXU^x=DDt=4Hn)1qY^w{099tB%eX7{xLERpHT~d|EUijS1(1zB3m| zcaP0l8%(xK#^}LEDQ3~J)roCDB4B;fHbugY9q;n^SO3CW80`PykKgQ=>f3GtQvb-u z?>VOWV;{c`DcmA+P`S72N^SLSL^9)-ZV*0nW;)Jg^V$0|5+6fuf`)d*m3r=Nd~E^#oIO+U}jwbD&m%5)y4+ivEkC z6IN7@>a%YhJj-{&3m^D2e+)vWnL+!JYgZl`ufE-n{c=h$x3;X82h@vr%Xw?HEKj@yOK z@4N}<{I2^#=XYO2XUA1*yLj|rmG8co* zF$t|(*etcB3>W$)?8}+;C|@Sn!!K^`zNEPnADUX%W+TO<=w|7_zhYEFHzkeGt3v|3 zjT-7Mwpu&D`|tR%xq8^>3$_iqFJi!CAwn$Bf?GPz;$C|?7Fx$MS(hw_Zn`fyP>bt~ zny-V-fAd}FtY>e%d{ob#f5u)u`kMUw=bk-}JGJLSpXp5lXuAT?_JIKCgG1N%ef(y5 z)Zc#-(DkS93tfNi8oJu@6Kl=H-ik|nH^^Pu>GA>Hlo&MkyK)8m-u(d(K610BgeJSv8h!-rwp1KJSb*x^G={Pn&Bc@%Zp+{;hW#Y6GHwPme?6(CMD&e_m`or!=D z%zGD0MzcLYUm%32z{Od6U((mGrO{du^Wwbt&k(_^*`~t^r=`pcgyYTr+8N(Zc^9&t zoJXI1>&YF-$3q|Ejic3%MuGL<9qKpSM2Gr!Z?{AJ`!|7^|KPru`H!wKvtZ~&N_K!f)bLQ-rK&5U_JQ^W_7S=H^ z3m*}dk~(x zMUbuG-scGg}91dEYxyotrg*MH(>vGYIr#4TXwFZskhvGbRH;#%<_ zAR4W3WE_ByvBuQ3gT}D|qlgWs%L%*FxePQElcp6m_CqoJUUO9C$j{^-dW8mhfSBnNf(`jGBTlIWJ>9EHM00**-gb`6H)a z96iWRGm8ra>*AsrY?E8;InX={+s+Mlc;>l5{fD*xCBX#tqIh3yZ)>l^&i71#-pUs* zGaem#dhT#^9{4D47&qyPqeCB*?%|=Uy?=7M9rFKu6V=`i-M8BNXV=wUUpho*x3G$M`sClsNAcvv z+fVKDuaRv%^ts+Re0?Z)65sHNn}x4mdlLoMue)!-^-b3W7X`SEA{h94LyCoQSM|MD zV_7T*lsHH5IdXO{eZk(1p+Og#2rE$H-C-n-ST_mS2x=l+U_iimERZ*pST9Zp=8+PR zUUFCWulieW0y@9>zR>wC*U-6lLSEstTP(06*t$hgz?rd6lF?_V+j982Lr{)PaMzk?2Y5shjMrD`)?P&{`;H2uRm~K{Q5)J_yw{1HkhOz z=czpwsq3>+du&r-&YQs68WRKYfCh9^{hVpK+dU4oVNb59^ zY%`;^)rE&oVsa>OS-T-nO%gtv=fvuEHbnOkO`#$;k`8Z)e_{3Y^7)fbJ$vifXY%Fq zC+GFm*Fzucjic9xk{kR-ZWq1&=uM#4AGqmP|3r4KE9YUfxpi{Ne;eps2Z`&omN7Y5=HDaUfh$R%aPNZJ`X9kz$p zyX*Z~x;1>eVF<{p2 zxm!aNrfi2Ju5u2}pl%Z`5=gnhH0iZ+hWEG{pMC2^zI@d=-gWhT*rWWhhFGujQ+aT# z_!BpQ6@T)+Sn)mASONd(J|O=g8DSksR|s%8yPsVMgrZ#yt}W{<+lx&0GGib=^r8a0y_MJcfWK0isr%X zgnkfEFqZM5lY5Wd7TB`~nWM0rI@)Wi?!H#rr#g=<$5%EgJG&j}>1pEG55h|4Slx0O z(oIe|Y_?X^_DaMJo7UVzvOAR_Rg3vzg7f%KF#t)dWK17oagt2jTY~{_&v*9169@o?f8$P^=RdnDB+WWz;0Eaⅈ;1z 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�X~HnR2L9Z8Az9MyXokGpc0Sn!S-rk4k-DU~9N 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 diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index 3186f3f0..00000000 --- a/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 3c17aa50..00000000 --- a/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM node:18-buster-slim - -RUN apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git bash g++ make \ - # Clean-up - && rm -rf /var/lib/apt/lists/* \ - # Add /code as safe directory - && git config --global --add safe.directory /code - -WORKDIR /code diff --git a/README.md b/README.md index c5b194d1..97d5f90a 100644 --- a/README.md +++ b/README.md @@ -1,206 +1,84 @@ -# Mapswipe Website +# MapSwipe website -NextJs application for [Mapswipe community website](https://mapswipe.org). +Static, SEO-driven, 6-locale site (~14,700 pages: 2,400+ projects × en/ne/hu/ +de/cs/pt + blogs + static pages), deployed to GitHub Pages. Astro 5 with React +islands — most pages ship zero JS. -## Development +**Why Astro / how it's built:** [docs/adr/0002-migrate-to-astro.md](docs/adr/0002-migrate-to-astro.md) +(decisions), [docs/ownership-map.md](docs/ownership-map.md) (what's platform +vs. ours), [docs/benchmarks.md](docs/benchmarks.md) (measurements), +[docs/PLAN.md](docs/PLAN.md) (path to cutover), [TODO.md](TODO.md) (live tasks). -Get all the submodules +## Setup -```bash -git submodule update --init --recursive -``` - -Before you start, create `.env.local` file: - -```bash -touch .env.local -``` - -Set these environment variables: - -```env -APP_ENVIRONMENT=PROD # Use DEV if you are running your own server instance -MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ -NEXT_PUBLIC_POSTHOG_KEY= -NEXT_PUBLIC_POSTHOG_HOST_API= -``` - -### Running +```sh +# Node 22+ (packages/* and scripts/fetchData.ts are .ts consumed via Node's type stripping) +npm ci # installs the app + the packages/ workspaces -```bash -# Install dependencies -yarn install - -# Generate typescript types from graphql schema -yarn generate:type - -# Fetch latest data from MapSwipe database for projects -yarn fetch-data:local - -# Run -yarn dev -``` - -> [!NOTE] -> Currently the platform runs smoothly in node 16, so developers might have to switch to node 16 for development. - -Whenever new texts for translation are added, translation files need to be generated. - -```bash -yarn generate:i18n +# Fetch site data (writes fullData/staticData.json — gitignored): +MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ \ +MAPSWIPE_REFERER_ENDPOINT=https://mapswipe.org/ \ +APP_ENVIRONMENT=PROD \ +npm run fetch-data ``` -Before creating a pull request, all lint and type issues must be fixed. -To check for issues: - -```bash -yarn lint -yarn css-lint -yarn typecheck -yarn unimported -``` - -### Building - -```bash -yarn build -``` - -### Staging Deployment - -The **staging environment** is used to test new changes before they are deployed to production. -You can view the live staging site here: -🔗 [https://website-stage.mapswipe.org/](https://website-stage.mapswipe.org/) - -### Steps to Deploy to Staging - -1. **Rebase your branch onto the staging branch:** - -```bash -git checkout deploy-stage -git rebase -git push -``` - -This rebases your feature branch onto the `stage` branch and pushes the updated staging branch. - -2. **Trigger the staging deployment:** - -The staging deployment is managed through this repository: -🔗 [https://github.com/mapswipe/stage-website/](https://github.com/mapswipe/stage-website/) - -You can manually trigger the deployment workflow here: -🔗 [Staging Workflow – stage.yml](https://github.com/mapswipe/stage-website/actions/workflows/stage.yml) - -> **Note:** The staging environment also auto-deploys every day at **01:00 UTC**. - -### Production Deployment - -Deployments will be triggered in 2 ways: - -1. Anything pushed to `deploy-prod` branch will trigger immediate deployment -to configured github io page. -2. Every day at UTC 00:01, deployment will be triggered with -latest data from MapSwipe database. - -## Edit Website Texts - -### Edit Source Strings -- Pull the latest changes from the `main` branch -- Checkout to a new branch -- Navigate to the source string files [here](https://github.com/mapswipe/website/tree/main/public/locales/en) -- Open appropriate file(s) and edit string(s) as per requirement -- Push the changes to the local branch -- Create a pull request to the main branch - -### Translate Strings -#### As Translator -- Go to Transifex project -- Click on the language you are looking to translate the source into -- Open the file to translate the string -- Translate individual string and save changes - -#### As Reviewer -- Open individual strings, make sure they are correct, and click the 'Review' button -- Continue translating and reviewing the strings until all the strings are translated and approved -- **_NOTE: Reviewers must have appropriate permission_** - -### Update The Website -- After all the strings are 100% translated in Transifex, a pull request will be sent to the main branch -- Each resource (file) will be committed in the same PR (if not merged) as soon as it is 100% translated -- Merging the pull request will trigger a latest build and the same will be deployed in production -- **IF LANGUAGE IS NOT PRESENT IN THE WEBSITE** -- Add the supported language as per the [supported languages](https://github.com/mapswipe/website#supported-languages) guide below - -## Supported Languages - -Languages listed in [i18next-parser.config.js](https://github.com/mapswipe/community-website/blob/main/i18next-parser.config.js) -are listed as options to view the website in that particular language. - -To add a new language option, user should add [ISO_639-1](https://en.wikipedia.org/wiki/ISO_639-1) -code of that language to the list. - -```js -module.exports = { - locales: ['en', 'ne'] // NOTE: add ISO code in this list, -}; -``` - -Language's title and abbreviation in the selected language, needs to be added -in [languages.ts](https://github.com/mapswipe/community-website/blob/main/src/utils/languages.ts). - -After the language settings are added, user should generate the language files. - -```bash -yarn generate:i18n -``` - -## Adding 'News & Updates' or Blogs - -MapSwipe website supports 'News & Updates' or blogs in the form of markdown. -To add a new post, you can add a markdown file inside -[blogs](https://github.com/mapswipe/community-website/tree/main/blogs) folder. - -The name of the file will determine the url for that post. -For example: `this-is-a-blog.md` file will be routed to -`https://mapswipe.org/en/blogs/this-is-a-blog`. - -The markdown should follow the following template: - -### Post Template - -```md ---- -title: This is a blog -publishedDate: 2022-08-17 -author: John Doe -description: Lorem Ipsum -coverImage: /img/blogImages/example-image.png -featured: true ---- - -# Markdown Content - -Lorem Ipsum is simply dummy text of the printing and typesetting industry. -Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, -when an unknown printer took a galley of type and scrambled it to make a -type specimen book. It has survived not only five centuries, but also the leap into -electronic typesetting, remaining essentially unchanged. -It was popularised in the 1960s with the release of Letraset sheets containing -Lorem Ipsum passages, and more recently with desktop publishing software like -Aldus PageMaker including versions of Lorem Ipsum. -``` - -### Metadata - -- We are using YAML frontmatter to set markdown metadata in posts -- The metadata inside '---' must be filled and is required -- The metadata renders in the card view of the Home or the posts listing page - -#### Rules - -- `publishedDate` should be in `YYYY-MM-DD` format. Any other format is not supported. -- Project images `coverImage` should be uploaded in the [/img/blogImages](https://github.com/mapswipe/community-website/tree/main/public/img/blogImages) -folder. -- The value for `featured` determines whether to highlight the posts on -News & Updates section of home page +`fetch-data` is **incremental**: it scans `{id, modifiedAt, lastContributionDate}` +and refetches only changed projects, merging with the previous +`staticData.json` (which IS the cache — persist it in CI). `FORCE_FULL_FETCH=1` +forces a full refetch (~50 s; run weekly as a safety net). + +## Commands + +| Command | What | +| --- | --- | +| `npm run dev` | dev server | +| `npm run build` | **full** static build → `dist/` (always renders every page) | +| `npm run build:incremental` | render-skip build: only pages whose data changed, merged over the previous `dist/` (~5–6 s vs ~33 s warm). See the [package README](packages/astro-incremental-static/README.md) — correctness contract applies | +| `npm run preview` | serve `dist/` locally | + +A full warm build ≈ 33 s / 1.6 GB RAM; cold (empty image cache) ≈ 90–105 s +because 2,375 remote project covers are fetched + optimized. `dist/` ≈ 430 MB +(GitHub Pages limit is 1 GB). + +## Caches & state (all gitignored; persist the first two in CI) + +| Path | What | Cold cost if lost | +| --- | --- | --- | +| `.image-cache/` | optimized remote covers + negative cache (`.miss`/`.slow` markers) | ~70 s refetch/re-encode | +| `fullData/staticData.json` | the site data AND the incremental-fetch cache | ~50 s full refetch | +| `.astro-incremental/` | manifest for `build:incremental` (`ASTRO_INCREMENTAL=1` runs only) | one full render | +| `node_modules/.astro/`, `.astro/` | Astro/Vite caches | a few seconds | + +## Env knobs + +| Var | Effect | +| --- | --- | +| `SLICE_LIMIT=N` | build only N projects — fast smoke builds / PR CI | +| `BAD_IMAGE_TEST=1` | inject a broken cover URL (tests the error-image path) | +| `MAPSWIPE_DATA_FILE=/path` | point the build at an alternate data file (perturbation tests) | +| `PREFETCH_CONCURRENCY=N` | image prefetch pool size (default 24) | +| `FORCE_FULL_FETCH=1` | fetch-data: ignore the incremental cache | +| `ASTRO_INCREMENTAL=1` | internal — set by the incremental runner; never set manually | + +## Structure + +- `src/pages/[locale]/…` — routes (exact URL parity with the old Next site) +- `src/components/` — `.astro` (static) + `.tsx` (React islands: data explorer, + project map, history chart) +- `src/lib/` — app/domain logic (data slimming, chart math) + thin package config +- `src/i18n/` — i18next over the repo-root `locales/*.json` (verbatim; kept out + of `public/` so translations never ship in `dist/`) +- `packages/` — reusable build infrastructure ([index](packages/README.md)): + hydration-script dedup, fail-soft remote images (error-image policy), + incremental static builds +- Blogs: markdown in repo-root `blogs/` (Content Collections; images co-located + in `blogs/images/`, optimized natively by `astro:assets`) + +## Gotchas + +- One malformed remote cover **cannot** break the build: it renders + `/_img/image-error.svg` and warns (`[remote-images] …`). Policy per failure + class is configured in `src/lib/remoteImages.ts`. +- Translations are build-time only — nothing under `/locales/` ships in `dist/`. +- The sitemap is authoritative from `@astrojs/sitemap` on full builds; the + incremental runner regenerates it over the merged tree. diff --git a/astro/astro.config.mjs b/astro.config.mjs similarity index 100% rename from astro/astro.config.mjs rename to astro.config.mjs diff --git a/astro/.gitignore b/astro/.gitignore deleted file mode 100644 index bfe01188..00000000 --- a/astro/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# build output -dist/ -dist-cache/ -.astro/ - -# incremental build state (code-hash, manifest, per-page shards). -# In CI, restore/save this dir alongside dist/ so warm builds skip unchanged pages. -.astro-incremental/ - -# deps -node_modules/ - -# generated optimized images (emitted into dist/ at build time) -public/_img/ - -# persistent build-time image optimization cache. -# In CI, restore/save this dir as a build cache so warm builds reuse the -# webp encodes instead of refetching + re-encoding every remote image. -.image-cache/ - -# scratch build logs / measurements -build*.log -measure_*.txt diff --git a/astro/README.md b/astro/README.md deleted file mode 100644 index 59dcf7d4..00000000 --- a/astro/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# MapSwipe website (Astro) - -Static, SEO-driven, 6-locale site (~14,700 pages: 2,400+ projects × en/ne/hu/ -de/cs/pt + blogs + static pages), deployed to GitHub Pages. Astro 5 with React -islands — most pages ship zero JS. - -**Why Astro / how it's built:** [docs/adr/0002-migrate-to-astro.md](../docs/adr/0002-migrate-to-astro.md) -(decisions), [docs/ownership-map.md](../docs/ownership-map.md) (what's platform -vs. ours), [docs/benchmarks.md](../docs/benchmarks.md) (measurements), -[docs/PLAN.md](../docs/PLAN.md) (path to cutover), [TODO.md](TODO.md) (live tasks). - -## Setup - -```sh -# Node 22+ (packages/* are .ts consumed via Node's type stripping) -npm ci # installs the app + the packages/ workspaces - -# Fetch site data (writes ../fullData/staticData.json — gitignored): -MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ \ -MAPSWIPE_REFERER_ENDPOINT=https://mapswipe.org/ \ -APP_ENVIRONMENT=PROD \ -npm --prefix .. run fetch-data # or run scripts/fetchData.ts from repo root -``` - -`fetch-data` is **incremental**: it scans `{id, modifiedAt, lastContributionDate}` -and refetches only changed projects, merging with the previous -`staticData.json` (which IS the cache — persist it in CI). `FORCE_FULL_FETCH=1` -forces a full refetch (~50 s; run weekly as a safety net). - -## Commands - -| Command | What | -| --- | --- | -| `npm run dev` | dev server | -| `npm run build` | **full** static build → `dist/` (always renders every page) | -| `npm run build:incremental` | render-skip build: only pages whose data changed, merged over the previous `dist/` (~5–6 s vs ~33 s warm). See the [package README](packages/astro-incremental-static/README.md) — correctness contract applies | -| `npm run preview` | serve `dist/` locally | - -A full warm build ≈ 33 s / 1.6 GB RAM; cold (empty image cache) ≈ 90–105 s -because 2,375 remote project covers are fetched + optimized. `dist/` ≈ 430 MB -(GitHub Pages limit is 1 GB). - -## Caches & state (all gitignored; persist the first two in CI) - -| Path | What | Cold cost if lost | -| --- | --- | --- | -| `.image-cache/` | optimized remote covers + negative cache (`.miss`/`.slow` markers) | ~70 s refetch/re-encode | -| `../fullData/staticData.json` | the site data AND the incremental-fetch cache | ~50 s full refetch | -| `.astro-incremental/` | manifest for `build:incremental` (`ASTRO_INCREMENTAL=1` runs only) | one full render | -| `node_modules/.astro/`, `.astro/` | Astro/Vite caches | a few seconds | - -## Env knobs - -| Var | Effect | -| --- | --- | -| `SLICE_LIMIT=N` | build only N projects — fast smoke builds / PR CI | -| `BAD_IMAGE_TEST=1` | inject a broken cover URL (tests the error-image path) | -| `MAPSWIPE_DATA_FILE=/path` | point the build at an alternate data file (perturbation tests) | -| `PREFETCH_CONCURRENCY=N` | image prefetch pool size (default 24) | -| `FORCE_FULL_FETCH=1` | fetch-data: ignore the incremental cache | -| `ASTRO_INCREMENTAL=1` | internal — set by the incremental runner; never set manually | - -## Structure - -- `src/pages/[locale]/…` — routes (exact URL parity with the old Next site) -- `src/components/` — `.astro` (static) + `.tsx` (React islands: data explorer, - project map, history chart) -- `src/lib/` — app/domain logic (data slimming, chart math) + thin package config -- `src/i18n/` — i18next over the repo-root `public/locales/*.json` (verbatim) -- `packages/` — reusable build infrastructure ([index](packages/README.md)): - hydration-script dedup, fail-soft remote images (error-image policy), - incremental static builds -- Blogs: markdown in repo-root `blogs/` (Content Collections; images co-located - in `blogs/images/`, optimized natively by `astro:assets`) - -## Gotchas - -- One malformed remote cover **cannot** break the build: it renders - `/_img/image-error.svg` and warns (`[remote-images] …`). Policy per failure - class is configured in `src/lib/remoteImages.ts`. -- Translations are build-time only — nothing under `/locales/` ships in `dist/`. -- The sitemap is authoritative from `@astrojs/sitemap` on full builds; the - incremental runner regenerates it over the merged tree. diff --git a/astro/package.json b/astro/package.json deleted file mode 100644 index 50fcac6a..00000000 --- a/astro/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "mapswipe-astro", - "type": "module", - "private": true, - "version": "0.0.1", - "workspaces": [ - "packages/*" - ], - "scripts": { - "dev": "astro dev", - "build": "node scripts/prefetch-images.mjs && astro build", - "build:incremental": "node scripts/incremental-build.mjs", - "prefetch": "node scripts/prefetch-images.mjs", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/react": "^4.2.0", - "@astrojs/sitemap": "^3.2.1", - "astro-hydration-dedup": "*", - "astro-incremental-static": "*", - "astro-remote-images": "*", - "@fontsource/dm-sans": "^5.2.8", - "@fontsource/lato": "^5.2.7", - "astro": "^5.7.0", - "i18next": "^24.2.0", - "leaflet": "^1.9.4", - "papaparse": "^5.4.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-leaflet": "^4.2.1", - "sharp": "^0.33.5" - }, - "devDependencies": { - "@types/leaflet": "^1.9.12", - "@types/papaparse": "^5.3.15", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "typescript": "^5.7.0" - } -} diff --git a/astro/public/img b/astro/public/img deleted file mode 120000 index 4ed3b205..00000000 --- a/astro/public/img +++ /dev/null @@ -1 +0,0 @@ -../../public/img \ No newline at end of file diff --git a/astro/tsconfig.json b/astro/tsconfig.json deleted file mode 100644 index 92a18df9..00000000 --- a/astro/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "astro/tsconfigs/strict", - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"], - "compilerOptions": { - "jsx": "react-jsx", - "jsxImportSource": "react" - } -} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a8a7a228..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '3.8' - -services: - next: - build: . - command: sh -c 'yarn install && yarn dev' - ports: - - '3020:3020' - env_file: - .env.local - - checks: - build: . - command: sh -c 'pre-commit run -vvv --all-files' - env_file: - - .env.local - profiles: - - test diff --git a/export-images.config.js b/export-images.config.js deleted file mode 100644 index 98ac4b50..00000000 --- a/export-images.config.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @type {import('next-export-optimize-images').Config} - */ -const config = { - filenameGenerator: (obj) => { - const { path, name, width, quality, extension } = obj; - const newName = name.split('%2F').join('/'); - return `${path}/${newName}.${width}.${quality}.${extension}`; - }, -} - -module.exports = config; diff --git a/generated/types.ts b/generated/types.ts new file mode 100644 index 00000000..87b46df2 --- /dev/null +++ b/generated/types.ts @@ -0,0 +1,2955 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + AreaSqKm: any; + /** A generic type to return error messages */ + CustomErrorType: any; + /** Date (isoformat) */ + Date: any; + /** Date with time (isoformat) */ + DateTime: any; + GenericJSON: any; + /** Represents a point as `(x, y, z)` or `(x, y)`. */ + Point: any; + /** A geographical object that gets 1 or 2 LinearRing objects as external and internal rings. */ + Polygon: any; + Upload: any; +}; + +export type AoiGeometryAssetPropertyType = { + __typename?: 'AoiGeometryAssetPropertyType'; + /** Positive float value */ + area: Scalars['Float']; + bbox: Array; + center: Array; +}; + +export type AoiGeometryAssetPropertyTypeObjectImageAssetPropertyType = AoiGeometryAssetPropertyType | ObjectImageAssetPropertyType; + +export type AppEnumCollection = { + __typename?: 'AppEnumCollection'; + AssetMimetypeEnum: Array; + AssetTypeEnum: Array; + ContributorUserGroupMembershipLogActionEnum: Array; + FirebasePushStatusEnum: Array; + GlobalExportAssetTypeEnum: Array; + IconEnum: Array; + MappingSessionClientTypeEnum: Array; + OverlayLayerTypeEnum: Array; + ProjectAssetExportTypeEnum: Array; + ProjectAssetInputTypeEnum: Array; + ProjectProcessingStatusEnum: Array; + ProjectProgressStatusEnum: Array; + ProjectStatusEnum: Array; + ProjectTypeEnum: Array; + RasterTileServerNameEnum: Array; + SubGridSizeEnum: Array; + TutorialAssetInputTypeEnum: Array; + TutorialInformationPageBlockTypeEnum: Array; + TutorialStatusEnum: Array; + ValidateImageSourceTypeEnum: Array; + ValidateObjectSourceTypeEnum: Array; + VectorTileServerNameEnum: Array; +}; + +export type AppEnumCollectionAssetMimetypeEnum = { + __typename?: 'AppEnumCollectionAssetMimetypeEnum'; + key: AssetMimetypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionAssetTypeEnum = { + __typename?: 'AppEnumCollectionAssetTypeEnum'; + key: AssetTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionContributorUserGroupMembershipLogActionEnum = { + __typename?: 'AppEnumCollectionContributorUserGroupMembershipLogActionEnum'; + key: ContributorUserGroupMembershipLogActionEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionFirebasePushStatusEnum = { + __typename?: 'AppEnumCollectionFirebasePushStatusEnum'; + key: FirebasePushStatusEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionGlobalExportAssetTypeEnum = { + __typename?: 'AppEnumCollectionGlobalExportAssetTypeEnum'; + key: GlobalExportAssetTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionIconEnum = { + __typename?: 'AppEnumCollectionIconEnum'; + key: IconEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionMappingSessionClientTypeEnum = { + __typename?: 'AppEnumCollectionMappingSessionClientTypeEnum'; + key: MappingSessionClientTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionOverlayLayerTypeEnum = { + __typename?: 'AppEnumCollectionOverlayLayerTypeEnum'; + key: OverlayLayerTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectAssetExportTypeEnum = { + __typename?: 'AppEnumCollectionProjectAssetExportTypeEnum'; + key: ProjectAssetExportTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectAssetInputTypeEnum = { + __typename?: 'AppEnumCollectionProjectAssetInputTypeEnum'; + key: ProjectAssetInputTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectProcessingStatusEnum = { + __typename?: 'AppEnumCollectionProjectProcessingStatusEnum'; + key: ProjectProcessingStatusEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectProgressStatusEnum = { + __typename?: 'AppEnumCollectionProjectProgressStatusEnum'; + key: ProjectProgressStatusEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectStatusEnum = { + __typename?: 'AppEnumCollectionProjectStatusEnum'; + key: ProjectStatusEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionProjectTypeEnum = { + __typename?: 'AppEnumCollectionProjectTypeEnum'; + key: ProjectTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionRasterTileServerNameEnum = { + __typename?: 'AppEnumCollectionRasterTileServerNameEnum'; + key: RasterTileServerNameEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionSubGridSizeEnum = { + __typename?: 'AppEnumCollectionSubGridSizeEnum'; + key: SubGridSizeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionTutorialAssetInputTypeEnum = { + __typename?: 'AppEnumCollectionTutorialAssetInputTypeEnum'; + key: TutorialAssetInputTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionTutorialInformationPageBlockTypeEnum = { + __typename?: 'AppEnumCollectionTutorialInformationPageBlockTypeEnum'; + key: TutorialInformationPageBlockTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionTutorialStatusEnum = { + __typename?: 'AppEnumCollectionTutorialStatusEnum'; + key: TutorialStatusEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionValidateImageSourceTypeEnum = { + __typename?: 'AppEnumCollectionValidateImageSourceTypeEnum'; + key: ValidateImageSourceTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionValidateObjectSourceTypeEnum = { + __typename?: 'AppEnumCollectionValidateObjectSourceTypeEnum'; + key: ValidateObjectSourceTypeEnum; + label: Scalars['String']; +}; + +export type AppEnumCollectionVectorTileServerNameEnum = { + __typename?: 'AppEnumCollectionVectorTileServerNameEnum'; + key: VectorTileServerNameEnum; + label: Scalars['String']; +}; + +export enum AssetMimetypeEnum { + Csv = 'CSV', + Geojson = 'GEOJSON', + Gzip = 'GZIP', + ImageGif = 'IMAGE_GIF', + ImageJpeg = 'IMAGE_JPEG', + ImagePng = 'IMAGE_PNG', + Json = 'JSON', + Plaintext = 'PLAINTEXT' +} + +export type AssetMimetypeEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export enum AssetTypeEnum { + Debug = 'DEBUG', + Export = 'EXPORT', + Input = 'INPUT', + Output = 'OUTPUT' +} + +export type AssetTypeEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export type AssetTypeSpecificInput = + { objectImage: ObjectImageAssetPropertyInput; }; + +export type BoolBaseFilterLookup = { + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; +}; + +export type CommunityFilteredStats = { + __typename?: 'CommunityFilteredStats'; + areaSwipedByProjectType: Array; + swipeByOrganizationName: Array; + swipeByProjectGeo: Array; + swipeByProjectType: Array; + swipeTimeByDate: Array; +}; + +export type CommunityStatsType = { + __typename?: 'CommunityStatsType'; + id: Scalars['ID']; + totalContributors: Scalars['Int']; + totalSwipes: Scalars['Int']; + totalUserGroups: Scalars['Int']; +}; + +export type CompareProjectPropertyInput = { + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + tileServerBProperty: ProjectRasterTileServerConfigInput; + tileServerProperty: ProjectRasterTileServerConfigInput; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type CompareProjectPropertyType = { + __typename?: 'CompareProjectPropertyType'; + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + tileServerBProperty: ProjectRasterTileServerConfig; + tileServerProperty: ProjectRasterTileServerConfig; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type CompareProjectPropertyTypeFindProjectPropertyTypeValidateProjectPropertyTypeValidateImageProjectPropertyTypeCompletenessProjectPropertyTypeStreetProjectPropertyTypeLocateProjectPropertyType = CompareProjectPropertyType | CompletenessProjectPropertyType | FindProjectPropertyType | LocateProjectPropertyType | StreetProjectPropertyType | ValidateImageProjectPropertyType | ValidateProjectPropertyType; + +export type CompareTutorialTaskPropertyInput = { + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type CompareTutorialTaskPropertyType = { + __typename?: 'CompareTutorialTaskPropertyType'; + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type CompareTutorialTaskPropertyTypeFindTutorialTaskPropertyTypeValidateTutorialTaskPropertyTypeValidateImageTutorialTaskPropertyTypeCompletenessTutorialTaskPropertyTypeStreetTutorialTaskPropertyTypeLocateTutorialTaskPropertyType = CompareTutorialTaskPropertyType | CompletenessTutorialTaskPropertyType | FindTutorialTaskPropertyType | LocateTutorialTaskPropertyType | StreetTutorialTaskPropertyType | ValidateImageTutorialTaskPropertyType | ValidateTutorialTaskPropertyType; + +export type CompletenessProjectPropertyInput = { + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + overlayTileServerProperty: ProjectOverlayTileServerConfigInput; + tileServerProperty: ProjectRasterTileServerConfigInput; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type CompletenessProjectPropertyType = { + __typename?: 'CompletenessProjectPropertyType'; + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + overlayTileServerProperty: ProjectOverlayTileServerConfig; + tileServerProperty: ProjectRasterTileServerConfig; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type CompletenessTutorialTaskPropertyInput = { + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type CompletenessTutorialTaskPropertyType = { + __typename?: 'CompletenessTutorialTaskPropertyType'; + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type ContributorSwipeStatType = { + __typename?: 'ContributorSwipeStatType'; + taskDate: Scalars['Date']; + totalSwipes: Scalars['Int']; +}; + +/** + * Model representing a private team that contributor users can be assigned to. + * + * Team membership is managed exclusively by system managers; contributor users + * cannot join or leave teams on their own. Members of a team can only access + * projects linked to that team. + */ +export type ContributorTeamFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + id?: InputMaybe; + isArchived?: InputMaybe; + name?: InputMaybe; +}; + +export type ContributorTeamOrder = { + id?: InputMaybe; + name?: InputMaybe; +}; + +/** + * Model representing a private team that contributor users can be assigned to. + * + * Team membership is managed exclusively by system managers; contributor users + * cannot join or leave teams on their own. Members of a team can only access + * projects linked to that team. + */ +export type ContributorTeamType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { + __typename?: 'ContributorTeamType'; + archivedAt?: Maybe; + archivedBy?: Maybe; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + firebaseId: Scalars['String']; + /** The latest time when resource was pushed to firebase */ + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; + id: Scalars['ID']; + isArchived: Scalars['Boolean']; + members: ContributorUserTypeOffsetPaginated; + membersCount: Scalars['Int']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + name: Scalars['String']; +}; + + +/** + * Model representing a private team that contributor users can be assigned to. + * + * Team membership is managed exclusively by system managers; contributor users + * cannot join or leave teams on their own. Members of a team can only access + * projects linked to that team. + */ +export type ContributorTeamTypeMembersArgs = { + pagination?: InputMaybe; +}; + +export type ContributorTeamTypeOffsetPaginated = { + __typename?: 'ContributorTeamTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ContributorTimeStatType = { + __typename?: 'ContributorTimeStatType'; + date: Scalars['Date']; + /** total swipe time (seconds) */ + totalSwipeTime: Scalars['Int']; +}; + +/** + * Model representing contributors synchronized from firebase. + * + * Contributor accounts are typically created in firebase and then synced into this system. + * A contributor user may or may not be linked to a corresponding user in the system. + */ +export type ContributorUserFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + /** Firebase User ID (External) */ + firebaseId?: InputMaybe; + id?: InputMaybe; + teamId?: InputMaybe; + username?: InputMaybe; +}; + +export type ContributorUserFilteredStats = ContributorUserUserGroupBaseFilterStatsQuery & { + __typename?: 'ContributorUserFilteredStats'; + areaSwipedByProjectType: Array; + id: Scalars['ID']; + swipeByDate: Array; + swipeByOrganizationName: Array; + swipeByProjectGeo: Array; + swipeByProjectType: Array; + swipeTimeByDate: Array; +}; + +/** + * Model representing a group that contributor users can join or leave. + * + * Groups are used to aggregate contributions made by users within the group, + * facilitating management and organization of collective efforts. + */ +export type ContributorUserGroupCreateInput = { + clientId: Scalars['String']; + description: Scalars['String']; + name: Scalars['String']; +}; + +/** + * Model representing a group that contributor users can join or leave. + * + * Groups are used to aggregate contributions made by users within the group, + * facilitating management and organization of collective efforts. + */ +export type ContributorUserGroupFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + id?: InputMaybe; + isArchived?: InputMaybe; + name?: InputMaybe; + userFirebaseId?: InputMaybe; +}; + +export type ContributorUserGroupFilteredStats = ContributorUserUserGroupBaseFilterStatsQuery & { + __typename?: 'ContributorUserGroupFilteredStats'; + areaSwipedByProjectType: Array; + swipeByDate: Array; + swipeByOrganizationName: Array; + swipeByProjectGeo: Array; + swipeByProjectType: Array; + swipeTimeByDate: Array; +}; + +export type ContributorUserGroupLatestStatsType = { + __typename?: 'ContributorUserGroupLatestStatsType'; + totalContributors: Scalars['Int']; + totalMappingProjects: Scalars['Int']; + /** total swipe time (seconds) */ + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; +}; + +/** Model representing membership of contributor users in contributor user groups. */ +export type ContributorUserGroupMembershipFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + id?: InputMaybe; + userGroupId?: InputMaybe; +}; + +export enum ContributorUserGroupMembershipLogActionEnum { + Join = 'JOIN', + Leave = 'LEAVE' +} + +export type ContributorUserGroupMembershipOrder = { + id?: InputMaybe; +}; + +/** Model representing membership of contributor users in contributor user groups. */ +export type ContributorUserGroupMembershipType = { + __typename?: 'ContributorUserGroupMembershipType'; + id: Scalars['ID']; + isActive: Scalars['Boolean']; + totalMappingProjects: Scalars['Int']; + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; + user: ContributorUserType; + userId: Scalars['ID']; +}; + +export type ContributorUserGroupMembershipTypeOffsetPaginated = { + __typename?: 'ContributorUserGroupMembershipTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ContributorUserGroupOrder = { + id?: InputMaybe; + name?: InputMaybe; +}; + +export type ContributorUserGroupStats = { + __typename?: 'ContributorUserGroupStats'; + filteredStats: ContributorUserGroupFilteredStats; + id: Scalars['ID']; + stats: ContributorUserGroupStatsType; + /** Stats from last 30 days */ + statsLatest: ContributorUserGroupLatestStatsType; +}; + + +export type ContributorUserGroupStatsFilteredStatsArgs = { + dateRange?: InputMaybe; +}; + +export type ContributorUserGroupStatsType = { + __typename?: 'ContributorUserGroupStatsType'; + totalAreaSwiped: Scalars['AreaSqKm']; + totalContributors: Scalars['Int']; + totalMappingProjects: Scalars['Int']; + totalOrganization: Scalars['Int']; + /** total swipe time (seconds) */ + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; +}; + +/** + * Model representing a group that contributor users can join or leave. + * + * Groups are used to aggregate contributions made by users within the group, + * facilitating management and organization of collective efforts. + */ +export type ContributorUserGroupType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { + __typename?: 'ContributorUserGroupType'; + archivedAt?: Maybe; + archivedBy?: Maybe; + clientId: Scalars['String']; + communityDashboardUrl: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + description: Scalars['String']; + firebaseId: Scalars['String']; + /** The latest time when resource was pushed to firebase */ + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; + id: Scalars['ID']; + isArchived: Scalars['Boolean']; + membersCount: Scalars['Int']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + name: Scalars['String']; + userMemberships: ContributorUserGroupMembershipTypeOffsetPaginated; +}; + + +/** + * Model representing a group that contributor users can join or leave. + * + * Groups are used to aggregate contributions made by users within the group, + * facilitating management and organization of collective efforts. + */ +export type ContributorUserGroupTypeUserMembershipsArgs = { + pagination?: InputMaybe; +}; + +export type ContributorUserGroupTypeMutationResponseType = { + __typename?: 'ContributorUserGroupTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type ContributorUserGroupTypeOffsetPaginated = { + __typename?: 'ContributorUserGroupTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +/** + * Model representing a group that contributor users can join or leave. + * + * Groups are used to aggregate contributions made by users within the group, + * facilitating management and organization of collective efforts. + */ +export type ContributorUserGroupUpdateInput = { + clientId: Scalars['String']; + description?: InputMaybe; + isArchived?: InputMaybe; + name?: InputMaybe; +}; + +export type ContributorUserLatestStatsType = { + __typename?: 'ContributorUserLatestStatsType'; + /** total swipe time (seconds) */ + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; + totalUserGroups: Scalars['Int']; +}; + +export type ContributorUserOrder = { + id?: InputMaybe; + username?: InputMaybe; +}; + +export type ContributorUserStatType = { + __typename?: 'ContributorUserStatType'; + totalAreaSwiped: Scalars['AreaSqKm']; + totalMappingProjects: Scalars['Int']; + totalOrganization: Scalars['Int']; + /** total swipe time (seconds) */ + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; +}; + +export type ContributorUserStats = { + __typename?: 'ContributorUserStats'; + filteredStats: ContributorUserFilteredStats; + firebaseId: Scalars['ID']; + id: Scalars['ID']; + stats: ContributorUserStatType; + /** Stats from last 30 days */ + statsLatest: ContributorUserLatestStatsType; +}; + + +export type ContributorUserStatsFilteredStatsArgs = { + dateRange?: InputMaybe; +}; + +/** + * Model representing contributors synchronized from firebase. + * + * Contributor accounts are typically created in firebase and then synced into this system. + * A contributor user may or may not be linked to a corresponding user in the system. + */ +export type ContributorUserType = { + __typename?: 'ContributorUserType'; + communityDashboardUrl: Scalars['String']; + createdAt?: Maybe; + /** Firebase User ID (External) */ + firebaseId: Scalars['ID']; + id: Scalars['ID']; + totalMappingProjects: Scalars['Int']; + totalSwipeTime: Scalars['Int']; + totalSwipes: Scalars['Int']; + username: Scalars['String']; +}; + +export type ContributorUserTypeOffsetPaginated = { + __typename?: 'ContributorUserTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ContributorUserUserGroupBaseFilterStatsQuery = { + areaSwipedByProjectType: Array; + swipeByDate: Array; + swipeByOrganizationName: Array; + swipeByProjectGeo: Array; + swipeByProjectType: Array; + swipeTimeByDate: Array; +}; + +export type CreateContributorUserGroupPayload = ContributorUserGroupTypeMutationResponseType | OperationInfo; + +export type CreateOrganizationPayload = OperationInfo | OrganizationTypeMutationResponseType; + +export type CreateProjectAssetPayload = OperationInfo | ProjectAssetTypeMutationResponseType; + +export type CreateProjectPayload = OperationInfo | ProjectTypeMutationResponseType; + +export type CreateTutorialAssetPayload = OperationInfo | TutorialAssetTypeMutationResponseType; + +export type CreateTutorialPayload = OperationInfo | TutorialTypeMutationResponseType; + +export type CustomOptionInput = { + /** ULID value */ + clientId: Scalars['String']; + description: Scalars['String']; + icon: IconEnum; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + iconColor: Scalars['String']; + subOptions?: InputMaybe>; + title: Scalars['String']; + /** Positive integer value */ + value: Scalars['Int']; +}; + +export type CustomOptionType = { + __typename?: 'CustomOptionType'; + description: Scalars['String']; + icon: IconEnum; + iconColor: Scalars['String']; + title: Scalars['String']; + value: Scalars['Int']; +}; + +export type CustomSubOptionInput = { + /** ULID value */ + clientId: Scalars['String']; + description: Scalars['String']; + /** Positive integer value */ + value: Scalars['Int']; +}; + +export type DateRangeInput = { + fromDate: Scalars['Date']; + toDate: Scalars['Date']; +}; + +export type DeleteInput = { + id: Scalars['ID']; +}; + +export type DeleteProjectAssetsPayload = OperationInfo | ProjectAssetsDeleteTypeMutationResponseType; + +export type DeleteProjectPayload = OperationInfo | ProjectType; + +export type DeleteTutorialPayload = OperationInfo | TutorialType; + +export type FindProjectPropertyInput = { + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + tileServerProperty: ProjectRasterTileServerConfigInput; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type FindProjectPropertyType = { + __typename?: 'FindProjectPropertyType'; + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + tileServerProperty: ProjectRasterTileServerConfig; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type FindTutorialTaskPropertyInput = { + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type FindTutorialTaskPropertyType = { + __typename?: 'FindTutorialTaskPropertyType'; + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type FirebaseOrInternalIdInputType = + { firebaseId: Scalars['ID']; id?: never; } + | { firebaseId?: never; id: Scalars['ID']; }; + +export type FirebasePushResourceTypeMixin = { + firebaseId: Scalars['String']; + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; +}; + +export enum FirebasePushStatusEnum { + Failed = 'FAILED', + Pending = 'PENDING', + Processing = 'PROCESSING', + Success = 'SUCCESS' +} + +/** Model representing an area. */ +export type GeometryType = { + __typename?: 'GeometryType'; + bbox?: Maybe; + centroid?: Maybe; + id: Scalars['ID']; + totalArea?: Maybe; +}; + +/** Model representing a global export asset with associated metadata. */ +export type GlobalExportAssetType = { + __typename?: 'GlobalExportAssetType'; + /** The file associated with the asset */ + file?: Maybe; + /** The size of the file in bytes */ + fileSize: Scalars['Int']; + lastUpdatedAt: Scalars['DateTime']; + type: GlobalExportAssetTypeEnum; +}; + +export enum GlobalExportAssetTypeEnum { + ProjectsCentroidGeojson = 'PROJECTS_CENTROID_GEOJSON', + ProjectsCsv = 'PROJECTS_CSV', + ProjectsGeomGeojson = 'PROJECTS_GEOM_GEOJSON', + ProjectStatsByTypes = 'PROJECT_STATS_BY_TYPES' +} + +export type IdBaseFilterLookup = { + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; +}; + +export enum IconEnum { + AddOutline = 'ADD_OUTLINE', + AlertOutline = 'ALERT_OUTLINE', + BanOutline = 'BAN_OUTLINE', + Check = 'CHECK', + CheckmarkOutline = 'CHECKMARK_OUTLINE', + CloseOutline = 'CLOSE_OUTLINE', + EggOutline = 'EGG_OUTLINE', + EllipseOutline = 'ELLIPSE_OUTLINE', + FlagOutline = 'FLAG_OUTLINE', + GeneralTap = 'GENERAL_TAP', + HandLeftOutline = 'HAND_LEFT_OUTLINE', + HandRightOutline = 'HAND_RIGHT_OUTLINE', + HappyOutline = 'HAPPY_OUTLINE', + HeartOutline = 'HEART_OUTLINE', + HelpOutline = 'HELP_OUTLINE', + InformationOutline = 'INFORMATION_OUTLINE', + PrismOutline = 'PRISM_OUTLINE', + RefreshOutline = 'REFRESH_OUTLINE', + RemoveOutline = 'REMOVE_OUTLINE', + SadOutline = 'SAD_OUTLINE', + SearchOutline = 'SEARCH_OUTLINE', + ShapesOutline = 'SHAPES_OUTLINE', + SquareOutline = 'SQUARE_OUTLINE', + StarOutline = 'STAR_OUTLINE', + SwipeLeft = 'SWIPE_LEFT', + Tap = 'TAP', + Tap_1 = 'TAP_1', + Tap_2 = 'TAP_2', + Tap_3 = 'TAP_3', + ThumbsDownOutline = 'THUMBS_DOWN_OUTLINE', + ThumbsUpOutline = 'THUMBS_UP_OUTLINE', + TriangleOutline = 'TRIANGLE_OUTLINE', + WarningOutline = 'WARNING_OUTLINE' +} + +export type IntComparisonFilterLookup = { + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Greater than. Filter will be skipped on `null` value */ + gt?: InputMaybe; + /** Greater than or equal to. Filter will be skipped on `null` value */ + gte?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Less than. Filter will be skipped on `null` value */ + lt?: InputMaybe; + /** Less than or equal to. Filter will be skipped on `null` value */ + lte?: InputMaybe; + /** Inclusive range test (between) */ + range?: InputMaybe; +}; + +export type IntRangeLookup = { + end?: InputMaybe; + start?: InputMaybe; +}; + +export type LocateProjectPropertyInput = { + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + customOptions?: InputMaybe>; + exportMetaKey: Scalars['String']; + exportMetaValue: Scalars['String']; + subGridSize: SubGridSizeEnum; + tileServerProperty: ProjectRasterTileServerConfigInput; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type LocateProjectPropertyType = { + __typename?: 'LocateProjectPropertyType'; + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + customOptions?: Maybe>; + exportMetaKey: Scalars['String']; + exportMetaValue: Scalars['String']; + subGridSize: SubGridSizeEnum; + tileServerProperty: ProjectRasterTileServerConfig; + /** Zoom level from 14 to 22 */ + zoomLevel: Scalars['Int']; +}; + +export type LocateTutorialTaskPropertyInput = { + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type LocateTutorialTaskPropertyType = { + __typename?: 'LocateTutorialTaskPropertyType'; + tileX: Scalars['Int']; + tileY: Scalars['Int']; + tileZ: Scalars['Int']; +}; + +export type MapContributionStatsType = { + __typename?: 'MapContributionStatsType'; + geojson: Scalars['GenericJSON']; + totalContribution: Scalars['Int']; +}; + +export enum MappingSessionClientTypeEnum { + MobileAndroid = 'MOBILE_ANDROID', + MobileIos = 'MOBILE_IOS', + Unknown = 'UNKNOWN', + Web = 'WEB' +} + +export type MapswipeDjangoFileType = { + __typename?: 'MapswipeDjangoFileType'; + name: Scalars['String']; + url: Scalars['String']; +}; + +export type Mutation = { + __typename?: 'Mutation'; + createContributorUserGroup: CreateContributorUserGroupPayload; + createOrganization: CreateOrganizationPayload; + createProject: CreateProjectPayload; + createProjectAsset: CreateProjectAssetPayload; + createTutorial: CreateTutorialPayload; + createTutorialAsset: CreateTutorialAssetPayload; + deleteProject: DeleteProjectPayload; + deleteProjectAssets: DeleteProjectAssetsPayload; + deleteTutorial: DeleteTutorialPayload; + login: UserMeType; + logout: Scalars['Boolean']; + updateContributorUserGroup: UpdateContributorUserGroupPayload; + updateOrganization: UpdateOrganizationPayload; + updateProcessedProject: UpdateProcessedProjectPayload; + updateProject: UpdateProjectPayload; + updateProjectStatus: UpdateProjectStatusPayload; + updateTutorial: UpdateTutorialPayload; + updateTutorialStatus: UpdateTutorialStatusPayload; +}; + + +export type MutationCreateContributorUserGroupArgs = { + data: ContributorUserGroupCreateInput; +}; + + +export type MutationCreateOrganizationArgs = { + data: OrganizationCreateInput; +}; + + +export type MutationCreateProjectArgs = { + data: ProjectCreateInput; +}; + + +export type MutationCreateProjectAssetArgs = { + data: ProjectAssetCreateInput; +}; + + +export type MutationCreateTutorialArgs = { + data: TutorialCreateInput; +}; + + +export type MutationCreateTutorialAssetArgs = { + data: TutorialAssetCreateInput; +}; + + +export type MutationDeleteProjectAssetsArgs = { + assetInputType: Array; + projectId: Scalars['ID']; +}; + + +export type MutationLoginArgs = { + password: Scalars['String']; + username: Scalars['String']; +}; + + +export type MutationUpdateContributorUserGroupArgs = { + data: ContributorUserGroupUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateOrganizationArgs = { + data: OrganizationUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateProcessedProjectArgs = { + data: ProcessedProjectUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateProjectArgs = { + data: ProjectUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateProjectStatusArgs = { + data: ProjectStatusUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateTutorialArgs = { + data: TutorialUpdateInput; + pk: Scalars['ID']; +}; + + +export type MutationUpdateTutorialStatusArgs = { + data: TutorialStatusUpdateInput; + pk: Scalars['ID']; +}; + +export type ObjectImageAnnotationInput = { + area?: InputMaybe; + bbox: Array; + categoryId?: InputMaybe; + /** Numeric value as string */ + id: Scalars['String']; + imageId?: InputMaybe; + iscrowd?: InputMaybe; + segmentation?: InputMaybe>>; +}; + +export type ObjectImageAnnotationType = { + __typename?: 'ObjectImageAnnotationType'; + area?: Maybe; + bbox: Array; + categoryId?: Maybe; + /** Numeric value as string */ + id: Scalars['String']; + imageId?: Maybe; + iscrowd?: Maybe; + segmentation?: Maybe>>; +}; + +export type ObjectImageAssetPropertyInput = { + annotations?: InputMaybe>; + image: ObjectImageInput; +}; + +export type ObjectImageAssetPropertyType = { + __typename?: 'ObjectImageAssetPropertyType'; + annotations?: Maybe>; + image: ObjectImageType; +}; + +export type ObjectImageInput = { + cocoUrl?: InputMaybe; + dateCaptured?: InputMaybe; + fileName: Scalars['String']; + flickrUrl?: InputMaybe; + height?: InputMaybe; + /** Numeric value as string */ + id: Scalars['String']; + license?: InputMaybe; + width?: InputMaybe; +}; + +export type ObjectImageType = { + __typename?: 'ObjectImageType'; + cocoUrl?: Maybe; + dateCaptured?: Maybe; + fileName: Scalars['String']; + flickrUrl?: Maybe; + height?: Maybe; + /** Numeric value as string */ + id: Scalars['String']; + license?: Maybe; + width?: Maybe; +}; + +export type OffsetPaginationInfo = { + __typename?: 'OffsetPaginationInfo'; + limit?: Maybe; + offset: Scalars['Int']; +}; + +export type OffsetPaginationInput = { + limit?: InputMaybe; + offset?: Scalars['Int']; +}; + +export type OperationInfo = { + __typename?: 'OperationInfo'; + /** List of messages returned by the operation. */ + messages: Array; +}; + +export type OperationMessage = { + __typename?: 'OperationMessage'; + /** The error code, or `null` if no error code was set. */ + code?: Maybe; + /** The field that caused the error, or `null` if it isn't associated with any particular field. */ + field?: Maybe; + /** The kind of this message. */ + kind: OperationMessageKind; + /** The error message. */ + message: Scalars['String']; +}; + +export enum OperationMessageKind { + Error = 'ERROR', + Info = 'INFO', + Permission = 'PERMISSION', + Validation = 'VALIDATION', + Warning = 'WARNING' +} + +export enum Ordering { + Asc = 'ASC', + AscNullsFirst = 'ASC_NULLS_FIRST', + AscNullsLast = 'ASC_NULLS_LAST', + Desc = 'DESC', + DescNullsFirst = 'DESC_NULLS_FIRST', + DescNullsLast = 'DESC_NULLS_LAST' +} + +/** Model representing the organization requesting the project. */ +export type OrganizationCreateInput = { + abbreviation?: InputMaybe; + clientId: Scalars['String']; + description?: InputMaybe; + name: Scalars['String']; +}; + +/** Model representing the organization requesting the project. */ +export type OrganizationFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + id?: InputMaybe; + isArchived?: InputMaybe; + name?: InputMaybe; +}; + +export type OrganizationOrder = { + id?: InputMaybe; + name?: InputMaybe; +}; + +export type OrganizationSwipeStatsType = { + __typename?: 'OrganizationSwipeStatsType'; + organizationName: Scalars['String']; + totalSwipes: Scalars['Int']; +}; + +/** Model representing the organization requesting the project. */ +export type OrganizationType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { + __typename?: 'OrganizationType'; + abbreviation?: Maybe; + archivedAt?: Maybe; + archivedBy?: Maybe; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + description?: Maybe; + firebaseId: Scalars['String']; + /** The latest time when resource was pushed to firebase */ + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; + id: Scalars['ID']; + isArchived: Scalars['Boolean']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + name: Scalars['String']; +}; + +export type OrganizationTypeMutationResponseType = { + __typename?: 'OrganizationTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type OrganizationTypeOffsetPaginated = { + __typename?: 'OrganizationTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +/** Model representing the organization requesting the project. */ +export type OrganizationUpdateInput = { + abbreviation?: InputMaybe; + clientId: Scalars['String']; + description?: InputMaybe; + isArchived?: InputMaybe; + name?: InputMaybe; +}; + +export enum OverlayLayerTypeEnum { + RasterTile = 'RASTER_TILE', + VectorTile = 'VECTOR_TILE' +} + +/** Model representing the project. */ +export type ProcessedProjectUpdateInput = { + /** Provide an optional link to a resource with additional information on the project */ + additionalInfoUrl?: InputMaybe; + clientId: Scalars['String']; + description?: InputMaybe; + image?: InputMaybe; + isFeatured?: InputMaybe; + /** What should the users look for (e.g. buildings, cars, trees) */ + lookFor?: InputMaybe; + /** How many tasks each user is allowed to work on for this project */ + maxTasksPerUser?: InputMaybe; + /** Provide project instruction */ + projectInstruction?: InputMaybe; + projectNumber?: InputMaybe; + region?: InputMaybe; + /** Which group, institution or community is requesting this project? */ + requestingOrganization?: InputMaybe; + team?: InputMaybe; + topic?: InputMaybe; + /** Tutorial used for this project. */ + tutorial?: InputMaybe; +}; + +/** Model representing assets for a project. */ +export type ProjectAssetCreateInput = { + assetTypeSpecifics?: InputMaybe; + clientId: Scalars['String']; + /** Provide link to the file associated with the asset */ + externalUrl?: InputMaybe; + /** The file associated with the asset */ + file?: InputMaybe; + inputType: ProjectAssetInputTypeEnum; + project: Scalars['ID']; +}; + +export enum ProjectAssetExportTypeEnum { + AggregatedResults = 'AGGREGATED_RESULTS', + AggregatedResultsWithGeometry = 'AGGREGATED_RESULTS_WITH_GEOMETRY', + AreaOfInterest = 'AREA_OF_INTEREST', + Groups = 'GROUPS', + History = 'HISTORY', + HotTaskingManagerGeometries = 'HOT_TASKING_MANAGER_GEOMETRIES', + ModerateToHighAgreementYesMaybeGeometries = 'MODERATE_TO_HIGH_AGREEMENT_YES_MAYBE_GEOMETRIES', + Results = 'RESULTS', + Tasks = 'TASKS', + Users = 'USERS' +} + +export type ProjectAssetExportTypeEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +/** Model representing assets for a project. */ +export type ProjectAssetFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + exportType?: InputMaybe; + id?: InputMaybe; + inputType?: InputMaybe; + mimetype?: InputMaybe; + projectId?: InputMaybe; + type?: InputMaybe; +}; + +export enum ProjectAssetInputTypeEnum { + AoiGeometry = 'AOI_GEOMETRY', + CoverImage = 'COVER_IMAGE', + ObjectImage = 'OBJECT_IMAGE' +} + +export type ProjectAssetInputTypeEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export type ProjectAssetOrder = { + id?: InputMaybe; +}; + +/** Model representing assets for a project. */ +export type ProjectAssetType = UserResourceTypeMixin & { + __typename?: 'ProjectAssetType'; + assetTypeSpecifics?: Maybe; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + exportType?: Maybe; + /** Provide link to the file associated with the asset */ + externalUrl?: Maybe; + /** The file associated with the asset */ + file?: Maybe; + /** The size of the file in bytes */ + fileSize: Scalars['Int']; + id: Scalars['ID']; + inputType?: Maybe; + /** If this flag is enabled, this asset will be deleted in the future */ + markedAsDeleted: Scalars['Boolean']; + mimetype?: Maybe; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + projectId: Scalars['ID']; + type: AssetTypeEnum; +}; + +export type ProjectAssetTypeMutationResponseType = { + __typename?: 'ProjectAssetTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type ProjectAssetTypeOffsetPaginated = { + __typename?: 'ProjectAssetTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ProjectAssetsDeleteType = { + __typename?: 'ProjectAssetsDeleteType'; + count: Scalars['Int']; +}; + +export type ProjectAssetsDeleteTypeMutationResponseType = { + __typename?: 'ProjectAssetsDeleteTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +/** Model representing the project. */ +export type ProjectCreateInput = { + /** Provide an optional link to a resource with additional information on the project */ + additionalInfoUrl?: InputMaybe; + clientId: Scalars['String']; + description?: InputMaybe; + /** What should the users look for (e.g. buildings, cars, trees) */ + lookFor?: InputMaybe; + /** Provide project instruction */ + projectInstruction: Scalars['String']; + projectNumber: Scalars['Int']; + projectType: ProjectTypeEnum; + region: Scalars['String']; + /** Which group, institution or community is requesting this project? */ + requestingOrganization: Scalars['ID']; + team?: InputMaybe; + topic: Scalars['String']; +}; + +export type ProjectCustomOption = { + __typename?: 'ProjectCustomOption'; + /** ULID value */ + clientId: Scalars['String']; + description: Scalars['String']; + icon: IconEnum; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + iconColor: Scalars['String']; + subOptions?: Maybe>; + title: Scalars['String']; + /** Positive integer value */ + value: Scalars['Int']; +}; + +export type ProjectCustomSubOption = { + __typename?: 'ProjectCustomSubOption'; + /** ULID value */ + clientId: Scalars['String']; + description: Scalars['String']; + /** Positive integer value */ + value: Scalars['Int']; +}; + +export type ProjectExportAssetTypeMixin = { + exportAggregatedResults?: Maybe; + exportAggregatedResultsWithGeometry?: Maybe; + exportAreaOfInterest?: Maybe; + exportGroups?: Maybe; + exportHistory?: Maybe; + exportHotTaskingManagerGeometries?: Maybe; + exportModerateToHighAgreementYesMaybeGeometries?: Maybe; + exportResults?: Maybe; + exportTasks?: Maybe; + exportUsers?: Maybe; +}; + +/** Model representing the project. */ +export type ProjectFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + createdById?: InputMaybe; + id?: InputMaybe; + isFeatured?: InputMaybe; + /** If the project is private, then it is only visible to the team members. */ + isPrivate?: InputMaybe; + name?: InputMaybe; + oldId?: InputMaybe; + progressStatus?: InputMaybe; + projectNumber?: InputMaybe; + projectType?: InputMaybe; + region?: InputMaybe; + /** Which group, institution or community is requesting this project? */ + requestingOrganizationId?: InputMaybe; + status?: InputMaybe; + teamId?: InputMaybe; + topic?: InputMaybe; +}; + +export type ProjectNameInput = { + projectNumber: Scalars['Int']; + projectType: ProjectTypeEnum; + region: Scalars['String']; + requestingOrganizationId: Scalars['ID']; + topic: Scalars['String']; +}; + +export type ProjectOrder = { + id?: InputMaybe; + name?: InputMaybe; + topic?: InputMaybe; +}; + +export type ProjectOverlayRasterTileServerConfig = { + __typename?: 'ProjectOverlayRasterTileServerConfig'; + /** Float value from 0.0 to 1.0 */ + opacity: Scalars['Float']; + tileServer: ProjectRasterTileServerConfig; +}; + +export type ProjectOverlayRasterTileServerConfigInput = { + /** Float value from 0.0 to 1.0 */ + opacity: Scalars['Float']; + tileServer: ProjectRasterTileServerConfigInput; +}; + +export type ProjectOverlayTileServerConfig = { + __typename?: 'ProjectOverlayTileServerConfig'; + raster?: Maybe; + type: OverlayLayerTypeEnum; + vector?: Maybe; +}; + +export type ProjectOverlayTileServerConfigInput = { + raster?: InputMaybe; + type: OverlayLayerTypeEnum; + vector?: InputMaybe; +}; + +export type ProjectOverlayVectorTileServerConfig = { + __typename?: 'ProjectOverlayVectorTileServerConfig'; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + circleColor: Scalars['String']; + /** Float value from 0.0 to 1.0 */ + circleOpacity: Scalars['Float']; + /** Positive float value */ + circleRadius: Scalars['Float']; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + fillColor: Scalars['String']; + /** Float value from 0.0 to 1.0 */ + fillOpacity: Scalars['Float']; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + lineColor: Scalars['String']; + lineDasharray: Array; + /** Float value from 0.0 to 1.0 */ + lineOpacity: Scalars['Float']; + /** Positive float value */ + lineWidth: Scalars['Float']; + tileServer: ProjectVectorTileServerConfig; +}; + +export type ProjectOverlayVectorTileServerConfigInput = { + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + circleColor: Scalars['String']; + /** Float value from 0.0 to 1.0 */ + circleOpacity: Scalars['Float']; + /** Positive float value */ + circleRadius: Scalars['Float']; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + fillColor: Scalars['String']; + /** Float value from 0.0 to 1.0 */ + fillOpacity: Scalars['Float']; + /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ + lineColor: Scalars['String']; + lineDasharray: Array; + /** Float value from 0.0 to 1.0 */ + lineOpacity: Scalars['Float']; + /** Positive float value */ + lineWidth: Scalars['Float']; + tileServer: ProjectVectorTileServerConfigInput; +}; + +export enum ProjectProcessingStatusEnum { + AnalyzingGroupsAndTask = 'ANALYZING_GROUPS_AND_TASK', + Completed = 'COMPLETED', + GeneratingGroupsAndTasks = 'GENERATING_GROUPS_AND_TASKS', + GeneratingTasksGeojson = 'GENERATING_TASKS_GEOJSON', + Preparing = 'PREPARING', + ValidatingGeometry = 'VALIDATING_GEOMETRY' +} + +export enum ProjectProgressStatusEnum { + Completed = 'COMPLETED', + OnGoing = 'ON_GOING' +} + +export type ProjectProgressStatusEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export type ProjectRasterTileServerCommonConfig = { + __typename?: 'ProjectRasterTileServerCommonConfig'; + credits: Scalars['String']; +}; + +export type ProjectRasterTileServerConfig = { + __typename?: 'ProjectRasterTileServerConfig'; + bing?: Maybe; + custom?: Maybe; + esri?: Maybe; + esriBeta?: Maybe; + mapbox?: Maybe; + maxarPremium?: Maybe; + maxarStandard?: Maybe; + name: RasterTileServerNameEnum; +}; + +export type ProjectRasterTileServerConfigInput = { + bing?: InputMaybe; + custom?: InputMaybe; + esri?: InputMaybe; + esriBeta?: InputMaybe; + mapbox?: InputMaybe; + maxarPremium?: InputMaybe; + maxarStandard?: InputMaybe; + name: RasterTileServerNameEnum; +}; + +export type ProjectRasterTileServerCustomConfig = { + __typename?: 'ProjectRasterTileServerCustomConfig'; + credits: Scalars['String']; + maxZoom?: Maybe; + minZoom?: Maybe; + url: Scalars['String']; +}; + +export enum ProjectStatusEnum { + Discarded = 'DISCARDED', + Draft = 'DRAFT', + Finished = 'FINISHED', + Paused = 'PAUSED', + Processed = 'PROCESSED', + ProcessingFailed = 'PROCESSING_FAILED', + Published = 'PUBLISHED', + PublishingFailed = 'PUBLISHING_FAILED', + ReadyToProcess = 'READY_TO_PROCESS', + ReadyToPublish = 'READY_TO_PUBLISH', + Withdrawn = 'WITHDRAWN' +} + +export type ProjectStatusEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +/** Model representing the project. */ +export type ProjectStatusUpdateInput = { + clientId: Scalars['String']; + status?: InputMaybe; +}; + +/** Model representing the project. */ +export type ProjectType = FirebasePushResourceTypeMixin & ProjectExportAssetTypeMixin & UserResourceTypeMixin & { + __typename?: 'ProjectType'; + /** Provide an optional link to a resource with additional information on the project */ + additionalInfoUrl?: Maybe; + aoiGeometry?: Maybe; + aoiGeometryInputAsset?: Maybe; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + description?: Maybe; + exportAggregatedResults?: Maybe; + exportAggregatedResultsWithGeometry?: Maybe; + exportAreaOfInterest?: Maybe; + exportGroups?: Maybe; + exportHistory?: Maybe; + exportHotTaskingManagerGeometries?: Maybe; + exportModerateToHighAgreementYesMaybeGeometries?: Maybe; + exportResults?: Maybe; + exportTasks?: Maybe; + exportUsers?: Maybe; + firebaseId: Scalars['String']; + /** The latest time when resource was pushed to firebase */ + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; + /** How big should a mapping session be? Group size refers to the number of tasks per mapping session. */ + groupSize: Scalars['Int']; + id: Scalars['ID']; + image?: Maybe; + isFeatured: Scalars['Boolean']; + /** If the project is private, then it is only visible to the team members. */ + isPrivate: Scalars['Boolean']; + /** Last recent contribution date */ + lastContributionDate?: Maybe; + /** What should the users look for (e.g. buildings, cars, trees) */ + lookFor?: Maybe; + /** How many tasks each user is allowed to work on for this project */ + maxTasksPerUser?: Maybe; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + /** Project name generated from topic, region, project number, and requesting organization name. */ + name: Scalars['String']; + /** Number of users who made contributions to this project */ + numberOfContributorUsers: Scalars['Int']; + /** Number of results contributed to this project */ + numberOfResults: Scalars['Int']; + /** Number of results contributed to this project that can be used to calculate the progress of this project. Max no. of results per task that can be used to calculate progress is equal to the `verification number` */ + numberOfResultsForProgress: Scalars['Int']; + oldId?: Maybe; + processingStatus?: Maybe; + /** Percentage of the required contribution that has been completed */ + progress: Scalars['Float']; + progressStatus: ProjectProgressStatusEnum; + /** Provide project instruction */ + projectInstruction?: Maybe; + projectNumber: Scalars['Int']; + projectType: ProjectTypeEnum; + projectTypeSpecificOutputAsset?: Maybe; + projectTypeSpecifics?: Maybe; + region: Scalars['String']; + /** Which group, institution or community is requesting this project? */ + requestingOrganization: OrganizationType; + /** Which group, institution or community is requesting this project? */ + requestingOrganizationId: Scalars['ID']; + requiredResults: Scalars['Int']; + status: ProjectStatusEnum; + statusMessage?: Maybe; + team?: Maybe; + topic: Scalars['String']; + /** @deprecated Use AOI Geometry instead */ + totalArea?: Maybe; + /** Tutorial used for this project. */ + tutorial?: Maybe; + /** Tutorial used for this project. */ + tutorialId?: Maybe; + /** How many people do you want to see every tile before you consider it finished? */ + verificationNumber: Scalars['Int']; + websiteUrl: Scalars['String']; +}; + +export type ProjectTypeAreaStatsType = { + __typename?: 'ProjectTypeAreaStatsType'; + projectType: ProjectTypeEnum; + projectTypeDisplay: Scalars['String']; + totalArea: Scalars['AreaSqKm']; +}; + +export enum ProjectTypeEnum { + Compare = 'COMPARE', + Completeness = 'COMPLETENESS', + Find = 'FIND', + Locate = 'LOCATE', + Street = 'STREET', + Validate = 'VALIDATE', + ValidateImage = 'VALIDATE_IMAGE' +} + +export type ProjectTypeEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export type ProjectTypeMutationResponseType = { + __typename?: 'ProjectTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type ProjectTypeOffsetPaginated = { + __typename?: 'ProjectTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ProjectTypeSpecificInput = + { compare: CompareProjectPropertyInput; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness: CompletenessProjectPropertyInput; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find: FindProjectPropertyInput; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate: LocateProjectPropertyInput; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street: StreetProjectPropertyInput; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate: ValidateProjectPropertyInput; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage: ValidateImageProjectPropertyInput; }; + +export type ProjectTypeSwipeStatsType = { + __typename?: 'ProjectTypeSwipeStatsType'; + projectType: ProjectTypeEnum; + projectTypeDisplay: Scalars['String']; + totalSwipes: Scalars['Int']; +}; + +/** Model representing the project. */ +export type ProjectUpdateInput = { + /** Provide an optional link to a resource with additional information on the project */ + additionalInfoUrl?: InputMaybe; + clientId: Scalars['String']; + description?: InputMaybe; + /** How big should a mapping session be? Group size refers to the number of tasks per mapping session. */ + groupSize?: InputMaybe; + image?: InputMaybe; + /** What should the users look for (e.g. buildings, cars, trees) */ + lookFor?: InputMaybe; + /** How many tasks each user is allowed to work on for this project */ + maxTasksPerUser?: InputMaybe; + /** Provide project instruction */ + projectInstruction?: InputMaybe; + projectNumber?: InputMaybe; + projectTypeSpecifics?: InputMaybe; + region?: InputMaybe; + /** Which group, institution or community is requesting this project? */ + requestingOrganization?: InputMaybe; + team?: InputMaybe; + topic?: InputMaybe; + /** Tutorial used for this project. */ + tutorial?: InputMaybe; + /** How many people do you want to see every tile before you consider it finished? */ + verificationNumber?: InputMaybe; +}; + +export type ProjectVectorTileServerCommonConfig = { + __typename?: 'ProjectVectorTileServerCommonConfig'; + credits: Scalars['String']; + sourceLayer: Scalars['String']; +}; + +export type ProjectVectorTileServerConfig = { + __typename?: 'ProjectVectorTileServerConfig'; + custom?: Maybe; + name: VectorTileServerNameEnum; + openFreeMap?: Maybe; + openStreetMap?: Maybe; + versatiles?: Maybe; +}; + +export type ProjectVectorTileServerConfigInput = { + custom?: InputMaybe; + name: VectorTileServerNameEnum; + openFreeMap?: InputMaybe; + openStreetMap?: InputMaybe; + versatiles?: InputMaybe; +}; + +export type ProjectVectorTileServerCustomConfig = { + __typename?: 'ProjectVectorTileServerCustomConfig'; + credits: Scalars['String']; + /** Zoom level from 0 to 22 */ + maxZoom: Scalars['Int']; + /** Zoom level from 0 to 22 */ + minZoom: Scalars['Int']; + sourceLayer: Scalars['String']; + url: Scalars['String']; +}; + +export type Query = { + __typename?: 'Query'; + communityFilteredStats: CommunityFilteredStats; + communityStats: CommunityStatsType; + /** Stats from last 30 days. */ + communityStatsLatest: CommunityStatsType; + communityUserGroupStats: ContributorUserGroupStats; + communityUserStats: ContributorUserStats; + contributorTeam: ContributorTeamType; + contributorTeams: ContributorTeamTypeOffsetPaginated; + contributorUser: ContributorUserType; + contributorUserGroup: ContributorUserGroupType; + contributorUserGroupMembers: ContributorUserGroupMembershipTypeOffsetPaginated; + contributorUserGroups: ContributorUserGroupTypeOffsetPaginated; + contributorUsers: ContributorUserTypeOffsetPaginated; + defaultCustomOptions: Array; + enums: AppEnumCollection; + globalExportAsset: GlobalExportAssetType; + globalExportAssets: Array; + me?: Maybe; + organization: OrganizationType; + organizations: OrganizationTypeOffsetPaginated; + project: ProjectType; + projectAsset: ProjectAssetType; + projectAssets: ProjectAssetTypeOffsetPaginated; + projectName: Scalars['String']; + projects: ProjectTypeOffsetPaginated; + publicOrganization: OrganizationType; + publicOrganizations: OrganizationTypeOffsetPaginated; + publicProject: ProjectType; + publicProjects: ProjectTypeOffsetPaginated; + testAoiObjects: TestValidateAoiObjectsResponse; + testTaskingManagerProject: TestValidateTaskingManagerProjectResponse; + tileServers: RasterTileServersType; + tutorial: TutorialType; + tutorialAsset: TutorialAssetType; + tutorialAssets: TutorialAssetTypeOffsetPaginated; + tutorials: TutorialTypeOffsetPaginated; + users: UserTypeOffsetPaginated; +}; + + +export type QueryCommunityFilteredStatsArgs = { + dateRange?: InputMaybe; +}; + + +export type QueryCommunityUserGroupStatsArgs = { + userGroupId: FirebaseOrInternalIdInputType; +}; + + +export type QueryCommunityUserStatsArgs = { + userId: FirebaseOrInternalIdInputType; +}; + + +export type QueryContributorTeamArgs = { + id: Scalars['ID']; +}; + + +export type QueryContributorTeamsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryContributorUserArgs = { + userId: FirebaseOrInternalIdInputType; +}; + + +export type QueryContributorUserGroupArgs = { + userGroupId: FirebaseOrInternalIdInputType; +}; + + +export type QueryContributorUserGroupMembersArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryContributorUserGroupsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryContributorUsersArgs = { + filters?: InputMaybe; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryDefaultCustomOptionsArgs = { + projectType: ProjectTypeEnum; +}; + + +export type QueryGlobalExportAssetArgs = { + assetType: GlobalExportAssetTypeEnum; +}; + + +export type QueryOrganizationArgs = { + id: Scalars['ID']; +}; + + +export type QueryOrganizationsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryProjectArgs = { + id: Scalars['ID']; +}; + + +export type QueryProjectAssetArgs = { + id: Scalars['ID']; +}; + + +export type QueryProjectAssetsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryProjectNameArgs = { + params?: InputMaybe; +}; + + +export type QueryProjectsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryPublicOrganizationArgs = { + id: Scalars['ID']; +}; + + +export type QueryPublicOrganizationsArgs = { + filters?: InputMaybe; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryPublicProjectArgs = { + id: Scalars['ID']; +}; + + +export type QueryPublicProjectsArgs = { + filters?: InputMaybe; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryTestAoiObjectsArgs = { + assetId: Scalars['ID']; + ohsomeFilter: Scalars['String']; + projectId: Scalars['ID']; +}; + + +export type QueryTestTaskingManagerProjectArgs = { + hotTmId: Scalars['String']; + ohsomeFilter: Scalars['String']; +}; + + +export type QueryTutorialArgs = { + id: Scalars['ID']; +}; + + +export type QueryTutorialAssetArgs = { + id: Scalars['ID']; +}; + + +export type QueryTutorialAssetsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryTutorialsArgs = { + filters?: InputMaybe; + includeAll?: Scalars['Boolean']; + order?: InputMaybe; + pagination?: InputMaybe; +}; + + +export type QueryUsersArgs = { + filters?: InputMaybe; + order?: InputMaybe; + pagination?: InputMaybe; +}; + +export type RasterTileServerCommonConfigInput = { + credits: Scalars['String']; +}; + +export type RasterTileServerCustomConfigInput = { + credits: Scalars['String']; + maxZoom?: InputMaybe; + minZoom?: InputMaybe; + url: Scalars['String']; +}; + +export enum RasterTileServerNameEnum { + Bing = 'BING', + Custom = 'CUSTOM', + Esri = 'ESRI', + EsriBeta = 'ESRI_BETA', + Mapbox = 'MAPBOX', + MaxarPremium = 'MAXAR_PREMIUM', + MaxarStandard = 'MAXAR_STANDARD' +} + +export type RasterTileServerType = { + __typename?: 'RasterTileServerType'; + credits: Scalars['String']; + disabled: Scalars['Boolean']; + label: Scalars['String']; + maxZoom?: Maybe; + minZoom?: Maybe; + type: RasterTileServerNameEnum; + url: Scalars['String']; +}; + +export type RasterTileServersType = { + __typename?: 'RasterTileServersType'; + raster: Array; + vector: Array; +}; + +export type StrFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +export type StreetMapillaryImageFilters = { + __typename?: 'StreetMapillaryImageFilters'; + creatorId?: Maybe; + endTime?: Maybe; + isPano?: Maybe; + organizationId?: Maybe; + randomizeOrder: Scalars['Boolean']; + samplingThreshold?: Maybe; + startTime?: Maybe; +}; + +export type StreetMapillaryImageFiltersInput = { + creatorId?: InputMaybe; + endTime?: InputMaybe; + isPano?: InputMaybe; + organizationId?: InputMaybe; + randomizeOrder?: Scalars['Boolean']; + samplingThreshold?: InputMaybe; + startTime?: InputMaybe; +}; + +export type StreetProjectPropertyInput = { + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + customOptions?: InputMaybe>; + mapillaryImageFilters: StreetMapillaryImageFiltersInput; +}; + +export type StreetProjectPropertyType = { + __typename?: 'StreetProjectPropertyType'; + /** Numeric value as string */ + aoiGeometry: Scalars['String']; + customOptions?: Maybe>; + mapillaryImageFilters: StreetMapillaryImageFilters; +}; + +export type StreetTutorialTaskPropertyInput = { + geometry: Scalars['String']; + mapillaryImageId: Scalars['String']; +}; + +export type StreetTutorialTaskPropertyType = { + __typename?: 'StreetTutorialTaskPropertyType'; + geometry: Scalars['String']; + mapillaryImageId: Scalars['String']; +}; + +export enum SubGridSizeEnum { + Size_2X2 = 'SIZE_2X2', + Size_4X4 = 'SIZE_4X4', + Size_8X8 = 'SIZE_8X8' +} + +export type TestValidateAoiObjectsResponse = { + __typename?: 'TestValidateAoiObjectsResponse'; + assetId?: Maybe; + error?: Maybe; + objectCount?: Maybe; + ohsomeFilter?: Maybe; + ok: Scalars['Boolean']; + projectId?: Maybe; +}; + +export type TestValidateTaskingManagerProjectResponse = { + __typename?: 'TestValidateTaskingManagerProjectResponse'; + error?: Maybe; + hotTmId?: Maybe; + objectCount?: Maybe; + ohsomeFilter?: Maybe; + ok: Scalars['Boolean']; +}; + +/** Model representing assets for a tutorial. */ +export type TutorialAssetCreateInput = { + clientId: Scalars['String']; + /** The file associated with the asset */ + file: Scalars['Upload']; + inputType: TutorialAssetInputTypeEnum; + tutorial: Scalars['ID']; +}; + +/** Model representing assets for a tutorial. */ +export type TutorialAssetFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + id?: InputMaybe; + mimetype?: InputMaybe; + tutorialId?: InputMaybe; + type?: InputMaybe; +}; + +export enum TutorialAssetInputTypeEnum { + InformationBlockImage = 'INFORMATION_BLOCK_IMAGE' +} + +export type TutorialAssetOrder = { + id?: InputMaybe; +}; + +/** Model representing assets for a tutorial. */ +export type TutorialAssetType = UserResourceTypeMixin & { + __typename?: 'TutorialAssetType'; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + /** The file associated with the asset */ + file: MapswipeDjangoFileType; + /** The size of the file in bytes */ + fileSize: Scalars['Int']; + id: Scalars['ID']; + inputType?: Maybe; + /** If this flag is enabled, this asset will be deleted in the future */ + markedAsDeleted: Scalars['Boolean']; + mimetype?: Maybe; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + tutorialId: Scalars['ID']; + type: AssetTypeEnum; +}; + +export type TutorialAssetTypeMutationResponseType = { + __typename?: 'TutorialAssetTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type TutorialAssetTypeOffsetPaginated = { + __typename?: 'TutorialAssetTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +/** + * Model representing a tutorial associated with a specific project. + * + * Tutorial guides users through the process of contributing to a project. + * It includes instructions, and examples to help users understand how to complete tasks. + */ +export type TutorialCreateInput = { + clientId: Scalars['String']; + name: Scalars['String']; + /** Project this tutorial is referring to. */ + project: Scalars['ID']; +}; + +/** + * Model representing a tutorial associated with a specific project. + * + * Tutorial guides users through the process of contributing to a project. + * It includes instructions, and examples to help users understand how to complete tasks. + */ +export type TutorialFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + createdById?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + /** Project this tutorial is referring to. */ + project?: InputMaybe; + status?: InputMaybe; +}; + +/** Model representing a text or image block in the information page. */ +export type TutorialInformationPageBlockCreateInput = { + blockNumber: Scalars['Int']; + blockType: TutorialInformationPageBlockTypeEnum; + clientId: Scalars['String']; + image?: InputMaybe; + text?: InputMaybe; +}; + +export type TutorialInformationPageBlockInput = { + create?: InputMaybe; + delete?: InputMaybe; + update?: InputMaybe; +}; + +/** Model representing a text or image block in the information page. */ +export type TutorialInformationPageBlockType = UserResourceTypeMixin & { + __typename?: 'TutorialInformationPageBlockType'; + blockNumber: Scalars['Int']; + blockType: TutorialInformationPageBlockTypeEnum; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + id: Scalars['ID']; + image?: Maybe; + imageId?: Maybe; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + pageId: Scalars['ID']; + text?: Maybe; +}; + +export enum TutorialInformationPageBlockTypeEnum { + Image = 'IMAGE', + Text = 'TEXT' +} + +/** Model representing a text or image block in the information page. */ +export type TutorialInformationPageBlockUpdateInput = { + blockNumber?: InputMaybe; + blockType?: InputMaybe; + clientId: Scalars['String']; + id: Scalars['ID']; + image?: InputMaybe; + text?: InputMaybe; +}; + +/** Model representing a information page in the tutorial. */ +export type TutorialInformationPageCreateInput = { + blocks: Array; + clientId: Scalars['String']; + pageNumber: Scalars['Int']; + title: Scalars['String']; +}; + +export type TutorialInformationPageInput = { + create?: InputMaybe; + delete?: InputMaybe; + update?: InputMaybe; +}; + +/** Model representing a information page in the tutorial. */ +export type TutorialInformationPageType = UserResourceTypeMixin & { + __typename?: 'TutorialInformationPageType'; + blocks: Array; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + id: Scalars['ID']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + pageNumber: Scalars['Int']; + title: Scalars['String']; + tutorialId: Scalars['ID']; +}; + +/** Model representing a information page in the tutorial. */ +export type TutorialInformationPageUpdateInput = { + blocks?: InputMaybe>; + clientId: Scalars['String']; + id: Scalars['ID']; + pageNumber?: InputMaybe; + title?: InputMaybe; +}; + +export type TutorialOrder = { + id?: InputMaybe; + name?: InputMaybe; +}; + +/** Model representing a scenario in the tutorial. */ +export type TutorialScenarioPageCreateInput = { + clientId: Scalars['String']; + hintDescription: Scalars['String']; + hintIcon: IconEnum; + hintTitle: Scalars['String']; + instructionsDescription: Scalars['String']; + instructionsIcon: IconEnum; + instructionsTitle: Scalars['String']; + scenarioPageNumber: Scalars['Int']; + successDescription: Scalars['String']; + successIcon: IconEnum; + successTitle: Scalars['String']; + tasks: Array; +}; + +/** Model representing a individual task in the scenario. */ +export type TutorialScenarioPageInput = { + create?: InputMaybe; + delete?: InputMaybe; + update?: InputMaybe; +}; + +/** Model representing a scenario in the tutorial. */ +export type TutorialScenarioPageType = UserResourceTypeMixin & { + __typename?: 'TutorialScenarioPageType'; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + hintDescription: Scalars['String']; + hintIcon: IconEnum; + hintTitle: Scalars['String']; + id: Scalars['ID']; + instructionsDescription: Scalars['String']; + instructionsIcon: IconEnum; + instructionsTitle: Scalars['String']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + scenarioPageNumber: Scalars['Int']; + successDescription: Scalars['String']; + successIcon: IconEnum; + successTitle: Scalars['String']; + tasks: Array; + tutorialId: Scalars['ID']; +}; + +/** Model representing a scenario in the tutorial. */ +export type TutorialScenarioPageUpdateInput = { + clientId: Scalars['String']; + hintDescription?: InputMaybe; + hintIcon?: InputMaybe; + hintTitle?: InputMaybe; + id: Scalars['ID']; + instructionsDescription?: InputMaybe; + instructionsIcon?: InputMaybe; + instructionsTitle?: InputMaybe; + scenarioPageNumber?: InputMaybe; + successDescription?: InputMaybe; + successIcon?: InputMaybe; + successTitle?: InputMaybe; + tasks?: InputMaybe>; +}; + +export enum TutorialStatusEnum { + Archived = 'ARCHIVED', + Discarded = 'DISCARDED', + Draft = 'DRAFT', + Published = 'PUBLISHED', + PublishingFailed = 'PUBLISHING_FAILED', + ReadyToPublish = 'READY_TO_PUBLISH' +} + +export type TutorialStatusEnumFilterLookup = { + /** Case-sensitive containment test. Filter will be skipped on `null` value */ + contains?: InputMaybe; + /** Case-sensitive ends-with. Filter will be skipped on `null` value */ + endsWith?: InputMaybe; + /** Exact match. Filter will be skipped on `null` value */ + exact?: InputMaybe; + /** Case-insensitive containment test. Filter will be skipped on `null` value */ + iContains?: InputMaybe; + /** Case-insensitive ends-with. Filter will be skipped on `null` value */ + iEndsWith?: InputMaybe; + /** Case-insensitive exact match. Filter will be skipped on `null` value */ + iExact?: InputMaybe; + /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ + iRegex?: InputMaybe; + /** Case-insensitive starts-with. Filter will be skipped on `null` value */ + iStartsWith?: InputMaybe; + /** Exact match of items in a given list. Filter will be skipped on `null` value */ + inList?: InputMaybe>; + /** Assignment test. Filter will be skipped on `null` value */ + isNull?: InputMaybe; + /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ + regex?: InputMaybe; + /** Case-sensitive starts-with. Filter will be skipped on `null` value */ + startsWith?: InputMaybe; +}; + +/** + * Model representing a tutorial associated with a specific project. + * + * Tutorial guides users through the process of contributing to a project. + * It includes instructions, and examples to help users understand how to complete tasks. + */ +export type TutorialStatusUpdateInput = { + clientId: Scalars['String']; + status?: InputMaybe; +}; + +/** Model representing a individual task in the scenario. */ +export type TutorialTaskCreateInput = { + clientId: Scalars['String']; + projectTypeSpecifics: TutorialTaskProjectTypeSpecificInput; + reference: Scalars['Int']; + taskPartitionIndex?: InputMaybe; +}; + +export type TutorialTaskInput = { + create?: InputMaybe; + delete?: InputMaybe; + update?: InputMaybe; +}; + +export type TutorialTaskProjectTypeSpecificInput = + { compare: CompareTutorialTaskPropertyInput; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness: CompletenessTutorialTaskPropertyInput; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find: FindTutorialTaskPropertyInput; locate?: never; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate: LocateTutorialTaskPropertyInput; street?: never; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street: StreetTutorialTaskPropertyInput; validate?: never; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate: ValidateTutorialTaskPropertyInput; validateImage?: never; } + | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage: ValidateImageTutorialTaskPropertyInput; }; + +/** Model representing a individual task in the scenario. */ +export type TutorialTaskType = UserResourceTypeMixin & { + __typename?: 'TutorialTaskType'; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + id: Scalars['ID']; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + projectTypeSpecifics?: Maybe; + reference: Scalars['Int']; + scenarioId: Scalars['ID']; + taskPartitionIndex?: Maybe; +}; + +/** Model representing a individual task in the scenario. */ +export type TutorialTaskUpdateInput = { + clientId: Scalars['String']; + id: Scalars['ID']; + projectTypeSpecifics: TutorialTaskProjectTypeSpecificInput; + reference?: InputMaybe; + taskPartitionIndex?: InputMaybe; +}; + +/** + * Model representing a tutorial associated with a specific project. + * + * Tutorial guides users through the process of contributing to a project. + * It includes instructions, and examples to help users understand how to complete tasks. + */ +export type TutorialType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { + __typename?: 'TutorialType'; + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + firebaseId: Scalars['String']; + /** The latest time when resource was pushed to firebase */ + firebaseLastPushed?: Maybe; + firebasePushStatus?: Maybe; + id: Scalars['ID']; + informationPages: Array; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; + name: Scalars['String']; + /** Project this tutorial is referring to. */ + project: ProjectType; + /** Project this tutorial is referring to. */ + projectId: Scalars['ID']; + scenarios: Array; + status: TutorialStatusEnum; + statusMessage?: Maybe; +}; + +export type TutorialTypeMutationResponseType = { + __typename?: 'TutorialTypeMutationResponseType'; + errors?: Maybe; + ok: Scalars['Boolean']; + result?: Maybe; +}; + +export type TutorialTypeOffsetPaginated = { + __typename?: 'TutorialTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +/** + * Model representing a tutorial associated with a specific project. + * + * Tutorial guides users through the process of contributing to a project. + * It includes instructions, and examples to help users understand how to complete tasks. + */ +export type TutorialUpdateInput = { + clientId: Scalars['String']; + informationPages?: InputMaybe>; + name?: InputMaybe; + scenarios?: InputMaybe>; +}; + +export type UpdateContributorUserGroupPayload = ContributorUserGroupTypeMutationResponseType | OperationInfo; + +export type UpdateOrganizationPayload = OperationInfo | OrganizationTypeMutationResponseType; + +export type UpdateProcessedProjectPayload = OperationInfo | ProjectTypeMutationResponseType; + +export type UpdateProjectPayload = OperationInfo | ProjectTypeMutationResponseType; + +export type UpdateProjectStatusPayload = OperationInfo | ProjectTypeMutationResponseType; + +export type UpdateTutorialPayload = OperationInfo | TutorialTypeMutationResponseType; + +export type UpdateTutorialStatusPayload = OperationInfo | TutorialTypeMutationResponseType; + +/** + * Custom user model with email as unique identifier. + * + * The user is linked to a contributor user, which holds user information synced from firebase. + * This mapping is essential to integrate Firebase authentication this system. + * Additionally, the mapping ensures that data created or updated in this system + * can be accurately synchronized back to Firebase with the correct user association. + */ +export type UserFilter = { + AND?: InputMaybe; + DISTINCT?: InputMaybe; + NOT?: InputMaybe; + OR?: InputMaybe; + /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ + contributorUser?: InputMaybe; + displayName?: InputMaybe; + id?: InputMaybe; + search?: InputMaybe; +}; + +/** + * Custom user model with email as unique identifier. + * + * The user is linked to a contributor user, which holds user information synced from firebase. + * This mapping is essential to integrate Firebase authentication this system. + * Additionally, the mapping ensures that data created or updated in this system + * can be accurately synchronized back to Firebase with the correct user association. + */ +export type UserMeType = { + __typename?: 'UserMeType'; + anonymizedEmail: Scalars['String']; + /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ + contributorUser?: Maybe; + displayName: Scalars['String']; + email: Scalars['String']; + firstName: Scalars['String']; + id: Scalars['ID']; + lastName: Scalars['String']; +}; + +export type UserOrder = { + displayName?: InputMaybe; + id?: InputMaybe; +}; + +export type UserResourceTypeMixin = { + clientId: Scalars['String']; + createdAt: Scalars['DateTime']; + createdBy: UserType; + modifiedAt: Scalars['DateTime']; + modifiedBy: UserType; +}; + +/** + * Custom user model with email as unique identifier. + * + * The user is linked to a contributor user, which holds user information synced from firebase. + * This mapping is essential to integrate Firebase authentication this system. + * Additionally, the mapping ensures that data created or updated in this system + * can be accurately synchronized back to Firebase with the correct user association. + */ +export type UserType = { + __typename?: 'UserType'; + anonymizedEmail: Scalars['String']; + /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ + contributorUser?: Maybe; + displayName: Scalars['String']; + firstName: Scalars['String']; + id: Scalars['ID']; + lastName: Scalars['String']; +}; + +export type UserTypeOffsetPaginated = { + __typename?: 'UserTypeOffsetPaginated'; + pageInfo: OffsetPaginationInfo; + /** List of paginated results. */ + results: Array; + /** Total count of existing results. */ + totalCount: Scalars['Int']; +}; + +export type ValidateImageProjectPropertyInput = { + customOptions?: InputMaybe>; + sourceType: ValidateImageSourceTypeEnum; +}; + +export type ValidateImageProjectPropertyType = { + __typename?: 'ValidateImageProjectPropertyType'; + customOptions?: Maybe>; + sourceType: ValidateImageSourceTypeEnum; +}; + +export enum ValidateImageSourceTypeEnum { + DatasetFile = 'DATASET_FILE', + DirectImages = 'DIRECT_IMAGES' +} + +export type ValidateImageTutorialTaskPropertyInput = { + annotation?: InputMaybe; + fileName: Scalars['String']; + height?: InputMaybe; + imageId?: InputMaybe; + url: Scalars['String']; + width?: InputMaybe; +}; + +export type ValidateImageTutorialTaskPropertyType = { + __typename?: 'ValidateImageTutorialTaskPropertyType'; + annotation?: Maybe; + fileName: Scalars['String']; + height?: Maybe; + imageId?: Maybe; + url: Scalars['String']; + width?: Maybe; +}; + +export type ValidateObjectSourceConfig = { + __typename?: 'ValidateObjectSourceConfig'; + aoiGeometry?: Maybe; + objectGeojsonUrl?: Maybe; + ohsomeFilter?: Maybe; + sourceType: ValidateObjectSourceTypeEnum; + taskingManagerProjectId?: Maybe; +}; + +export type ValidateObjectSourceConfigInput = { + aoiGeometry?: InputMaybe; + objectGeojsonUrl?: InputMaybe; + ohsomeFilter?: InputMaybe; + sourceType: ValidateObjectSourceTypeEnum; + taskingManagerProjectId?: InputMaybe; +}; + +export enum ValidateObjectSourceTypeEnum { + AoiGeojsonFile = 'AOI_GEOJSON_FILE', + ObjectGeojsonUrl = 'OBJECT_GEOJSON_URL', + TaskingManager = 'TASKING_MANAGER' +} + +export type ValidateProjectPropertyInput = { + customOptions?: InputMaybe>; + objectSource: ValidateObjectSourceConfigInput; + tileServerProperty: ProjectRasterTileServerConfigInput; +}; + +export type ValidateProjectPropertyType = { + __typename?: 'ValidateProjectPropertyType'; + customOptions?: Maybe>; + objectSource: ValidateObjectSourceConfig; + tileServerProperty: ProjectRasterTileServerConfig; +}; + +export type ValidateTutorialTaskPropertyInput = { + identifier: Scalars['Int']; + objectGeometry: Scalars['String']; +}; + +export type ValidateTutorialTaskPropertyType = { + __typename?: 'ValidateTutorialTaskPropertyType'; + identifier: Scalars['Int']; + objectGeometry: Scalars['String']; +}; + +export type VectorTileServerCommonConfigInput = { + credits: Scalars['String']; + sourceLayer: Scalars['String']; +}; + +export type VectorTileServerCustomConfigInput = { + credits: Scalars['String']; + /** Zoom level from 0 to 22 */ + maxZoom: Scalars['Int']; + /** Zoom level from 0 to 22 */ + minZoom: Scalars['Int']; + sourceLayer: Scalars['String']; + url: Scalars['String']; +}; + +export enum VectorTileServerNameEnum { + Custom = 'CUSTOM', + OpenFreeMap = 'OPEN_FREE_MAP', + OpenStreetMap = 'OPEN_STREET_MAP', + Versatiles = 'VERSATILES' +} + +export type VectorTileServerType = { + __typename?: 'VectorTileServerType'; + credits: Scalars['String']; + label: Scalars['String']; + layers: Array; + maxZoom?: Maybe; + minZoom?: Maybe; + type: VectorTileServerNameEnum; + url: Scalars['String']; +}; + +export type AllDataQueryVariables = Exact<{ [key: string]: never; }>; + + +export type AllDataQuery = { __typename?: 'Query', publicProjects: { __typename?: 'ProjectTypeOffsetPaginated', totalCount: number, results: Array<{ __typename?: 'ProjectType', id: string, name: string, firebaseId: string, description?: string | null, progress: number, status: ProjectStatusEnum, projectType: ProjectTypeEnum, createdAt: any, modifiedAt: any, region: string, requestingOrganizationId: string, numberOfContributorUsers: number, totalArea?: number | null, exportAggregatedResultsWithGeometry?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportAggregatedResults?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportAreaOfInterest?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportGroups?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportHistory?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, modifiedAt: any, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportResults?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportTasks?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportUsers?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, exportHotTaskingManagerGeometries?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, exportModerateToHighAgreementYesMaybeGeometries?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, image?: { __typename?: 'ProjectAssetType', id: string, createdAt: any, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, requestingOrganization: { __typename?: 'OrganizationType', id: string, name: string, modifiedAt: any }, aoiGeometry?: { __typename?: 'GeometryType', centroid?: any | null, id: string, totalArea?: number | null, bbox?: any | null } | null, aoiGeometryInputAsset?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null }> }, communityStats: { __typename?: 'CommunityStatsType', id: string, totalContributors: number, totalUserGroups: number, totalSwipes: number }, publicOrganizations: { __typename?: 'OrganizationTypeOffsetPaginated', results: Array<{ __typename?: 'OrganizationType', id: string, name: string }> }, globalExportAssets: Array<{ __typename?: 'GlobalExportAssetType', type: GlobalExportAssetTypeEnum, lastUpdatedAt: any, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null }> }; + +export type EnumsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type EnumsQuery = { __typename?: 'Query', enums: { __typename?: 'AppEnumCollection', ProjectTypeEnum: Array<{ __typename?: 'AppEnumCollectionProjectTypeEnum', key: ProjectTypeEnum, label: string }>, ProjectStatusEnum: Array<{ __typename?: 'AppEnumCollectionProjectStatusEnum', key: ProjectStatusEnum, label: string }> } }; diff --git a/i18next-parser.config.js b/i18next-parser.config.js deleted file mode 100644 index a09555c8..00000000 --- a/i18next-parser.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], -}; diff --git a/public/locales/cs/blog.json b/locales/cs/blog.json similarity index 100% rename from public/locales/cs/blog.json rename to locales/cs/blog.json diff --git a/public/locales/cs/blogs.json b/locales/cs/blogs.json similarity index 100% rename from public/locales/cs/blogs.json rename to locales/cs/blogs.json diff --git a/public/locales/cs/common.json b/locales/cs/common.json similarity index 100% rename from public/locales/cs/common.json rename to locales/cs/common.json diff --git a/public/locales/cs/data.json b/locales/cs/data.json similarity index 100% rename from public/locales/cs/data.json rename to locales/cs/data.json diff --git a/public/locales/cs/get-involved.json b/locales/cs/get-involved.json similarity index 100% rename from public/locales/cs/get-involved.json rename to locales/cs/get-involved.json diff --git a/public/locales/cs/home.json b/locales/cs/home.json similarity index 100% rename from public/locales/cs/home.json rename to locales/cs/home.json diff --git a/public/locales/cs/privacy.json b/locales/cs/privacy.json similarity index 100% rename from public/locales/cs/privacy.json rename to locales/cs/privacy.json diff --git a/public/locales/cs/project.json b/locales/cs/project.json similarity index 100% rename from public/locales/cs/project.json rename to locales/cs/project.json diff --git a/public/locales/de/blog.json b/locales/de/blog.json similarity index 100% rename from public/locales/de/blog.json rename to locales/de/blog.json diff --git a/public/locales/de/blogs.json b/locales/de/blogs.json similarity index 100% rename from public/locales/de/blogs.json rename to locales/de/blogs.json diff --git a/public/locales/de/common.json b/locales/de/common.json similarity index 100% rename from public/locales/de/common.json rename to locales/de/common.json diff --git a/public/locales/de/data.json b/locales/de/data.json similarity index 100% rename from public/locales/de/data.json rename to locales/de/data.json diff --git a/public/locales/de/get-involved.json b/locales/de/get-involved.json similarity index 100% rename from public/locales/de/get-involved.json rename to locales/de/get-involved.json diff --git a/public/locales/de/home.json b/locales/de/home.json similarity index 100% rename from public/locales/de/home.json rename to locales/de/home.json diff --git a/public/locales/de/privacy.json b/locales/de/privacy.json similarity index 100% rename from public/locales/de/privacy.json rename to locales/de/privacy.json diff --git a/public/locales/de/project.json b/locales/de/project.json similarity index 100% rename from public/locales/de/project.json rename to locales/de/project.json diff --git a/public/locales/en/blog.json b/locales/en/blog.json similarity index 100% rename from public/locales/en/blog.json rename to locales/en/blog.json diff --git a/public/locales/en/blogs.json b/locales/en/blogs.json similarity index 100% rename from public/locales/en/blogs.json rename to locales/en/blogs.json diff --git a/public/locales/en/common.json b/locales/en/common.json similarity index 100% rename from public/locales/en/common.json rename to locales/en/common.json diff --git a/public/locales/en/data.json b/locales/en/data.json similarity index 100% rename from public/locales/en/data.json rename to locales/en/data.json diff --git a/public/locales/en/get-involved.json b/locales/en/get-involved.json similarity index 100% rename from public/locales/en/get-involved.json rename to locales/en/get-involved.json diff --git a/public/locales/en/home.json b/locales/en/home.json similarity index 100% rename from public/locales/en/home.json rename to locales/en/home.json diff --git a/public/locales/en/privacy.json b/locales/en/privacy.json similarity index 100% rename from public/locales/en/privacy.json rename to locales/en/privacy.json diff --git a/public/locales/en/project.json b/locales/en/project.json similarity index 100% rename from public/locales/en/project.json rename to locales/en/project.json diff --git a/public/locales/es/privacy.json b/locales/es/privacy.json similarity index 100% rename from public/locales/es/privacy.json rename to locales/es/privacy.json diff --git a/public/locales/fr/blogs.json b/locales/fr/blogs.json similarity index 100% rename from public/locales/fr/blogs.json rename to locales/fr/blogs.json diff --git a/public/locales/fr/common.json b/locales/fr/common.json similarity index 100% rename from public/locales/fr/common.json rename to locales/fr/common.json diff --git a/public/locales/fr/privacy.json b/locales/fr/privacy.json similarity index 100% rename from public/locales/fr/privacy.json rename to locales/fr/privacy.json diff --git a/public/locales/hu/blog.json b/locales/hu/blog.json similarity index 100% rename from public/locales/hu/blog.json rename to locales/hu/blog.json diff --git a/public/locales/hu/blogs.json b/locales/hu/blogs.json similarity index 100% rename from public/locales/hu/blogs.json rename to locales/hu/blogs.json diff --git a/public/locales/hu/common.json b/locales/hu/common.json similarity index 100% rename from public/locales/hu/common.json rename to locales/hu/common.json diff --git a/public/locales/hu/data.json b/locales/hu/data.json similarity index 100% rename from public/locales/hu/data.json rename to locales/hu/data.json diff --git a/public/locales/hu/get-involved.json b/locales/hu/get-involved.json similarity index 100% rename from public/locales/hu/get-involved.json rename to locales/hu/get-involved.json diff --git a/public/locales/hu/home.json b/locales/hu/home.json similarity index 100% rename from public/locales/hu/home.json rename to locales/hu/home.json diff --git a/public/locales/hu/privacy.json b/locales/hu/privacy.json similarity index 100% rename from public/locales/hu/privacy.json rename to locales/hu/privacy.json diff --git a/public/locales/hu/project.json b/locales/hu/project.json similarity index 100% rename from public/locales/hu/project.json rename to locales/hu/project.json diff --git a/public/locales/ne/blog.json b/locales/ne/blog.json similarity index 100% rename from public/locales/ne/blog.json rename to locales/ne/blog.json diff --git a/public/locales/ne/blogs.json b/locales/ne/blogs.json similarity index 100% rename from public/locales/ne/blogs.json rename to locales/ne/blogs.json diff --git a/public/locales/ne/common.json b/locales/ne/common.json similarity index 100% rename from public/locales/ne/common.json rename to locales/ne/common.json diff --git a/public/locales/ne/data.json b/locales/ne/data.json similarity index 100% rename from public/locales/ne/data.json rename to locales/ne/data.json diff --git a/public/locales/ne/get-involved.json b/locales/ne/get-involved.json similarity index 100% rename from public/locales/ne/get-involved.json rename to locales/ne/get-involved.json diff --git a/public/locales/ne/home.json b/locales/ne/home.json similarity index 100% rename from public/locales/ne/home.json rename to locales/ne/home.json diff --git a/public/locales/ne/privacy.json b/locales/ne/privacy.json similarity index 100% rename from public/locales/ne/privacy.json rename to locales/ne/privacy.json diff --git a/public/locales/ne/project.json b/locales/ne/project.json similarity index 100% rename from public/locales/ne/project.json rename to locales/ne/project.json diff --git a/public/locales/pt/blog.json b/locales/pt/blog.json similarity index 100% rename from public/locales/pt/blog.json rename to locales/pt/blog.json diff --git a/public/locales/pt/blogs.json b/locales/pt/blogs.json similarity index 100% rename from public/locales/pt/blogs.json rename to locales/pt/blogs.json diff --git a/public/locales/pt/common.json b/locales/pt/common.json similarity index 100% rename from public/locales/pt/common.json rename to locales/pt/common.json diff --git a/public/locales/pt/data.json b/locales/pt/data.json similarity index 100% rename from public/locales/pt/data.json rename to locales/pt/data.json diff --git a/public/locales/pt/get-involved.json b/locales/pt/get-involved.json similarity index 100% rename from public/locales/pt/get-involved.json rename to locales/pt/get-involved.json diff --git a/public/locales/pt/home.json b/locales/pt/home.json similarity index 100% rename from public/locales/pt/home.json rename to locales/pt/home.json diff --git a/public/locales/pt/privacy.json b/locales/pt/privacy.json similarity index 100% rename from public/locales/pt/privacy.json rename to locales/pt/privacy.json diff --git a/public/locales/pt/project.json b/locales/pt/project.json similarity index 100% rename from public/locales/pt/project.json rename to locales/pt/project.json diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 4f11a03d..00000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next-i18next.config.js b/next-i18next.config.js deleted file mode 100644 index 4ec5df05..00000000 --- a/next-i18next.config.js +++ /dev/null @@ -1,12 +0,0 @@ -const langConfig = require('./i18next-parser.config.js'); - -/** @type {import('next-i18next').UserConfig} */ -module.exports = { - // debug: process.env.NODE_ENV === 'development', - // reloadOnPrerender: process.env.NODE_ENV === 'development', - i18n: { - defaultLocale: 'en', - locales: langConfig.locales, - }, - returnEmptyString: false, -}; diff --git a/next-sitemap.config.js b/next-sitemap.config.js deleted file mode 100644 index 4bcde3d6..00000000 --- a/next-sitemap.config.js +++ /dev/null @@ -1,19 +0,0 @@ -/** @type {import('next-sitemap').IConfig} */ - -const config = { - siteUrl: process.env.MAPSWIPE_DEPLOYMENT_URL || 'https://mapswipe.org/', - exclude: ['/404'], - generateRobotsTxt: true, - outDir: './out', - robotsTxtOptions: { - policies: [ - { - userAgent: '*', - disallow: ['/404'], - }, - { userAgent: '*', allow: '/' }, - ], - }, -}; - -module.exports = config; diff --git a/next.config.js b/next.config.js deleted file mode 100644 index 6b8262cc..00000000 --- a/next.config.js +++ /dev/null @@ -1,18 +0,0 @@ -const withExportImages = require('next-export-optimize-images'); - -const basePrefix = process.env.NEXT_PUBLIC_BASE_PREFIX; -const isBasePrefixAvailable = basePrefix !== undefined && basePrefix.trim().length > 0; - -const nextConfig = withExportImages({ - output: 'export', - trailingSlash: true, - reactStrictMode: true, - basePath: isBasePrefixAvailable ? `/${basePrefix}` : undefined, - assetPrefix: isBasePrefixAvailable ? `/${basePrefix}/` : undefined, - images: { - domain: ['https://firebasestorage.googleapis.com/v0/b/msf-mapswipe.appspot.com'], - deviceSizes: [640, 960, 1280, 1600, 1920], - }, -}); - -module.exports = nextConfig; diff --git a/astro/package-lock.json b/package-lock.json similarity index 95% rename from astro/package-lock.json rename to package-lock.json index 148ddf7f..40c8b2eb 100644 --- a/astro/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "mapswipe-astro", + "name": "mapswipe-website", "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "mapswipe-astro", + "name": "mapswipe-website", "version": "0.0.1", "workspaces": [ "packages/*" @@ -19,6 +19,8 @@ "astro-hydration-dedup": "*", "astro-incremental-static": "*", "astro-remote-images": "*", + "graphql": "^16.6.0", + "graphql-request": "^5.1.0", "i18next": "^24.2.0", "leaflet": "^1.9.4", "papaparse": "^5.4.1", @@ -865,6 +867,15 @@ "url": "https://github.com/sponsors/ayuhito" } }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -2914,6 +2925,12 @@ "zod": "^3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -3012,6 +3029,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", @@ -3188,6 +3218,18 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -3238,6 +3280,15 @@ "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", "license": "MIT" }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, "node_modules/crossws": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", @@ -3375,6 +3426,15 @@ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "license": "MIT" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3521,6 +3581,20 @@ "node": ">=4" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.388", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.388.tgz", @@ -3545,12 +3619,57 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.27.7", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", @@ -3634,6 +3753,18 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", + "license": "MIT", + "engines": { + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -3681,6 +3812,22 @@ "node": ">=20" } }, + "node_modules/form-data": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.5.tgz", + "integrity": "sha512-j23EibVLnp4zNXGW7LjryXYa2X6U/M96yoOX+ybZxwkYajdxRNEqYY3zhh7y0i6kfISKS2jr+EJq1YTUDEv5+w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3695,6 +3842,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3716,12 +3872,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "license": "ISC" }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphql": { + "version": "16.14.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.2.tgz", + "integrity": "sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz", + "integrity": "sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, "node_modules/h3": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", @@ -3739,6 +3968,45 @@ "uncrypto": "^0.1.3" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-util-from-html": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", @@ -4191,6 +4459,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdast-util-definitions": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", @@ -4985,6 +5262,27 @@ ], "license": "MIT" }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -5040,6 +5338,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-fetch-native": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", @@ -5905,6 +6223,12 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -6787,6 +7111,22 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which-pm-runs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", diff --git a/package.json b/package.json index 0f7eb300..143b4236 100644 --- a/package.json +++ b/package.json @@ -1,79 +1,44 @@ { - "name": "mapswipe-website", - "version": "0.0.1", - "private": true, - "scripts": { - "predev": "mkdir -p cache", - "prebuild": "mkdir -p cache", - "prestart": "mkdir -p cache", - "dev": "next dev -p 3020", - "build": "next build && next-export-optimize-images && next-sitemap && cp redirects/* out/en/ -r", - "start": "next start", - "generate:i18n": "i18next 'src/**/*.{jsx,tsx}' -o 'public/locales/$LOCALE/$NAMESPACE.json'", - "lint": "next lint", - "fetch-data": "ts-node -P tsconfig.scripts.json scripts/fetchData.ts", - "fetch-data:local": "env-cmd -f .env.local ts-node -P tsconfig.scripts.json scripts/fetchData.ts", - "css-lint": "stylelint 'src/**/*.css'", - "typecheck": "tsc", - "check-unused": "unimported", - "generate:type": "graphql-codegen --require dotenv/config --config codegen.yml" - }, - "dependencies": { - "@togglecorp/fujs": "^2.0.0", - "graphql": "^16.6.0", - "graphql-request": "^5.1.0", - "gray-matter": "^4.0.3", - "i18next": "^22.5.1", - "leaflet": "^1.9.4", - "leaflet-gesture-handling": "^1.2.2", - "next": "^13.4.7-canary.0", - "next-i18next": "^13.3.0", - "next-language-detector": "^1.0.2", - "papaparse": "^5.4.1", - "posthog-js": "^1.68.4", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-i18next": "^12.3.1", - "react-icons": "^4.9.0", - "react-leaflet": "^4.2.1", - "remark": "^14.0.3", - "remark-gfm": "^3.0.1", - "remark-html": "^15.0.2", - "resize-observer-polyfill": "^1.5.1" - }, - "devDependencies": { - "@graphql-codegen/cli": "^2.16.4", - "@graphql-codegen/introspection": "^2.2.3", - "@graphql-codegen/typescript-operations": "^2.5.12", - "@types/leaflet": "^1.9.3", - "@types/node": "^18.11.9", - "@types/papaparse": "^5.3.7", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.2.6", - "@typescript-eslint/eslint-plugin": "^5.48.0", - "@typescript-eslint/parser": "^5.48.0", - "env-cmd": "^10.1.0", - "eslint": "^8.31.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-airbnb-typescript": "^17.0.0", - "eslint-config-next": "^13.1.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-postcss-modules": "^2.0.0", - "eslint-plugin-react": "^7.31.11", - "eslint-plugin-react-hooks": "^4.6.0", - "i18next-parser": "^8.0.0", - "next-export-optimize-images": "^2.1.0", - "next-sitemap": "^4.1.8", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-nested": "^6.0.0", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.8.3", - "stylelint": "^14.16.1", - "stylelint-config-concentric": "^2.0.2", - "stylelint-config-recommended": "^9.0.0", - "ts-node": "^10.9.1", - "typescript": "^5.1.3", - "unimported": "^1.29.1" - } + "name": "mapswipe-website", + "type": "module", + "private": true, + "version": "0.0.1", + "workspaces": [ + "packages/*" + ], + "scripts": { + "dev": "astro dev", + "build": "node scripts/prefetch-images.mjs && astro build", + "build:incremental": "node scripts/incremental-build.mjs", + "prefetch": "node scripts/prefetch-images.mjs", + "preview": "astro preview", + "astro": "astro", + "fetch-data": "node scripts/fetchData.ts" + }, + "dependencies": { + "graphql": "^16.6.0", + "graphql-request": "^5.1.0", + "@astrojs/react": "^4.2.0", + "@astrojs/sitemap": "^3.2.1", + "astro-hydration-dedup": "*", + "astro-incremental-static": "*", + "astro-remote-images": "*", + "@fontsource/dm-sans": "^5.2.8", + "@fontsource/lato": "^5.2.7", + "astro": "^5.7.0", + "i18next": "^24.2.0", + "leaflet": "^1.9.4", + "papaparse": "^5.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-leaflet": "^4.2.1", + "sharp": "^0.33.5" + }, + "devDependencies": { + "@types/leaflet": "^1.9.12", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "typescript": "^5.7.0" + } } diff --git a/astro/packages/README.md b/packages/README.md similarity index 83% rename from astro/packages/README.md rename to packages/README.md index 724feed0..644bd9d9 100644 --- a/astro/packages/README.md +++ b/packages/README.md @@ -3,9 +3,9 @@ Three reusable Astro packages (npm workspaces, `private: true`, publish-ready). Each exists because Astro measurably cannot do the job via config or an existing integration — the full evidence trail is in -[`docs/ownership-map.md`](../../docs/ownership-map.md) (what's platform vs. -ours, and why), [`docs/adr/0002-migrate-to-astro.md`](../../docs/adr/0002-migrate-to-astro.md) -(the migration decisions), and [`docs/benchmarks.md`](../../docs/benchmarks.md) +[`docs/ownership-map.md`](../docs/ownership-map.md) (what's platform vs. +ours, and why), [`docs/adr/0002-migrate-to-astro.md`](../docs/adr/0002-migrate-to-astro.md) +(the migration decisions), and [`docs/benchmarks.md`](../docs/benchmarks.md) (every number cited below). | Package | One-liner | Configured in this app at | @@ -15,7 +15,7 @@ ours, and why), [`docs/adr/0002-migrate-to-astro.md`](../../docs/adr/0002-migrat | [`astro-incremental-static`](astro-incremental-static/) | Render-skip incremental builds for `output: 'static'` — nothing else does this (verified vs Astro & Next stable/canary); one-project change 6 s vs 33 s full | `scripts/incremental-build.mjs` (runner config); pages import `selectPaths` | Two of the three are stopgaps we *want* to delete: ready-to-file upstream -feature requests live in [`docs/upstream/`](../../docs/upstream/). If either +feature requests live in [`docs/upstream/`](../docs/upstream/). If either lands in Astro, delete the corresponding package (see each README's caveats). Rules for adding a fourth: see "Rules of thumb" in the ownership map — diff --git a/astro/packages/astro-hydration-dedup/README.md b/packages/astro-hydration-dedup/README.md similarity index 98% rename from astro/packages/astro-hydration-dedup/README.md rename to packages/astro-hydration-dedup/README.md index bcd3d341..258c8bce 100644 --- a/astro/packages/astro-hydration-dedup/README.md +++ b/packages/astro-hydration-dedup/README.md @@ -118,4 +118,4 @@ _astro/dedup-1a2b3c4d.js (3542 B × 14574 pages), … --- -*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../docs/ownership-map.md) and [`docs/upstream/`](../../docs/upstream/).* diff --git a/astro/packages/astro-hydration-dedup/package.json b/packages/astro-hydration-dedup/package.json similarity index 100% rename from astro/packages/astro-hydration-dedup/package.json rename to packages/astro-hydration-dedup/package.json diff --git a/astro/packages/astro-hydration-dedup/src/index.ts b/packages/astro-hydration-dedup/src/index.ts similarity index 100% rename from astro/packages/astro-hydration-dedup/src/index.ts rename to packages/astro-hydration-dedup/src/index.ts diff --git a/astro/packages/astro-incremental-static/README.md b/packages/astro-incremental-static/README.md similarity index 98% rename from astro/packages/astro-incremental-static/README.md rename to packages/astro-incremental-static/README.md index 6da95fd5..a7d356bb 100644 --- a/astro/packages/astro-incremental-static/README.md +++ b/packages/astro-incremental-static/README.md @@ -144,4 +144,4 @@ always fresh. --- -*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../docs/ownership-map.md) and [`docs/upstream/`](../../docs/upstream/).* diff --git a/astro/packages/astro-incremental-static/package.json b/packages/astro-incremental-static/package.json similarity index 100% rename from astro/packages/astro-incremental-static/package.json rename to packages/astro-incremental-static/package.json diff --git a/astro/packages/astro-incremental-static/src/index.ts b/packages/astro-incremental-static/src/index.ts similarity index 100% rename from astro/packages/astro-incremental-static/src/index.ts rename to packages/astro-incremental-static/src/index.ts diff --git a/astro/packages/astro-incremental-static/src/runner.ts b/packages/astro-incremental-static/src/runner.ts similarity index 100% rename from astro/packages/astro-incremental-static/src/runner.ts rename to packages/astro-incremental-static/src/runner.ts diff --git a/astro/packages/astro-remote-images/README.md b/packages/astro-remote-images/README.md similarity index 98% rename from astro/packages/astro-remote-images/README.md rename to packages/astro-remote-images/README.md index d06a91eb..8d7de665 100644 --- a/astro/packages/astro-remote-images/README.md +++ b/packages/astro-remote-images/README.md @@ -160,4 +160,4 @@ Every substitution (error image or passthrough) logs --- -*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../../docs/ownership-map.md) and [`docs/upstream/`](../../../docs/upstream/).* +*In this repo: the evidence for the numbers above, the decision record, and the exit path for this package live in [`docs/ownership-map.md`](../../docs/ownership-map.md) and [`docs/upstream/`](../../docs/upstream/).* diff --git a/astro/packages/astro-remote-images/package.json b/packages/astro-remote-images/package.json similarity index 100% rename from astro/packages/astro-remote-images/package.json rename to packages/astro-remote-images/package.json diff --git a/astro/packages/astro-remote-images/src/RemoteImage.astro b/packages/astro-remote-images/src/RemoteImage.astro similarity index 100% rename from astro/packages/astro-remote-images/src/RemoteImage.astro rename to packages/astro-remote-images/src/RemoteImage.astro diff --git a/astro/packages/astro-remote-images/src/index.ts b/packages/astro-remote-images/src/index.ts similarity index 100% rename from astro/packages/astro-remote-images/src/index.ts rename to packages/astro-remote-images/src/index.ts diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 32956a95..00000000 --- a/postcss.config.js +++ /dev/null @@ -1,20 +0,0 @@ -// Base config copied from https://nextjs.org/docs/advanced-features/customizing-postcss-config#customizing-plugins -module.exports = { - plugins: [ - 'postcss-flexbugs-fixes', - 'postcss-nested', - 'postcss-normalize', - [ - 'postcss-preset-env', - { - autoprefixer: { - flexbox: 'no-2009', - }, - stage: 3, - features: { - 'custom-properties': false, - }, - }, - ], - ], -} diff --git a/astro/public/en/about.html b/public/en/about.html similarity index 100% rename from astro/public/en/about.html rename to public/en/about.html diff --git a/astro/public/en/data.html b/public/en/data.html similarity index 100% rename from astro/public/en/data.html rename to public/en/data.html diff --git a/astro/public/en/get-involved.html b/public/en/get-involved.html similarity index 100% rename from astro/public/en/get-involved.html rename to public/en/get-involved.html diff --git a/astro/public/icons.svg b/public/icons.svg similarity index 100% rename from astro/public/icons.svg rename to public/icons.svg diff --git a/public/screenshot.png b/public/screenshot.png deleted file mode 100644 index bbc71c196b76cf92ba5ae7b5a7482652593131cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716973 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
L^&u6X#rfwt_qz^Y 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ʔtr zrUs|O%9FE>$pA?Yx+|~147X~H#62zAUHKreSF6{i zo0mF;Cc514(*SVJhpNOR{~PCoHrXb^V5E479)o-q-rIIRsFsT1U3>R#<0&W3kt-VR zWAv-sV5p#GbUGYf$h9LB*=Xe57(p}(6)YgyNoJ{@@Wa_}+XOQP32iTT}3kYG0+Qq(Y11Pur9Q>SzFK+6rc7Z1vVSnZu~Pd=xPxu?EKD z!}qzY+y#&Ssl~(*ki$W1XpQjwwS^m4HfG2G-OwO^&1{8gID>ZB|AkUSi z?|0i}Jk7^mc^xssYp^3P2lox$d;9+1G5(nY;l>z~qp}b_Ll_DVRVPM2{=FHQK(9=+ z--%2a-ZIzbB`(z6sVx^36NIk91S_{v?4{~|jxo8nrUhmt=~FI z1LoLk@rg?7K1f8JGNT5Df z`AQs~&FL+6-vT|Y!Y8m%YN`+vn`YybBwDbZH`6G7T*-J?{!lhIn=MP`qI=Yn2pe#( zA-71l9?d80zA4B%iSZ}~aF&yoe`}&B)#mX0;^8ud&|Y_`7814h;ymVldT28G6&iG6 zr44bT@+?uwPg!6{N>yH2UTwfdNN2?h@N70%$$7EH-^(_ASMf^iHl!9RJ>!GZJph#_<06*eC7#Q=bER_D>X|>!_=* zvmfueb8{(R9E>H=Lm-ofl5O#+0 zA`^4;=Zg~LB@IqO_1(qcPVPU$^2Nye1*!tQM*?o1**Fw~K~_s+JHAh4E16?pVd!zS zM+o|;#|I%-yESfKViAam6ZFZFKr@XMQju^`+-3tDU)?_%0Df1X3_`Q`j20AUq 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%0D+vce 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

dZ1I|BV=EUE56Co45aWiWh+vlAnH-*d{I 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

`!-*!F0=u-J%GO~^q?w_m%lA9K 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

YS;(?la#W(IOTdtF~IJOP3Sr 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
  • VS5A+{ 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 VAG@)pMs&5U`}sGboHU;m}_I8a5*{zKL^ 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 diff --git a/redirects/about.html b/redirects/about.html deleted file mode 100644 index 96d04b19..00000000 --- a/redirects/about.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

    This page has been moved.

    -
    - - diff --git a/redirects/data.html b/redirects/data.html deleted file mode 100644 index 20b684a9..00000000 --- a/redirects/data.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

    This page has been moved.

    -

    If you are not redirected within 3 seconds, click here to go to the data page.

    - - diff --git a/redirects/get-involved.html b/redirects/get-involved.html deleted file mode 100644 index 74806197..00000000 --- a/redirects/get-involved.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

    This page has been moved.

    -

    If you are not redirected within 3 seconds, click here to go to the get involved page.

    - - diff --git a/scripts/fetchData.ts b/scripts/fetchData.ts index 9679978d..ba4b20a9 100644 --- a/scripts/fetchData.ts +++ b/scripts/fetchData.ts @@ -1,9 +1,11 @@ +// Run with plain `node scripts/fetchData.ts` (Node >= 22 type stripping — the +// type-only import below is erased, so no ts-node/tsc is needed at runtime). import { GraphQLClient, gql } from 'graphql-request'; import fs from 'fs'; import path from 'path'; -import { AllDataQuery } from '../generated/types'; +import type { AllDataQuery } from '../generated/types'; -const datadir = path.join(__dirname, '../fullData'); +const datadir = path.join(import.meta.dirname, '../fullData'); const outputPath = path.join(datadir, 'staticData.json'); const baseUrl = process.env.MAPSWIPE_API_ENDPOINT || 'http://localhost:8000/'; const GRAPHQL_ENDPOINT = `${baseUrl}graphql/`; diff --git a/astro/scripts/incremental-build.mjs b/scripts/incremental-build.mjs similarity index 92% rename from astro/scripts/incremental-build.mjs rename to scripts/incremental-build.mjs index b0a71d21..243cee04 100644 --- a/astro/scripts/incremental-build.mjs +++ b/scripts/incremental-build.mjs @@ -13,10 +13,10 @@ runIncrementalBuild({ codeHash: { // Everything that affects rendered output EXCEPT the data axis // (fullData/ + blogs/ are tracked per page via propsHash) and build - // artifacts. Repo-root public/locales is read by src/i18n's glob. + // artifacts. Repo-root locales/ is read by src/i18n's glob. include: [ 'src/**', - '../public/locales/**', + 'locales/**', 'astro.config.mjs', 'package.json', ], diff --git a/astro/scripts/prefetch-images.mjs b/scripts/prefetch-images.mjs similarity index 97% rename from astro/scripts/prefetch-images.mjs rename to scripts/prefetch-images.mjs index 23c12fc5..7544b2c0 100644 --- a/astro/scripts/prefetch-images.mjs +++ b/scripts/prefetch-images.mjs @@ -17,7 +17,7 @@ const require = createRequire(import.meta.url); // src/lib/data.ts (same staticData path + same BAD_IMAGE_TEST / SLICE_LIMIT // knobs) so the warmed set matches the render set exactly. function collectCoverUrls() { - const data = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); + const data = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); let projects = (data?.publicProjects?.results ?? []); const limit = Number(process.env.SLICE_LIMIT ?? 0); diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx deleted file mode 100644 index 01763569..00000000 --- a/src/components/Button/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -type Variant = 'transparent' | 'primary' | 'border' | 'icon'; -const variantToStyleMap: { - [key in Variant]: string | undefined; -} = { - transparent: undefined, - primary: styles.primary, - border: styles.border, - icon: styles.icon, -}; -export interface Props extends React.HTMLProps { - className?: string; - variant?: Variant; - elementRef?: React.Ref; -} - -// NOTE: this does not support relative buttons - -function Button(props: Props) { - const { - children, - variant = 'primary', - className, - elementRef, - ...rest - } = props; - - return ( - - ); -} - -export default Button; diff --git a/src/components/Button/styles.module.css b/src/components/Button/styles.module.css deleted file mode 100644 index 08d86c80..00000000 --- a/src/components/Button/styles.module.css +++ /dev/null @@ -1,51 +0,0 @@ -.button { - outline: none; - border: 0; - background-color: transparent; - cursor: pointer; - font-family: inherit; - font-size: inherit; - - &.primary { - transition: 0.2s all ease-in-out; - border-radius: var(--border-radius-medium); - background-color: var(--color-accent-dark); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-text-on-dark); - font-size: var(--font-size-medium); - - &:hover { - background-color: var(--color-accent); - } - } - - &.border { - transition: 0.2s all ease-in-out; - border: var(--width-separator-thin) solid var(--color-accent-dark); - border-radius: var(--border-radius-medium); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-accent-dark); - font-size: var(--font-size-medium); - - &:hover { - border-color: var(--color-accent); - text-decoration: unset; - color: var(--color-accent); - } - } - - &.icon { - display: flex; - align-items: center; - transition: 0.2s all ease-in-out; - border-radius: var(--border-radius-medium); - background-color: rgba(0, 0, 0, 0.2); - padding: var(--spacing-super-small) var(--spacing-extra-small); - line-height: 1; - color: var(--color-text-on-dark); - - &:hover { - background-color: var(--color-accent); - } - } -} diff --git a/src/components/Card/index.tsx b/src/components/Card/index.tsx deleted file mode 100644 index 5232da5e..00000000 --- a/src/components/Card/index.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Heading from 'components/Heading'; -import ImageWrapper from 'components/ImageWrapper'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - heading?: React.ReactNode; - description?: React.ReactNode; - headingFont?: 'normal' | 'heading'; - children?: React.ReactNode; - childrenContainerClassName?: string; - icons?: React.ReactNode; - actions?: React.ReactNode; - footerContent?: React.ReactNode; - footerIcons?: React.ReactNode; - footerActions?: React.ReactNode; - imageClassName?: string; - cardContentClassName?: string; - coverImageUrl?: string; - coverImageContent?: React.ReactNode; - coverImageOnSide?: boolean; - borderless?: boolean; - nonOptimizedImage?: boolean; -} - -function Card(props: Props) { - const { - className, - heading, - headingFont, - description, - imageClassName, - childrenContainerClassName, - icons, - actions, - footerContent, - cardContentClassName, - footerActions, - footerIcons, - children, - coverImageUrl, - coverImageOnSide, - coverImageContent, - borderless, - nonOptimizedImage, - } = props; - - const showHeader = icons || heading || actions; - const showFooter = footerIcons || footerContent || footerActions; - - return ( -
    - {coverImageUrl && !coverImageContent && ( - - )} - {coverImageContent && ( -
    - {coverImageContent} -
    - )} -
    - {(showHeader || !!description) && ( -
    - {showHeader && ( -
    - {icons && ( -
    - {icons} -
    - )} - - {heading} - - {actions && ( -
    - {actions} -
    - )} -
    - )} - {description && ( -
    - {description} -
    - )} -
    - )} -
    - {children} -
    - {showFooter && ( -
    - {footerIcons && ( -
    - {footerIcons} -
    - )} -
    - {footerContent} -
    - {footerActions && ( -
    - {footerActions} -
    - )} -
    - )} -
    -
    - ); -} - -export default Card; diff --git a/src/components/Card/styles.module.css b/src/components/Card/styles.module.css deleted file mode 100644 index 5f1988f7..00000000 --- a/src/components/Card/styles.module.css +++ /dev/null @@ -1,95 +0,0 @@ -.card { - display: flex; - flex-direction: column; - transition: .3s box-shadow ease-in-out; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - background-color: var(--color-foreground); - - .coverImageWrapper { - flex-shrink: 0; - width: 100%; - height: 16rem; - - .image { - border-top-left-radius: var(--border-radius-medium); - border-top-right-radius: var(--border-radius-medium); - object-fit: cover; - } - } - - @media screen and (min-width: 720px) { - &.coverImageOnSide { - flex-direction: row; - - .coverImageWrapper { - width: 14rem; - height: 16rem; - - .image { - border-top-left-radius: 0rem; - border-top-right-radius: 0rem; - object-fit: cover; - } - } - } - } - - .cardContent { - display: flex; - flex-direction: column; - flex-grow: 1; - padding: var(--spacing-extra-large); - gap: var(--spacing-small); - - .headerWrapper { - display: flex; - flex-direction: column; - gap: var(--spacing-ultra-small); - - .header { - display: flex; - align-items: center; - flex-shrink: 0; - gap: var(--spacing-extra-small); - - .heading { - display: -webkit-box; - flex-grow: 1; - overflow: hidden; - text-overflow: ellipsis; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - } - } - - .childrenContainer { - flex-grow: 1; - } - - .footer { - display: flex; - flex-shrink: 0; - - .footerContent { - flex-grow: 1; - } - } - } - - &.borderless { - border: 0; - gap: var(--spacing-medium); - - .coverImageWrapper { - .image { - border-radius: var(--border-radius-medium); - } - } - - .cardContent { - padding: 0; - } - } -} diff --git a/src/components/CenteredCard/index.tsx b/src/components/CenteredCard/index.tsx deleted file mode 100644 index 318a613f..00000000 --- a/src/components/CenteredCard/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - actionsClassName?: string; - title?: React.ReactNode; - description?: React.ReactNode; - actions?: React.ReactNode; -} - -function CenteredCard(props: Props) { - const { - className, - actionsClassName, - title, - description, - actions, - } = props; - - return ( -
    - {title && ( -
    - {title} -
    - )} - {description && ( -
    - {description} -
    - )} - {actions && ( -
    - {actions} -
    - )} -
    - ); -} - -export default CenteredCard; diff --git a/src/components/CenteredCard/styles.module.css b/src/components/CenteredCard/styles.module.css deleted file mode 100644 index d9c18bbd..00000000 --- a/src/components/CenteredCard/styles.module.css +++ /dev/null @@ -1,29 +0,0 @@ -.card { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - padding: var(--spacing-extra-large) var(--spacing-large); - text-align: center; - gap: var(--spacing-medium); - - .heading { - max-width: 32rem; - text-align: center; - color: var(--color-text-brand); - font-family: var(--font-family-dm-sans), sans-serif; - font-size: var(--font-size-medium); - font-weight: var(--font-weight-bold); - } - - .description { - max-width: 28rem; - text-align: center; - } - - .actions { - margin: var(--spacing-large) 0; - } -} diff --git a/astro/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx similarity index 100% rename from astro/src/components/DataExplorer.tsx rename to src/components/DataExplorer.tsx diff --git a/src/components/DropdownMenu/index.tsx b/src/components/DropdownMenu/index.tsx deleted file mode 100644 index 04b47dc3..00000000 --- a/src/components/DropdownMenu/index.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { - useState, - useCallback, - useRef, -} from 'react'; -import { _cs } from '@togglecorp/fujs'; -import { - IoChevronDown, - IoChevronUp, -} from 'react-icons/io5'; - -import Popup from 'components/Popup'; -import Button, { Props as ButtonProps } from 'components/Button'; -import useBlurEffect from 'hooks/useBlurEffect'; - -export interface Props { - className?: string; - dropdownContainerClassName?: string; - children?: React.ReactNode; - label?: React.ReactNode; - activeClassName?: string; - hideDropdownIcon?: boolean; -} - -function DropdownMenu(props: Props) { - const { - className, - dropdownContainerClassName, - children, - label, - activeClassName, - hideDropdownIcon, - } = props; - - const buttonRef = useRef(null); - const dropdownRef = useRef(null); - const [showDropdown, setShowDropdown] = useState(false); - - const handleMenuClick: NonNullable = useCallback( - (e) => { - e.stopPropagation(); - setShowDropdown((prevValue) => !prevValue); - }, - [setShowDropdown], - ); - - const handleBlurCallback = useCallback( - (_: boolean, clickedInParent: boolean) => { - const isClickedWithin = clickedInParent; - if (isClickedWithin) { - return; - } - setShowDropdown(false); - }, - [setShowDropdown], - ); - - useBlurEffect( - showDropdown, - handleBlurCallback, - dropdownRef, - buttonRef, - ); - - return ( - <> - - {showDropdown && ( - - {children} - - )} - - ); -} - -export default DropdownMenu; diff --git a/astro/src/components/Footer.astro b/src/components/Footer.astro similarity index 100% rename from astro/src/components/Footer.astro rename to src/components/Footer.astro diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx deleted file mode 100644 index c0c4e4ff..00000000 --- a/src/components/Footer/index.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'next-i18next'; -import { - _cs, -} from '@togglecorp/fujs'; -import Link from 'components/Link'; -import { FaRegNewspaper } from 'react-icons/fa'; -import { - IoLogoFacebook, - IoLogoMastodon, - IoLogoGithub, - IoMail, - IoLogoInstagram, -} from 'react-icons/io5'; - -import Heading from 'components/Heading'; -import ImageWrapper from 'components/ImageWrapper'; - -import styles from './styles.module.css'; - -export interface Props { - className?: string; -} - -function Footer(props: Props) { - const { - className, - } = props; - - const { t } = useTranslation('common'); - const currentYear = new Date().getFullYear(); - - return ( -
    -
    -
    - - {t('footer-about-us-title')} - -
    - {t('footer-about-us-description')} -
    -
    -
    - - {t('footer-quick-links')} - -
    - - {t('home-link')} - - - {t('get-involved-link')} - - - {t('data-link')} - - - {t('blogs-link')} - - - {t('community-dashboard-link')} - -
    -
    -
    - - {t('footer-follow-us-title')} - -
    - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    - {t('copyright', { year: currentYear })} -
    -
    - {t('uptime-pretext')} - - - -
    -
    - - {t('privacy')} - -
    -
    -
    -
    - ); -} - -export default Footer; diff --git a/src/components/Footer/styles.module.css b/src/components/Footer/styles.module.css deleted file mode 100644 index c5bf1530..00000000 --- a/src/components/Footer/styles.module.css +++ /dev/null @@ -1,83 +0,0 @@ -.footer { - display: flex; - flex-direction: column; - background-color: var(--color-brand); - min-height: 20rem; - color: var(--color-text-on-dark); - - .heading { - color: var(--color-heading-on-dark); - font-weight: var(--font-weight-semi-bold); - } - - .topContainer { - display: flex; - flex-grow: 1; - flex-wrap: wrap; - justify-content: space-between; - margin: 0 auto; - padding: var(--spacing-mega-large) var(--spacing-large); - max-width: var(--width-page-max); - gap: var(--spacing-mega-large); - - .section { - display: flex; - flex-basis: 24rem; - flex-direction: column; - gap: var(--spacing-small); - - &.midSection { - flex-basis: 12rem; - } - } - - .links { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - } - - .socialLinks { - display: flex; - flex-wrap: wrap; - gap: var(--spacing-extra-small); - } - } - - .bottomContainer { - background-color: var(--color-brand-dark); - - .content { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: space-between; - margin: 0 auto; - padding: 0 var(--spacing-large); - max-width: var(--width-page-max); - - .leftContainer { - padding: var(--spacing-medium) 0; - } - - .midContainer { - display: flex; - align-items: flex-end; - - .partnerLogo { - /* NOTE: Margin bottom because logo is text and line height is not - * consistent */ - margin-bottom: 2px; - width: 7rem; - height: 1rem; - } - } - - .rightContainer { - display: flex; - padding: var(--spacing-medium) 0; - gap: var(--spacing-medium); - } - } - } -} diff --git a/src/components/Heading/index.tsx b/src/components/Heading/index.tsx deleted file mode 100644 index bca68061..00000000 --- a/src/components/Heading/index.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import React from 'react'; -import { - _cs, - isNotDefined, -} from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -type SizeTypes = 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge' | 'superLarge'; -type FontTypes = 'heading' | 'normal'; - -const sizeToStyleMap: { - [key in SizeTypes]: string; -} = { - extraSmall: styles.extraSmall, - small: styles.small, - medium: styles.medium, - large: styles.large, - extraLarge: styles.extraLarge, - superLarge: styles.superLarge, -}; - -const fontToStyleMap: { - [key in FontTypes]: string; -} = { - heading: styles.heading, - normal: styles.normal, -}; - -function isString(d: unknown): d is string { - return (typeof d) === 'string'; -} - -export interface Props { - className?: string; - children?: React.ReactNode; - size?: SizeTypes; - title?: string; - ellipsize?: boolean; - ellipsizeContainerClassName?: string; - font?: FontTypes; -} - -function Heading(props: Props) { - const { - className: classNameFromProps, - children, - size = 'medium', - title: titleFromProps, - ellipsize, - ellipsizeContainerClassName, - font = 'heading', - } = props; - - let title = titleFromProps; - - if (ellipsize && isNotDefined(titleFromProps) && isString(children)) { - title = children; - } - - const className = _cs( - styles.heading, - ellipsize && styles.ellipsize, - sizeToStyleMap[size], - fontToStyleMap[font], - classNameFromProps, - ); - - const heading = ( - <> - {size === 'extraSmall' && ( -
    - { children } -
    - )} - {size === 'small' && ( -
    - { children } -
    - )} - {size === 'medium' && ( -

    - { children } -

    - )} - {size === 'large' && ( -

    - { children } -

    - )} - {size === 'extraLarge' && ( -

    - { children } -

    - )} - {size === 'superLarge' && ( -

    - { children } -

    - )} - - ); - - if (ellipsize) { - return ( -
    - {heading} -
    - ); - } - - return heading; -} - -export default Heading; diff --git a/src/components/Heading/styles.module.css b/src/components/Heading/styles.module.css deleted file mode 100644 index 5dfb326d..00000000 --- a/src/components/Heading/styles.module.css +++ /dev/null @@ -1,45 +0,0 @@ -.heading { - margin: 0; - color: var(--color-heading); - font-weight: var(--font-weight-bold); - - &.normal { - font-family: 'Lato', sans-serif; - font-weight: var(--font-weight-normal); - } - - &.superLarge { - font-size: var(--font-size-gigantic); - } - - &.extraLarge { - font-size: var(--font-size-mega-large); - } - - &.large { - font-size: var(--font-size-super-large); - } - - &.medium { - font-size: var(--font-size-extra-large); - } - - &.small { - font-size: var(--font-size-large); - } - - &.extraSmall { - font-size: var(--font-size-medium); - } - - &.ellipsize { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } -} - -.ellipsizeContainer { - width: 100%; - overflow: auto; -} diff --git a/src/components/Hero/index.tsx b/src/components/Hero/index.tsx deleted file mode 100644 index 0c0664aa..00000000 --- a/src/components/Hero/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Heading from 'components/Heading'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - title?: React.ReactNode; - description?: React.ReactNode; - actions?: React.ReactNode; - rightContent?: React.ReactNode; - sectionClassName?: string; - mainContentClassName?: string; - leftContentClassName?: string; -} - -function Hero(props: Props) { - const { - className, - title, - description, - actions, - rightContent, - sectionClassName, - leftContentClassName, - mainContentClassName, - } = props; - - return ( -
    -
    -
    -
    - - {title} - - {description && ( -
    - {description} -
    - )} - {actions && ( -
    - {actions} -
    - )} -
    -
    - {rightContent && ( -
    - {rightContent} -
    - )} -
    -
    -
    -
    - ); -} - -export default Hero; diff --git a/src/components/Hero/styles.module.css b/src/components/Hero/styles.module.css deleted file mode 100644 index 9a70b337..00000000 --- a/src/components/Hero/styles.module.css +++ /dev/null @@ -1,99 +0,0 @@ -.hero { - --hero-min-height: 24rem; - display: flex; - position: relative; - flex-direction: column; - z-index: 0; - min-height: var(--hero-min-height); - overflow-x: hidden; - overflow-y: hidden; - color: var(--color-text-on-dark); - - .section { - flex-shrink: 0; - background-color: var(--color-background); - width: 100%; - - .mainContent { - display: flex; - position: relative; - flex-grow: 1; - justify-content: center; - margin: 0 auto; - padding: 6rem var(--spacing-medium) var(--spacing-medium) var(--spacing-medium); - width: 100%; - max-width: var(--width-page-max); - gap: var(--spacing-super-large); - - .left { - display: flex; - flex-direction: column; - gap: var(--spacing-extra-large); - padding-top: var(--spacing-mega-large); - max-width: 40rem; - - .heading { - color: var(--color-heading-on-dark); - } - - .description { - font-size: var(--font-size-extra-large); - } - - .buttonsContainer { - display: flex; - flex-wrap: wrap; - gap: var(--spacing-medium); - } - } - - .right { - display: flex; - flex-grow: 1; - justify-content: flex-end; - } - } - } - - .angledBackground { - border-width: 0 100vw 6rem 0; - border-style: solid; - border-color: transparent var(--color-background) transparent transparent; - width: 0px; - height: 0px; - } - - &.withoutRightContent { - --hero-min-height: 24rem; - - .section { - .left { - max-width: 50rem; - text-align: center; - } - } - } - - @media screen and (max-width: 860px) { - --hero-min-height: 80vh; - - &.withoutRightContent { - --hero-min-height: 24rem; - } - } - - @media screen and (max-width: 720px) { - min-height: unset; - - .section { - .mainContent { - flex-direction: column; - padding: var(--spacing-medium); - - .right { - align-self: center; - } - } - } - } -} diff --git a/src/components/HtmlOutput/index.tsx b/src/components/HtmlOutput/index.tsx deleted file mode 100644 index 1e33933a..00000000 --- a/src/components/HtmlOutput/index.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - content: string; -} - -function HtmlOutput(props: Props) { - const { - className, - content, - } = props; - - return ( -
    - ); -} - -export default HtmlOutput; diff --git a/src/components/HtmlOutput/styles.module.css b/src/components/HtmlOutput/styles.module.css deleted file mode 100644 index 8dcb5a79..00000000 --- a/src/components/HtmlOutput/styles.module.css +++ /dev/null @@ -1,70 +0,0 @@ -.htmlOutput { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - h1, h2, h3, h4, h5, h6 { - max-width: 60rem; - color: var(--color-heading)!important; - font-weight: var(--font-weight-bold); - } - - h1 { - font-size: var(--font-size-super-large); - } - - h2 { - font-size: var(--font-size-extra-large); - } - - h3 { - font-size: var(--font-size-large); - } - - h4 { - font-size: var(--font-size-medium); - } - - h5 { - font-size: var(--font-size-small); - } - - h6 { - font-size: var(--font-size-extra-small); - } - - p, li { - max-width: 60rem; - color: var(--color-text); - font-size: var(--font-size-medium); - } - - a { - max-width: clamp(100%, 60rem, 100%); - word-break: break-word; - color: var(--color-link); - font-size: var(--font-size-medium); - - &:hover { - text-decoration: underline; - } - } - - img { - max-width: clamp(100%, 60rem, 100%); - object-fit: contain; - } - - figure { - display: flex; - flex-direction: column; - margin: 0; - text-align: center; - - figcaption { - padding: var(--spacing-extra-small) 0; - max-width: 60rem; - font-style: italic; - } - } -} diff --git a/astro/src/components/Icon.astro b/src/components/Icon.astro similarity index 100% rename from astro/src/components/Icon.astro rename to src/components/Icon.astro diff --git a/src/components/ImageWrapper/index.tsx b/src/components/ImageWrapper/index.tsx deleted file mode 100644 index f62944dd..00000000 --- a/src/components/ImageWrapper/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Image, { ImageProps } from 'next/image'; - -import styles from './styles.module.css'; - -export interface Props extends ImageProps { - className?: string; - src: string; - imageClassName?: string; - nonOptimizedImage?: boolean; -} - -function ImageWrapper(props: Props) { - const { - className, - imageClassName, - src, - nonOptimizedImage, - ...otherProps - } = props; - - const basePrefix = process.env.NEXT_PUBLIC_BASE_PREFIX ?? ''; - const isExternal = src.startsWith('http://') || src.startsWith('https://'); - - let modifiedSrc = src; - - const isBasePrefixAvailable = basePrefix !== undefined && basePrefix.trim().length > 0; - if (isBasePrefixAvailable) { - modifiedSrc = isExternal ? src : `/${basePrefix}/${src.replace(/^\/+/, '')}`; - } - - return ( -
    - {(!nonOptimizedImage && !isBasePrefixAvailable) ? ( - - ) : ( - // eslint-disable-next-line @next/next/no-img-element - {otherProps.alt} - )} -
    - ); -} - -export default ImageWrapper; diff --git a/src/components/ImageWrapper/styles.module.css b/src/components/ImageWrapper/styles.module.css deleted file mode 100644 index 48137434..00000000 --- a/src/components/ImageWrapper/styles.module.css +++ /dev/null @@ -1,15 +0,0 @@ -.imageWrapper { - position: relative; - width: 100%; - height: 100%; - - .image { - object-position: center center; - object-fit: contain; - } - - .nonOptimizedImage { - width: 100%; - height: 100%; - } -} diff --git a/src/components/KeyFigure/index.tsx b/src/components/KeyFigure/index.tsx deleted file mode 100644 index a2dd2816..00000000 --- a/src/components/KeyFigure/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; -import { FaPlus } from 'react-icons/fa'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - label?: React.ReactNode; - value?: React.ReactNode; - description?: React.ReactNode; - variant?: 'box' | 'circle'; - circleColor?: 'accent' | 'complement'; -} - -function KeyFigure(props: Props) { - const { - className, - label, - value, - variant = 'box', - circleColor = 'accent', - description, - } = props; - - return ( -
    -
    - {value} - -
    -
    - {label} -
    -
    - {description} -
    -
    - ); -} - -export default KeyFigure; diff --git a/src/components/KeyFigure/styles.module.css b/src/components/KeyFigure/styles.module.css deleted file mode 100644 index 4dd5b2e8..00000000 --- a/src/components/KeyFigure/styles.module.css +++ /dev/null @@ -1,58 +0,0 @@ -.keyFigure { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - gap: var(--spacing-extra-small); - border: var(--width-separator-thin) solid var(--color-accent-light); - border-radius: 0.5rem; - padding: var(--spacing-large); - - .label { - color: var(--color-heading); - font-size: var(--font-size-medium); - } - - .value { - display: flex; - align-items: center; - justify-content: center; - color: var(--color-heading); - font-size: var(--font-size-extra-large); - font-weight: var(--font-weight-bold); - gap: var(--spacing-super-small); - - .icon { - color: var(--color-accent); - font-size: var(--font-size-large); - } - } - - .description { - font-size: var(--font-size-large); - } - - &.circle { - --size: 8rem; - --border-size: 4rem; - position: relative; - border: none; - border-radius: var(--border-size); - box-shadow: 0 0 0 2rem var(--color-background-brand-light); - background-color: var(--color-background-brand-light); - width: var(--size); - height: var(--size); - text-align: center; - gap: var(--spacing-tiny); - - .label { - color: var(--color-heading); - font-size: var(--font-size-medium); - } - - &.complement { - box-shadow: 0 0 0 2rem var(--color-complement); - background-color: var(--color-complement); - } - } -} diff --git a/src/components/LanguageSwitcher/index.tsx b/src/components/LanguageSwitcher/index.tsx deleted file mode 100644 index 8dc4d77f..00000000 --- a/src/components/LanguageSwitcher/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { _cs } from '@togglecorp/fujs'; -import { useRouter } from 'next/router'; -import NextLink, { LinkProps as NextLinkProps } from 'next/link'; - -import languageDetector from 'utils/languageDetector'; -import languageTitleMap from 'utils/languages'; -import styles from './styles.module.css'; - -interface Props extends Omit { - className?: string; - activeClassName?: string; - locale: string; - active: boolean; -} - -function LanguageSwitcher(props: Props) { - const { - className, - locale, - active, - activeClassName, - ...rest - } = props; - - const router = useRouter(); - - const { - query, - pathname, - } = router; - - // TODO: disable if the current locale is the same as locale - - return ( - { - if (languageDetector.cache) { - languageDetector.cache(locale); - } - }} - > - {languageTitleMap[locale]?.label ?? locale} - - ); -} - -export default LanguageSwitcher; diff --git a/src/components/LanguageSwitcher/styles.module.css b/src/components/LanguageSwitcher/styles.module.css deleted file mode 100644 index 53ce4e42..00000000 --- a/src/components/LanguageSwitcher/styles.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.languageSwitcher { - opacity: 1; -} diff --git a/src/components/LeafletGestureHandler.tsx b/src/components/LeafletGestureHandler.tsx deleted file mode 100644 index ee7b8dd8..00000000 --- a/src/components/LeafletGestureHandler.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useEffect } from 'react'; -import { GestureHandling } from 'leaflet-gesture-handling'; -import { useMap } from 'react-leaflet'; -import { Map } from 'leaflet'; - -import 'leaflet-gesture-handling/dist/leaflet-gesture-handling.css'; - -interface ExtendedMap extends Map { - gestureHandling: { - enable: () => void; - }; -} - -function GestureHandler() { - const map = useMap(); - useEffect( - () => { - if (!map) { - return; - } - map.addHandler('gestureHandling', GestureHandling); - (map as ExtendedMap).gestureHandling.enable(); - }, - [map], - ); - return null; -} - -export default GestureHandler; diff --git a/src/components/Link/index.tsx b/src/components/Link/index.tsx deleted file mode 100644 index 6f61392d..00000000 --- a/src/components/Link/index.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; -import NextLink, { LinkProps as NextLinkProps } from 'next/link'; -import { useRouter } from 'next/router'; - -import styles from './styles.module.css'; - -type Variant = 'transparent' | 'button' | 'buttonTransparent' | 'icon' | 'underline'; -const variantToStyleMap: { - [key in Variant]: string | undefined; -} = { - transparent: undefined, - button: styles.button, - underline: styles.underline, - buttonTransparent: styles.buttonTransparent, - icon: styles.icon, -}; - -interface Props extends Omit { - children?: React.ReactNode; - className?: string; - locale?: string; - rel?: string; - target?: string; - variant?: Variant; - title?: React.ReactNode; - download?: boolean; - // NOTE: For client-side downloads (e.g. a data: URL) where there is no - // media server to set Content-Disposition. Sets the HTML download - // attribute so the browser saves the file with this name. - downloadFileName?: string; -} - -// NOTE: this does not support relative links - -function Link(props: Props) { - const { - children, - variant = 'transparent', - className, - title, - download = false, - downloadFileName, - ...rest - } = props; - - const router = useRouter(); - - let locale = rest.locale ?? router.query.locale; - if (Array.isArray(locale)) { - [locale] = locale; - } - - let { href } = rest; - if (locale) { - if (typeof href === 'string') { - href = href.replace('[locale]', locale); - } else { - href = { - ...href, - pathname: href.pathname?.replace('[locale]', locale), - }; - } - } - - let { target, rel } = rest; - if (download) { - // NOTE: the server is configured to set the Content-Disposition - // header for media files when treat_as_download is set, which - // makes the browser download the file instead of opening it. - // NOTE: media URLs do not have query params so we can safely - // append the query param with `?` - if (typeof href === 'string') { - href = `${href}?treat_as_download=true`; - } - // NOTE: fallback for when the server does not handle - // treat_as_download: open the file in a new tab instead of - // navigating away from the page - target = target ?? '_blank'; - rel = rel ?? 'noopener noreferrer'; - } - - return ( - - {children} - - ); -} - -export default Link; diff --git a/src/components/Link/styles.module.css b/src/components/Link/styles.module.css deleted file mode 100644 index df392431..00000000 --- a/src/components/Link/styles.module.css +++ /dev/null @@ -1,61 +0,0 @@ -.link { - display: block; - - &:hover { - text-decoration: underline; - } - - &.button { - transition: 0.2s all ease-in-out; - border-radius: var(--border-radius-medium); - background-color: var(--color-accent-dark); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-text-on-dark); - font-size: var(--font-size-medium); - - &:hover { - background-color: var(--color-accent); - text-decoration: unset; - } - } - - &.buttonTransparent { - transition: 0.2s all ease-in-out; - border: var(--width-separator-thin) solid var(--color-accent-dark); - border-radius: var(--border-radius-medium); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-accent-dark); - font-size: var(--font-size-medium); - - &:hover { - border-color: var(--color-accent); - text-decoration: unset; - color: var(--color-accent); - } - } - - &.underline { - transition: 0.2s all ease-in-out; - color: var(--color-link); - - &:hover { - text-decoration: underline; - } - } - - &.icon { - display: flex; - align-items: center; - transition: 0.2s all ease-in-out; - border-radius: var(--border-radius-medium); - background-color: rgba(0, 0, 0, 0.2); - padding: var(--spacing-super-small) var(--spacing-extra-small); - line-height: 1; - color: var(--color-text-on-dark); - - &:hover { - background-color: var(--color-accent); - text-decoration: unset; - } - } -} diff --git a/src/components/ListItem/index.tsx b/src/components/ListItem/index.tsx deleted file mode 100644 index 082a5026..00000000 --- a/src/components/ListItem/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; -import { IoCheckmarkCircleOutline } from 'react-icons/io5'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - icon?: React.ReactNode; - label: React.ReactNode; -} - -function ListItem(props: Props) { - const { - className, - icon = , - label, - } = props; - - return ( -
    -
    - {icon} -
    -
    - {label} -
    -
    - ); -} - -export default ListItem; diff --git a/src/components/ListItem/styles.module.css b/src/components/ListItem/styles.module.css deleted file mode 100644 index 5313e4fc..00000000 --- a/src/components/ListItem/styles.module.css +++ /dev/null @@ -1,14 +0,0 @@ -.listItem { - display: flex; - gap: var(--spacing-extra-small); - - .icon { - flex-shrink: 0; - color: var(--color-accent); - font-size: var(--font-size-large); - } - - .label { - flex-grow: 1; - } -} diff --git a/astro/src/components/MapIsland.tsx b/src/components/MapIsland.tsx similarity index 100% rename from astro/src/components/MapIsland.tsx rename to src/components/MapIsland.tsx diff --git a/src/components/MultiSelectInput/index.tsx b/src/components/MultiSelectInput/index.tsx deleted file mode 100644 index e6187041..00000000 --- a/src/components/MultiSelectInput/index.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import React, { useCallback } from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Button from 'components/Button'; - -import styles from './styles.module.css'; - -interface OptionProps { - onChange: (newVal: VALUE[] | undefined) => void; - value: VALUE[] | null | undefined; - option: OPTION; - keySelector: (option: OPTION) => VALUE; - labelSelector: (option: OPTION) => string | React.ReactNode; - iconSelector?: (option: OPTION) => React.ReactNode; -} - -function OptionRenderer(props: OptionProps) { - const { - onChange, - value, - option, - keySelector, - iconSelector, - labelSelector, - } = props; - - const key = keySelector(option); - - const isSelected = (value?.indexOf(key) ?? -1) !== -1; - - const handleClick = useCallback(() => { - const index = value?.indexOf(keySelector(option)) ?? -1; - if (index >= 0) { - const newVal = [...(value ?? [])]; - newVal.splice(index, 1); - onChange(newVal.length > 0 ? newVal : undefined); - } else if (index) { - onChange([...(value ?? []), key]); - } - }, [ - key, - onChange, - value, - keySelector, - option, - ]); - - return ( - - ); -} - -export interface Props { - className?: string; - value: VALUE[] | null | undefined; - onChange: (value: VALUE[] | undefined) => void; - options: OPTION[]; - label?: string; - keySelector: (option: OPTION) => VALUE; - labelSelector: (option: OPTION) => string | React.ReactNode; - iconSelector?: (option: OPTION) => React.ReactNode; -} - -function MultiSelectInput< - OPTION, - VALUE extends string, ->(props: Props) { - const { - className, - onChange, - value, - options, - keySelector, - labelSelector, - iconSelector, - label, - } = props; - - return ( -
    -
    - {label} -
    -
    - {options.map((option) => ( - - ))} -
    -
    - ); -} - -export default MultiSelectInput; diff --git a/src/components/MultiSelectInput/styles.module.css b/src/components/MultiSelectInput/styles.module.css deleted file mode 100644 index 84ce55ee..00000000 --- a/src/components/MultiSelectInput/styles.module.css +++ /dev/null @@ -1,27 +0,0 @@ -.input { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .optionsContainer { - display: flex; - flex-wrap: wrap; - gap: var(--spacing-extra-small); - - .option { - display: flex; - align-items: center; - border: transparent solid var(--width-separator-thin); - border-radius: var(--border-radius-medium); - background-color: var(--color-background-accent-light); - padding: var(--spacing-super-small) var(--spacing-extra-small); - color: var(--color-text); - gap: var(--spacing-super-small); - font-size: var(--font-size-small); - - &.selected { - border-color: var(--color-brand); - } - } - } -} diff --git a/astro/src/components/Navbar.astro b/src/components/Navbar.astro similarity index 100% rename from astro/src/components/Navbar.astro rename to src/components/Navbar.astro diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx deleted file mode 100644 index 5b43be54..00000000 --- a/src/components/Navbar/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'next-i18next'; -import { useRouter } from 'next/router'; -import { _cs } from '@togglecorp/fujs'; -import { MdMenu } from 'react-icons/md'; -import { IoEarthSharp } from 'react-icons/io5'; - -import Link from 'components/Link'; -import Button from 'components/Button'; -import LanguageSwitcher from 'components/LanguageSwitcher'; -import DropdownMenu from 'components/DropdownMenu'; -import useBooleanState from 'hooks/useBooleanState'; -import languageTitleMap from 'utils/languages'; -import ImageWrapper from 'components/ImageWrapper'; - -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; -} - -function Navbar(props: Props) { - const { - className, - } = props; - - const { t } = useTranslation('common'); - const router = useRouter(); - const [isNavShown, , , , toggleNavVisibility] = useBooleanState(false); - - let currentLocale = router.query.locale ?? i18nextConfig.i18n.defaultLocale; - if (Array.isArray(currentLocale)) { - [currentLocale] = currentLocale; - } - - return ( -
    -
    - - - -
    - - {t('get-involved-link')} - - - {t('data-link')} - - - {t('community-dashboard-link')} - -
    -
    - - - - {languageTitleMap[currentLocale]?.abbreviation ?? currentLocale} - - - )} - className={styles.dropdown} - dropdownContainerClassName={styles.languageList} - > - {i18nextConfig.i18n.locales.map((locale) => ( - - ))} - - {t('didnot-find-language')} - - - -
    -
    -
    - ); -} - -export default Navbar; diff --git a/src/components/Navbar/styles.module.css b/src/components/Navbar/styles.module.css deleted file mode 100644 index 58185e7a..00000000 --- a/src/components/Navbar/styles.module.css +++ /dev/null @@ -1,125 +0,0 @@ -.navbar { - position: relative; - z-index: 2; - background-color: var(--color-background); - color: var(--color-text-on-dark); - - .navbarContent { - display: flex; - position: relative; - align-items: center; - margin: auto; - background-color: var(--color-background); - padding: var(--spacing-medium); - max-width: var(--width-page-max); - gap: var(--spacing-medium); - - .logo { - position: relative; - flex-shrink: 0; - width: 10rem; - height: 2rem; - object-fit: contain; - object-position: center left; - } - - .routes { - display: flex; - align-content: center; - flex-grow: 1; - flex-wrap: wrap; - justify-content: flex-end; - text-align: center; - gap: var(--spacing-medium); - - .link { - border-bottom: var(--width-separator-thin) solid transparent; - font-size: var(--font-size-medium); - font-weight: var(--font-weight-semi-bold); - - &.active { - border-bottom-color: var(--color-accent); - } - - &:hover { - border-bottom-color: var(--color-accent); - text-decoration: unset; - } - } - } - - .rightContainer { - display: flex; - align-items: center; - gap: var(--spacing-medium); - - .dropdown { - display: flex; - align-items: center; - border-radius: var(--border-radius-medium); - border-color: var(--color-text-on-dark); - padding: var(--spacing-tiny) var(--spacing-extra-small); - text-transform: uppercase; - color: var(--color-text-on-dark); - font-size: var(--font-size-small); - gap: var(--spacing-tiny); - - .currentLocale { - font-size: var(--font-size-small); - } - } - } - - .menu { - display: none; - line-height: 100%; - color: var(--color-text-on-dark); - font-size: var(--font-size-large); - } - - @media screen and (max-width: 720px) { - justify-content: space-between; - - .routes { - position: absolute; - top: 100%; - left: 0; - flex-direction: column; - transform: translateY(-100%); - transition: 200ms all ease-in-out; - z-index: -1; - background-color: var(--color-brand); - padding: var(--spacing-large); - width: 100%; - - &.navShown { - transform: translateY(0); - } - } - - .menu { - display: block; - } - } - } -} - -.languageList { - display: flex; - flex-direction: column; - - .language { - padding: var(--spacing-ultra-small) var(--spacing-medium); - - &.activeLanguage { - background-color: var(--color-background-brand-light); - color: var(--color-text); - font-weight: var(--font-weight-bold); - } - - &:hover { - background-color: var(--color-background-brand-light); - color: var(--color-text); - } - } -} diff --git a/src/components/NumberOutput/index.tsx b/src/components/NumberOutput/index.tsx deleted file mode 100644 index ebfe5614..00000000 --- a/src/components/NumberOutput/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React, { memo, useMemo } from 'react'; -import { - isNotDefined, - isDefined, - _cs, -} from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -export interface Props { - className?: string; - /** - * Text to show if invalid value is supplied - */ - invalidText?: React.ReactNode; - /** - * Normalize numer into Millions(M), Billion(B) - */ - normal?: boolean; - /** - * Specify which separator to use for thousands - */ - separatorHidden?: boolean, - /** - * The value of the numeral - */ - value: number | undefined | null, - /** - * Text for tooltip - */ - tooltip?: number | string | null | undefined; - - currency?: boolean; - - unit?: React.ReactNode; -} - -/** - * NumberOutput component for formatted numbers - */ -function NumberOutput(props: Props) { - const { - className, - invalidText = '-', - separatorHidden, - normal, - currency, - value, - tooltip, - unit, - } = props; - - const val = useMemo( - () => { - if (isNotDefined(value)) { - return invalidText; - } - const options: Intl.NumberFormatOptions = {}; - if (currency) { - options.currencyDisplay = 'narrowSymbol'; - options.style = 'currency'; - } - if (normal) { - options.notation = 'compact'; - options.compactDisplay = 'short'; - } - options.useGrouping = !separatorHidden; - - const newValue = new Intl.NumberFormat('en-US', options) - .format(value); - - return newValue; - }, - [invalidText, value, normal, separatorHidden, currency], - ); - - return ( -
    - {val} - {isDefined(value) && unit && ( - - {unit} - - )} -
    - ); -} - -export default memo(NumberOutput); diff --git a/src/components/NumberOutput/styles.module.css b/src/components/NumberOutput/styles.module.css deleted file mode 100644 index 50c2e0a6..00000000 --- a/src/components/NumberOutput/styles.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.numberOutput { - display: flex; - font-size: inherit; -} diff --git a/astro/src/components/OgMeta.astro b/src/components/OgMeta.astro similarity index 100% rename from astro/src/components/OgMeta.astro rename to src/components/OgMeta.astro diff --git a/src/components/OgMeta/index.tsx b/src/components/OgMeta/index.tsx deleted file mode 100644 index 4ddd98ea..00000000 --- a/src/components/OgMeta/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; - -const buildDate = process.env.MAPSWIPE_BUILD_DATE; -const url = process.env.MAPSWIPE_DEPLOYMENT_URL; - -interface Props { - title?: string; - description?: string; -} - -function OgMeta(props: Props) { - const { - title: titleFromProps, - description: descriptionFromProps, - } = props; - - const { t } = useTranslation('common'); - - const title = titleFromProps || String(t('meta-page-title')); - const description = descriptionFromProps || String(t('meta-page-description')); - - return ( - - {title} - - - - - - - - - - - - - - ); -} - -export default OgMeta; diff --git a/src/components/Page/index.tsx b/src/components/Page/index.tsx deleted file mode 100644 index eda2a151..00000000 --- a/src/components/Page/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Navbar from 'components/Navbar'; -import Footer from 'components/Footer'; - -import styles from './styles.module.css'; - -export interface Props { - className?: string; - contentClassName?: string; - children?: React.ReactNode; -} - -function Page(props: Props) { - const { - className, - children, - contentClassName, - } = props; - - return ( -
    - -
    - {children} -
    -
    -
    - ); -} - -export default Page; diff --git a/src/components/Page/styles.module.css b/src/components/Page/styles.module.css deleted file mode 100644 index b9fdffff..00000000 --- a/src/components/Page/styles.module.css +++ /dev/null @@ -1,17 +0,0 @@ -.page { - display: flex; - flex-direction: column; - min-height: 100vh; - - .navbar { - flex-shrink: 0; - } - - .mainContent { - flex-grow: 1; - } - - .footer { - flex-shrink: 0; - } -} diff --git a/src/components/Popup/index.tsx b/src/components/Popup/index.tsx deleted file mode 100644 index 0f45b60f..00000000 --- a/src/components/Popup/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { _cs } from '@togglecorp/fujs'; - -import Portal from 'components/Portal'; -import useFloatPlacement from 'hooks/useFloatPlacement'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - elementRef: React.RefObject; - parentRef: React.RefObject; - children?: React.ReactNode; -} - -function Popup(props: Props) { - const { - parentRef, - elementRef, - children, - className, - } = props; - - const placement = useFloatPlacement(parentRef); - - return ( - -
    } - style={placement} - className={_cs(styles.popup, className)} - > - {children} -
    -
    - ); -} - -export default Popup; diff --git a/src/components/Popup/styles.module.css b/src/components/Popup/styles.module.css deleted file mode 100644 index a7cc1a7b..00000000 --- a/src/components/Popup/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.popup { - position: fixed; - top: 50%; - left: 50%; - border-radius: var(--border-radius-small); - box-shadow: 0 0 0 var(--go-ui-spacing-px) var(--go-ui-color-gray-30), 0 4px 16px 2px var(--go-ui-color-gray-30); - background: var(--color-foreground); - padding: var(--spacing-medium) 0; - min-width: 10rem; - overflow: auto; -} diff --git a/src/components/Portal/index.tsx b/src/components/Portal/index.tsx deleted file mode 100644 index 5eb74220..00000000 --- a/src/components/Portal/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { createPortal } from 'react-dom'; - -export interface Props { - portalKey?: string; - container?: Element | DocumentFragment; - children: React.ReactNode; -} - -function Portal(props: Props) { - const { - children, - container = document.body, - portalKey, - } = props; - return ( - <> - {createPortal( - children, - container, - portalKey, - )} - - ); -} - -export default Portal; diff --git a/astro/src/components/ProjectHistoryChart.tsx b/src/components/ProjectHistoryChart.tsx similarity index 100% rename from astro/src/components/ProjectHistoryChart.tsx rename to src/components/ProjectHistoryChart.tsx diff --git a/src/components/ProjectMap/index.tsx b/src/components/ProjectMap/index.tsx deleted file mode 100644 index 4c33b69b..00000000 --- a/src/components/ProjectMap/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useRef, useCallback } from 'react'; -import { - MapContainer, - TileLayer, - GeoJSON, -} from 'react-leaflet'; -import { Map, LayerEvent } from 'leaflet'; - -import GestureHandler from 'components/LeafletGestureHandler'; - -interface Props { - className?: string; - children?: React.ReactNode; - geoJSON: GeoJSON.FeatureCollection; -} - -function ProjectMap(props: Props) { - const { - className, - children, - geoJSON, - } = props; - - const mapRef = useRef(null); - - const handleGeoJSONAdd = useCallback( - (layer: LayerEvent) => { - const bounds = layer.target?.getBounds(); - if (bounds) { - mapRef.current?.fitBounds(bounds, { padding: [12, 12] }); - } - }, - [], - ); - - return ( - - - - - {children} - - ); -} - -export default ProjectMap; diff --git a/src/components/ProjectMap/styles.module.css b/src/components/ProjectMap/styles.module.css deleted file mode 100644 index 04b8f232..00000000 --- a/src/components/ProjectMap/styles.module.css +++ /dev/null @@ -1,55 +0,0 @@ -.cardLink { - &:hover { - text-decoration: unset; - } -} - -.project { - height: 100%; - - &:hover { - box-shadow: var(--box-shadow-medium); - } -} - -.row { - display: flex; - align-items: center; - gap: var(--spacing-extra-small); -} -.progressBar { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .progressLabel { - align-self: flex-start; - } - .track { - border-radius: 0.25rem; - background-color: var(--color-separator); - height: 0.5rem; - - .progress { - border-radius: 0.25rem; - background-color: var(--color-background-bar); - height: 100%; - } - } -} - -.projectStats { - display: flex; - flex-direction: column; - gap: var(--spacing-medium); - - .tag { - padding: 0; - } - - .bottomTags { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - } -} diff --git a/astro/src/components/ProjectTypeIcon.astro b/src/components/ProjectTypeIcon.astro similarity index 100% rename from astro/src/components/ProjectTypeIcon.astro rename to src/components/ProjectTypeIcon.astro diff --git a/astro/src/components/ProjectTypeIcon.tsx b/src/components/ProjectTypeIcon.tsx similarity index 100% rename from astro/src/components/ProjectTypeIcon.tsx rename to src/components/ProjectTypeIcon.tsx diff --git a/src/components/ProjectTypeIcon/index.tsx b/src/components/ProjectTypeIcon/index.tsx deleted file mode 100644 index ebe2428f..00000000 --- a/src/components/ProjectTypeIcon/index.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -type SizeTypes = 'small' | 'medium' | 'large'; - -const sizeToStyleMap: { - [key in SizeTypes]: string; -} = { - small: styles.small, - medium: styles.medium, - large: styles.large, -}; - -export interface Props { - className?: string; - type: 'FIND' | 'VALIDATE' | 'VALIDATE_IMAGE' | 'COMPARE' | 'COMPLETENESS' | 'STREET' | 'LOCATE'; - size?: SizeTypes; -} -function ProjectTypeIcon(props: Props) { - const { - className: classNameFromProps, - type, - size = 'medium', - } = props; - - const className = _cs( - styles.icon, - classNameFromProps, - sizeToStyleMap[size], - ); - - return ( - <> - {type === 'FIND' && ( - - - - - - )} - {type === 'VALIDATE' && ( - - - - - - )} - {type === 'COMPARE' && ( - - - - - - )} - {type === 'COMPLETENESS' && ( - - - - - - )} - {type === 'VALIDATE_IMAGE' && ( - - - - - - )} - {type === 'STREET' && ( - - - - - - )} - {/* FIXME(frozenhelium): Add icon for locate features */} - {type === 'LOCATE' && ( - - - - - - - - )} - - ); -} - -export default ProjectTypeIcon; diff --git a/src/components/ProjectTypeIcon/styles.module.css b/src/components/ProjectTypeIcon/styles.module.css deleted file mode 100644 index 4e596751..00000000 --- a/src/components/ProjectTypeIcon/styles.module.css +++ /dev/null @@ -1,18 +0,0 @@ -.icon { - display: block; - --height: 1.5rem; - width: var(--height); - height: var(--height); - - &.small { - --height: 1.2rem; - } - - &.medium { - --height: 1.5rem; - } - - &.large { - --height: 1.8rem; - } -} diff --git a/src/components/ProjectsMap/index.tsx b/src/components/ProjectsMap/index.tsx deleted file mode 100644 index 4efed400..00000000 --- a/src/components/ProjectsMap/index.tsx +++ /dev/null @@ -1,308 +0,0 @@ -import React, { useMemo } from 'react'; -import { isDefined, listToMap } from '@togglecorp/fujs'; -import { - MapContainer, - TileLayer, - Popup, - CircleMarker, -} from 'react-leaflet'; -import { useTranslation } from 'next-i18next'; -import { CircleMarkerOptions, LatLngTuple } from 'leaflet'; - -import Card from 'components/Card'; -import ProjectTypeIcon from 'components/ProjectTypeIcon'; -import Tag from 'components/Tag'; -import { - IoLocationOutline, - IoFlag, - IoPerson, - IoCalendarClearOutline, - IoEllipseSharp, -} from 'react-icons/io5'; - -import { - ProjectTypeOption, - ProjectStatusOption, - ProjectType, - ProjectStatus, -} from 'utils/common'; - -import GestureHandler from 'components/LeafletGestureHandler'; -import Link from 'components/Link'; -import { AllDataQuery } from 'generated/types'; - -import styles from './styles.module.css'; - -type PublicProject = NonNullable['results']>[number]; - -const pathOptions: { - [key in ProjectStatus]?: CircleMarkerOptions -} = { - PUBLISHED: { - fillColor: '#F69143', - color: '#0F193F', - weight: 1, - opacity: 0.2, - fillOpacity: 0.9, - }, - FINISHED: { - fillColor: '#AABE5D', - color: '#0F193F', - weight: 1, - opacity: 0.2, - fillOpacity: 0.9, - }, -}; - -const defaultPathOptions: CircleMarkerOptions = { - fillColor: '#0F193F', - color: '#0F193F', - weight: 1, - opacity: 0.3, - fillOpacity: 0.9, -}; - -interface Props { - className?: string; - children?: React.ReactNode; - projects: PublicProject[]; - radiusSelector: (project: PublicProject) => number; -} - -function ProjectMap(props: Props) { - const { - className, - children, - projects, - radiusSelector, - } = props; - - const { t } = useTranslation('data'); - - const projectStatusOptions: ProjectStatusOption[] = useMemo(() => ([ - { - key: 'PUBLISHED', - label: t('active'), - icon: (), - }, - { - key: 'FINISHED', - label: t('finished'), - icon: (), - }, - ]), [t]); - - const projectStatusOptionMap = useMemo(() => ( - listToMap( - projectStatusOptions, - (item) => item.key, - (item) => item, - ) - ), [projectStatusOptions]); - - const projectTypeOptions: ProjectTypeOption[] = useMemo(() => { - const projectTypeOptionsMapping: Record<`${ProjectType}`, ProjectTypeOption> = { - FIND: { - key: 'FIND', - label: t('type-find-title'), - icon: ( - - ), - }, - VALIDATE: { - key: 'VALIDATE', - label: t('type-validate-title'), - icon: ( - - ), - }, - COMPARE: { - key: 'COMPARE', - label: t('type-compare-title'), - icon: ( - - ), - }, - COMPLETENESS: { - key: 'COMPLETENESS', - label: t('type-completeness-title'), - icon: ( - - ), - }, - VALIDATE_IMAGE: { - key: 'VALIDATE_IMAGE', - label: t('type-validate-image-title'), - icon: ( - - ), - }, - STREET: { - key: 'STREET', - label: t('type-streets-view-title'), - icon: ( - - ), - }, - LOCATE: { - key: 'LOCATE', - label: t('type-locate-title'), - icon: ( - - ), - }, - }; - - return Object.values(projectTypeOptionsMapping); - }, [t]); - - const projectTypeOptionsMap = useMemo(() => ( - listToMap( - projectTypeOptions, - (item) => item.key, - (item) => item, - ) - ), [projectTypeOptions]); - - const sanitizedProjects = projects - .map((project) => (isDefined(project?.aoiGeometry?.centroid) ? { - ...project, - centroid: [ - project.aoiGeometry?.centroid[1], - project.aoiGeometry?.centroid[0], - ] as LatLngTuple, - } : undefined)) - .filter(isDefined); - - return ( - - {sanitizedProjects.map((project) => ( - - - - - {project.projectType && ( - - {projectTypeOptionsMap[project.projectType]?.label} - - )} - {project.status && ( - - {projectStatusOptionMap[project.status]?.label} - - )} -
    - )} - footerContent={( -
    -
    -
    -
    -
    - {t('project-card-progress-text', { progress: (project.progress * 100) })} -
    -
    - )} - > -
    -
    - {project.region && ( - } - variant="transparent" - > - {project.region} - - )} - {project.requestingOrganization && ( - } - variant="transparent" - > - {project?.requestingOrganization.name} - - )} -
    - {project.modifiedAt && ( - } - variant="transparent" - > - {t( - 'project-card-last-update', - { - date: project.modifiedAt - ? new Date(project.modifiedAt) - .toLocaleDateString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - }) : null, - }, - )} - - )} - } - variant="transparent" - > - {t('project-card-contributors-text', { contributors: project.numberOfContributorUsers })} - -
    -
    -
    - - - - - ))} - - - {children} - - ); -} - -export default ProjectMap; diff --git a/src/components/ProjectsMap/styles.module.css b/src/components/ProjectsMap/styles.module.css deleted file mode 100644 index d8a4676e..00000000 --- a/src/components/ProjectsMap/styles.module.css +++ /dev/null @@ -1,67 +0,0 @@ -.cardLink { - &:hover { - text-decoration: unset; - } - - .active { - color: var(--color-active); - } - - .finished { - color: var(--color-finished); - } - - .project { - border: none; - height: 100%; - } - - .types { - display: flex; - flex-direction: column; - gap: var(--spacing-extra-small); - width: fit-content; - } - - .row { - display: flex; - align-items: center; - gap: var(--spacing-extra-small); - } - .progressBar { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .progressLabel { - align-self: flex-start; - } - .track { - border-radius: 0.25rem; - background-color: var(--color-separator); - height: 0.5rem; - - .progress { - border-radius: 0.25rem; - background-color: var(--color-background-bar); - height: 100%; - } - } - } - - .projectStats { - display: flex; - flex-direction: column; - gap: var(--spacing-medium); - - .tag { - padding: 0; - } - - .bottomTags { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - } - } -} diff --git a/astro/src/components/ProjectsMapIsland.tsx b/src/components/ProjectsMapIsland.tsx similarity index 100% rename from astro/src/components/ProjectsMapIsland.tsx rename to src/components/ProjectsMapIsland.tsx diff --git a/src/components/RadioInput/index.tsx b/src/components/RadioInput/index.tsx deleted file mode 100644 index ac118cbb..00000000 --- a/src/components/RadioInput/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import React, { useCallback } from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Button from 'components/Button'; - -import styles from './styles.module.css'; - -interface OptionProps { - onChange: (newVal: VALUE | undefined) => void; - value: VALUE | null | undefined; - option: OPTION; - keySelector: (option: OPTION) => VALUE; - labelSelector: (option: OPTION) => string | React.ReactNode; - iconSelector?: (option: OPTION) => React.ReactNode; - optionSize?: 'small' | 'medium' | 'large'; -} - -function OptionRenderer(props: OptionProps) { - const { - onChange, - value, - option, - keySelector, - iconSelector, - labelSelector, - optionSize, - } = props; - - const key = keySelector(option); - - const isSelected = value === key; - - const handleClick = useCallback(() => { - if (value === key) { - onChange(undefined); - } else { - onChange(key); - } - }, [ - key, - onChange, - value, - ]); - - return ( - - ); -} - -export interface Props { - className?: string; - value: VALUE | null | undefined; - onChange: (value: VALUE | undefined) => void; - options: OPTION[]; - label?: string; - keySelector: (option: OPTION) => VALUE; - labelSelector: (option: OPTION) => string | React.ReactNode; - iconSelector?: (option: OPTION) => React.ReactNode; - optionSize?: 'small' | 'medium' | 'large'; -} - -function RadioInput< - OPTION, - VALUE extends string, ->(props: Props) { - const { - className, - onChange, - value, - options, - keySelector, - labelSelector, - iconSelector, - label, - optionSize, - } = props; - - return ( -
    -
    - {label} -
    -
    - {options.map((option) => ( - - ))} -
    -
    - ); -} - -export default RadioInput; diff --git a/src/components/RadioInput/styles.module.css b/src/components/RadioInput/styles.module.css deleted file mode 100644 index d9041830..00000000 --- a/src/components/RadioInput/styles.module.css +++ /dev/null @@ -1,34 +0,0 @@ -.input { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .optionsContainer { - display: flex; - flex-wrap: wrap; - border-radius: 1rem; - background-color: var(--color-background-accent-light); - - .option { - display: flex; - align-items: center; - flex-shrink: 0; - border: transparent solid var(--width-separator-thin); - border-radius: 1rem; - background-color: var(--color-background-accent-light); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-text); - font-size: var(--font-size-small); - - &.selected { - background-color: var(--color-brand); - color: var(--color-text-on-dark); - } - - &.small { - padding: var(--spacing-tiny) var(--spacing-small); - font-size: var(--font-size-extra-small); - } - } - } -} diff --git a/src/components/RawInput/index.tsx b/src/components/RawInput/index.tsx deleted file mode 100644 index 81a4ec49..00000000 --- a/src/components/RawInput/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { _cs, isDefined } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -export interface Props extends Omit, 'ref' | 'onChange' | 'value' | 'name' | 'label'> { - className?: string; - name: NAME; - value: string | undefined | null; - onChange: ( - value: string | undefined, - name: NAME, - e?: React.FormEvent | undefined, - ) => void; - elementRef?: React.Ref; -} - -function RawInput(props: Props) { - const { - className, - onChange, - elementRef, - value, - name, - ...otherProps - } = props; - - const handleChange = React.useCallback((e: React.FormEvent) => { - const v = e.currentTarget.value; - - if (onChange) { - onChange( - v === '' ? undefined : v, - name, - e, - ); - } - }, [name, onChange]); - - return ( - - ); -} - -export default RawInput; diff --git a/src/components/RawInput/styles.module.css b/src/components/RawInput/styles.module.css deleted file mode 100644 index 6f413d7b..00000000 --- a/src/components/RawInput/styles.module.css +++ /dev/null @@ -1,16 +0,0 @@ -.rawInput { - margin: unset; - outline: unset; - border: unset; - background-color: unset; - padding: unset; - width: 100%; - color: inherit; - font-family: inherit; - font-size: inherit; - font-weight: inherit; - - &:disabled { - cursor: not-allowed; - } -} diff --git a/astro/src/components/RemoteImage.astro b/src/components/RemoteImage.astro similarity index 100% rename from astro/src/components/RemoteImage.astro rename to src/components/RemoteImage.astro diff --git a/src/components/Section/index.tsx b/src/components/Section/index.tsx deleted file mode 100644 index d6703f1a..00000000 --- a/src/components/Section/index.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import Heading from 'components/Heading'; - -import styles from './styles.module.css'; - -interface Props { - className?: string; - contentClassName?: string; - containerClassName?: string; - title?: React.ReactNode; - description?: React.ReactNode; - children?: React.ReactNode; - actions?: React.ReactNode; - withAlternativeBackground?: boolean; - smallHeading?: boolean; - sectionId?: string; - actionsClassName?: string; - descriptionClassName?: string; - headingContainerClassName?: string; -} - -function Section(props: Props) { - const { - className, - contentClassName, - containerClassName, - title, - description, - descriptionClassName, - headingContainerClassName, - children, - sectionId, - actions, - actionsClassName, - smallHeading, - withAlternativeBackground, - } = props; - - return ( -
    -
    - {(title || description) && ( -
    - {title && ( - - {title} - - )} - {description && ( -
    - {description} -
    - )} -
    - )} - {children && ( -
    - {children} -
    - )} - {actions && ( -
    - {actions} -
    - )} -
    -
    - ); -} - -export default Section; diff --git a/src/components/Section/styles.module.css b/src/components/Section/styles.module.css deleted file mode 100644 index b623312d..00000000 --- a/src/components/Section/styles.module.css +++ /dev/null @@ -1,41 +0,0 @@ -.section { - width: 100%; - - .container { - display: flex; - flex-direction: column; - margin: 0 auto; - padding: var(--spacing-enourmous) var(--spacing-super-large); - width: 100%; - max-width: var(--width-page-max); - gap: var(--spacing-enourmous); - - .heading { - align-self: center; - max-width: var(--width-heading-max); - text-align: center; - } - - .description { - align-self: center; - max-width: var(--width-heading-max); - text-align: center; - font-size: var(--font-size-medium); - } - - .headingContainer { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - } - - .actions { - display: flex; - justify-content: center; - } - } - - &.withAlternativeBackground { - background-color: var(--color-background-brand-light); - } -} diff --git a/src/components/SelectInput/index.tsx b/src/components/SelectInput/index.tsx deleted file mode 100644 index ee80f401..00000000 --- a/src/components/SelectInput/index.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react'; -import { _cs, isDefined } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -export interface Props extends Omit, 'ref' | 'onChange' | 'value' | 'name' | 'label'> { - className?: string; - name: NAME; - value: VALUE | null | undefined; - onChange: ( - value: VALUE | undefined, - name: NAME, - e?: React.FormEvent | undefined, - ) => void; - options: OPTION[]; - keySelector: (option: OPTION) => VALUE; - labelSelector: (option: OPTION) => string; - elementRef?: React.Ref; -} - -function SelectInput< - const NAME, - OPTION, - VALUE extends string, ->(props: Props) { - const { - className, - onChange, - elementRef, - value, - name, - options, - keySelector, - labelSelector, - placeholder, - ...otherProps - } = props; - - const handleChange = React.useCallback((e: React.FormEvent) => { - const v = e.currentTarget.value as VALUE; - - if (onChange) { - onChange( - v === '' ? undefined : v, - name, - e, - ); - } - }, [name, onChange]); - - return ( - - ); -} - -export default SelectInput; diff --git a/src/components/SelectInput/styles.module.css b/src/components/SelectInput/styles.module.css deleted file mode 100644 index a5650a25..00000000 --- a/src/components/SelectInput/styles.module.css +++ /dev/null @@ -1,23 +0,0 @@ -.selectInput { - margin: unset; - outline: unset; - border: unset; - background-color: unset; - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position-x: 98%; - background-position-y: 50%; - padding: unset; - width: 100%; - color: inherit; - font-family: inherit; - font-size: inherit; - font-weight: inherit; - -moz-appearance:none; /* Firefox */ - -webkit-appearance:none; /* Safari and Chrome */ - appearance:none; - - &:disabled { - cursor: not-allowed; - } -} diff --git a/src/components/Tag/index.tsx b/src/components/Tag/index.tsx deleted file mode 100644 index 653dfe2a..00000000 --- a/src/components/Tag/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { _cs } from '@togglecorp/fujs'; - -import styles from './styles.module.css'; - -type Variant = 'primary' | 'border' | 'icon' | 'transparent'; -type Spacing = 'small' | 'medium' | 'large'; - -const variantToStyleMap: { - [key in Variant]: string | undefined; -} = { - primary: undefined, - transparent: styles.transparent, - border: styles.border, - icon: styles.icon, -}; - -const spacingToStyleMap: { - [key in Spacing]: string | undefined; -} = { - small: styles.small, - medium: styles.medium, - large: styles.large, -}; - -export interface Props { - className?: string; - icon?: React.ReactNode; - variant?: Variant; - spacing?: Spacing; - children?: React.ReactNode; - tooltip?: string | null; -} - -function Tag(props: Props) { - const { - children, - icon, - variant = 'primary', - spacing = 'medium', - className, - tooltip, - } = props; - - return ( -
    - {icon} - {children} -
    - ); -} - -export default Tag; diff --git a/src/components/Tag/styles.module.css b/src/components/Tag/styles.module.css deleted file mode 100644 index dc1249d0..00000000 --- a/src/components/Tag/styles.module.css +++ /dev/null @@ -1,46 +0,0 @@ -.tag { - display: flex; - align-items: center; - border: transparent solid var(--width-separator-thin); - border-radius: var(--border-radius-medium); - background-color: var(--color-background-accent-light); - padding: var(--spacing-super-small) var(--spacing-extra-small); - color: var(--color-text); - gap: var(--spacing-super-small); - font-size: var(--font-size-small); - - &.border { - border-color: var(--color-brand); - background-color: unset; - } - - &.icon { - display: flex; - align-items: center; - border-radius: var(--border-radius-medium); - background-color: rgba(0, 0, 0, 0.2); - padding: var(--spacing-super-small) var(--spacing-extra-small); - line-height: 1; - color: var(--color-text-on-dark); - - &:hover { - background-color: var(--color-accent); - } - } - - &.transparent { - background-color: transparent; - } - - &.small { - padding: var(--spacing-tiny) var(--spacing-super-small); - } - - &.medium { - padding: var(--spacing-super-small) var(--spacing-extra-small); - } - - &.large { - padding: var(--spacing-extra-small) var(--spacing-small); - } -} diff --git a/astro/src/content.config.ts b/src/content.config.ts similarity index 85% rename from astro/src/content.config.ts rename to src/content.config.ts index 1dcf9eef..1486364a 100644 --- a/astro/src/content.config.ts +++ b/src/content.config.ts @@ -4,10 +4,10 @@ import { glob } from 'astro/loaders'; // Blog Content Collection. // // Replaces the Next app's getBlogs.ts (gray-matter + remark/remark-html). A -// glob() loader points DIRECTLY at the repo-root `blogs/` dir (../blogs from -// astro/) — NO files are moved. Astro renders each entry's markdown body via -// entry.render() using the project's markdown pipeline (remark-gfm is enabled -// in astro.config.mjs, matching Next). +// glob() loader points DIRECTLY at the repo-root `blogs/` dir — NO files are +// moved. Astro renders each entry's markdown body via entry.render() using the +// project's markdown pipeline (remark-gfm is enabled in astro.config.mjs, +// matching Next). // // The entry `id` MUST equal Next's slug: path.parse(filename).name (case // PRESERVED). The glob loader's DEFAULT id lowercases + slugifies the filename, @@ -23,7 +23,7 @@ import { glob } from 'astro/loaders'; const blogs = defineCollection({ loader: glob({ pattern: '*.md', - base: '../blogs', + base: './blogs', // Preserve Next's slug exactly: filename without extension, case intact. generateId: ({ entry }) => entry.replace(/\.md$/, ''), }), diff --git a/src/hooks/useBlurEffect.ts b/src/hooks/useBlurEffect.ts deleted file mode 100644 index b8447905..00000000 --- a/src/hooks/useBlurEffect.ts +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; - -function useBlurEffect( - shouldWatch: boolean, - // NOTE: the api is a bit different - callback: (clickedInside: boolean, clickedInParent: boolean, e: Event) => void, - elementRef: React.RefObject, - parentRef: React.RefObject, -) { - React.useEffect( - () => { - if (!shouldWatch) { - return undefined; - } - - const handleDocumentClick = (e: Event) => { - const { current: element } = elementRef; - const { current: parent } = parentRef; - - const targetNode = e.target as Node | null; - - const isElementOrContainedInElement = e && element - ? element === e.target || element.contains(targetNode) - : false; - - const isParentOrContainedInParent = parent - ? parent === e.target || parent.contains(targetNode) - : false; - - callback(isElementOrContainedInElement, isParentOrContainedInParent, e); - }; - - document.addEventListener('click', handleDocumentClick); - - return () => { - document.removeEventListener('click', handleDocumentClick); - }; - }, - [shouldWatch, callback, elementRef, parentRef], - ); -} -export default useBlurEffect; diff --git a/src/hooks/useBooleanState.ts b/src/hooks/useBooleanState.ts deleted file mode 100644 index 03b8b1b8..00000000 --- a/src/hooks/useBooleanState.ts +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; - -type SetTrueFn = () => void; -type SetFalseFn = () => void; -type ToggleFn = () => void; -type SetValueFn = React.Dispatch>; - -function useBooleanState(initialValue: boolean): [ - boolean, - SetTrueFn, - SetFalseFn, - SetValueFn, - ToggleFn, -] { - const [value, setValue] = React.useState(initialValue); - - const setTrue = React.useCallback(() => { - setValue(true); - }, [setValue]); - - const setFalse = React.useCallback(() => { - setValue(false); - }, [setValue]); - - const toggleFn = React.useCallback(() => { - setValue((oldValue) => !oldValue); - }, [setValue]); - - return [value, setTrue, setFalse, setValue, toggleFn]; -} - -export default useBooleanState; diff --git a/src/hooks/useDebouncedValue.ts b/src/hooks/useDebouncedValue.ts deleted file mode 100644 index 3a83edd8..00000000 --- a/src/hooks/useDebouncedValue.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { useState, useEffect } from 'react'; - -function useDebouncedValue( - input: T, - debounceTime?: number, -): T; -function useDebouncedValue( - input: T, - debounceTime: number | undefined, - transformer: (value: T) => V, -): V; -function useDebouncedValue( - input: T, - debounceTime?: number, - transformer?: (value: T) => V, -) { - const [debounceValue, setDebouncedValue] = useState( - () => (transformer ? transformer(input) : input), - ); - useEffect( - () => { - const handler = setTimeout(() => { - setDebouncedValue(transformer ? transformer(input) : input); - }, debounceTime ?? 300); - return () => { - clearTimeout(handler); - }; - }, - [input, debounceTime, transformer], - ); - return debounceValue; -} - -export default useDebouncedValue; diff --git a/src/hooks/useFloatPlacement.ts b/src/hooks/useFloatPlacement.ts deleted file mode 100644 index 24cb7d63..00000000 --- a/src/hooks/useFloatPlacement.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { useEffect, useState, useCallback } from 'react'; - -const defaultPlacement = { - top: 'unset', - right: 'unset', - bottom: 'unset', - left: 'unset', -}; - -function useFloatPlacement(parentRef: React.RefObject) { - const [placement, setPlacement] = useState(defaultPlacement); - - const calculatePlacement = useCallback(() => { - const newPlacement = { ...defaultPlacement }; - - if (parentRef.current) { - const parentBCR = parentRef.current.getBoundingClientRect(); - const { - x, y, width, height, - } = parentBCR; - - const cX = window.innerWidth / 2; - const cY = window.innerHeight / 2; - - const horizontalPosition = (cX - parentBCR.x) > 0 ? 'right' : 'left'; - const verticalPosition = (cY - parentBCR.y) > 0 ? 'bottom' : 'top'; - - if (horizontalPosition === 'left') { - newPlacement.right = `${document.body.clientWidth - x - width}px`; - } else if (horizontalPosition === 'right') { - newPlacement.left = `${x}px`; - } - - if (verticalPosition === 'top') { - newPlacement.bottom = `${window.innerHeight - y}px`; - } else if (verticalPosition === 'bottom') { - newPlacement.top = `${y + height}px`; - } - } - - setPlacement(newPlacement); - }, [setPlacement, parentRef]); - - useEffect(() => { - calculatePlacement(); - // TODO: throttle and debounce callbacks - const handleScroll = calculatePlacement; - const handleResize = calculatePlacement; - - window.addEventListener('scroll', handleScroll); - window.addEventListener('resize', handleResize); - - return () => { - window.removeEventListener('scroll', handleScroll); - window.removeEventListener('resize', handleResize); - }; - }, [calculatePlacement]); - - return placement; -} - -export default useFloatPlacement; diff --git a/src/hooks/useSizeTracking.ts b/src/hooks/useSizeTracking.ts deleted file mode 100644 index bbaa43c4..00000000 --- a/src/hooks/useSizeTracking.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { useEffect, useState } from 'react'; -import ResizeObserver from 'resize-observer-polyfill'; - -function useSizeTracking(ref: React.RefObject, disabled = false) { - const [size, setSize] = useState(() => { - const bcr = ref.current?.getBoundingClientRect(); - - return { - width: bcr?.width ?? 0, - height: bcr?.height ?? 0, - }; - }); - - useEffect(() => { - const resizeObserver = new ResizeObserver((entries) => { - const entry = entries.at(0); - const contentRect = entry?.contentRect; - - if (contentRect) { - // TODO: throttle - setSize({ - width: contentRect.width, - height: contentRect.height, - }); - } - }); - - const el = ref.current; - if (!disabled && el) { - resizeObserver.observe(ref.current); - } - - return () => { - if (el) { - resizeObserver.unobserve(el); - } - }; - }, [disabled, ref]); - - return size; -} - -export default useSizeTracking; diff --git a/astro/src/i18n/index.ts b/src/i18n/index.ts similarity index 76% rename from astro/src/i18n/index.ts rename to src/i18n/index.ts index 76211ef2..746a2dbc 100644 --- a/astro/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,9 +1,10 @@ import i18next from 'i18next'; -// The existing Next app's translations live in public/locales//.json. -// We load them VERBATIM (same files, same keys) and expose i18next.getFixedT -// for use in .astro frontmatter. Translated strings are then passed to React -// islands as props, so i18next never enters an island bundle. +// Translations live in locales//.json (the same files/keys the old +// Next app served from public/locales — kept OUT of public/ so they never ship +// in dist). We load them VERBATIM and expose i18next.getFixedT for use in +// .astro frontmatter. Translated strings are then passed to React islands as +// props, so i18next never enters an island bundle. export const LOCALES = ['en', 'ne', 'hu', 'de', 'cs', 'pt'] as const; export type Locale = (typeof LOCALES)[number]; @@ -11,12 +12,12 @@ export const DEFAULT_LOCALE: Locale = 'en'; const NAMESPACES = ['project', 'common', 'data', 'blog', 'blogs', 'home', 'get-involved', 'privacy'] as const; // Eagerly import every locale/namespace JSON at build time, straight from the -// repo-root public/locales (relative to THIS file: src/i18n -> src -> astro -> -// repo root). The JSONs are compiled into the build output — they never enter -// dist/ as files. +// repo-root locales/ (relative to THIS file: src/i18n -> src -> repo root). +// The JSONs are compiled into the build output — they never enter dist/ as +// files. // Narrow the glob to the namespaces this app uses; a broader glob would // eagerly parse unrelated (and occasionally malformed) locale files at build. -const files = import.meta.glob(['../../../public/locales/*/project.json', '../../../public/locales/*/common.json', '../../../public/locales/*/data.json', '../../../public/locales/*/blog.json', '../../../public/locales/*/blogs.json', '../../../public/locales/*/home.json', '../../../public/locales/*/get-involved.json', '../../../public/locales/*/privacy.json'], { +const files = import.meta.glob(['../../locales/*/project.json', '../../locales/*/common.json', '../../locales/*/data.json', '../../locales/*/blog.json', '../../locales/*/blogs.json', '../../locales/*/home.json', '../../locales/*/get-involved.json', '../../locales/*/privacy.json'], { eager: true, import: 'default', }) as Record>; diff --git a/astro/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro similarity index 100% rename from astro/src/layouts/BaseLayout.astro rename to src/layouts/BaseLayout.astro diff --git a/astro/src/layouts/BlogLayout.astro b/src/layouts/BlogLayout.astro similarity index 100% rename from astro/src/layouts/BlogLayout.astro rename to src/layouts/BlogLayout.astro diff --git a/astro/src/layouts/ProjectLayout.astro b/src/layouts/ProjectLayout.astro similarity index 100% rename from astro/src/layouts/ProjectLayout.astro rename to src/layouts/ProjectLayout.astro diff --git a/astro/src/lib/chart.ts b/src/lib/chart.ts similarity index 100% rename from astro/src/lib/chart.ts rename to src/lib/chart.ts diff --git a/astro/src/lib/common.ts b/src/lib/common.ts similarity index 100% rename from astro/src/lib/common.ts rename to src/lib/common.ts diff --git a/astro/src/lib/data.ts b/src/lib/data.ts similarity index 88% rename from astro/src/lib/data.ts rename to src/lib/data.ts index 7ecf52c8..0f624101 100644 --- a/astro/src/lib/data.ts +++ b/src/lib/data.ts @@ -5,14 +5,14 @@ import { createRequire } from 'node:module'; import { join } from 'node:path'; const require = createRequire(import.meta.url); -// Anchor at the build's working directory (astro/) rather than import.meta.url: -// after Vite bundles this module into dist/, a relative specifier resolves from -// the emitted file's location (dist/pages/...) and breaks. cwd is stable across -// dev + bundled build. astro/ -> ../fullData/staticData.json. +// Anchor at the build's working directory (repo root) rather than +// import.meta.url: after Vite bundles this module into dist/, a relative +// specifier resolves from the emitted file's location (dist/pages/...) and +// breaks. cwd is stable across dev + bundled build -> fullData/staticData.json. // MAPSWIPE_DATA_FILE overrides the path (used by the incremental data-change // benchmark to point at a perturbed copy without touching the shared symlink). // eslint-disable-next-line @typescript-eslint/no-explicit-any -const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); +const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); export interface UrlInfo { id?: string; diff --git a/astro/src/lib/dataExplorer.ts b/src/lib/dataExplorer.ts similarity index 97% rename from astro/src/lib/dataExplorer.ts rename to src/lib/dataExplorer.ts index 7c65ffa6..9395459b 100644 --- a/astro/src/lib/dataExplorer.ts +++ b/src/lib/dataExplorer.ts @@ -8,10 +8,10 @@ import { createRequire } from 'node:module'; import { join } from 'node:path'; const require = createRequire(import.meta.url); -// Same anchor as src/lib/data.ts (cwd = astro/), stable after Vite bundling. +// Same anchor as src/lib/data.ts (cwd = repo root), stable after Vite bundling. // MAPSWIPE_DATA_FILE overrides the path (incremental data-change benchmark). // eslint-disable-next-line @typescript-eslint/no-explicit-any -const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), '..', 'fullData', 'staticData.json')); +const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); export interface MiniProject { id: string; diff --git a/astro/src/lib/projectHistory.ts b/src/lib/projectHistory.ts similarity index 100% rename from astro/src/lib/projectHistory.ts rename to src/lib/projectHistory.ts diff --git a/astro/src/lib/remoteImages.ts b/src/lib/remoteImages.ts similarity index 100% rename from astro/src/lib/remoteImages.ts rename to src/lib/remoteImages.ts diff --git a/astro/src/pages/404.astro b/src/pages/404.astro similarity index 100% rename from astro/src/pages/404.astro rename to src/pages/404.astro diff --git a/src/pages/404/index.tsx b/src/pages/404/index.tsx deleted file mode 100644 index cd1a3981..00000000 --- a/src/pages/404/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react'; -import { - _cs, -} from '@togglecorp/fujs'; - -import Heading from 'components/Heading'; -import ImageWrapper from 'components/ImageWrapper'; -import Link from 'components/Link'; - -import styles from './styles.module.css'; - -export interface Props { - className?: string; -} - -function FourHundredFour(props: Props) { - const { - className, - } = props; - - return ( -
    -
    -
    - - 404 - - - This area has not been swiped yet! - -
    - - Go back to home - -
    -
    - -
    -
    - ); -} - -export default FourHundredFour; diff --git a/src/pages/404/styles.module.css b/src/pages/404/styles.module.css deleted file mode 100644 index 8310a8a2..00000000 --- a/src/pages/404/styles.module.css +++ /dev/null @@ -1,43 +0,0 @@ -.fourHundredFour { - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - gap: var(--spacing-gigantic); - - .leftContent { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - padding: var(--spacing-large); - gap: var(--spacing-extra-large); - - .headingContainer { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - text-align: center; - } - } - - .rightContent { - width: 40rem; - height: 40rem; - } - - @media screen and (max-width: 720px) { - flex-direction: column; - - .rightContent { - order: 1; - width: 96vw; - height: 50vh; - } - - .leftContent { - order: 2; - } - } -} diff --git a/astro/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro similarity index 100% rename from astro/src/pages/[locale]/blogs/[slug]/index.astro rename to src/pages/[locale]/blogs/[slug]/index.astro diff --git a/src/pages/[locale]/blogs/[slug]/index.tsx b/src/pages/[locale]/blogs/[slug]/index.tsx deleted file mode 100644 index ca5c02be..00000000 --- a/src/pages/[locale]/blogs/[slug]/index.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import React from 'react'; -import { GetStaticProps, GetStaticPaths } from 'next'; -import { SSRConfig, useTranslation } from 'next-i18next'; -import { _cs } from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { remark } from 'remark'; -import html from 'remark-html'; -import remarkGfm from 'remark-gfm'; -import { - IoPerson, - IoCalendarClearOutline, -} from 'react-icons/io5'; - -import OgMeta from 'components/OgMeta'; -import ImageWrapper from 'components/ImageWrapper'; -import Tag from 'components/Tag'; -import Page from 'components/Page'; -import HtmlOutput from 'components/HtmlOutput'; -import Section from 'components/Section'; -import Hero from 'components/Hero'; - -import getBlogs, { Blog as BlogType } from 'utils/requests/getBlogs'; - -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -interface Props extends SSRConfig { - className?: string; - blog: BlogType; - contentHtml: string; -} - -function Blog(props: Props) { - const { - className, - contentHtml, - blog, - } = props; - - const { t } = useTranslation('blog'); - - return ( - - - - {blog.publishedDate && ( - } - variant="transparent" - > - {t('date', { date: blog.publishedDate })} - - )} - {blog.author && ( - } - variant="transparent" - > - {blog.author} - - )} -
    - )} - rightContent={blog.coverImage ? ( - - ) : ( -
    - )} - /> -
    - -
    - - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths: GetStaticPaths = async () => { - const blogs = await getBlogs(); - - const pathsWithParams = blogs.flatMap((blog) => { - const withLocales = i18nextConfig.i18n.locales.map((lng) => ({ - params: { - slug: blog.name, - locale: lng, - }, - })); - return withLocales; - }); - - return { - paths: pathsWithParams, - fallback: false, - }; -}; - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const blogSlug = context?.params?.slug; - const blogs = await getBlogs(); - - const translations = await serverSideTranslations(locale as string, [ - 'blog', - 'common', - ]); - - const selectedBlog = blogs.find((blog) => blog.name === blogSlug); - if (!selectedBlog) { - throw new Error(`Could not find the current blog ${blogSlug}.`); - } - - const processedContent = await remark() - .use(html, { sanitize: false }) - .use(remarkGfm) - .process(selectedBlog.markdownContent); - const contentHtml = processedContent.toString(); - - return { - props: { - ...translations, - blog: selectedBlog, - contentHtml, - }, - }; -}; - -export default Blog; diff --git a/src/pages/[locale]/blogs/[slug]/styles.module.css b/src/pages/[locale]/blogs/[slug]/styles.module.css deleted file mode 100644 index e0ac9d54..00000000 --- a/src/pages/[locale]/blogs/[slug]/styles.module.css +++ /dev/null @@ -1,40 +0,0 @@ -.blog { - display: block; - - .illustration { - width: 30rem; - height: 20rem; - - @media screen and (max-width: 840px) { - width: 24rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - } - } - - .hero { - .heroMainContent { - .heroLeftContent { - padding-top: 0; - } - - @media screen and (max-width: 720px) { - padding-top: var(--spacing-enourmous); - } - } - - .heroDescription { - display: flex; - gap: var(--spacing-gigantic); - - .heroTag { - padding: 0; - color: var(--color-text-on-dark-light); - font-size: var(--font-size-medium); - - } - } - } -} diff --git a/astro/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro similarity index 100% rename from astro/src/pages/[locale]/blogs/index.astro rename to src/pages/[locale]/blogs/index.astro diff --git a/src/pages/[locale]/blogs/index.tsx b/src/pages/[locale]/blogs/index.tsx deleted file mode 100644 index 17402f27..00000000 --- a/src/pages/[locale]/blogs/index.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import React, { useMemo } from 'react'; -import { GetStaticProps } from 'next'; -import { useTranslation, SSRConfig } from 'next-i18next'; -import { - _cs, - compareDate, -} from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { IoCalendarClearOutline } from 'react-icons/io5'; - -import Link from 'components/Link'; -import Tag from 'components/Tag'; -import Card from 'components/Card'; -import Page from 'components/Page'; -import Hero from 'components/Hero'; -import Section from 'components/Section'; -import getBlogs, { Blog } from 'utils/requests/getBlogs'; -import OgMeta from 'components/OgMeta'; - -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -interface Props extends SSRConfig { - className?: string; - blogs: Omit[]; -} - -function Blogs(props: Props) { - const { - className, - blogs, - } = props; - - const { t } = useTranslation('blogs'); - - const featuredBlogs = useMemo( - () => blogs.filter((blog) => blog.featured), - [blogs], - ); - - const otherBlogs = useMemo( - () => blogs.filter((blog) => !blog.featured), - [blogs], - ); - - return ( - - - - {featuredBlogs.length > 0 && ( -
    - {featuredBlogs.map((blog) => ( - - } - variant="transparent" - > - {t('date', { date: blog.publishedDate })} - -
    {blog.description}
    - - {t('read-more')} - -
    - ))} -
    - )} - {otherBlogs.length > 0 && ( -
    - {otherBlogs.map((blog) => ( - } - variant="transparent" - > - {t('date', { date: blog.publishedDate })} - - )} - childrenContainerClassName={styles.cardContent} - coverImageOnSide - > -
    {blog.description}
    - - Read more - -
    - ))} -
    - )} -
    - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths(), -}); - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const translations = await serverSideTranslations(locale as string, [ - 'blogs', - 'common', - ]); - const blogs = await getBlogs(); - - const finalBlogs = blogs.map((blog) => ({ - name: blog.name, - title: blog.title, - publishedDate: blog.publishedDate, - description: blog.description, - author: blog.author, - coverImage: blog.coverImage, - featured: blog.featured, - })); - - const sortedBlogs = [...finalBlogs] - .sort((foo, bar) => compareDate(foo.publishedDate, bar.publishedDate, -1)); - - return { - props: { - ...translations, - blogs: sortedBlogs, - }, - }; -}; - -export default Blogs; diff --git a/src/pages/[locale]/blogs/styles.module.css b/src/pages/[locale]/blogs/styles.module.css deleted file mode 100644 index 16e96952..00000000 --- a/src/pages/[locale]/blogs/styles.module.css +++ /dev/null @@ -1,35 +0,0 @@ -.blogs { - display: block; - - .list { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - .tag { - padding: var(--spacing-ultra-small) 0; - font-size: var(--font-size-small); - } - - .cardContent { - display: flex; - flex-direction: column; - gap: var(--spacing-ultra-small); - - .description { - display: -webkit-box; - flex-grow: 1; - overflow: hidden; - text-overflow: ellipsis; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - - .link { - color: var(--color-accent); - font-size: var(--font-size-medium); - font-weight: var(--font-weight-bold); - } - } - } -} diff --git a/astro/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro similarity index 100% rename from astro/src/pages/[locale]/data/index.astro rename to src/pages/[locale]/data/index.astro diff --git a/src/pages/[locale]/data/index.tsx b/src/pages/[locale]/data/index.tsx deleted file mode 100644 index 782af27c..00000000 --- a/src/pages/[locale]/data/index.tsx +++ /dev/null @@ -1,1013 +0,0 @@ -import React, { useState, useCallback, useMemo } from 'react'; -import dynamic from 'next/dynamic'; -import { GetStaticProps } from 'next'; -import { useTranslation } from 'next-i18next'; -import { - _cs, - listToMap, - compareDate, - sum, - isDefined, - bound, -} from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { - IoLocationOutline, - IoClose, - IoDownloadOutline, - IoFlag, - IoPerson, - IoCalendarClearOutline, - IoEllipseSharp, -} from 'react-icons/io5'; - -import OgMeta from 'components/OgMeta'; -import Button from 'components/Button'; -import Tag from 'components/Tag'; -import ProjectTypeIcon from 'components/ProjectTypeIcon'; -import Page from 'components/Page'; -import Card from 'components/Card'; -import KeyFigure from 'components/KeyFigure'; -import NumberOutput from 'components/NumberOutput'; -import Hero from 'components/Hero'; -import ImageWrapper from 'components/ImageWrapper'; -import Link from 'components/Link'; -import Heading from 'components/Heading'; -import ListItem from 'components/ListItem'; -import RawInput from 'components/RawInput'; -import Section from 'components/Section'; -import RadioInput from 'components/RadioInput'; -import MultiSelectInput from 'components/MultiSelectInput'; -import SelectInput from 'components/SelectInput'; -import { - rankedSearchOnList, - ProjectTypeOption, - ProjectType, - ProjectStatusOption, - getFileSizeProperties, -} from 'utils/common'; -import useDebouncedValue from 'hooks/useDebouncedValue'; -import { GlobalExportAssets } from 'utils/queries'; -import data from 'fullData/staticData.json'; - -import { AllDataQuery } from 'generated/types'; -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -type PublicProjects = NonNullable['results']>; -type PublicProject = PublicProjects[number]; - -async function getAllProjects() { - // FIXME: This should be inferred - return (data as AllDataQuery)?.publicProjects?.results as unknown as PublicProjects; -} -async function getAllData() { - // FIXME: This should be inferred - return data as AllDataQuery; -} - -interface Organization { - id: string; - name: string; -} - -const DynamicProjectsMap = dynamic(() => import('components/ProjectsMap'), { ssr: false }); - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export interface BubbleTypeOption { - key: 'area' | 'contributors'; - label: string; -} - -export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths(), -}); - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const translations = await serverSideTranslations(locale as string, [ - 'data', - 'common', - ]); - - const buildDate = process.env.MAPSWIPE_BUILD_DATE; - - const value = await getAllData(); - const publicProjects = await getAllProjects(); - - const { - communityStats, - publicOrganizations, - globalExportAssets, - } = value || {}; - - const { - totalContributors = null, - totalSwipes = null, - } = communityStats || {}; - - const miniProjects = publicProjects?.map((feature) => ({ - id: feature.id ?? '', - projectType: feature.projectType, - name: feature.name, - firebaseId: feature.firebaseId, - status: feature.status ?? null, - region: feature.region ?? null, - requestingOrganizationId: feature.requestingOrganization?.id ?? null, - requestingOrganization: feature.requestingOrganization ?? null, - progress: feature.progress, - numberOfContributorUsers: feature?.numberOfContributorUsers, - createdAt: feature?.createdAt - ? new Date(feature.createdAt).toLocaleDateString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - }) - : null, - image: feature?.image ?? null, - exportAreaOfInterest: feature?.exportAreaOfInterest ?? null, - aoiGeometry: feature?.aoiGeometry, - modifiedAt: feature?.modifiedAt - ? new Date(feature.modifiedAt).toLocaleDateString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - }) - : null, - })) ?? []; - - const contributors = miniProjects?.map((proj) => proj.numberOfContributorUsers) - .filter(isDefined); - const minContributors = contributors?.length > 0 ? Math.min(...contributors) : 0; - const maxContributors = contributors?.length > 0 ? Math.max(...contributors) : 0; - - const sortedProjects = [...miniProjects]; - sortedProjects.sort((a, b) => compareDate(a.createdAt, b.createdAt, -1)); - - const areas = miniProjects?.map((proj) => proj.aoiGeometry?.totalArea) - .filter(isDefined); - const minArea = areas?.length > 0 ? Math.min(...areas) : 0; - const maxArea = areas?.length > 0 ? Math.max(...areas) : 0; - - return { - props: { - ...translations, - projects: sortedProjects, - minArea, - buildDate: buildDate ?? null, - maxArea, - minContributors, - maxContributors, - totalContributors, - totalSwipes, - organizations: publicOrganizations?.results ?? [], - globalExportAssets: globalExportAssets ?? [], - }, - }; -}; - -function organizationKeySelector(option: Organization) { - return option.id; -} - -function organizationLabelSelector(option: Organization) { - return option.name; -} - -function keySelector(option: K) { - return option.key; -} - -function labelSelector(option: K) { - return option.label; -} - -function iconSelector(option: K) { - return option.icon; -} - -const PAGE_SIZE = 9; - -interface Props { - className?: string; - minArea: number, - maxArea: number, - minContributors: number, - maxContributors: number, - buildDate: string | null, - projects: PublicProjects; - totalContributors?: number | null | undefined; - totalSwipes?: number | null | undefined; - organizations: Organization[]; - globalExportAssets: GlobalExportAssets[]; -} - -function Data(props: Props) { - const { - className, - projects, - minArea, - maxArea, - minContributors, - maxContributors, - totalContributors, - buildDate, - totalSwipes, - organizations, - globalExportAssets, - } = props; - - const [items, setItems] = useState(PAGE_SIZE); - const [searchText, setSearchText] = useState(); - const [locationSearchText, setLocationSearchText] = useState(); - const [dateFrom, setDateFrom] = useState(); - const [dateTo, setDateTo] = useState(); - const [projectTypes, setProjectTypes] = useState(); - const [projectStatuses, setProjectStatuses] = useState(); - const [bubble, setBubble] = useState(); - const [organization, setOrganization] = useState(); - - const debouncedSearchText = useDebouncedValue(searchText); - const debouncedLocationSearchText = useDebouncedValue(locationSearchText); - - const organizationOptions = useMemo(() => organizations ?? [], [organizations]); - - const { t } = useTranslation('data'); - - const bubbleTypes: BubbleTypeOption[] = useMemo(() => ([ - { key: 'area', label: t('mapped-area') }, - { key: 'contributors', label: t('contributors') }, - ]), [t]); - - const projectStatusOptions: ProjectStatusOption[] = useMemo(() => ([ - { - key: 'PUBLISHED', - label: t('active'), - icon: (), - }, - { - key: 'FINISHED', - label: t('finished'), - icon: (), - }, - ]), [t]); - - const projectStatusOptionMap = useMemo(() => ( - listToMap( - projectStatusOptions, - (item) => item.key, - (item) => item, - ) - ), [projectStatusOptions]); - - const projectTypeOptions: ProjectTypeOption[] = useMemo(() => { - const projectTypeOptionsMapping: Record<`${ProjectType}`, ProjectTypeOption> = { - FIND: { - key: 'FIND', - label: t('type-find-title'), - icon: ( - - ), - }, - VALIDATE: { - key: 'VALIDATE', - label: t('type-validate-title'), - icon: ( - - ), - }, - COMPARE: { - key: 'COMPARE', - label: t('type-compare-title'), - icon: ( - - ), - }, - COMPLETENESS: { - key: 'COMPLETENESS', - label: t('type-completeness-title'), - icon: ( - - ), - }, - VALIDATE_IMAGE: { - key: 'VALIDATE_IMAGE', - label: t('type-validate-image-title'), - icon: ( - - ), - }, - STREET: { - key: 'STREET', - label: t('type-streets-view-title'), - icon: ( - - ), - }, - LOCATE: { - key: 'LOCATE', - label: t('type-locate-title'), - icon: ( - - ), - }, - }; - - return Object.values(projectTypeOptionsMapping); - }, [t]); - - const projectTypeOptionsMap = useMemo(() => ( - listToMap( - projectTypeOptions, - (item) => item.key, - (item) => item, - ) - ), [projectTypeOptions]); - - const handleSeeMore = useCallback( - () => { - setItems((item) => bound(0, projects.length, item + PAGE_SIZE)); - }, - [projects.length], - ); - - const visibleProjects = useMemo( - () => { - let filteredProjects = projects; - - filteredProjects = projectStatuses - ? filteredProjects.filter((project) => projectStatuses.includes(project.status)) - : filteredProjects; - - filteredProjects = projectTypes - ? filteredProjects.filter( - (project) => projectTypes.includes(String(project.projectType)), - ) - : filteredProjects; - - filteredProjects = dateFrom - ? filteredProjects.filter( - (project) => compareDate(project.createdAt, dateFrom) >= 0, - ) - : filteredProjects; - - filteredProjects = dateTo - ? filteredProjects.filter( - (project) => compareDate(dateTo, project.createdAt) >= 0, - ) - : filteredProjects; - - filteredProjects = organization - ? filteredProjects.filter( - (project) => project.requestingOrganizationId === organization, - ) - : filteredProjects; - - filteredProjects = debouncedLocationSearchText - ? rankedSearchOnList( - filteredProjects, - debouncedLocationSearchText, - (project) => project.region ?? '', - ) - : filteredProjects; - - filteredProjects = debouncedSearchText - ? rankedSearchOnList( - filteredProjects, - debouncedSearchText, - (project) => project.name, - ) - : filteredProjects; - return filteredProjects; - }, - [ - dateFrom, - dateTo, - debouncedLocationSearchText, - projects, - organization, - projectStatuses, - projectTypes, - debouncedSearchText, - ], - ); - - const assetConfig: Record = { - PROJECTS_CSV: { - heading: t('download-projects-overview-heading'), - description: t('download-projects-overview-description'), - fileLabel: 'CSV', - }, - PROJECT_STATS_BY_TYPES: { - heading: t('download-projects-csv-heading'), - description: t('download-projects-csv-description'), - fileLabel: 'CSV', - }, - PROJECTS_CENTROID_GEOJSON: { - heading: t('download-projects-with-centroid-heading'), - description: t('download-projects-with-centroid-description'), - fileLabel: 'GEOJSON', - }, - PROJECTS_GEOM_GEOJSON: { - heading: t('download-projects-with-geometry-headingdownload-projects-geometry-heading'), - description: t('download-projects-with-geometry-description'), - fileLabel: 'GEOJSON', - }, - }; - - const totalAreaSum = sum( - visibleProjects.map( - (feature) => feature.aoiGeometry?.totalArea ?? 0, - ).filter(isDefined), - ); - const roundedTotalArea = Math.round((totalAreaSum / 1000)) * 1000; - - const tableProjects = visibleProjects.slice(0, items); - - const radiusSelector = useCallback( - (project: PublicProject) => { - if (bubble === 'area') { - return 4 + 16 * (((project.aoiGeometry?.totalArea ?? 0) - minArea) - / (maxArea - minArea || 1)); - } - if (bubble === 'contributors') { - return 4 + 16 * (((project.numberOfContributorUsers ?? 0) - minContributors) - / (maxContributors - minContributors || 1)); - } - return 4; - }, - [bubble, maxArea, minArea, maxContributors, minContributors], - ); - - const handleClearFiltersClick = useCallback(() => { - setProjectStatuses(undefined); - setOrganization(undefined); - setSearchText(undefined); - setDateFrom(undefined); - setDateTo(undefined); - setProjectTypes(undefined); - setLocationSearchText(undefined); - }, []); - - const filtersApplied = searchText - || dateFrom - || locationSearchText - || dateTo - || organization - || projectTypes - || projectStatuses; - - return ( - - - - )} - /> -
    -
    - - )} - label={t('total-swipes')} - variant="circle" - /> - - )} - label={t('contributors')} - variant="circle" - /> -
    -
    - - {t('community-stats-section-heading')} - -
    - {t('community-stats-section-description')} - - {t('community-dashboard-link-label')} - -
    -
    -
    -
    - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - - - - )} - icons={( - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - - - )} - childrenContainerClassName={styles.keyPointList} - > - - - - -
    -
    - {t('data-last-fetched', { - date: (new Date(Number(buildDate))), - dateStyle: 'medium', - timeStyle: 'medium', - })} -
    - {t('explore-section-heading-description')} - - )} - actions={tableProjects.length !== visibleProjects.length && ( - - )} - > -
    -
    - - - - - -
    -
    -
    - {t('date-from-label')} -
    - -
    -
    -
    - {t('date-to-label')} -
    - -
    -
    - {filtersApplied && ( - - )} -
    -
    - -
    - -
    -
    -
    -
    -
    - {t('visible-projects-count', { - totalProjects: visibleProjects.length, - })} -
    - -
    - {/* // FIXME: Add roundedTotalArea Here */} - {t('total-area-card-text', { area: roundedTotalArea })} -
    -
    -
    - {tableProjects.map((project) => ( - - - {project.projectType && ( - - {projectTypeOptionsMap[project.projectType]?.label} - - )} - {project.status && ( - - {projectStatusOptionMap[project.status]?.label} - - )} -
    - )} - footerContent={( -
    -
    -
    -
    -
    - {t('project-card-progress-text', { progress: (project.progress * 100) })} -
    -
    - )} - nonOptimizedImage - > -
    -
    - {project.region && ( - } - variant="transparent" - > - {project.region} - - )} - {project.requestingOrganization && ( - } - variant="transparent" - > - {project.requestingOrganization.name} - - )} -
    - {project.createdAt && ( - } - variant="transparent" - > - {t('project-card-last-update', { - date: project.createdAt, - dateStyle: 'medium', - })} - - )} - } - variant="transparent" - > - {t('project-card-contributors-text', { contributors: project.numberOfContributorUsers })} - -
    -
    -
    - - - ))} -
    -
    -
    - {globalExportAssets.map((asset) => { - const config = assetConfig[asset.type]; - if (!config) return null; - - return ( - -
    - {config.fileLabel} -
    - {t('download-size', { - size: getFileSizeProperties(asset.fileSize).size, - formatParams: { - size: { - style: 'unit', - unit: getFileSizeProperties(asset.fileSize).unit, - maximumFractionDigits: 1, - }, - }, - })} -
    -
    - - - {t('download')} - -
    - ); - })} -
    -
    -
    - {t('contact-link-label')} - - )} - /> - - ); -} - -export default Data; diff --git a/src/pages/[locale]/data/styles.module.css b/src/pages/[locale]/data/styles.module.css deleted file mode 100644 index 41fd6b95..00000000 --- a/src/pages/[locale]/data/styles.module.css +++ /dev/null @@ -1,360 +0,0 @@ -.data { - display: flex; - flex-direction: column; - gap: var(--spacing-gigantic); - background-color: var(--color-foreground); - - .active { - color: var(--color-active); - } - - .finished { - color: var(--color-finished); - } - - .illustration { - width: 30rem; - height: 24rem; - - @media screen and (max-width: 840px) { - width: 24rem; - height: 20rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - height: 16rem; - } - } - - .statsHeader { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: var(--spacing-enourmous); - - .leftContent { - display: flex; - align-self: center; - flex-direction: column; - justify-content: center; - padding: var(--spacing-mega-large); - width: 20rem; - - .figure { - align-self: flex-end; - } - - .largeFigure { - --size: 10rem; - --border-size: 5rem; - align-self: flex-start; - } - } - - .rightContent { - display: flex; - flex-direction: column; - flex-grow: 1; - justify-content: center; - gap: var(--spacing-medium); - - .heading { - align-self: center; - max-width: var(--width-heading-max); - text-align: center; - } - - .sectionDescription { - display: flex; - align-self: center; - flex-direction: column; - gap: var(--spacing-small); - max-width: 30rem; - text-align: center; - font-size: var(--font-size-medium); - } - } - } - - .typeSection { - .typeList { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (max-width: 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - - .missionImage { - height: 20rem; - } - - .beforeAfterContainer { - display: flex; - flex-direction: column; - gap: var(--spacing-small); - - .beforeAfterImageWrapper { - height: calc(50% - var(--spacing-small) / 2); - - .beforeImage { - border-top-left-radius: var(--border-radius-medium); - border-top-right-radius: var(--border-radius-medium); - object-position: top center; - object-fit: cover; - } - - .afterImage { - object-position: top center; - object-fit: cover; - } - } - } - - .keyPointList { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - } - } - } - - .exploreSection { - .exploreHeadingContainer { - gap: 0; - - .lastFetchedDate { - font-size: var(--font-size-small); - } - } - - .content { - display: flex; - flex-direction: column; - gap: var(--spacing-super-large); - - .topContainer { - display: flex; - flex-wrap: wrap; - gap: var(--spacing-large); - - .filters { - display: flex; - flex-basis: 25rem; - flex-direction: column; - border: var(--width-separator-thin) solid var(--color-border-light); - border-radius: var(--border-radius-medium); - padding: var(--spacing-medium); - gap: var(--spacing-large); - - .filter { - border: var(--width-separator-thin) solid var(--color-border-light); - border-radius: var(--border-radius-small); - padding: var(--spacing-super-small) var(--spacing-medium); - } - - .dateFilter { - min-width: 6rem; - } - - .row { - display: flex; - flex-wrap: wrap; - gap: var(--spacing-large); - } - - .inputContainer { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .filter { - max-width: 10rem; - } - } - - .clearButton { - display: flex; - align-items: center; - align-self: flex-end; - padding: var(--spacing-tiny) var(--spacing-extra-small); - font-size: var(--font-size-small); - gap: var(--spacing-ultra-small); - } - } - - .mapContainer { - position: relative; - flex-grow: 1; - border-radius: var(--border-radius-medium); - background-color: var(--color-background-leaflet); - height: auto; - - .projectsMap { - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - background-color: var(--color-background-leaflet); - width: 100%; - height: 100%; - } - - .mapSettings { - position: absolute; - bottom: 0; - left: 0; - z-index: 100000; - border-radius: var(--border-radius-medium); - background-color: rgba(0, 0, 0, 0.2); - padding: var(--spacing-extra-small) var(--spacing-medium); - - .bubbleFilter { - align-items: center; - flex-direction: row; - } - } - } - - @media screen and (max-width: 920px) { - flex-direction: column; - } - } - - .stats { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: var(--spacing-large); - font-size: var(--font-size-large); - - .circle { - font-size: var(--font-size-extra-small); - } - - @media screen and (max-width: 720px) { - align-items: flex-start; - flex-direction: column; - - .circle { - display: none; - } - } - } - - .projectList { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (max-width: 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - - .cardLink { - &:hover { - text-decoration: unset; - } - } - - .project { - height: 100%; - - .projectImage { - height: 10rem; - } - - &:hover { - box-shadow: var(--box-shadow-medium); - } - } - - .projectDetailsRow { - display: flex; - align-items: center; - gap: var(--spacing-extra-small); - } - - .progressBar { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - - .progressLabel { - align-self: flex-start; - } - - .track { - border-radius: 0.25rem; - background-color: var(--color-separator); - height: 0.5rem; - - .progress { - border-radius: 0.25rem; - background-color: var(--color-background-bar); - height: 100%; - } - } - } - - .projectStats { - display: flex; - flex-direction: column; - gap: var(--spacing-medium); - - .tag { - padding: 0; - } - - .bottomTags { - display: flex; - flex-direction: column; - gap: var(--spacing-super-small); - } - } - } - } - } - - .downloadSection { - .urlList { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: repeat(auto-fit, minmax(30rem, 1fr)); - - @media screen and (max-width: 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - - .downloadCard { - display: flex; - align-items: flex-end; - justify-content: space-between; - gap: var(--spacing-large); - - .fileDetails { - display: flex; - align-items: center; - gap: var(--spacing-extra-small); - } - - .link { - display: flex; - align-items: center; - justify-content: center; - font-size: var(--font-size-medium); - gap: var(--spacing-extra-small); - } - - @media screen and (max-width: 720px) { - align-items: unset; - flex-direction: column; - } - } - } - } - - @media screen and (max-width: 720px) { - gap: unset; - } -} diff --git a/astro/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro similarity index 99% rename from astro/src/pages/[locale]/get-involved/index.astro rename to src/pages/[locale]/get-involved/index.astro index 892fe6c5..520daec4 100644 --- a/astro/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -9,7 +9,7 @@ import { selectPaths } from 'astro-incremental-static'; // chrome (BaseLayout) + ported Hero/Section/CenteredCard styles. // // The page renders NO project/blog data — its only content input is the -// `get-involved` i18n namespace, which lives in the repo-root public/locales +// `get-involved` i18n namespace, which lives in the repo-root locales/ // and is folded into the orchestration's codeHash. So its propsData is a stable // per-locale constant: the propsHash never changes on a project/blog *data* // edit → the page SKIPS on incremental data builds (matching Next, which never diff --git a/src/pages/[locale]/get-involved/index.tsx b/src/pages/[locale]/get-involved/index.tsx deleted file mode 100644 index 67e1e47f..00000000 --- a/src/pages/[locale]/get-involved/index.tsx +++ /dev/null @@ -1,309 +0,0 @@ -import React from 'react'; -import { GetStaticProps } from 'next'; -import { useTranslation, SSRConfig } from 'next-i18next'; -import { _cs } from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; - -import OgMeta from 'components/OgMeta'; -import Page from 'components/Page'; -import Hero from 'components/Hero'; -import Heading from 'components/Heading'; -import Link from 'components/Link'; -import Section from 'components/Section'; -import CenteredCard from 'components/CenteredCard'; -import ImageWrapper from 'components/ImageWrapper'; - -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -interface Props extends SSRConfig { - className?: string; -} - -function GetInvolved(props: Props) { - const { - className, - } = props; - - const { t } = useTranslation('get-involved'); - - return ( - - - - )} - /> -
    -
    - - - - - - -
    -
    - - {t('use-web-app-label')} - - | - - {t('download-apk-label')} - -
    -
    -
    -
    - - {t('individual-heading')} - - -
    -
    - - {t('contribute-on-transifex')} - - )} - /> - - {t('contribute-on-github')} - - )} - /> -
    -
    -
    -
    - - {t('download-toolkit')} - - )} - /> - - {t('register-your-interest')} - - )} - /> -
    -
    - - {t('group-heading')} - - -
    -
    -
    -
    - - {t('organization-heading')} - - -
    - - {t('tell-us-more')} - - )} - /> -
    -
    - -

    - {t('interested-in-supporting-description-1')} -

    - - {t('download-financial-report')} - -
    - )} - actions={( - - {t('donate-now')} - - )} - /> -
    - - {t('donate-heading')} - - -
    - -
    - {t('contact-link-label')} - - )} - /> - - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths(), -}); - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const translations = await serverSideTranslations(locale as string, [ - 'get-involved', - 'common', - ]); - return { - props: { - ...translations, - }, - }; -}; - -export default GetInvolved; diff --git a/src/pages/[locale]/get-involved/styles.module.css b/src/pages/[locale]/get-involved/styles.module.css deleted file mode 100644 index 45b6135a..00000000 --- a/src/pages/[locale]/get-involved/styles.module.css +++ /dev/null @@ -1,209 +0,0 @@ -.getInvolved { - display: flex; - flex-direction: column; - padding-bottom: var(--spacing-gigantic); - gap: var(--spacing-gigantic); - - .hero { - .illustration { - width: 30rem; - height: 24rem; - - @media screen and (max-width: 840px) { - width: 24rem; - height: 20rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - height: 16rem; - } - } - } - - .imageContainer { - display: flex; - align-items: center; - flex-basis: 30rem; - flex-direction: column; - justify-content: center; - text-align: center; - gap: var(--spacing-extra-large); - - .illustration { - width: 24rem; - height: 28rem; - - @media screen and (max-width: 840px) { - width: 20rem; - height: 24rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - height: 20rem; - } - } - } - - .card { - flex-grow: 1; - background-color: #fff; - padding: var(--spacing-gigantic); - } - - .contributeContainer { - gap: var(--spacing-small); - border-radius: var(--border-radius-large); - background-color: var(--color-background-brand-light); - max-width: calc(var(--width-page-max) - 2 * var(--spacing-super-large)); - - .contributeSection { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - gap: var(--spacing-small); - - .buttonsContainer { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: var(--spacing-large); - - .buttonImageContainer { - position: relative; - width: 10rem; - height: 4rem; - - .image { - object-position: center center; - object-fit: contain; - border-radius: var(--border-radius-medium); - } - } - } - .linkContainer{ - display: flex; - justify-content: center; - gap: var(--spacing-medium); - } - - .downloadLink { - color: var(--color-link); - } - } - } - - .sectionContainer { - gap: var(--spacing-gigantic); - } - - .individual { - .content { - display: flex; - justify-content: space-between; - gap: var(--spacing-large); - - .cards { - display: flex; - flex-direction: column; - flex-grow: 1; - gap: var(--spacing-large); - - .card { - max-width: 60rem; - } - } - - @media screen and (max-width: 720px) { - flex-direction: column; - - .imageContainer { - flex-basis: unset; - order: 1; - } - - .cards { - order: 2; - } - } - } - } - - .group { - .content { - display: flex; - justify-content: space-between; - gap: var(--spacing-large); - - .cards { - display: flex; - flex-direction: column; - flex-grow: 1; - gap: var(--spacing-large); - - .card { - background-color: #fff; - max-width: 60rem; - } - } - - @media screen and (max-width: 720px) { - flex-direction: column; - - .imageContainer { - flex-basis: unset; - order: 1; - } - - .cards { - order: 2; - } - } - } - } - - .organizational { - .content { - display: flex; - align-items: center; - gap: var(--spacing-large); - - @media screen and (max-width: 720px) { - flex-wrap: wrap; - - .imageContainer { - flex-basis: 100%; - } - } - } - } - - .donate { - .content { - display: flex; - align-items: center; - gap: var(--spacing-large); - - .donateCardDescription { - display: flex; - flex-direction: column; - gap: var(--spacing-ultra-small); - } - - @media screen and (max-width: 720px) { - flex-wrap: wrap; - - .imageContainer { - flex-basis: 100%; - order: 1; - } - - .card { - order: 2; - } - } - } - } -} diff --git a/astro/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro similarity index 100% rename from astro/src/pages/[locale]/index.astro rename to src/pages/[locale]/index.astro diff --git a/src/pages/[locale]/index.tsx b/src/pages/[locale]/index.tsx deleted file mode 100644 index 12732a74..00000000 --- a/src/pages/[locale]/index.tsx +++ /dev/null @@ -1,499 +0,0 @@ -import React from 'react'; -import { GetStaticProps } from 'next'; -import { useTranslation, SSRConfig } from 'next-i18next'; -import { - _cs, - compareDate, -} from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { - IoCalendarClearOutline, - IoArrowForwardSharp, -} from 'react-icons/io5'; - -import OgMeta from 'components/OgMeta'; -import Page from 'components/Page'; -import Link from 'components/Link'; -import ProjectTypeIcon from 'components/ProjectTypeIcon'; -import Tag from 'components/Tag'; -import ImageWrapper from 'components/ImageWrapper'; -import KeyFigure from 'components/KeyFigure'; -import Card from 'components/Card'; -import Hero from 'components/Hero'; -import NumberOutput from 'components/NumberOutput'; -import Section from 'components/Section'; -import getBlogs, { Blog } from 'utils/requests/getBlogs'; -import data from 'fullData/staticData.json'; - -import i18nextConfig from '@/next-i18next.config'; - -import { AllDataQuery } from 'generated/types'; - -import styles from './styles.module.css'; - -async function getAllData() { - // FIXME: This should be inferred - return data as AllDataQuery; -} - -const partners = [ - { - altText: 'American Red Cross Logo', - imageSrc: '/img/arc.svg', - link: 'https://www.redcross.org/', - }, - { - altText: 'British Red Cross Logo', - imageSrc: '/img/brc.svg', - link: 'https://www.redcross.org.uk/', - }, - { - altText: 'Canadian Red Cross Logo', - imageSrc: '/img/crc.svg', - link: 'https://www.redcross.ca/', - }, - { - altText: 'HeiGIT logo', - imageSrc: '/img/heigit.png', - link: 'https://heigit.org/', - }, - { - altText: 'HOT logo', - imageSrc: '/img/hot.png', - link: 'https://www.hotosm.org/', - }, - { - altText: 'MSF logo', - imageSrc: '/img/msf.png', - link: 'https://msf.org.uk/', - }, - { - altText: 'Togglecorp logo', - imageSrc: '/img/tc.png', - link: 'https://togglecorp.com', - }, -]; - -interface Props extends SSRConfig { - className?: string; - totalContributors?: number | null | undefined; - totalSwipes?: number | null | undefined; - featuredBlogs: Omit[]; -} - -function Home(props: Props) { - const { - className, - totalContributors, - totalSwipes, - featuredBlogs, - } = props; - - const { t } = useTranslation('home'); - - return ( - - - - - - )} - actions={( - <> - - {t('download-app-label')} - - - {t('data-link')} - - - )} - /> -
    -
    - -
    - - -
    -
    -
    -
    - {t('mobilizing-volunteer-description-paragraph-1')} -
    -
    - {t('mobilizing-volunteer-description-paragraph-2')} -
    -
    - - )} - label={t('total-swipes')} - /> - - )} - label={t('total-contributors')} - /> -
    -
    -
    -
    - - )} - > - {t('find-mission-type-description')} - - - - - - )} - heading={t('type-compare-title')} - icons={( - - )} - > - {t('compare-mission-type-description')} - - - )} - > - {t('validate-mission-type-description')} - - - )} - > - {t('completeness-type-description')} - - - )} - > - {t('validate-image-type-description')} - - - )} - > - {t('street-type-description')} - - - )} - > - {t('locate-features-type-description')} - -
    -
    -
    -
    - {t('download-description')} -
    -
    -
    - - - - - - -
    -
    - - {t('mapswipe-web-link')} - - | - - {t('download-apk-label')} - -
    -
    -
    -
    -
    - {t('get-involved-description')} -
    - - {t('get-involved-link')} - -
    -
    -
    - {featuredBlogs.map((blog, index) => ( - } - variant="transparent" - > - {t('date', { date: blog.publishedDate })} - - )} - heading={blog.title} - coverImageUrl={blog.coverImage} - childrenContainerClassName={styles.cardContent} - coverImageOnSide={index !== 0} - borderless - > -
    {blog.description}
    - - {t('read-more')} - -
    - ))} -
    - - {t('see-more-pages')} - - -
    -
    -
    - - - -
    - {t('missing-map-description')} -
    -
    - {partners.map((partner) => ( - - - - ))} -
    -
    -
    - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths(), -}); - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const translations = await serverSideTranslations(locale as string, [ - 'home', - 'common', - ]); - - const value = await getAllData(); - const blogs = await getBlogs(); - - const sortedBlogs = [...blogs] - .sort((foo, bar) => compareDate(foo.publishedDate, bar.publishedDate, -1)); - - const featuredBlogs = sortedBlogs - .filter((blog) => blog.featured) - .slice(0, 3) - .map((blog) => ({ - name: blog.name, - title: blog.title, - publishedDate: blog.publishedDate, - description: blog.description, - author: blog.author, - coverImage: blog.coverImage, - featured: blog.featured, - })); - - return { - props: { - ...translations, - totalContributors: value?.communityStats?.totalContributors ?? null, - totalSwipes: value?.communityStats?.totalSwipes ?? null, - featuredBlogs, - }, - }; -}; - -export default Home; diff --git a/astro/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro similarity index 99% rename from astro/src/pages/[locale]/privacy/index.astro rename to src/pages/[locale]/privacy/index.astro index d2074e95..1c8f0a9c 100644 --- a/astro/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -17,7 +17,7 @@ import { selectPaths } from 'astro-incremental-static'; // // The page renders NO project/blog data — its content inputs are the hardcoded // policy string (part of this file → codeHash) and the `privacy` i18n namespace -// (repo-root public/locales → codeHash). So its propsData is a stable +// (repo-root locales/ → codeHash). So its propsData is a stable // per-locale constant: the propsHash never changes on a project/blog *data* // edit → the page SKIPS on incremental data builds. A policy/translation edit // bumps codeHash → full rebuild, so tracking that content here would be diff --git a/src/pages/[locale]/privacy/index.tsx b/src/pages/[locale]/privacy/index.tsx deleted file mode 100644 index d180790d..00000000 --- a/src/pages/[locale]/privacy/index.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React from 'react'; -import { GetStaticProps } from 'next'; -import { useTranslation, SSRConfig } from 'next-i18next'; -import { _cs } from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { remark } from 'remark'; -import remarkGfm from 'remark-gfm'; -import matter from 'gray-matter'; -import html from 'remark-html'; - -import OgMeta from 'components/OgMeta'; -import Page from 'components/Page'; -import Hero from 'components/Hero'; -import Section from 'components/Section'; -import HtmlOutput from 'components/HtmlOutput'; - -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -const policy = ` -We are committed to protecting your personal information and being transparent about what we do with it. We are committed to using your personal information in accordance with our responsibilities. We are required to provide you with the information in this Privacy Notice under applicable law which includes: - -* UK GDPR; the Data Protection Act 2018 (DPA 2018) (and regulations made thereunder) referred to as the 'data protection legislation' -* the Privacy and Electronic Communications Regulation (2003) - -We won't do anything with your information you wouldn't reasonably expect. - -Processing of your personal information is carried out by or on behalf of the British Red Cross Society, incorporated by Royal Charter 1908; registered as a charity in England and Wales (220949), Scotland (SC037738) and the Isle of Man (0752). - -If you have any queries about our Privacy Notice, please get in touch with our Information Governance team: - -| | | -| ------- | ---------------- | -| Email | [dataprotection@redcross.org.uk](mailto:dataprotection@redcross.org.uk) | -| Phone | 0344 871 1111 | -| Post | Head of Information Governance, British Red Cross, 44 Moorfields London, EC2Y 9AL | - -## How and when we collect information about you -### When you directly give us information -When you download the MapSwipe app, you will have to create an account and provide us with some information about you so that we can link your contributions to your account. We are hoping to introduce an option to map as a guest without you having to give us any information, however this is not yet available. - -### When you indirectly give us information -We monitor how the app is used, for example the pages you view and how you navigate the app, to help us improve the experience. This data is aggregated and anonymised, so we are not able to identify individual users. - -### What information we might collect -When you create an account, we will ask you to provide your email address and create a username and password for your account. If you use your OpenStreetMap account to signup or login, we will instead obtain your user identifier and username from OpenStreetMap. Your email address and OpenStreetMap identifier are referred to in this Privacy Notice as 'personal information', whereas your username will be publicly visible and tied to your contributions in the app. Your password is encrypted and not visible to anyone. - -### If you're under 16 -If you're aged under 16, you must get your parent/guardian's permission before you provide any personal information to us. - -### How and why we use your information -Your personal information is only used for the purpose of logging into your account or resetting your password. We do not use it for any other purpose including marketing or contacting you in any way. - -### Who do we share your information with? -We will only use your information for the purposes for which it was obtained. We will not, under any circumstances, sell or share your personal information with any third party for their own purposes, and you will not receive marketing from any other companies, charities or other organisations as a result of giving your details to us. - -### How we protect your information -We use technical and corporate organisational safeguards to ensure that your personal information is secure. We limit access to information on a need-to-know basis and take appropriate measures to ensure that our people are aware that such information is only used in accordance with this Privacy Notice. - -We undertake regular reviews of who has access to information that we hold to ensure that your information is only accessible by appropriately trained staff and volunteers. - -However, please be aware that there are always inherent risks in sending information by public networks or using public computers and we cannot 100% guarantee the security of data (including personal information) disclosed or transmitted over public networks. - -### How long will we keep your information? -We will keep your personal information for as long as you use the MapSwipe app. After two years of inactivity on your account (i.e. you have not logged in or opened the app), we will delete your account and all personal information. Your contributions will remain in our database but will no longer be linked to your public username or personal information. - -### International transfers of information -Our servers are located in the US, which means that your personal information is transferred, processed and stored outside the EEA. You should be aware that, in general, legal protection for personal information in countries outside the EEA may not be equivalent to the level of protection provided in the EEA. - -However, we take steps to put in place suitable safeguards to protect your personal information when processed by the supplier such as entering into the European Commission approved standard contractual clauses. By submitting your personal information to us you agree to this transfer, storing or processing at a location outside the EEA. - -### Your rights to your personal information -Data protection legislation gives you the right to erase the personal information about you which is collected through MapSwipe and processed by the British Red Cross. - -This can be done within the app by selecting the option to 'Delete my account' at the bottom of your account profile page. This will remove all of your personal data from our servers and unlink your map contributions from your public username, which will also be deleted. - -### How to make a complaint or raise a concern -If you would like more information, or have any questions about this policy, to make a formal complaint about our approach to data protection or raise privacy concerns please contact the Information Governance Team: - -| | | -| ------- | ---------------- | -| Email | [dataprotection@redcross.org.uk](mailto:dataprotection@redcross.org.uk) | -| Phone | 0344 871 1111 | -| Post | Head of Information Governance, British Red Cross, 44 Moorfields London, EC2Y 9AL | - -If you are not happy with the response you receive, then you can raise your concern with the relevant statutory body: -Information Commissioner's Office, Wycliffe House, Water Lane, Wilmslow, Cheshire, SK9 5AF - - -Alternatively you can [visit their website](https://ico.org.uk/). - -We are registered with the Information Commissioner's Office as a Data Controller under number Z5379882. - -### Changes to our Privacy Notice -Our Privacy Notice may change from time to time, so please check this page occasionally to see if we have included any updates or changes, and that you are happy with them. (Last updated: 24 May 2022) -`; - -interface Props extends SSRConfig { - className?: string; - policyContent: string; -} - -function GetInvolved(props: Props) { - const { - className, - policyContent, - } = props; - - const { t } = useTranslation('privacy'); - - return ( - - - -
    - -
    -
    - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths(), -}); - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context?.params?.locale; - const translations = await serverSideTranslations(locale as string, [ - 'privacy', - 'common', - ]); - const matterResult = matter(policy); - - const processedContent = await remark() - .use(html) - .use(remarkGfm) - .process(matterResult.content.replace(/\\n/g, '\n')); - const contentHtml = processedContent.toString(); - return { - props: { - ...translations, - policyContent: contentHtml, - }, - }; -}; - -export default GetInvolved; diff --git a/src/pages/[locale]/privacy/styles.module.css b/src/pages/[locale]/privacy/styles.module.css deleted file mode 100644 index fda44ecf..00000000 --- a/src/pages/[locale]/privacy/styles.module.css +++ /dev/null @@ -1,13 +0,0 @@ -.privacy { - display: flex; - flex-direction: column; - - .hero { - min-height: 24rem; - } - - .content { - margin: auto; - max-width: 60rem; - } -} diff --git a/astro/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro similarity index 100% rename from astro/src/pages/[locale]/projects/[id].astro rename to src/pages/[locale]/projects/[id].astro diff --git a/src/pages/[locale]/projects/[id].tsx b/src/pages/[locale]/projects/[id].tsx deleted file mode 100644 index 2c3c1886..00000000 --- a/src/pages/[locale]/projects/[id].tsx +++ /dev/null @@ -1,985 +0,0 @@ -import React, { - useEffect, - useState, - useMemo, -} from 'react'; -import dynamic from 'next/dynamic'; -import { GetStaticProps, GetStaticPaths } from 'next'; -import { useTranslation } from 'next-i18next'; -import { - _cs, - bound, - listToMap, - isDefined, -} from '@togglecorp/fujs'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { - IoDownloadOutline, - IoEllipseSharp, - IoFlag, - IoCalendarClearOutline, - IoLocationOutline, - IoStatsChartSharp, -} from 'react-icons/io5'; - -import OgMeta from 'components/OgMeta'; -import Page from 'components/Page'; -import ProjectTypeIcon from 'components/ProjectTypeIcon'; -import ImageWrapper from 'components/ImageWrapper'; -import Hero from 'components/Hero'; -import Tag from 'components/Tag'; -import Card from 'components/Card'; -import HtmlOutput from 'components/HtmlOutput'; -import Section from 'components/Section'; -import Heading from 'components/Heading'; -import KeyFigure from 'components/KeyFigure'; -import Link from 'components/Link'; -import data from 'fullData/staticData.json'; - -import useSizeTracking from 'hooks/useSizeTracking'; - -import getProjectHistory from 'utils/requests/projectHistory'; -import { - ProjectStatusOption, - ProjectTypeOption, - ProjectType, - getFileSizeProperties, -} from 'utils/common'; -import { - getBounds, - getPathData, - getScaleFunction, -} from 'utils/chart'; -import { UrlInfo } from 'utils/queries'; - -import { AllDataQuery } from 'generated/types'; -import i18nextConfig from '@/next-i18next.config'; - -import styles from './styles.module.css'; - -type PublicProjects = NonNullable['results']>; -async function getAllProjects() { - return (data as AllDataQuery)?.publicProjects?.results as unknown as PublicProjects; -} - -function transformAoiToGeoJson( - aoi: PublicProjects[number]['aoiGeometry'], -): GeoJSON.FeatureCollection | undefined { - if (!aoi) { - return undefined; - } - return ({ - type: 'FeatureCollection', - features: [{ - geometry: { - type: 'Polygon', - coordinates: aoi.bbox, - }, - type: 'Feature', - properties: {}, - }], - }); -} - -async function getProjectData(id: string) { - const projects = ( - data as AllDataQuery - )?.publicProjects?.results as unknown as PublicProjects; - return projects?.find((item) => String(item.firebaseId) === id); -} - -const X_AXIS_HEIGHT = 20; -const Y_AXIS_WIDTH = 10; -const CHART_OFFSET = 10; - -const chartMargin = { - left: 2 * Y_AXIS_WIDTH + CHART_OFFSET, - top: CHART_OFFSET, - right: CHART_OFFSET * 3, - bottom: 2 * X_AXIS_HEIGHT + CHART_OFFSET, -}; - -const xAxisFormatter = (date: Date) => date.toLocaleString( - // TODO: set language - undefined, - { - day: '2-digit', - month: 'short', - year: '2-digit', - }, -); - -const DynamicProjectMap = dynamic(() => import('components/ProjectMap'), { ssr: false }); - -type Props = { - className: string; - exportAggregatedResults: UrlInfo; - exportAggregatedResultsWithGeometry: UrlInfo; - exportGroups: UrlInfo; - exportHistory: UrlInfo; - exportAreaOfInterest: UrlInfo; - aoiGeometryInputAsset: UrlInfo; - exportResults: UrlInfo; - exportTasks: UrlInfo; - exportUsers: UrlInfo; - exportHotTaskingManagerGeometries: UrlInfo; - exportModerateToHighAgreementYesMaybeGeometries: UrlInfo; -} & PublicProjects[number]; - -function Project(props: Props) { - const { - className, - image, - name, - projectType, - description, - status, - requestingOrganization, - createdAt, - progress, - region, - exportAggregatedResults, - exportAggregatedResultsWithGeometry, - exportGroups, - exportHistory, - exportAreaOfInterest, - aoiGeometryInputAsset, - exportResults, - exportTasks, - exportUsers, - exportHotTaskingManagerGeometries, - exportModerateToHighAgreementYesMaybeGeometries, - numberOfContributorUsers, - aoiGeometry, - firebaseId, - id: projectId, - } = props; - - const svgContainerRef = React.useRef(null); - const svgBounds = useSizeTracking(svgContainerRef); - const [projectHistory, setProjectHistory] = useState<{ - timestamp: number; progress: number - }[] | undefined>(); - - useEffect(() => { - async function fetchData() { - try { - if (exportHistory?.file?.url) { - const history = await getProjectHistory(projectId, exportHistory.file.url); - setProjectHistory(history); - } - } catch (err) { - // eslint-disable-next-line no-console - console.error('Failed fetching project data', err); - } - } - fetchData(); - }, [exportHistory, projectId]); - - const [ - chartPoints, - chartPointsForArea, - xAxisTicks, - yAxisTicks, - ] = React.useMemo(() => { - if (!projectHistory || projectHistory.length === 0) { - return [[], [], [], []]; - } - - const timestamps = projectHistory.map((ph) => ph.timestamp); - const initialTimeBounds = getBounds(timestamps); - - const NUM_BREAKPOINT_X = 5; - const timeDiff = initialTimeBounds.max - initialTimeBounds.min; - const tickDuration = Math.ceil(timeDiff / NUM_BREAKPOINT_X); - - const timeBounds = { - min: initialTimeBounds.min, - max: initialTimeBounds.min + (tickDuration * NUM_BREAKPOINT_X), - }; - - const xScale = getScaleFunction( - timeBounds, - { min: 0, max: svgBounds.width }, - { start: chartMargin.left, end: chartMargin.right }, - ); - - const percentageBound = { min: 0, max: 100 }; - const yScale = getScaleFunction( - percentageBound, - { min: 0, max: svgBounds.height }, - { start: chartMargin.top, end: chartMargin.bottom }, - true, - ); - - const percentageTicks = [0, 20, 40, 60, 80, 100].map((percentage) => ({ - value: percentage, - y: yScale(percentage), - })); - - const points = (projectHistory ?? []).map((hist) => ({ - x: xScale(hist.timestamp), - y: yScale(bound(100 * hist.progress, 0, 100)), - })); - - const timeTicks = Array.from(Array(NUM_BREAKPOINT_X + 1)).map((_, i) => { - const timestamp = initialTimeBounds.min + tickDuration * i; - const date = new Date(timestamp); - - return { - date, - timestamp, - x: xScale(timestamp), - }; - }); - - return [ - points, - [ - { x: xScale(timeBounds.min), y: svgBounds.height }, - ...points, - { x: xScale(timeBounds.max), y: svgBounds.height }, - ], - timeTicks, - percentageTicks, - ]; - }, [projectHistory, svgBounds]); - - const { t } = useTranslation('project'); - - const projectStatusOptions: ProjectStatusOption[] = useMemo(() => ([ - { - key: 'PUBLISHED', - label: t('active'), - icon: (), - }, - { - key: 'FINISHED', - label: t('finished'), - icon: (), - }, - ]), [t]); - - const projectTypeOptions: ProjectTypeOption[] = useMemo(() => { - const projectTypeOptionsMapping: Record<`${ProjectType}`, ProjectTypeOption> = { - FIND: { - key: 'FIND', - label: t('type-find-title'), - icon: ( - - ), - }, - VALIDATE: { - key: 'VALIDATE', - label: t('type-validate-title'), - icon: ( - - ), - }, - COMPARE: { - key: 'COMPARE', - label: t('type-compare-title'), - icon: ( - - ), - }, - COMPLETENESS: { - key: 'COMPLETENESS', - label: t('type-completeness-title'), - icon: ( - - ), - }, - VALIDATE_IMAGE: { - key: 'VALIDATE_IMAGE', - label: t('type-validate-image-title'), - icon: ( - - ), - }, - STREET: { - key: 'STREET', - label: t('type-streets-view-title'), - icon: ( - - ), - }, - LOCATE: { - key: 'LOCATE', - label: t('type-locate-title'), - icon: ( - - ), - }, - }; - - return Object.values(projectTypeOptionsMapping); - }, [t]); - - const projectTypeOptionsMap = useMemo(() => ( - listToMap( - projectTypeOptions, - (item) => item.key, - (item) => item, - ) - ), [projectTypeOptions]); - - const projectStatusOptionMap = useMemo(() => ( - listToMap( - projectStatusOptions, - (item) => item.key, - (item) => item, - ) - ), [projectStatusOptions]); - - const roundedTotalArea = Math.round(aoiGeometry?.totalArea ?? 0); - - const aoiGeometryFeature = useMemo(() => ( - transformAoiToGeoJson(aoiGeometry) - ), [aoiGeometry]); - - // NOTE: The AOI download is resolved from a priority chain: - // 1. aoiGeometryInputAsset (the original uploaded geometry; not present - // for projects sourced from a tasking manager id) - // 2. exportAreaOfInterest (the generated AOI export file; also covers - // older projects) - // 3. aoiGeometry.bbox (last resort, built client-side as a data URL) - const aoiDownload = useMemo(() => { - if (aoiGeometryInputAsset?.file?.url) { - return { - kind: 'link' as const, - url: aoiGeometryInputAsset.file.url, - mimetype: aoiGeometryInputAsset.mimetype, - fileSize: aoiGeometryInputAsset.fileSize, - }; - } - if (exportAreaOfInterest?.file?.url) { - return { - kind: 'link' as const, - url: exportAreaOfInterest.file.url, - mimetype: exportAreaOfInterest.mimetype, - fileSize: exportAreaOfInterest.fileSize, - }; - } - if (aoiGeometryFeature) { - const geojson = JSON.stringify(aoiGeometryFeature); - return { - kind: 'data' as const, - url: `data:application/geo+json;charset=utf-8,${encodeURIComponent(geojson)}`, - mimetype: 'GEOJSON', - fileSize: new TextEncoder().encode(geojson).length, - }; - } - return undefined; - }, [aoiGeometryInputAsset, exportAreaOfInterest, aoiGeometryFeature]); - - return ( - - - -
    - {projectType && ( - - {projectTypeOptionsMap[projectType].label} - - )} - {status && ( - - {projectStatusOptionMap[status]?.label} - - )} -
    -
    - {region && ( - } - variant="transparent" - > - {region} - - )} - {requestingOrganization && ( - } - variant="transparent" - > - {requestingOrganization.name} - - )} - {createdAt && ( - } - variant="transparent" - > - {new Date(createdAt).toLocaleDateString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - })} - - )} -
    -
    - )} - rightContent={image && ( - - )} - /> -
    -
    -
    - - {t('overview-section-title')} - -
    - -
    -
    -
    - - km - - 2 - - - )} - /> - -
    -
    -
    -
    - {aoiGeometryFeature && ( -
    - -
    - )} -
    -
    -
    -
    {t('project-progress-label')}
    -
    {t('project-card-progress-text', { progress: (progress * 100) })}
    -
    -
    -
    -
    -
    -
    -
    - {(isDefined(projectHistory) && chartPoints.length > 1) ? ( - - - - - - - - {yAxisTicks.map((point, i) => ( - - - {point.value} - - - - ))} - {xAxisTicks.map( - (tick) => ( - - - {xAxisFormatter(tick.date)} - - - - ), - )} - - - - ) : ( -
    - -
    - Not enough data points for the chart! -
    -
    - )} -
    -
    -
    -
    -
    - {exportAggregatedResults && ( - -
    - - {exportAggregatedResults?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties( - exportAggregatedResults?.fileSize, - ).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportAggregatedResults?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportAggregatedResultsWithGeometry && ( - -
    - - {exportAggregatedResultsWithGeometry?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties( - exportAggregatedResultsWithGeometry?.fileSize, - ).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportAggregatedResultsWithGeometry?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportGroups && ( - -
    - - {exportGroups?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties(exportGroups?.fileSize).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportGroups?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportHistory && ( - -
    - - {exportHistory?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties(exportHistory?.fileSize).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportHistory?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportResults && ( - -
    - - {exportResults?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties(exportResults?.fileSize).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportResults?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportTasks && ( - -
    - - {exportTasks?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties(exportTasks?.fileSize).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportTasks?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportUsers && ( - -
    - - {exportUsers?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties(exportUsers?.fileSize).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportUsers?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {aoiDownload && ( - -
    - - {aoiDownload.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties( - aoiDownload.fileSize, - ).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(aoiDownload.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportHotTaskingManagerGeometries && ( - -
    - - {exportHotTaskingManagerGeometries?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties( - exportHotTaskingManagerGeometries?.fileSize, - ).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportHotTaskingManagerGeometries?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} - {exportModerateToHighAgreementYesMaybeGeometries && ( - -
    - - {exportModerateToHighAgreementYesMaybeGeometries?.mimetype} - -
    - {t('download-size', { - size: getFileSizeProperties( - exportModerateToHighAgreementYesMaybeGeometries?.fileSize, - ).size, - formatParams: { size: { style: 'unit', unit: getFileSizeProperties(exportModerateToHighAgreementYesMaybeGeometries?.fileSize).unit, maximumFractionDigits: 1 } }, - })} -
    -
    - - - {t('download')} - -
    - )} -
    -
    -

    - {t('license-section-description-1')} -

    -

    - {t('license-section-description-2')} -

    -
    - )} - /> - - ); -} - -export const getI18nPaths = () => ( - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - locale: lng, - }, - })) -); - -export const getStaticPaths: GetStaticPaths = async () => { - const projects = await getAllProjects() ?? []; - - const pathsWithParams = projects.flatMap( - (project: { firebaseId: string }) => i18nextConfig.i18n.locales.map((lng: string) => ({ - params: { - id: project.firebaseId.toString(), - locale: lng, - }, - })), - ); - - return { - paths: pathsWithParams, - fallback: false, - }; -}; - -export const getStaticProps: GetStaticProps = async (context) => { - const locale = context.locale ?? 'en'; - const projectId = context.params?.id as string; - - const project = await getProjectData(projectId); - - const translations = await serverSideTranslations(locale, ['project', 'common']); - - return { - props: { - ...translations, - ...project, - }, - }; -}; - -export default Project; diff --git a/src/pages/[locale]/projects/styles.module.css b/src/pages/[locale]/projects/styles.module.css deleted file mode 100644 index d75f47e9..00000000 --- a/src/pages/[locale]/projects/styles.module.css +++ /dev/null @@ -1,323 +0,0 @@ -.project { - display: flex; - flex-direction: column; - gap: var(--spacing-medium); - - .active { - color: var(--color-active); - } - - .finished { - color: var(--color-finished); - } - - .hero { - .mainContent { - padding: var(--spacing-medium); - } - - .heroDescription { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - .topTags { - display: flex; - gap: var(--spacing-small); - - >* { - padding: var(--spacing-tiny) var(--spacing-small); - font-size: var(--font-size-medium); - } - } - - .bottomTags { - display: flex; - flex-direction: column; - gap: var(--spacing-extra-small); - } - - .heroTag { - padding: 0; - color: var(--color-text-on-dark-light); - font-size: var(--font-size-medium); - } - } - } - - .illustration { - width: 30rem; - height: 28rem; - - @media screen and (max-width: 840px) { - width: 24rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - } - } - - .statsContainer { - gap: var(--spacing-small); - } - - .statsSection { - .lastFetchedContainer { - display: flex; - justify-content: flex-end; - font-size: var(--font-size-small); - } - - .content { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr)); - - @media screen and (max-width: 36rem) { - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - } - - @media screen and (max-width: 30rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - - .stats { - display: grid; - grid-gap: var(--spacing-large); - grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); - - @media screen and (max-width: 30rem) { - grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr)); - } - } - - .mapContainer { - border-radius: var(--border-radius-medium); - height: 32rem; - - .projectsMap { - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - width: 100%; - height: 100%; - } - } - - .rightContainer { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - .chartContainer { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - padding: var(--spacing-large); - height: 100%; - min-height: 20rem; - gap: var(--spacing-small); - - .timelineChartContainer { - width: 100%; - height: 100%; - - .timelineChart { - width: 100%; - height: 100%; - --path-stroke-width: 1pt; - - .stopStart { - stop-color: var(--color-accent); - stop-opacity: 0.5; - } - - .stopEnd { - stop-color: var(--color-accent); - stop-opacity: 0; - } - - .path { - stroke: var(--color-accent); - stroke-width: 2pt; - fill: none; - } - - .yAxisTickText { - text-anchor: middle; - font-size: var(--font-size-extra-small); - } - - .xAxisTickText { - text-anchor: middle; - transition: var(--duration-transition-medium) ease-in-out transform; - font-size: var(--font-size-extra-small); - } - - .xAxisGridLine, - .yAxisGridLine { - stroke: var(--color-text); - stroke-dasharray: 4 4; - stroke-opacity: 0.2; - transition: var(--duration-transition-medium) ease-in-out stroke-opacity; - } - } - } - - .emptyChart { - display: flex; - align-items: center; - flex-direction: column; - justify-content: center; - opacity: 0.5; - height: 100%; - gap: var(--spacing-medium); - - .chartIcon { - font-size: 10rem; - } - - .message { - font-size: var(--font-size-large); - } - } - } - - .progressBar { - display: flex; - align-self: stretch; - flex-direction: column; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - padding: var(--spacing-large); - gap: var(--spacing-super-small); - - .progressLabel { - display: flex; - align-items: center; - justify-content: space-between; - } - - .track { - border-radius: 0.25rem; - background-color: var(--color-separator); - height: 0.5rem; - - .progress { - border-radius: 0.25rem; - background-color: var(--color-background-bar); - height: 100%; - } - } - } - } - } - } - - .overviewSection { - .overviewContent { - display: flex; - justify-content: space-between; - gap: var(--spacing-enourmous); - - .content { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - .description { - flex-grow: 1; - max-width: 50rem; - font-size: var(--font-size-medium); - } - } - - .stats { - display: flex; - align-self: center; - flex-direction: column; - justify-content: center; - padding: var(--spacing-mega-large); - width: 20rem; - - .figure { - align-self: flex-end; - } - - .largeFigure { - --size: 10rem; - --border-size: 5rem; - align-self: flex-start; - } - } - - @media screen and (max-width: 720px) { - flex-direction: column; - justify-content: center; - - .stats { - .largeFigure { - --size: 8rem; - --border-size: 4rem; - } - } - } - } - } - - .downloadSection { - .downloadDescription { - max-width: 60rem; - text-align: center; - font-size: var(--font-size-medium); - } - - .urlList { - display: flex; - flex-direction: column; - gap: var(--spacing-large); - - .downloadCard { - display: flex; - align-items: flex-end; - justify-content: flex-end; - gap: var(--spacing-large); - - .fileDetails { - display: flex; - align-items: center; - gap: var(--spacing-extra-small); - } - - .link { - display: flex; - align-items: center; - justify-content: center; - font-size: var(--font-size-medium); - gap: var(--spacing-extra-small); - } - - @media screen and (max-width: 720px) { - align-items: unset; - flex-direction: column; - } - } - } - } - - .licenseDescription { - display: flex; - flex-direction: column; - max-width: 60rem; - text-align: center; - gap: var(--spacing-large); - font-size: var(--font-size-medium); - } - - @media screen and (max-width: 720px) { - gap: unset; - } -} diff --git a/src/pages/[locale]/styles.module.css b/src/pages/[locale]/styles.module.css deleted file mode 100644 index 31419b4b..00000000 --- a/src/pages/[locale]/styles.module.css +++ /dev/null @@ -1,329 +0,0 @@ -.home { - display: flex; - flex-direction: column; - padding-bottom: var(--spacing-gigantic); - gap: var(--spacing-gigantic); - - .hero { - .screenshot { - width: 30rem; - height: 28rem; - - @media screen and (max-width: 840px) { - width: 24rem; - height: 24rem; - } - - @media screen and (max-width: 720px) { - width: 80vw; - height: 20rem; - } - } - } - - .mobilize { - .content { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: center; - gap: var(--spacing-super-large); - - .pictures { - display: flex; - align-items: center; - flex-basis: 32rem; - flex-wrap: wrap; - justify-content: flex-start; - gap: var(--spacing-medium); - - .imageContainer { - position: relative; - - .image { - object-position: center right; - object-fit: cover; - border-radius: var(--border-radius-medium); - } - } - - .single { - width: 14rem; - height: 18rem; - } - - .double { - width: 14rem; - height: 14rem; - - .image { - object-position: center center; - object-fit: cover; - border-radius: var(--border-radius-medium); - } - } - - .images { - display: flex; - flex-direction: column; - gap: var(--spacing-medium); - } - } - - .descriptionContainer { - display: flex; - flex-basis: calc(100% - 32rem - var(--spacing-super-large)); - flex-direction: column; - gap: var(--spacing-medium); - - .description { - max-width: 100%; - font-size: var(--font-size-medium); - } - - .infoBoxContainer { - display: grid; - grid-gap: var(--spacing-medium); - grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); - } - } - - @media screen and (max-width: 840px) { - flex-direction: column; - - .pictures { - justify-content: center; - } - - .descriptionContainer { - flex-basis: 100%; - - .infoBoxContainer { - justify-content: center; - } - } - } - } - } - - .missionTypes { - .content { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (max-width: 20rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - - .missionType { - font-size: var(--font-size-medium); - - .missionImage { - height: 20rem; - } - - .beforeAfterContainer { - display: flex; - flex-direction: column; - gap: var(--spacing-small); - - .beforeAfterImageWrapper { - height: calc(50% - var(--spacing-small) / 2); - - .beforeImage { - border-top-left-radius: var(--border-radius-medium); - border-top-right-radius: var(--border-radius-medium); - object-position: top center; - object-fit: cover; - } - - .afterImage { - object-position: top center; - object-fit: cover; - } - } - } - } - } - } - - .startMapswiping { - .content { - display: flex; - gap: var(--spacing-mega-large); - - .startMapswipingDescription { - font-size: var(--font-size-large); - } - - .download { - display: flex; - flex-basis: calc(50% - var(--spacing-mega-large) / 2); - flex-direction: column; - justify-content: center; - border-radius: var(--border-radius-medium); - background-color: var(--color-background-brand-light); - padding: var(--spacing-extra-large) var(--spacing-gigantic); - gap: var(--spacing-extra-large); - text-align: center; - - .linksContainer { - display: flex; - flex-direction: column; - justify-content: center; - gap: var(--spacing-small); - - .buttonsContainer { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: var(--spacing-large); - - .buttonImageContainer { - position: relative; - width: 12rem; - height: 4rem; - - .image { - object-position: center center; - object-fit: contain; - border-radius: var(--border-radius-medium); - } - } - } - - .downloadLinksContainer { - display: flex; - justify-content: center; - gap: var(--spacing-medium); - - .downloadLink { - color: var(--color-link); - } - } - } - } - - .getInvolved { - display: flex; - align-items: center; - flex-basis: calc(50% - var(--spacing-mega-large) / 2); - flex-direction: column; - border-radius: var(--border-radius-medium); - background-color: var(--color-background-accent-light); - padding: var(--spacing-extra-large) var(--spacing-gigantic); - gap: var(--spacing-extra-large); - text-align: center; - } - - @media screen and (max-width: 720px) { - flex-direction: column; - } - } - } - - .recentNewsAndUpdates { - .content { - display: grid; - grid-gap: var(--spacing-extra-large); - grid-template-columns: minmax(20rem, 2fr) minmax(20rem, 3fr); - - .blogItem { - .tag { - padding: var(--spacing-ultra-small) 0; - } - - .cardContent { - display: flex; - flex-direction: column; - gap: var(--spacing-small); - - .blogDescription { - display: -webkit-box; - overflow: hidden; - text-overflow: ellipsis; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - - .link { - color: var(--color-accent); - font-size: var(--font-size-medium); - font-weight: var(--font-weight-bold); - } - } - } - - .firstGrid { - grid-row: auto / span 2; - } - - .sectionDescription { - grid-column: 1 / -1; - - .seeMoreLink { - display: flex; - align-items: center; - justify-content: flex-end; - color: var(--color-accent); - font-size: var(--font-size-medium); - font-weight: var(--font-weight-bold); - gap: var(--spacing-super-small); - } - } - - @media screen and (max-width: 800px) { - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - .firstGrid { - grid-row: unset; - } - } - - @media screen and (max-width: 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } - } - } - - .partners { - display: flex; - flex-direction: column; - - .content { - display: flex; - align-items: center; - flex-direction: column; - gap: var(--spacing-super-large); - - .missingMapsLogo { - width: 12rem; - height: 4rem; - } - - .partnersDescription { - max-width: var(--width-heading-max); - text-align: center; - font-size: var(--font-size-medium); - } - - .partnerLogos { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: center; - gap: var(--spacing-mega-large); - - .partnerLogo { - width: 8rem; - height: 4rem; - } - } - } - } - - @media screen and (max-width: 720px) { - gap: unset; - } -} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx deleted file mode 100644 index ca4d8b2b..00000000 --- a/src/pages/_app.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { useEffect } from 'react'; -import { appWithTranslation } from 'next-i18next'; -import { Lato, DM_Sans } from 'next/font/google'; -import type { AppProps } from 'next/app'; -import { useRouter } from 'next/router'; -import posthog from 'posthog-js'; -import { PostHogProvider } from 'posthog-js/react'; - -import 'leaflet/dist/leaflet.css'; -import 'styles/globals.css'; -import 'styles/variables.css'; - -if ( - typeof window !== 'undefined' - && process.env.NEXT_PUBLIC_POSTHOG_KEY - && process.env.NEXT_PUBLIC_POSTHOG_HOST_API -) { - posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, { - api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST_API, - // NOTE: Persistence in memory will not add any cookies - persistence: 'memory', - loaded: (loadedPosthog) => { - if (process.env.NODE_ENV === 'development') { - loadedPosthog.debug(); - } - }, - }); -} - -const lato = Lato({ - weight: ['400', '700'], - subsets: ['latin'], - display: 'swap', -}); -const dmSans = DM_Sans({ - weight: ['400', '500', '700'], - subsets: ['latin'], - display: 'swap', -}); - -function MyApp(props: AppProps) { - const { - Component, - pageProps, - } = props; - const router = useRouter(); - - useEffect(() => { - // Track page views - const handleRouteChange = () => posthog?.capture('$pageview'); - router.events.on('routeChangeComplete', handleRouteChange); - - return () => { - router.events.off('routeChangeComplete', handleRouteChange); - }; - }, [router]); - - return ( - <> - - - {/* eslint-disable-next-line react/jsx-props-no-spreading */} - - - - ); -} - -export default appWithTranslation(MyApp); diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx deleted file mode 100644 index 02f18050..00000000 --- a/src/pages/_document.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import Document, { - Html, - Head, - Main, - NextScript, -} from 'next/document'; - -import i18nextConfig from '@/next-i18next.config'; - -class MyDocument extends Document { - render() { - // eslint-disable-next-line no-underscore-dangle - let currentLocale = this.props.__NEXT_DATA__.query.locale - ?? i18nextConfig.i18n.defaultLocale; - if (Array.isArray(currentLocale)) { - [currentLocale] = currentLocale; - } - - return ( - - - - - -
    - - - - ); - } -} - -export default MyDocument; diff --git a/src/pages/blogs.tsx b/src/pages/blogs.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/blogs.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/astro/src/pages/data-explorer.json.ts b/src/pages/data-explorer.json.ts similarity index 100% rename from astro/src/pages/data-explorer.json.ts rename to src/pages/data-explorer.json.ts diff --git a/src/pages/data.tsx b/src/pages/data.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/data.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/src/pages/get-involved.tsx b/src/pages/get-involved.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/get-involved.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/astro/src/pages/index.astro b/src/pages/index.astro similarity index 100% rename from astro/src/pages/index.astro rename to src/pages/index.astro diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/src/pages/privacy.tsx b/src/pages/privacy.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/privacy.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/src/pages/projects.tsx b/src/pages/projects.tsx deleted file mode 100644 index 8a5c0548..00000000 --- a/src/pages/projects.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { Redirect } from 'utils/redirect'; - -export default Redirect; diff --git a/src/pages/styles.module.css b/src/pages/styles.module.css deleted file mode 100644 index 42637005..00000000 --- a/src/pages/styles.module.css +++ /dev/null @@ -1,17 +0,0 @@ -.app { - display: flex; - flex-direction: column; - min-height: 100vh; - - .navbar { - flex-shrink: 0; - } - - .maincontent { - flex-grow: 1; - } - - .footer { - flex-shrink: 0; - } -} diff --git a/astro/src/styles/global.css b/src/styles/global.css similarity index 100% rename from astro/src/styles/global.css rename to src/styles/global.css diff --git a/src/styles/globals.css b/src/styles/globals.css deleted file mode 100644 index eeebd1da..00000000 --- a/src/styles/globals.css +++ /dev/null @@ -1,46 +0,0 @@ -* { - box-sizing: border-box; - line-height: 1.5; -} - -html { - margin: 0; - padding: 0; -} - -body { - margin: 0; - padding: 0; - min-height: 100vh; - color: var(--color-text); - font-family: var(--font-family-lato), sans-serif; - font-weight: var(--font-weight-medium); -} - -a { - text-decoration: none; - color: inherit; -} - -p { - margin: 0; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0; - font-family: var(--font-family-dm-sans), sans-serif; -} - -::-webkit-scrollbar { - background-color: var(--color-background-scrollbar); - width: var(--width-scrollbar); - height: var(--width-scrollbar); -} - -::-webkit-scrollbar-track { - background-color: var(--color-background-scrollbar); -} - -::-webkit-scrollbar-thumb { - background-color: var(--color-foreground-scrollbar); -} diff --git a/src/styles/variables.css b/src/styles/variables.css deleted file mode 100644 index acf6c43d..00000000 --- a/src/styles/variables.css +++ /dev/null @@ -1,79 +0,0 @@ -:root { - --multiplier: 1.2599; /* Major third scale */ - - --font-size-base: 1.2rem; - --spacing-base: 1.125rem; - - --color-text: #5B5B5B; - --color-link: #0060C9; - --color-heading: #000000; - --color-heading-on-dark: #ffffff; - --color-text-on-dark: rgba(255, 255, 255, 1); - --color-text-on-dark-light: rgba(255, 255, 255, 0.8); - --color-brand: #0F193F; - --color-text-brand: var(--color-brand); - --color-accent: rgba(170, 190, 93, 1); - --color-accent-dark: #8a9b49; - --color-accent-light: rgba(170, 190, 93, 0.48); - --color-complement: #fff6ef; - --color-brand-dark: #020e3b; - --color-foreground: #ffffff; - - --color-finished: #AABE5D; - --color-active: #f59143; - --color-border-light: #d0d0d0; - --color-border: #000; - --color-background-bar: #60667d; - --color-background: var(--color-brand); - --color-background-brand-light: #f6f8ff; - --color-background-accent-light: #f5f5f5; - - /* NOTE: this is background tile color of leaflet */ - --color-background-leaflet: #d4dadc; - - --color-separator: rgba(0, 0, 0, 0.1); - - --width-page-max: 80rem; - --width-heading-max: 50rem; - --width-separator-thin: 1pt; - - --font-weight-light: 300; - --font-weight-medium: 400; - --font-weight-semi-bold: 500; - --font-weight-bold: 600; - - --border-radius-small: 0.2rem; - --border-radius-medium: 0.5rem; - --border-radius-large: 1rem; - - --box-shadow-medium: 0 2pt 10pt -4pt rgba(0, 0, 0, 0.3); - - /* Font size */ - --font-size-super-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); - --font-size-extra-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier))); - --font-size-small: calc(var(--font-size-base) / var(--multiplier)); - --font-size-medium: var(--font-size-base); - --font-size-large: calc(var(--font-size-base) * var(--multiplier)); - --font-size-extra-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier)); - --font-size-super-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --font-size-mega-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --font-size-gigantic: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - - /* Spacing */ - --spacing-tiny: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-ultra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-super-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-extra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier))); - --spacing-small: calc(var(--spacing-base) / var(--multiplier)); - --spacing-medium: var(--spacing-base); - --spacing-large: calc(var(--spacing-base) * var(--multiplier)); - --spacing-extra-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier)); - --spacing-super-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-mega-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-gigantic: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-enourmous: calc(var(--spacing-gigantic) * var(--multiplier)); - - --width-scrollbar: 1rem; - --radius-scrollbar-border: 0.25rem; - --color-foreground-scrollbar: #cccccc; -} diff --git a/src/utils/chart.ts b/src/utils/chart.ts deleted file mode 100644 index 85563c4f..00000000 --- a/src/utils/chart.ts +++ /dev/null @@ -1,60 +0,0 @@ -export interface Point { - x: number; - y: number; -} - -export interface Boundary { - min: number; - max: number; -} - -export function getScaleFunction( - domain: Boundary, - range: Boundary, - offset: { - start: number, - end: number, - }, - inverted = false, -) { - const rangeSize = (range.max - range.min) - (offset.start + offset.end); - const domainSize = domain.max - domain.min; - - return (value: number) => { - const normalizedValue = (value - domain.min) / domainSize; - - if (inverted) { - return (rangeSize + offset.start) - (rangeSize * normalizedValue); - } - - return offset.start + rangeSize * normalizedValue; - }; -} - -export function getBounds(numList: number[]) { - if (!numList || numList.length === 0) { - return { - min: 0, - max: 0, - }; - } - - return { - min: Math.min(...numList), - max: Math.max(...numList), - }; -} - -export function getPathData(pointList: Point[] | undefined) { - if (!pointList || pointList.length < 2) { - return undefined; - } - - return pointList.map((point, i) => { - if (i === 0) { - return `M${point.x} ${point.y}`; - } - - return `L${point.x} ${point.y}`; - }).join(' '); -} diff --git a/src/utils/common.ts b/src/utils/common.ts deleted file mode 100644 index 4d6d0a9d..00000000 --- a/src/utils/common.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - isFalsyString, - caseInsensitiveSubmatch, - compareStringSearch, -} from '@togglecorp/fujs'; -import { gql } from 'graphql-request'; -import { EnumsQuery } from 'generated/types'; - -export const enumsQuery = gql` - query Enums { - enums { - ProjectTypeEnum { - key - label - } - ProjectStatusEnum { - key - label - } - } - } -`; - -// FIXME: Find the value of supported project type -export const supportedProjectTypes = [1, 2, 3, 4, 10, 7]; - -export interface Stats { - communityStats: { - totalContributors: number | null | undefined; - totalSwipes: number | null | undefined; - } | null | undefined; -} - -export function rankedSearchOnList( - list: T[], - searchString: string | undefined, - labelSelector: (item: T) => string, -) { - if (isFalsyString(searchString)) { - return list; - } - - return list - .filter((option) => caseInsensitiveSubmatch(labelSelector(option), searchString)) - .sort((a, b) => compareStringSearch( - labelSelector(a), - labelSelector(b), - searchString, - )); -} - -export async function timeIt(_: string, __: string, func: (() => Promise)) { - // console.log(`START: ${key}: ${header}`); - // const startTime = new Date().getTime(); - const resp = await func(); - // const endTime = new Date().getTime(); - // console.log(`END: ${key}: Took ${endTime - startTime}ms`); - return resp; -} - -export type ProjectStatus = EnumsQuery['enums']['ProjectStatusEnum'][number]['key']; -export type ProjectType = EnumsQuery['enums']['ProjectTypeEnum'][number]['key']; - -export interface ProjectStatusOption { - key: `${ProjectStatus}`; - label: string | React.ReactNode; - icon?: React.ReactNode; -} - -export interface ProjectTypeOption { - key: `${ProjectType}`; - label: string; - icon?: React.ReactNode; -} - -const mb = 1024 * 1024; -export function getFileSizeProperties(fileSize: number) { - if (fileSize > (mb / 10)) { - return { - size: fileSize / mb, - unit: 'megabyte', - }; - } - return { - size: fileSize / 1024, - unit: 'kilobyte', - }; -} diff --git a/src/utils/languageDetector.ts b/src/utils/languageDetector.ts deleted file mode 100644 index 89ba8b2e..00000000 --- a/src/utils/languageDetector.ts +++ /dev/null @@ -1,7 +0,0 @@ -import languageDetector from 'next-language-detector'; -import i18nextConfig from '@/next-i18next.config'; - -export default languageDetector({ - supportedLngs: i18nextConfig.i18n.locales, - fallbackLng: i18nextConfig.i18n.defaultLocale, -}); diff --git a/src/utils/languages.ts b/src/utils/languages.ts deleted file mode 100644 index 68d7ac38..00000000 --- a/src/utils/languages.ts +++ /dev/null @@ -1,31 +0,0 @@ -const languageTitleMap: Record = { - ne: { - abbreviation: 'ने', - label: 'नेपाली', - }, - en: { - abbreviation: 'EN', - label: 'English', - }, - hu: { - abbreviation: 'HU', - label: 'Magyar nyelv', - }, - de: { - abbreviation: 'DE', - label: 'Deutsch', - }, - cs: { - abbreviation: 'CS', - label: 'Čeština', - }, - pt: { - abbreviation: 'PT', - label: 'Português', - }, -}; - -export default languageTitleMap; diff --git a/src/utils/queries.ts b/src/utils/queries.ts deleted file mode 100644 index 4140e786..00000000 --- a/src/utils/queries.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface GlobalExportAssets { - type: string; - lastUpdatedAt: string; - fileSize: number; - file: { - name: string; - url: string; - }; -} - -export interface UrlInfo { - id: string; - fileSize: number; - file: { - url: string; - name: string; - }; - mimetype: string; - modifiedAt?: string; -} - -export interface Feature { - type: 'Feature'; - geometry: { - type: 'Point' | 'Polygon' | 'MultiPolygon' | 'LineString' | string; - coordinates: [number, number] | undefined; - }; - properties: { - [key: string]: any; - } | null; -} - -export interface FeatureCollection { - type: 'FeatureCollection'; - features: Feature[]; -} diff --git a/src/utils/redirect.ts b/src/utils/redirect.ts deleted file mode 100644 index 14111945..00000000 --- a/src/utils/redirect.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { useEffect } from 'react'; -import { useRouter } from 'next/router'; -import i18nextConfig from '@/next-i18next.config'; - -import languageDetector from './languageDetector'; - -export function useRedirect(toFromProps?: string) { - const router = useRouter(); - const to = toFromProps ?? router.asPath; - - useEffect( - () => { - const detectedLng = languageDetector.detect(); - if (!detectedLng) { - return; - } - - if (languageDetector.cache) { - languageDetector.cache(detectedLng); - } - - const regex = new RegExp(`^/(${i18nextConfig.i18n.locales.join('|')})\\b`); - - if (to.match(regex)) { - const newTo = to.replace(regex, `/${detectedLng}`); - router.replace(newTo); - } else { - const newTo = `/${detectedLng}${to}`; - router.replace(newTo); - } - }, - [router, to], - ); -} - -export function Redirect() { - useRedirect(); - return null; -} diff --git a/src/utils/requests/getBlogs.ts b/src/utils/requests/getBlogs.ts deleted file mode 100644 index 19ef5c10..00000000 --- a/src/utils/requests/getBlogs.ts +++ /dev/null @@ -1,74 +0,0 @@ -import util from 'util'; -import fs from 'fs'; -import path from 'path'; -import { isDefined } from '@togglecorp/fujs'; -import matter from 'gray-matter'; - -export interface Blog { - name: string; - title: string; - publishedDate?: number; - description?: string; - author?: string; - coverImage?: string; - featured: boolean; - markdownContent: string; -} - -const readFile = util.promisify(fs.readFile); -const readDir = util.promisify(fs.readdir); -const fsStats = util.promisify(fs.stat); - -async function readMarkdownFiles(dir: string) { - const fileNames = await readDir(dir); - - const filePromises = fileNames.map(async (filename) => { - const { - name, - ext, - } = path.parse(filename); - // get current file path - const filePath = path.resolve(dir, filename); - - const stat = await fsStats(filePath); - // get information about the file - // check if the current path is a file or a folder - const isFile = stat.isFile(); - - // exclude folders - if (isFile && ext === '.md') { - // callback, do something with the file - const markdownContent = await readFile(filePath); - return ({ - markdownContent: markdownContent.toString(), - name, - }); - } - return undefined; - }); - const files = await Promise.all(filePromises); - - return files.filter(isDefined); -} - -const getBlogs = (async () => { - const blogs = await readMarkdownFiles('blogs'); - return blogs.map((file) => { - const matterResult = matter(file.markdownContent); - - return ({ - ...file, - markdownContent: matterResult.content ?? '', - title: (matterResult.data.title ?? file.name) as string, - publishedDate: new Date( - matterResult.data.publishedDate, - ).getTime() as number | undefined, - author: matterResult.data.author as string | undefined, - featured: (matterResult.data.featured ?? false) as boolean, - description: matterResult.data.description as string | undefined, - coverImage: matterResult.data.coverImage as string | undefined, - }); - }); -}); - -export default getBlogs; diff --git a/src/utils/requests/projectHistory.ts b/src/utils/requests/projectHistory.ts deleted file mode 100644 index 2815906e..00000000 --- a/src/utils/requests/projectHistory.ts +++ /dev/null @@ -1,95 +0,0 @@ -import Papa from 'papaparse'; -import { isFalsyString, isDefined } from '@togglecorp/fujs'; -import { timeIt } from 'utils/common'; - -interface ProjectHistoryRaw { - day: string; - number_of_results: string; - number_of_results_progress: string; - cum_number_of_results: string; - cum_number_of_results_progress: string; - progress: string; - cum_progress: string; - number_of_users: string; - number_of_new_users: string; - cum_number_of_users: string; - project_id: string; -} - -export interface ProjectHistory { - timestamp: number; - numberOfResults: number; - numberOfResultsProgress: number; - cumNumberOfResults: number; - cumNumberOfResultsProgress: number; - progress: number; - cumProgress: number; - numberOfUsers: number; - numberOfNewUsers: number; - cumNumberOfUsers: number; - projectId: string; -} - -function isValidHistoryData(hist: ProjectHistoryRaw | { day: '' }): hist is ProjectHistoryRaw { - if (isFalsyString(hist.day)) { - return false; - } - - return true; -} - -const getProjectHistory = async (projectId: string, exportHistoryUrl?: string) => { - if (!exportHistoryUrl) { - // eslint-disable-next-line no-console - console.warn(`No exportHistoryUrl for project ${projectId}`); - return []; - } - - let csvContent: string; - try { - csvContent = await timeIt( - projectId, - 'fetch project history from exportHistory url', - async () => { - const res = await fetch(exportHistoryUrl); - if (!res.ok) { - throw new Error(`Failed to fetch history: ${res.status}`); - } - return res.text(); - }, - ); - } catch (e) { - // eslint-disable-next-line no-console - console.warn(`Could not fetch history for project ${projectId}.`); - return []; - } - - const parsedContent = await new Promise((resolve, reject) => { - Papa.parse((csvContent?.toString() ?? ''), { - delimiter: ',', - newline: '\n', - header: true, - complete: (results: any) => { - resolve(results); - }, - error: (error: any) => { - reject(error); - }, - }); - }); - - const histories = (parsedContent as any).data as (ProjectHistoryRaw | { day: '', cum_progress: 0 })[]; - - return histories.filter(isValidHistoryData).map((hist) => { - if (isFalsyString(hist.cum_progress)) { - return undefined; - } - - return { - timestamp: new Date(hist.day).getTime(), - progress: Number(hist.cum_progress), - }; - }).filter(isDefined); -}; - -export default getProjectHistory; diff --git a/transifex.yaml b/transifex.yaml index bb4ceb78..f59647ae 100644 --- a/transifex.yaml +++ b/transifex.yaml @@ -2,5 +2,5 @@ filters: - filter_type: dynamic file_format: KEYVALUEJSON source_language: en - source_files_expression: public/locales/en/.json - translation_files_expression: public/locales//.json + source_files_expression: locales/en/.json + translation_files_expression: locales//.json diff --git a/tsconfig.json b/tsconfig.json index 5b9f32b8..92a18df9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,51 +1,9 @@ { - "compilerOptions": { - "baseUrl": ".", - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "paths": { - "@/*": ["./*"], - "fullData/*": ["fullData/*"], - "components/*": ["src/components/*"], - "utils/*": ["src/utils/*"], - "hooks/*": ["src/hooks/*"], - "pages/*": ["src/pages/*"], - "styles/*": ["src/styles/*"], - "generated": ["generated/*"] - }, - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ] - }, - "exclude": [ - "node_modules", - "server", - "backend" - ], - "include": [ - "next-env.d.ts", - "types.d.ts", - "**/*.ts", - "**/*.tsx", - "fullData/**/*", - ".next/types/**/*.ts" - ] + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"], + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react" + } } diff --git a/tsconfig.scripts.json b/tsconfig.scripts.json deleted file mode 100644 index cfc452ae..00000000 --- a/tsconfig.scripts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs", - "moduleResolution": "node", - "noEmit": false - }, - "include": ["scripts/fetchData.ts"] -} diff --git a/types.d.ts b/types.d.ts deleted file mode 100644 index aafdb333..00000000 --- a/types.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* eslint-ignore */ -import { AllDataQuery } from './generated/types'; - -declare module './fullData/staticData.json' { - const value: AllDataQuery; - export default value; -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index a15aae3d..00000000 --- a/yarn.lock +++ /dev/null @@ -1,8292 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@ardatan/relay-compiler@12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz#2e4cca43088e807adc63450e8cab037020e91106" - integrity sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q== - dependencies: - "@babel/core" "^7.14.0" - "@babel/generator" "^7.14.0" - "@babel/parser" "^7.14.0" - "@babel/runtime" "^7.0.0" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" - babel-preset-fbjs "^3.4.0" - chalk "^4.0.0" - fb-watchman "^2.0.0" - fbjs "^3.0.0" - glob "^7.1.1" - immutable "~3.7.6" - invariant "^2.2.4" - nullthrows "^1.1.1" - relay-runtime "12.0.0" - signedsource "^1.0.0" - yargs "^15.3.1" - -"@ardatan/sync-fetch@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f" - integrity sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA== - dependencies: - node-fetch "^2.6.1" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/core@^7.14.0": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.14.0", "@babel/generator@^7.18.13", "@babel/generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" - integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" - integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== - dependencies: - "@babel/types" "^7.20.7" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helpers@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" - integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.13" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.14.0", "@babel/parser@^7.16.8", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.13.tgz#ddf1eb5a813588d2fb1692b70c6fce75b945c088" - integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw== - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" - integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-import-assertions@7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" - integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" - integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" - integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" - integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/template" "^7.20.7" - -"@babel/plugin-transform-destructuring@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" - integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" - integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-flow" "^7.18.6" - -"@babel/plugin-transform-for-of@^7.0.0": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-function-name@^7.0.0": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== - dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-literals@^7.0.0": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-member-expression-literals@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" - integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== - dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-simple-access" "^7.20.2" - -"@babel/plugin-transform-object-super@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" - -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" - integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-property-literals@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz#f950f0b0c36377503d29a712f16287cedf886cbb" - integrity sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.20.7" - -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-spread@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/runtime-corejs3@^7.10.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz#a1e5ea3d758ba6beb715210142912e3f29981d84" - integrity sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg== - dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.11" - -"@babel/runtime@7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" - integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.19.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" - integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb" - integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@corex/deepmerge@^4.0.43": - version "4.0.43" - resolved "https://registry.yarnpkg.com/@corex/deepmerge/-/deepmerge-4.0.43.tgz#9bd42559ebb41cc5a7fb7cfeea5f231c20977dca" - integrity sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== - -"@csstools/postcss-cascade-layers@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" - integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-color-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" - integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-font-format-keywords@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" - integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-hwb-function@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" - integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-ic-unit@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" - integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" - integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-nested-calc@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" - integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" - integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" - integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" - integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-stepped-value-functions@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" - integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-text-decoration-shorthand@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" - integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" - integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-unset-value@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" - integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== - -"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" - integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@graphql-codegen/cli@^2.16.4": - version "2.16.4" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-2.16.4.tgz#c8e6df2dc8cccfd61a088de0ada9a05842ad8ad6" - integrity sha512-MBbdzIIaNZ8BTlFXG00toxU5rIV7Ltf2myaze88HpI5YPVfVJKlfccE6l0/Gv+nLv88CIM/PZrnFLdVtlBmrZw== - dependencies: - "@babel/generator" "^7.18.13" - "@babel/template" "^7.18.10" - "@babel/types" "^7.18.13" - "@graphql-codegen/core" "2.6.8" - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-tools/apollo-engine-loader" "^7.3.6" - "@graphql-tools/code-file-loader" "^7.3.13" - "@graphql-tools/git-loader" "^7.2.13" - "@graphql-tools/github-loader" "^7.3.20" - "@graphql-tools/graphql-file-loader" "^7.5.0" - "@graphql-tools/json-file-loader" "^7.4.1" - "@graphql-tools/load" "7.8.0" - "@graphql-tools/prisma-loader" "^7.2.49" - "@graphql-tools/url-loader" "^7.13.2" - "@graphql-tools/utils" "^9.0.0" - "@whatwg-node/fetch" "^0.6.0" - chalk "^4.1.0" - chokidar "^3.5.2" - cosmiconfig "^7.0.0" - cosmiconfig-typescript-loader "4.3.0" - debounce "^1.2.0" - detect-indent "^6.0.0" - graphql-config "4.4.0" - inquirer "^8.0.0" - is-glob "^4.0.1" - json-to-pretty-yaml "^1.2.2" - listr2 "^4.0.5" - log-symbols "^4.0.0" - shell-quote "^1.7.3" - string-env-interpolation "^1.0.1" - ts-log "^2.2.3" - tslib "^2.4.0" - yaml "^1.10.0" - yargs "^17.0.0" - -"@graphql-codegen/core@2.6.8": - version "2.6.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-2.6.8.tgz#00c4011e3619ddbc6af5e41b2f254d6f6759556e" - integrity sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.1" - "@graphql-tools/schema" "^9.0.0" - "@graphql-tools/utils" "^9.1.1" - tslib "~2.4.0" - -"@graphql-codegen/introspection@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@graphql-codegen/introspection/-/introspection-2.2.3.tgz#6f5df5084b75ba646779b62a68dab27b8aa4e473" - integrity sha512-iS0xhy64lapGCsBIBKFpAcymGW+A0LiLSGP9dPl6opZwU1bm/rsahkKvJnc+oCI/xfdQ3Q33zgUKOSCkqmM4Bw== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.1" - "@graphql-codegen/visitor-plugin-common" "^2.13.5" - tslib "~2.4.0" - -"@graphql-codegen/plugin-helpers@^3.1.1", "@graphql-codegen/plugin-helpers@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz#69a2e91178f478ea6849846ade0a59a844d34389" - integrity sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg== - dependencies: - "@graphql-tools/utils" "^9.0.0" - change-case-all "1.0.15" - common-tags "1.8.2" - import-from "4.0.0" - lodash "~4.17.0" - tslib "~2.4.0" - -"@graphql-codegen/schema-ast@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-2.6.1.tgz#8ba1b38827c034b51ecd3ce88622c2ae6cd3fe1a" - integrity sha512-5TNW3b1IHJjCh07D2yQNGDQzUpUl2AD+GVe1Dzjqyx/d2Fn0TPMxLsHsKPS4Plg4saO8FK/QO70wLsP7fdbQ1w== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-tools/utils" "^9.0.0" - tslib "~2.4.0" - -"@graphql-codegen/typescript-operations@^2.5.12": - version "2.5.12" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-2.5.12.tgz#36af48b34d70d98a9a2adea1ab79e26fcab23a92" - integrity sha512-/w8IgRIQwmebixf514FOQp2jXOe7vxZbMiSFoQqJgEgzrr42joPsgu4YGU+owv2QPPmu4736OcX8FSavb7SLiA== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-codegen/typescript" "^2.8.7" - "@graphql-codegen/visitor-plugin-common" "2.13.7" - auto-bind "~4.0.0" - tslib "~2.4.0" - -"@graphql-codegen/typescript@^2.8.7": - version "2.8.7" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-2.8.7.tgz#da34261b779a001d7d53b8f454bafc002b06e041" - integrity sha512-Nm5keWqIgg/VL7fivGmglF548tJRP2ttSmfTMuAdY5GNGTJTVZOzNbIOfnbVEDMMWF4V+quUuSyeUQ6zRxtX1w== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-codegen/schema-ast" "^2.6.1" - "@graphql-codegen/visitor-plugin-common" "2.13.7" - auto-bind "~4.0.0" - tslib "~2.4.0" - -"@graphql-codegen/visitor-plugin-common@2.13.7", "@graphql-codegen/visitor-plugin-common@^2.13.5": - version "2.13.7" - resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.13.7.tgz#591e054a970a0d572bdfb765bf948dae21bf8aed" - integrity sha512-xE6iLDhr9sFM1qwCGJcCXRu5MyA0moapG2HVejwyAXXLubYKYwWnoiEigLH2b5iauh6xsl6XP8hh9D1T1dn5Cw== - dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-tools/optimize" "^1.3.0" - "@graphql-tools/relay-operation-optimizer" "^6.5.0" - "@graphql-tools/utils" "^9.0.0" - auto-bind "~4.0.0" - change-case-all "1.0.15" - dependency-graph "^0.11.0" - graphql-tag "^2.11.0" - parse-filepath "^1.0.2" - tslib "~2.4.0" - -"@graphql-tools/apollo-engine-loader@^7.3.6": - version "7.3.22" - resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.22.tgz#ace09442dd0aa758a7a42dac3b73252c7935c531" - integrity sha512-4zbL2k7Tcr+qDHBmqKTfrxgOgGkRw0x8NAmrNQVyDYhpP9NiRANmq4DTUgqSPEFiZ6Dx6FYGD4fldRq1JYSYqQ== - dependencies: - "@ardatan/sync-fetch" "0.0.1" - "@graphql-tools/utils" "9.1.4" - "@whatwg-node/fetch" "^0.6.0" - tslib "^2.4.0" - -"@graphql-tools/batch-execute@8.5.15": - version "8.5.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.15.tgz#f61ac71d11e57c9b9f8b8b60fc882e4e9762d182" - integrity sha512-qb12M8XCK6SBJmZDS8Lzd4PVJFsIwNUkYmFuqcTiBqOI/WsoDlQDZI++ghRpGcusLkL9uzcIOTT/61OeHhsaLg== - dependencies: - "@graphql-tools/utils" "9.1.4" - dataloader "2.1.0" - tslib "^2.4.0" - value-or-promise "1.0.12" - -"@graphql-tools/code-file-loader@^7.3.13": - version "7.3.16" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.16.tgz#58aa85c250175cebe0ea4309214357768d550f93" - integrity sha512-109UFvQjZEntHwjPaHpWvgUudHenGngbXvSImabPc2fdrtgja5KC0h7thCg379Yw6IORHGrF2XbJwS1hAGPPWw== - dependencies: - "@graphql-tools/graphql-tag-pluck" "7.4.3" - "@graphql-tools/utils" "9.1.4" - globby "^11.0.3" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/delegate@9.0.22": - version "9.0.22" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.22.tgz#12f27ef76c5add456fa8797a496bb7dc82071771" - integrity sha512-dWJGMN8V7KORtbI8eDAjHYTWiMyis/md27M6pPhrlYVlcsDk3U0jbNdgkswBBUEBvqumPRCv8pVOxKcLS4caKA== - dependencies: - "@graphql-tools/batch-execute" "8.5.15" - "@graphql-tools/executor" "0.0.12" - "@graphql-tools/schema" "9.0.13" - "@graphql-tools/utils" "9.1.4" - dataloader "2.1.0" - tslib "~2.4.0" - value-or-promise "1.0.12" - -"@graphql-tools/executor-graphql-ws@0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.7.tgz#5e7b0e6d02d3b64727bfb37c0f2c1e13badcb829" - integrity sha512-C6EExKoukn4vu3BbvlqsqtC91F4pTLPDZvRceYjpFzTCQSGFSjfrxQGP/haGlemXVRpIDxBy7wpXoQlsF8UmFA== - dependencies: - "@graphql-tools/utils" "9.1.4" - "@repeaterjs/repeater" "3.0.4" - "@types/ws" "^8.0.0" - graphql-ws "5.11.2" - isomorphic-ws "5.0.0" - tslib "^2.4.0" - ws "8.12.0" - -"@graphql-tools/executor-http@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-0.1.1.tgz#9c4a43811d36d1be2319fd241d5538e2fac45bce" - integrity sha512-bFE6StI7CJEIYGRkAnTYxutSV4OtC1c4MQU3nStOYZZO7KmzIgEQZ4ygPSPrRb+jtRsMCBEqPqlYOD4Rq02aMw== - dependencies: - "@graphql-tools/utils" "9.1.4" - "@repeaterjs/repeater" "3.0.4" - "@whatwg-node/fetch" "0.6.2" - dset "3.1.2" - extract-files "^11.0.0" - meros "1.2.1" - tslib "^2.4.0" - value-or-promise "1.0.12" - -"@graphql-tools/executor-legacy-ws@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.6.tgz#236dd5b3d4d19492978b1458b74928e8c69d16ff" - integrity sha512-L1hRuSvBUCNerYDhfeSZXFeqliDlnNXa3fDHTp7efI3Newpbevqa19Fm0mVzsCL7gqIKOwzrPORwh7kOVE/vew== - dependencies: - "@graphql-tools/utils" "9.1.4" - "@types/ws" "^8.0.0" - isomorphic-ws "5.0.0" - tslib "^2.4.0" - ws "8.12.0" - -"@graphql-tools/executor@0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.12.tgz#d885c7fa98a8aaeaa771163b71fb98ce9f52f9bd" - integrity sha512-bWpZcYRo81jDoTVONTnxS9dDHhEkNVjxzvFCH4CRpuyzD3uL+5w3MhtxIh24QyWm4LvQ4f+Bz3eMV2xU2I5+FA== - dependencies: - "@graphql-tools/utils" "9.1.4" - "@graphql-typed-document-node/core" "3.1.1" - "@repeaterjs/repeater" "3.0.4" - tslib "^2.4.0" - value-or-promise "1.0.12" - -"@graphql-tools/git-loader@^7.2.13": - version "7.2.16" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.2.16.tgz#8c025cad12a623ac91e421eb01380cc177070e7c" - integrity sha512-8DsxYfSouhgKPOBcc7MzuOTM4M/j2UNFn2ehXD0MX9q41t3dKffufJZKsKxE6VyyCUoVYdlRFhUWEyOHPVdcfQ== - dependencies: - "@graphql-tools/graphql-tag-pluck" "7.4.3" - "@graphql-tools/utils" "9.1.4" - is-glob "4.0.3" - micromatch "^4.0.4" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/github-loader@^7.3.20": - version "7.3.23" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-7.3.23.tgz#9688f4b9cd9596229f0f8c7eed7a8f500806defa" - integrity sha512-oYTZCvW520KNVVonjucDSMhabCFnHwtM1rJbyUkA1JFyzpmmNAAyNMWOOPcU/Q9rTESrsH+Hbja0mfpjpnBKLA== - dependencies: - "@ardatan/sync-fetch" "0.0.1" - "@graphql-tools/graphql-tag-pluck" "7.4.3" - "@graphql-tools/utils" "9.1.4" - "@whatwg-node/fetch" "^0.6.0" - tslib "^2.4.0" - -"@graphql-tools/graphql-file-loader@^7.3.7", "@graphql-tools/graphql-file-loader@^7.5.0": - version "7.5.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.14.tgz#6c6527e353cf9adcbda2cdc8a85face03ad8fe04" - integrity sha512-JGer4g57kq4wtsvqv8uZsT4ZG1lLsz1x5yHDfSj2OxyiWw2f1jFkzgby7Ut3H2sseJiQzeeDYZcbm06qgR32pg== - dependencies: - "@graphql-tools/import" "6.7.15" - "@graphql-tools/utils" "9.1.4" - globby "^11.0.3" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/graphql-tag-pluck@7.4.3": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.3.tgz#b07f2263c383d9605d941c836dc01a7bbc6e56a7" - integrity sha512-w+nrJVQw+NTuaZNQG5AwSh4Qe+urP/s4rUz5s1T007rDnv1kvkiX+XHOCnIfJzXOTuvFmG4GGYw/x0CuSRaGZQ== - dependencies: - "@babel/parser" "^7.16.8" - "@babel/plugin-syntax-import-assertions" "7.20.0" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - "@graphql-tools/utils" "9.1.4" - tslib "^2.4.0" - -"@graphql-tools/import@6.7.15": - version "6.7.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.7.15.tgz#7553e48140797255588b26d423a89aa042196928" - integrity sha512-WNhvauAt2I2iUg+JdQK5oQebKLXqUZWe8naP13K1jOkbTQT7hK3P/4I9AaVmzt0KXRJW5Uow3RgdHZ7eUBKVsA== - dependencies: - "@graphql-tools/utils" "9.1.4" - resolve-from "5.0.0" - tslib "^2.4.0" - -"@graphql-tools/json-file-loader@^7.3.7", "@graphql-tools/json-file-loader@^7.4.1": - version "7.4.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.4.15.tgz#ed229d98784350623d2ef32628690db405fa6780" - integrity sha512-pH+hbsDetcEpj+Tmi7ZRUkxzJez2DLdSQuvK5Qi38FX/Nz/5nZKRfW9nqIptGYbuS9+2JPrt9WWNn1aGtegIFQ== - dependencies: - "@graphql-tools/utils" "9.1.4" - globby "^11.0.3" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/load@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.0.tgz#bd4d2e2a5117de9a60f9691a218217e96afc2ea7" - integrity sha512-l4FGgqMW0VOqo+NMYizwV8Zh+KtvVqOf93uaLo9wJ3sS3y/egPCgxPMDJJ/ufQZG3oZ/0oWeKt68qop3jY0yZg== - dependencies: - "@graphql-tools/schema" "9.0.4" - "@graphql-tools/utils" "8.12.0" - p-limit "3.1.0" - tslib "^2.4.0" - -"@graphql-tools/load@^7.5.5": - version "7.8.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.9.tgz#5f4e523095b6154bac43e6a01acb6b043e9afaca" - integrity sha512-/eHRv6OCTI/Ir5XcbtSx0XbW3zOQVscp2MZQFGZKDzqCcGD+NVy4mLCoBwR/OsOUpvWAwMnc+Llb4SDKAYGmjQ== - dependencies: - "@graphql-tools/schema" "9.0.13" - "@graphql-tools/utils" "9.1.4" - p-limit "3.1.0" - tslib "^2.4.0" - -"@graphql-tools/merge@8.3.15", "@graphql-tools/merge@^8.2.6": - version "8.3.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.15.tgz#9b24ee5e9c36074684515c7d1587cd3e200c8a8f" - integrity sha512-hYYOlsqkUlL6oOo7zzuk6hIv7xQzy+x21sgK84d5FWaiWYkLYh9As8myuDd9SD5xovWWQ9m/iRhIOVDEMSyEKA== - dependencies: - "@graphql-tools/utils" "9.1.4" - tslib "^2.4.0" - -"@graphql-tools/merge@8.3.6": - version "8.3.6" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.6.tgz#97a936d4c8e8f935e58a514bb516c476437b5b2c" - integrity sha512-uUBokxXi89bj08P+iCvQk3Vew4vcfL5ZM6NTylWi8PIpoq4r5nJ625bRuN8h2uubEdRiH8ntN9M4xkd/j7AybQ== - dependencies: - "@graphql-tools/utils" "8.12.0" - tslib "^2.4.0" - -"@graphql-tools/optimize@^1.3.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-1.3.1.tgz#29407991478dbbedc3e7deb8c44f46acb4e9278b" - integrity sha512-5j5CZSRGWVobt4bgRRg7zhjPiSimk+/zIuColih8E8DxuFOaJ+t0qu7eZS5KXWBkjcd4BPNuhUPpNlEmHPqVRQ== - dependencies: - tslib "^2.4.0" - -"@graphql-tools/prisma-loader@^7.2.49": - version "7.2.54" - resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-7.2.54.tgz#b82d2193c198928f1d914dc088977fd6c502a4c9" - integrity sha512-OoH0JdMQ49IQwiZ8EKOE6sZX4oN5EQwToFnR+ptN5u4ukb4ignyZTrgePFmqOGgj7zyPzisxsWIUXD9szFXXNA== - dependencies: - "@graphql-tools/url-loader" "7.17.3" - "@graphql-tools/utils" "9.1.4" - "@types/js-yaml" "^4.0.0" - "@types/json-stable-stringify" "^1.0.32" - "@types/jsonwebtoken" "^9.0.0" - chalk "^4.1.0" - debug "^4.3.1" - dotenv "^16.0.0" - graphql-request "^5.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - isomorphic-fetch "^3.0.0" - js-yaml "^4.0.0" - json-stable-stringify "^1.0.1" - jsonwebtoken "^9.0.0" - lodash "^4.17.20" - scuid "^1.1.0" - tslib "^2.4.0" - yaml-ast-parser "^0.0.43" - -"@graphql-tools/relay-operation-optimizer@^6.5.0": - version "6.5.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.15.tgz#35f9c40ec7b500dacd792592d7007d6ad5c7a10b" - integrity sha512-ILviTglS0eYc4e3rbQ65KlMZ3MWggxer5hro9iDWoN4+amlG3SNo8ejkgZtmI8uQL6Se0NcFt9eASB2SGd64pw== - dependencies: - "@ardatan/relay-compiler" "12.0.0" - "@graphql-tools/utils" "9.1.4" - tslib "^2.4.0" - -"@graphql-tools/schema@9.0.13", "@graphql-tools/schema@^9.0.0": - version "9.0.13" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.13.tgz#56b994777df29ac36586a3200fb6397abf7b9d83" - integrity sha512-guRA3fwAtv+M1Kh930P4ydH9aKJTWscIkhVFcWpj/cnjYYxj88jkEJ15ZNiJX/2breNY+sbVgmlgLKb6aXi/Jg== - dependencies: - "@graphql-tools/merge" "8.3.15" - "@graphql-tools/utils" "9.1.4" - tslib "^2.4.0" - value-or-promise "1.0.12" - -"@graphql-tools/schema@9.0.4": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.4.tgz#1a74608b57abf90fae6fd929d25e5482c57bc05d" - integrity sha512-B/b8ukjs18fq+/s7p97P8L1VMrwapYc3N2KvdG/uNThSazRRn8GsBK0Nr+FH+mVKiUfb4Dno79e3SumZVoHuOQ== - dependencies: - "@graphql-tools/merge" "8.3.6" - "@graphql-tools/utils" "8.12.0" - tslib "^2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/url-loader@7.17.3", "@graphql-tools/url-loader@^7.13.2", "@graphql-tools/url-loader@^7.9.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.3.tgz#5c3270208e5cb039f65d7ef390af93bbc5c76408" - integrity sha512-NY/NQpuf29gjt19XExjRyTj3z44Ohc2OwQZIR/RqHYn+cbdMeXIgJqV5vbPOCN8Umjmm5yVb7kP6oKNGjyeBvw== - dependencies: - "@ardatan/sync-fetch" "0.0.1" - "@graphql-tools/delegate" "9.0.22" - "@graphql-tools/executor-graphql-ws" "0.0.7" - "@graphql-tools/executor-http" "0.1.1" - "@graphql-tools/executor-legacy-ws" "0.0.6" - "@graphql-tools/utils" "9.1.4" - "@graphql-tools/wrap" "9.3.1" - "@types/ws" "^8.0.0" - "@whatwg-node/fetch" "^0.6.0" - isomorphic-ws "5.0.0" - tslib "^2.4.0" - value-or-promise "^1.0.11" - ws "8.12.0" - -"@graphql-tools/utils@8.12.0": - version "8.12.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.12.0.tgz#243bc4f5fc2edbc9e8fd1038189e57d837cbe31f" - integrity sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw== - dependencies: - tslib "^2.4.0" - -"@graphql-tools/utils@9.1.4", "@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.1.1": - version "9.1.4" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.1.4.tgz#2c9e0aefc9655dd73247667befe3c850ec014f3f" - integrity sha512-hgIeLt95h9nQgQuzbbdhuZmh+8WV7RZ/6GbTj6t3IU4Zd2zs9yYJ2jgW/krO587GMOY8zCwrjNOMzD40u3l7Vg== - dependencies: - tslib "^2.4.0" - -"@graphql-tools/wrap@9.3.1": - version "9.3.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.3.1.tgz#d0718d87080e7a54655d629a78b08c9d39f314ea" - integrity sha512-uzY1HKc7qMErWL3ybv8bFG3hI1rTJPVYQ8WeJkCF/r/+aHEkUj0Bo2PYZrZTX1UIr3Tb4P5GyhqYBgZOXraZjw== - dependencies: - "@graphql-tools/delegate" "9.0.22" - "@graphql-tools/schema" "9.0.13" - "@graphql-tools/utils" "9.1.4" - tslib "^2.4.0" - value-or-promise "1.0.12" - -"@graphql-typed-document-node/core@3.1.1", "@graphql-typed-document-node/core@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" - integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@kwsites/file-exists@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" - integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== - dependencies: - debug "^4.1.1" - -"@kwsites/promise-deferred@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" - integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== - -"@next/env@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.7-canary.0.tgz#ddf93175e21624476c868b5aaad73bd4637ebbe1" - integrity sha512-FBIOITAmusWiFsbCDzOVHxdsmlTeH/yPSsaYbDr+GnuaH60i0o3MjZXz8gOyd8NbK5ypL+ZcJ6rVDMljlAzgsg== - -"@next/env@^13.4.3": - version "13.4.9" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.9.tgz#b77759514dd56bfa9791770755a2482f4d6ca93e" - integrity sha512-vuDRK05BOKfmoBYLNi2cujG2jrYbEod/ubSSyqgmEx9n/W3eZaJQdRNhTfumO+qmq/QTzLurW487n/PM/fHOkw== - -"@next/eslint-plugin-next@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.1.tgz#cc5e419cc85587f73f2ac0046a91df01dc6fef8b" - integrity sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ== - dependencies: - glob "7.1.7" - -"@next/swc-darwin-arm64@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.7-canary.0.tgz#4584b91c8552590924da933c5b6d40ebae461947" - integrity sha512-W+E1MxPJ0mgeiId7KbDZQrV3t5bjoVnEd+Z7vanYt8i+w1q8s2JK0PhhOn+cHdNrVMclUlLrK37dTYF+0UAvwQ== - -"@next/swc-darwin-x64@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.7-canary.0.tgz#1e11ef8f21fe3f2513f570f163de608c90796db8" - integrity sha512-Srx616McsuoJ7D78cjBngUglu/RwjuX+nHPagB3z85HGeYvOjCNJzeywM9cWZoQN3t5VtaLxuqJN2NAJH1OR9Q== - -"@next/swc-linux-arm64-gnu@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.7-canary.0.tgz#83d7d5f2167b593892cec669bc64684b6ea10509" - integrity sha512-QKEqpgN2t1K5QVqGbxZEqOKu5N2DlGVtWnv4jYCkmpskexe8DFTlUqjOHY6WExKYOkx7LDBu3wGfWLG1GlJvhw== - -"@next/swc-linux-arm64-musl@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.7-canary.0.tgz#21f015271dbc2a963d8e0d76000dea1b39e21bbd" - integrity sha512-PypzO+ubyyi6CT3oU52RROUMcv2A8SjjSGJi93laLl39VtAYQYOYWDDomgtNCRBBBb8Q5IIuScwTo3Wv+aIBTA== - -"@next/swc-linux-x64-gnu@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.7-canary.0.tgz#75c6ea4a352ab911c98fa47e822e50129afcc625" - integrity sha512-27jvtUzaAUQEb2xAqBlTRZmY7KAxImG6HpaGJcZhMd4eL6suD0H0TI5kAKCzUsqEMXTX20bRZwLiQRm2aOAqHA== - -"@next/swc-linux-x64-musl@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.7-canary.0.tgz#1fa7cf6adbca08e223726feff09a0850fdda710b" - integrity sha512-G0yHccEZ7dkNcdDrnlHufQdXZxyE1IyzA2nW5W/IHNqrWcDyHKKBu+C+ZX99XQ0h84eC6H4eCXBb8pL8f5R6zg== - -"@next/swc-win32-arm64-msvc@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.7-canary.0.tgz#e8d968cacbc482dde0064163ee0bdd0351914a7b" - integrity sha512-/sHzsUGViNILlwictAOLaYyrzFCAQd+Po67F4lKngxiv/kNWUATiE12vQQrMKM1OJ0d/5PUJrbE9tLVd3eCeJQ== - -"@next/swc-win32-ia32-msvc@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.7-canary.0.tgz#22a99c9fc5086eb70459eaec8048533d6e2260cd" - integrity sha512-MGSGg+jjVuhm3f/X7Svj/GBf9lPw7ZUu2HN4S9jMB1sppePu60jScdgMFzC1FGB17+pvQ1ctd0/+HfrgVtHJNg== - -"@next/swc-win32-x64-msvc@13.4.7-canary.0": - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.7-canary.0.tgz#be6ba5536496a8edb2dc46a354e4b297959cd1e2" - integrity sha512-gVao7V/HywGIx4aQ+OA+RNpD8ade9t8CXK8MzlP/obitDIvcNpBF0RfNOJHxZz8vafBzmBvzK1Ih3sjHLc4pZg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@peculiar/asn1-schema@^2.1.6", "@peculiar/asn1-schema@^2.3.0": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.3.tgz#21418e1f3819e0b353ceff0c2dad8ccb61acd777" - integrity sha512-6GptMYDMyWBHTUKndHaDsRZUO/XMSgIns2krxcm2L7SEExRHwawFvSwNBhqNPR9HJwv3MruAiF1bhN0we6j6GQ== - dependencies: - asn1js "^3.0.5" - pvtsutils "^1.3.2" - tslib "^2.4.0" - -"@peculiar/json-schema@^1.1.12": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" - integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== - dependencies: - tslib "^2.0.0" - -"@peculiar/webcrypto@^1.4.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz#821493bd5ad0f05939bd5f53b28536f68158360a" - integrity sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw== - dependencies: - "@peculiar/asn1-schema" "^2.3.0" - "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.2" - tslib "^2.4.1" - webcrypto-core "^1.7.4" - -"@pkgr/utils@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" - integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== - dependencies: - cross-spawn "^7.0.3" - is-glob "^4.0.3" - open "^8.4.0" - picocolors "^1.0.0" - tiny-glob "^0.2.9" - tslib "^2.4.0" - -"@react-leaflet/core@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-2.1.0.tgz#383acd31259d7c9ae8fb1b02d5e18fe613c2a13d" - integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg== - -"@repeaterjs/repeater@3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" - integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== - -"@rushstack/eslint-patch@^1.1.3": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" - integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@swc/helpers@0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a" - integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg== - dependencies: - tslib "^2.4.0" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@togglecorp/fujs@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@togglecorp/fujs/-/fujs-2.0.0.tgz#b1834326a173e568a226d956271b1b532b5f1f30" - integrity sha512-Fx5SF9kusbf35uT2WYlI6gdqqSL/e3JN4urAyB2O+jPz1VkG2I85VRqFxGjrg4m/ZZH+HRyGgLhSDn2V8LNdjA== - dependencies: - "@babel/runtime" "^7.19.0" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/debug@^4.0.0": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" - integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== - dependencies: - "@types/ms" "*" - -"@types/geojson@*": - version "7946.0.10" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" - integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== - -"@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== - dependencies: - "@types/unist" "*" - -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/js-yaml@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" - integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== - -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json-stable-stringify@^1.0.32": - version "1.0.34" - resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz#c0fb25e4d957e0ee2e497c1f553d7f8bb668fd75" - integrity sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonwebtoken@^9.0.0": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#29b1369c4774200d6d6f63135bf3d1ba3ef997a4" - integrity sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw== - dependencies: - "@types/node" "*" - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/leaflet@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.3.tgz#7aac302189eb3aa283f444316167995df42a5467" - integrity sha512-Caa1lYOgKVqDkDZVWkto2Z5JtVo09spEaUt2S69LiugbBpoqQu92HYFMGUbYezZbnBkyOxMNPXHSgRrRY5UyIA== - dependencies: - "@types/geojson" "*" - -"@types/mdast@^3.0.0": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" - integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== - dependencies: - "@types/unist" "*" - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - -"@types/node@*", "@types/node@^18.11.9": - version "18.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/papaparse@^5.3.7": - version "5.3.7" - resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.7.tgz#8d3bf9e62ac2897df596f49d9ca59a15451aa247" - integrity sha512-f2HKmlnPdCvS0WI33WtCs5GD7X1cxzzS/aduaxSu3I7TbhWlENjSPs6z5TaB9K0J+BH1jbmqTaM+ja5puis4wg== - dependencies: - "@types/node" "*" - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/parse5@^6.0.0": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" - integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-dom@^18.2.6": - version "18.2.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1" - integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.8.tgz#a77dcffe4e9af148ca4aa8000c51a1e8ed99e2c8" - integrity sha512-lTyWUNrd8ntVkqycEEplasWy2OxNlShj3zqS0LuB1ENUGis5HodmhM7DtCoUGbxj3VW/WsGA0DUhpG6XrM7gPA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^18.0.25": - version "18.0.26" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" - integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@types/symlink-or-copy@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" - integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== - -"@types/unist@*", "@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== - -"@types/ws@^8.0.0": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz#54f8368d080eb384a455f60c2ee044e948a8ce67" - integrity sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ== - dependencies: - "@typescript-eslint/scope-manager" "5.48.0" - "@typescript-eslint/type-utils" "5.48.0" - "@typescript-eslint/utils" "5.48.0" - debug "^4.3.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.27.1", "@typescript-eslint/parser@^5.42.0", "@typescript-eslint/parser@^5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.0.tgz#02803355b23884a83e543755349809a50b7ed9ba" - integrity sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg== - dependencies: - "@typescript-eslint/scope-manager" "5.48.0" - "@typescript-eslint/types" "5.48.0" - "@typescript-eslint/typescript-estree" "5.48.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz#607731cb0957fbc52fd754fd79507d1b6659cecf" - integrity sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow== - dependencies: - "@typescript-eslint/types" "5.48.0" - "@typescript-eslint/visitor-keys" "5.48.0" - -"@typescript-eslint/type-utils@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz#40496dccfdc2daa14a565f8be80ad1ae3882d6d6" - integrity sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g== - dependencies: - "@typescript-eslint/typescript-estree" "5.48.0" - "@typescript-eslint/utils" "5.48.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.0.tgz#d725da8dfcff320aab2ac6f65c97b0df30058449" - integrity sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw== - -"@typescript-eslint/typescript-estree@5.48.0", "@typescript-eslint/typescript-estree@^5.27.1": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz#a7f04bccb001003405bb5452d43953a382c2fac2" - integrity sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw== - dependencies: - "@typescript-eslint/types" "5.48.0" - "@typescript-eslint/visitor-keys" "5.48.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.0.tgz#eee926af2733f7156ad8d15e51791e42ce300273" - integrity sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.0" - "@typescript-eslint/types" "5.48.0" - "@typescript-eslint/typescript-estree" "5.48.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz#4446d5e7f6cadde7140390c0e284c8702d944904" - integrity sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q== - dependencies: - "@typescript-eslint/types" "5.48.0" - eslint-visitor-keys "^3.3.0" - -"@whatwg-node/fetch@0.6.2", "@whatwg-node/fetch@^0.6.0": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.6.2.tgz#fe4837505f6fc91bcfd6e12cdcec66f4aecfeecc" - integrity sha512-fCUycF1W+bI6XzwJFnbdDuxIldfKM3w8+AzVCLGlucm0D+AQ8ZMm2j84hdcIhfV6ZdE4Y1HFVrHosAxdDZ+nPw== - dependencies: - "@peculiar/webcrypto" "^1.4.0" - abort-controller "^3.0.0" - busboy "^1.6.0" - form-data-encoder "^1.7.1" - formdata-node "^4.3.1" - node-fetch "^2.6.7" - undici "^5.12.0" - urlpattern-polyfill "^6.0.2" - web-streams-polyfill "^3.2.0" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" - integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-root-path@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" - integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== - dependencies: - buffer-equal "^1.0.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.flat@^1.2.5: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1js@^3.0.1, asn1js@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" - integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== - dependencies: - pvtsutils "^1.3.2" - pvutils "^1.1.3" - tslib "^2.4.0" - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -auto-bind@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" - integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== - -autoprefixer@^10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axe-core@^4.4.3: - version "4.6.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.1.tgz#79cccdee3e3ab61a8f42c458d4123a6768e6fbce" - integrity sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w== - -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - -babel-preset-fbjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" - integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -balanced-match@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" - integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -broccoli-node-api@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz#391aa6edecd2a42c63c111b4162956b2fa288cb6" - integrity sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw== - -broccoli-node-info@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.2.0.tgz#feb01c13020792f429e01d7f7845dc5b3a7932b3" - integrity sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg== - -broccoli-output-wrapper@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.5.tgz#514b17801c92922a2c2f87fd145df2a25a11bc5f" - integrity sha512-bQAtwjSrF4Nu0CK0JOy5OZqw9t5U0zzv2555EA/cF8/a8SLDTIetk9UgrtMVw7qKLKdSpOZ2liZNeZZDaKgayw== - dependencies: - fs-extra "^8.1.0" - heimdalljs-logger "^0.1.10" - symlink-or-copy "^1.2.0" - -broccoli-plugin@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz#dd176a85efe915ed557d913744b181abe05047db" - integrity sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg== - dependencies: - broccoli-node-api "^1.7.0" - broccoli-output-wrapper "^3.2.5" - fs-merger "^3.2.1" - promise-map-series "^0.3.0" - quick-temp "^0.1.8" - rimraf "^3.0.2" - symlink-or-copy "^1.3.1" - -browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" - integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -busboy@1.6.0, busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426: - version "1.0.30001441" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" - integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== - -capital-case@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" - integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case-all@1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.15.tgz#de29393167fc101d646cd76b0ef23e27d09756ad" - integrity sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ== - dependencies: - change-case "^4.1.2" - is-lower-case "^2.0.2" - is-upper-case "^2.0.2" - lower-case "^2.0.2" - lower-case-first "^2.0.2" - sponge-case "^1.0.1" - swap-case "^2.0.2" - title-case "^3.0.3" - upper-case "^2.0.2" - upper-case-first "^2.0.2" - -change-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" - integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== - dependencies: - camel-case "^4.1.2" - capital-case "^1.0.4" - constant-case "^3.0.4" - dot-case "^3.0.4" - header-case "^2.0.4" - no-case "^3.0.4" - param-case "^3.0.4" - pascal-case "^3.1.2" - path-case "^3.0.4" - sentence-case "^3.0.4" - snake-case "^3.0.4" - tslib "^2.0.3" - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-progress@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" - integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== - dependencies: - string-width "^4.2.3" - -cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -client-only@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clone@^2.1.1, clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.16: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -colors@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@~10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -common-tags@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -constant-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" - integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case "^2.0.2" - -convert-source-map@^1.5.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -core-js-pure@^3.25.1: - version "3.27.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.27.1.tgz#ede4a6b8440585c7190062757069c01d37a19dca" - integrity sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw== - -core-js@^3: - version "3.30.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" - integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig-typescript-loader@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" - integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== - -cosmiconfig@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" - integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - -cosmiconfig@^7.0.0, cosmiconfig@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-blank-pseudo@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" - integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== - dependencies: - postcss-selector-parser "^6.0.9" - -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== - -css-has-pseudo@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" - integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== - dependencies: - postcss-selector-parser "^6.0.9" - -css-prefers-color-scheme@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" - integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.0.tgz#f44bd4abc430f0ff7f4c64b8a1fb857a753f77a8" - integrity sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -dataloader@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" - integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -deasync@^0.1.0: - version "0.1.28" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.28.tgz#9b447b79b3f822432f0ab6a8614c0062808b5ad2" - integrity sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg== - dependencies: - bindings "^1.5.0" - node-addon-api "^1.7.1" - -debounce@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv@^16.0.0: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== - -dset@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" - integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -ensure-posix-path@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" - integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-cmd@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b" - integrity sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA== - dependencies: - commander "^4.0.0" - cross-spawn "^7.0.0" - -eol@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" - integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" - integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - unbox-primitive "^1.0.2" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -esbuild@^0.17.0: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb-typescript@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz#360dbcf810b26bbcf2ff716198465775f1c49a07" - integrity sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g== - dependencies: - eslint-config-airbnb-base "^15.0.0" - -eslint-config-airbnb@^19.0.4: - version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" - integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== - dependencies: - eslint-config-airbnb-base "^15.0.0" - object.assign "^4.1.2" - object.entries "^1.1.5" - -eslint-config-next@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.1.1.tgz#b1a6602b0a339820585d4b2f8d2e08866b6699a7" - integrity sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ== - dependencies: - "@next/eslint-plugin-next" "13.1.1" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-import-resolver-typescript@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91" - integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.10.0" - get-tsconfig "^4.2.0" - globby "^13.1.2" - is-core-module "^2.10.0" - is-glob "^4.0.3" - synckit "^0.8.4" - -eslint-module-utils@^2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" - integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== - dependencies: - "@babel/runtime" "^7.18.9" - aria-query "^4.2.2" - array-includes "^3.1.5" - ast-types-flow "^0.0.7" - axe-core "^4.4.3" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.2" - language-tags "^1.0.5" - minimatch "^3.1.2" - semver "^6.3.0" - -eslint-plugin-postcss-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-postcss-modules/-/eslint-plugin-postcss-modules-2.0.0.tgz#d136d6fb5bd9afa6ac73c22aea85212aa2531806" - integrity sha512-82usNIaeAEHKbQOnbSs+H3d9nP6TKD2zBZC/wuedbGMTbF8XGkdxI83kptTE6BcvIWgnLPciVa8voe6zIw4ddw== - dependencies: - anymatch "^3.0.0" - camelcase "^6.0.0" - deasync "^0.1.0" - icss-utils "^5.1.0" - postcss "^8.3.0" - postcss-load-config "^3.1.0" - postcss-modules-extract-imports "~3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - -eslint-plugin-react-hooks@^4.5.0, eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.31.11, eslint-plugin-react@^7.31.7: - version "7.31.11" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" - integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.8" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extract-files@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" - integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== - -extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-fifo@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.2.0.tgz#2ee038da2468e8623066dee96958b0c1763aa55a" - integrity sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg== - -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== - dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - -fflate@^0.4.1: - version "0.4.8" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" - integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -flow-parser@^0.156.0: - version "0.156.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.156.0.tgz#5b463ea4923fe8ca34e38eb367497060d9707d0b" - integrity sha512-OCE3oIixhOttaV4ahIGtxf9XfaDdxujiTnXuHu+0dvDVVDiSDJlQpgCWdDKqP0OHfFnxQKrjMamArDAXtrBtZw== - -flow-remove-types@2.156.0: - version "2.156.0" - resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-2.156.0.tgz#79c0947eb633d2b146349c51f89a9eb84a629b5c" - integrity sha512-ivU28S1ycaVo5anxlXdIVlrmqLD81JWFADa6oUjyoQg0va4zSyZCp5OYco74VZi7nm42O/yTNv1Y5Byc7bJF1Q== - dependencies: - flow-parser "^0.156.0" - pirates "^3.0.2" - vlq "^0.2.1" - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -form-data-encoder@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" - integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-node@^4.3.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" - integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== - dependencies: - node-domexception "1.0.0" - web-streams-polyfill "4.0.0-beta.3" - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.0.1, fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-merger@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/fs-merger/-/fs-merger-3.2.1.tgz#a225b11ae530426138294b8fbb19e82e3d4e0b3b" - integrity sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug== - dependencies: - broccoli-node-api "^1.7.0" - broccoli-node-info "^2.1.0" - fs-extra "^8.0.1" - fs-tree-diff "^2.0.1" - walk-sync "^2.2.0" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs-tree-diff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" - integrity sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A== - dependencies: - "@types/symlink-or-copy" "^1.2.0" - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.3.0.tgz#4c26fae115d1050e836aea65d6fe56b507ee249b" - integrity sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ== - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== - dependencies: - type-fest "^0.20.2" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globby@^11.0.3, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.2: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.8.6: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -graphql-config@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.4.0.tgz#4b2d34d846bd4b9a40afbadfc5a4426668963c43" - integrity sha512-QUrX7R4htnTBTi83a0IlIilWVfiLEG8ANFlHRcxoZiTvOXTbgan67SUdGe1OlopbDuyNgtcy4ladl3Gvk4C36A== - dependencies: - "@graphql-tools/graphql-file-loader" "^7.3.7" - "@graphql-tools/json-file-loader" "^7.3.7" - "@graphql-tools/load" "^7.5.5" - "@graphql-tools/merge" "^8.2.6" - "@graphql-tools/url-loader" "^7.9.7" - "@graphql-tools/utils" "^9.0.0" - cosmiconfig "8.0.0" - minimatch "4.2.1" - string-env-interpolation "1.0.1" - tslib "^2.4.0" - -graphql-request@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.1.0.tgz#dbc8feee27d21b993cd5da2d3af67821827b240a" - integrity sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - cross-fetch "^3.1.5" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql-request@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.2.0.tgz#a05fb54a517d91bb2d7aefa17ade4523dc5ebdca" - integrity sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - cross-fetch "^3.1.5" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql-tag@^2.11.0: - version "2.12.6" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" - integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== - dependencies: - tslib "^2.1.0" - -graphql-ws@5.11.2: - version "5.11.2" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.11.2.tgz#d5e0acae8b4d4a4cf7be410a24135cfcefd7ddc0" - integrity sha512-4EiZ3/UXYcjm+xFGP544/yW1+DVI8ZpKASFbzrV5EDTFWJp0ZvLl4Dy2fSZAzz9imKp5pZMIcjB0x/H69Pv/6w== - -graphql@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.7.0.tgz#717051b8c183fcf8c3ad0a3668aeb5ffd1e9bc33" - integrity sha512-kdNG+ZGNf0E4dezSA2N9cRq8UdOMCcz9Wzh1dDSrCzGCz0nj6p8qlE+utY6iqr9y1sh3MZxUb7K794neZ2oT1w== - -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -gulp-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" - integrity sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g== - dependencies: - through2 "^2.0.1" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hast-util-from-parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" - integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - hastscript "^7.0.0" - property-information "^6.0.0" - vfile "^5.0.0" - vfile-location "^4.0.0" - web-namespaces "^2.0.0" - -hast-util-parse-selector@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" - integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== - dependencies: - "@types/hast" "^2.0.0" - -hast-util-raw@^7.0.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" - integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== - dependencies: - "@types/hast" "^2.0.0" - "@types/parse5" "^6.0.0" - hast-util-from-parse5 "^7.0.0" - hast-util-to-parse5 "^7.0.0" - html-void-elements "^2.0.0" - parse5 "^6.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-sanitize@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz#d90f8521f5083547095c5c63a7e03150303e0286" - integrity sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw== - dependencies: - "@types/hast" "^2.0.0" - -hast-util-to-html@^8.0.0: - version "8.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc" - integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - ccount "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-raw "^7.0.0" - hast-util-whitespace "^2.0.0" - html-void-elements "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - stringify-entities "^4.0.0" - zwitch "^2.0.4" - -hast-util-to-parse5@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" - integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" - integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== - -hastscript@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" - integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^3.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -header-case@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" - integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== - dependencies: - capital-case "^1.0.4" - tslib "^2.0.3" - -heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7: - version "0.1.10" - resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" - integrity sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g== - dependencies: - debug "^2.2.0" - heimdalljs "^0.2.6" - -heimdalljs@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/heimdalljs/-/heimdalljs-0.2.6.tgz#b0eebabc412813aeb9542f9cc622cb58dbdcd9fe" - integrity sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA== - dependencies: - rsvp "~3.2.1" - -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-tags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== - -html-void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" - integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -i18next-browser-languagedetector@6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.2.tgz#68565a28b929cbc98ab6a56826ef2faf0e927ff8" - integrity sha512-YDzIGHhMRvr7M+c8B3EQUKyiMBhfqox4o1qkFvt4QXuu5V2cxf74+NCr+VEkUuU0y+RwcupA238eeolW1Yn80g== - dependencies: - "@babel/runtime" "^7.14.6" - -i18next-fs-backend@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.1.2.tgz#1431d30385eae5bcc8a5bb91e2276f8c74e37fcc" - integrity sha512-y9vl8HC8b1ayqZELzKvaKgnphrxgbaGGSNQjPU0JoTVP1M3NI6C69SwiAAXi6xuF1FSySJG52EdQZdMUETlwRA== - -i18next-parser@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/i18next-parser/-/i18next-parser-8.0.0.tgz#dae5da549ec4fccb08a7de93563e34e082cc68c3" - integrity sha512-WnpIXJlwgUTwnlEFLJpL5E8Y7faWCV/GVqIJXJos15Zwoic5k3QXV3QodP4uYp8W1T1w4y5wXrSEGS1Y4obxCg== - dependencies: - "@babel/runtime" "^7.15.4" - broccoli-plugin "^4.0.7" - cheerio "^1.0.0-rc.2" - colors "1.4.0" - commander "~10.0.0" - concat-stream "~2.0.0" - eol "^0.9.1" - esbuild "^0.17.0" - fs-extra "^11.1.0" - gulp-sort "^2.0.0" - i18next "^22.0.4" - js-yaml "4.1.0" - lilconfig "^2.0.6" - rsvp "^4.8.2" - sort-keys "^5.0.0" - through2 "~4.0.2" - typescript "^4.2.4" - vinyl "~3.0.0" - vinyl-fs "^3.0.2" - vue-template-compiler "^2.6.11" - -i18next@^22.0.4: - version "22.5.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.0.tgz#16d98eba7c748ab183a36505046b5b91f87e989b" - integrity sha512-sqWuJFj+wJAKQP2qBQ+b7STzxZNUmnSxrehBCCj9vDOW9RDYPfqCaK1Hbh2frNYQuPziz6O2CGoJPwtzY3vAYA== - dependencies: - "@babel/runtime" "^7.20.6" - -i18next@^22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.2.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immutable@~3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" - integrity sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^8.0.0: - version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" - integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - side-channel "^1.0.4" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.10.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-2.0.2.tgz#1c0884d3012c841556243483aa5d522f47396d2a" - integrity sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ== - dependencies: - tslib "^2.0.3" - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-2.0.2.tgz#f1105ced1fe4de906a5f39553e7d3803fd804649" - integrity sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ== - dependencies: - tslib "^2.0.3" - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -isomorphic-ws@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" - integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" - integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== - dependencies: - jsonify "^0.0.1" - -json-to-pretty-yaml@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz#f4cd0bd0a5e8fe1df25aaf5ba118b099fd992d5b" - integrity sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A== - dependencies: - remedial "^1.0.7" - remove-trailing-spaces "^1.0.6" - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.0, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsonwebtoken@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" - integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -known-css-properties@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649" - integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg== - -language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.7.tgz#41cc248730f3f12a452c2e2efe32bc0bbce67967" - integrity sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw== - dependencies: - language-subtag-registry "^0.3.20" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== - dependencies: - flush-write-stream "^1.0.2" - -leaflet-gesture-handling@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/leaflet-gesture-handling/-/leaflet-gesture-handling-1.2.2.tgz#ea10afb94f2d477d77d47beb21e409ed327df07a" - integrity sha512-Blf5V4PoNphWkzL7Y1qge+Spkd4OCQ2atjwUNhMhLIcjKzPcBH++x/lwOinaR9jSqLWqJ6oKYO8d0XdTffy4hQ== - -leaflet@^1.9.4: - version "1.9.4" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d" - integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - -lilconfig@^2.0.6: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash.uniqwith@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3" - integrity sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q== - -lodash@^4.17.10, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case-first@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-2.0.2.tgz#64c2324a2250bf7c37c5901e76a5b5309301160b" - integrity sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg== - dependencies: - tslib "^2.0.3" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-cache@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - -matcher-collection@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.1.tgz#90be1a4cf58d6f2949864f65bb3b0f3e41303b29" - integrity sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ== - dependencies: - "@types/minimatch" "^3.0.3" - minimatch "^3.0.2" - -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - -mdast-util-definitions@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" - integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -mdast-util-find-and-replace@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1" - integrity sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw== - dependencies: - "@types/mdast" "^3.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.0.0" - -mdast-util-from-markdown@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" - integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - -mdast-util-gfm-autolink-literal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06" - integrity sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA== - dependencies: - "@types/mdast" "^3.0.0" - ccount "^2.0.0" - mdast-util-find-and-replace "^2.0.0" - micromark-util-character "^1.0.0" - -mdast-util-gfm-footnote@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz#ce5e49b639c44de68d5bf5399877a14d5020424e" - integrity sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - micromark-util-normalize-identifier "^1.0.0" - -mdast-util-gfm-strikethrough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz#5470eb105b483f7746b8805b9b989342085795b7" - integrity sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-table@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz#3552153a146379f0f9c4c1101b071d70bbed1a46" - integrity sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg== - dependencies: - "@types/mdast" "^3.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-task-list-item@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz#b280fcf3b7be6fd0cc012bbe67a59831eb34097b" - integrity sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz#e92f4d8717d74bdba6de57ed21cc8b9552e2d0b6" - integrity sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg== - dependencies: - mdast-util-from-markdown "^1.0.0" - mdast-util-gfm-autolink-literal "^1.0.0" - mdast-util-gfm-footnote "^1.0.0" - mdast-util-gfm-strikethrough "^1.0.0" - mdast-util-gfm-table "^1.0.0" - mdast-util-gfm-task-list-item "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-phrasing@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" - integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== - dependencies: - "@types/mdast" "^3.0.0" - unist-util-is "^5.0.0" - -mdast-util-to-hast@^12.0.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" - integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-definitions "^5.0.0" - micromark-util-sanitize-uri "^1.1.0" - trim-lines "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - -mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" - integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^3.0.0" - mdast-util-to-string "^3.0.0" - micromark-util-decode-string "^1.0.0" - unist-util-visit "^4.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" - integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== - dependencies: - "@types/mdast" "^3.0.0" - -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -meros@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/meros/-/meros-1.2.1.tgz#056f7a76e8571d0aaf3c7afcbe7eb6407ff7329e" - integrity sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g== - -micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" - integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromark-extension-gfm-autolink-literal@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz#5853f0e579bbd8ef9e39a7c0f0f27c5a063a66e7" - integrity sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-extension-gfm-footnote@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz#05e13034d68f95ca53c99679040bc88a6f92fe2e" - integrity sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q== - dependencies: - micromark-core-commonmark "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-strikethrough@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz#c8212c9a616fa3bf47cb5c711da77f4fdc2f80af" - integrity sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-table@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz#dcb46074b0c6254c3fc9cc1f6f5002c162968008" - integrity sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-tagfilter@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz#aa7c4dd92dabbcb80f313ebaaa8eb3dac05f13a7" - integrity sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g== - dependencies: - micromark-util-types "^1.0.0" - -micromark-extension-gfm-task-list-item@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz#b52ce498dc4c69b6a9975abafc18f275b9dde9f4" - integrity sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz#e517e8579949a5024a493e49204e884aa74f5acf" - integrity sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ== - dependencies: - micromark-extension-gfm-autolink-literal "^1.0.0" - micromark-extension-gfm-footnote "^1.0.0" - micromark-extension-gfm-strikethrough "^1.0.0" - micromark-extension-gfm-table "^1.0.0" - micromark-extension-gfm-tagfilter "^1.0.0" - micromark-extension-gfm-task-list-item "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-destination@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" - integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-label@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" - integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-title@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" - integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-whitespace@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" - integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-chunked@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" - integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-classify-character@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" - integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-combine-extensions@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" - integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-decode-numeric-character-reference@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" - integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-decode-string@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" - integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" - integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== - -micromark-util-html-tag-name@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" - integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== - -micromark-util-normalize-identifier@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" - integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-resolve-all@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" - integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== - dependencies: - micromark-util-types "^1.0.0" - -micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" - integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-subtokenize@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" - integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-util-symbol@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" - integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mktemp@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" - integrity sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -next-export-optimize-images@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/next-export-optimize-images/-/next-export-optimize-images-2.1.0.tgz#e60a71ff47c1b90b42a5633c43b0d06fb795446c" - integrity sha512-0KEuz3oB7c7uiYSvl/KWX/lKZOgtON1lZtX8/DC/dbb+ZqeAxylYWXlgh8+/mJfJkd0TMYRQOKXGDGTL6ENQMA== - dependencies: - ansi-colors "^4.1.3" - app-root-path "^3.1.0" - cli-progress "^3.12.0" - fs-extra "^11.1.1" - got "^11.8.6" - lodash.uniqwith "^4.5.0" - sharp "^0.32.1" - -next-i18next@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-13.3.0.tgz#81575b0e17a94efa97319c1e697af893a4cea174" - integrity sha512-X4kgi51BCOoGdKbv87eZ8OU7ICQDg5IP+T5fNjqDY3os9ea0OKTY4YpAiVFiwcI9XimcUmSPbKO4a9jFUyYSgg== - dependencies: - "@babel/runtime" "^7.20.13" - "@types/hoist-non-react-statics" "^3.3.1" - core-js "^3" - hoist-non-react-statics "^3.3.2" - i18next-fs-backend "^2.1.1" - -next-language-detector@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/next-language-detector/-/next-language-detector-1.0.2.tgz#5489db1857a7e325082612ee75f7c3d0a899a0ab" - integrity sha512-kw6oMrvSZgT4JW2xay+nOJszKYO0IbBBn209TWwaCD7neBpH/DHZu5tISboKwaOHbrYSptEcUgX+L5Cmx0SJ6g== - dependencies: - "@babel/runtime" "7.16.7" - i18next-browser-languagedetector "6.1.2" - -next-sitemap@^4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-4.1.8.tgz#c1392878e1119039c601fa5c07f3e02750d21a06" - integrity sha512-XAXpBHX4o89JfMgvrm0zimlZwpu2iBPXHpimJMUrqOZSc4C2oB1Lv89mxuVON9IE8HOezaM+w4GjJxcYCuGPTQ== - dependencies: - "@corex/deepmerge" "^4.0.43" - "@next/env" "^13.4.3" - fast-glob "^3.2.12" - minimist "^1.2.8" - -next@^13.4.7-canary.0: - version "13.4.7-canary.0" - resolved "https://registry.yarnpkg.com/next/-/next-13.4.7-canary.0.tgz#3a120ec26cc366b4a1514f726284c2f295977986" - integrity sha512-dK48MJg9nU7EQhXsDWv73yI11gIFSBuF0U5I8fK4oCly4S7utcimhCk3su3ac0lMJX7LhfW1yOrT31m5l6mmIw== - dependencies: - "@next/env" "13.4.7-canary.0" - "@swc/helpers" "0.5.1" - busboy "1.6.0" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.1" - watchpack "2.4.0" - zod "3.21.4" - optionalDependencies: - "@next/swc-darwin-arm64" "13.4.7-canary.0" - "@next/swc-darwin-x64" "13.4.7-canary.0" - "@next/swc-linux-arm64-gnu" "13.4.7-canary.0" - "@next/swc-linux-arm64-musl" "13.4.7-canary.0" - "@next/swc-linux-x64-gnu" "13.4.7-canary.0" - "@next/swc-linux-x64-musl" "13.4.7-canary.0" - "@next/swc-win32-arm64-msvc" "13.4.7-canary.0" - "@next/swc-win32-ia32-msvc" "13.4.7-canary.0" - "@next/swc-win32-x64-msvc" "13.4.7-canary.0" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abi@^3.3.0: - version "3.30.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.30.0.tgz#d84687ad5d24ca81cdfa912a36f2c5c19b137359" - integrity sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw== - dependencies: - semver "^7.3.5" - -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -node-domexception@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.8" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" - integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== - dependencies: - whatwg-url "^5.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ== - -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nullthrows@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.0.4, object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5, object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.5, object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.3.0, ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== - dependencies: - readable-stream "^2.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-limit@3.1.0, p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -papaparse@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127" - integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-filepath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" - integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-posix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" - integrity sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== - dependencies: - path-root-regex "^0.1.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9" - integrity sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q== - dependencies: - node-modules-regexp "^1.0.0" - -postcss-attribute-case-insensitive@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" - integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-browser-comments@^4: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" - integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" - integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" - integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" - integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-media@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" - integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-properties@^12.1.10: - version "12.1.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" - integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" - integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-dir-pseudo-class@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" - integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-double-position-gradients@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" - integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-env-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" - integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" - integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-focus-within@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" - integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" - integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== - -postcss-image-set-function@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" - integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-lab-function@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" - integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-load-config@^3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-logical@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" - integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== - -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== - -postcss-modules-extract-imports@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nested@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" - integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-nesting@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" - integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -postcss-normalize@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" - integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== - dependencies: - "@csstools/normalize.css" "*" - postcss-browser-comments "^4" - sanitize.css "*" - -postcss-opacity-percentage@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" - integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== - -postcss-overflow-shorthand@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" - integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" - integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^7.8.3: - version "7.8.3" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" - integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== - dependencies: - "@csstools/postcss-cascade-layers" "^1.1.1" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.13" - browserslist "^4.21.4" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.1.0" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.10" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.2.0" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" - integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== - -postcss-safe-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" - integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - -postcss-selector-not@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" - integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sorting@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-4.1.0.tgz#a107f0bf3852977fa64e4442bc340c88d5aacdb3" - integrity sha512-r4T2oQd1giURJdHQ/RMb72dKZCuLOdWx2B/XhXN1Y1ZdnwXsKH896Qz6vD4tFy9xSjpKNYhlZoJmWyhH/7JUQw== - dependencies: - lodash "^4.17.4" - postcss "^7.0.0" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^7.0.0, postcss@^7.0.2: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.3.0, postcss@^8.4.19: - version "8.4.20" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56" - integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -posthog-js@^1.68.4: - version "1.68.4" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.68.4.tgz#c9ec6edc8f6f274970d4f05c4ffa3a2564581b1a" - integrity sha512-rHk4uk99nvWiDTU7P2mFdEfzFR6km0hvOpCR3tm/+F7kCJKs7QDkMblOZZHZultxM4wSNyB4neeohmnHjKYUhQ== - dependencies: - fflate "^0.4.1" - -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise-map-series@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.3.0.tgz#41873ca3652bb7a042b387d538552da9b576f8a1" - integrity sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA== - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-information@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" - integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pvtsutils@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de" - integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ== - dependencies: - tslib "^2.4.0" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -quick-temp@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" - integrity sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA== - dependencies: - mktemp "~0.4.0" - rimraf "^2.5.4" - underscore.string "~3.3.4" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-i18next@^12.3.1: - version "12.3.1" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.3.1.tgz#30134a41a2a71c61dc69c6383504929aed1c99e7" - integrity sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA== - dependencies: - "@babel/runtime" "^7.20.6" - html-parse-stringify "^3.0.1" - -react-icons@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.9.0.tgz#ba44f436a053393adb1bdcafbc5c158b7b70d2a3" - integrity sha512-ijUnFr//ycebOqujtqtV9PFS7JjhWg0QU6ykURVHuL4cbofvRCf3f6GMn9+fBktEFQOIVZnuAYLZdiyadRQRFg== - -react-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-leaflet@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-4.2.1.tgz#c300e9eccaf15cb40757552e181200aa10b94780" - integrity sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q== - dependencies: - "@react-leaflet/core" "^2.1.0" - -react@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@3, readable-stream@^3.0.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -relay-runtime@12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" - integrity sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug== - dependencies: - "@babel/runtime" "^7.0.0" - fbjs "^3.0.0" - invariant "^2.2.4" - -remark-gfm@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" - integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-gfm "^2.0.0" - micromark-extension-gfm "^2.0.0" - unified "^10.0.0" - -remark-html@^15.0.2: - version "15.0.2" - resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-15.0.2.tgz#44ff77c876f037658b406662b5ce15e26ed34d80" - integrity sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw== - dependencies: - "@types/mdast" "^3.0.0" - hast-util-sanitize "^4.0.0" - hast-util-to-html "^8.0.0" - mdast-util-to-hast "^12.0.0" - unified "^10.0.0" - -remark-parse@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" - integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" - -remark-stringify@^10.0.0: - version "10.0.3" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.3.tgz#83b43f2445c4ffbb35b606f967d121b2b6d69717" - integrity sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.0.0" - unified "^10.0.0" - -remark@^14.0.3: - version "14.0.3" - resolved "https://registry.yarnpkg.com/remark/-/remark-14.0.3.tgz#e477886a7579df612908f387c7753dc93cdaa3fc" - integrity sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew== - dependencies: - "@types/mdast" "^3.0.0" - remark-parse "^10.0.0" - remark-stringify "^10.0.0" - unified "^10.0.0" - -remedial@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" - integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -remove-trailing-spaces@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz#4354d22f3236374702f58ee373168f6d6887ada7" - integrity sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA== - -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - -replace-ext@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-2.0.0.tgz#9471c213d22e1bcc26717cd6e50881d88f812b06" - integrity sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== - dependencies: - value-or-function "^3.0.0" - -resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.3: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^2.5.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.2: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -rsvp@~3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" - integrity sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize.css@*: - version "13.0.0" - resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" - integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -scuid@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/scuid/-/scuid-1.1.0.tgz#d3f9f920956e737a60f72d0e4ad280bf324d5dab" - integrity sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg== - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.0: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" - -sentence-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" - integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -sharp@^0.32.1: - version "0.32.1" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" - integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.0" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signedsource@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" - integrity sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-git@^3.18.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.19.0.tgz#fe8d0cd86a0e68372b75c0c44a0cb887201c3f7d" - integrity sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA== - dependencies: - "@kwsites/file-exists" "^1.1.1" - "@kwsites/promise-deferred" "^1.1.1" - debug "^4.3.4" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -sort-keys@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-5.0.0.tgz#5d775f8ae93ecc29bc7312bbf3acac4e36e3c446" - integrity sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw== - dependencies: - is-plain-obj "^4.0.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -sponge-case@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sponge-case/-/sponge-case-1.0.1.tgz#260833b86453883d974f84854cdb63aecc5aef4c" - integrity sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA== - dependencies: - tslib "^2.0.3" - -sprintf-js@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -streamx@^2.12.5: - version "2.13.2" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.13.2.tgz#9de43569a1cd54980d128673b3c1429b79afff1c" - integrity sha512-+TWqixPhGDXEG9L/XczSbhfkmwAtGs3BJX5QNU6cvno+pOLKeszByWcnaTu6dg8efsTYqR8ZZuXWHhZfgrxMvA== - dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" - -string-env-interpolation@1.0.1, string-env-interpolation@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" - integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== - -styled-jsx@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" - integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== - dependencies: - client-only "0.0.1" - -stylelint-config-concentric@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stylelint-config-concentric/-/stylelint-config-concentric-2.0.2.tgz#8262b677cacb3b5c3f6e6d391c456332891d1556" - integrity sha512-R0d3GMB3FWyqNfhBlUiOXhOjzEzEbz2lBT/Kp8CMwbcB24rKtYB0Ot0jyIaCUqjjFcW05J2l3w2J9Oolwc9xyg== - dependencies: - stylelint-order "^1.0.0" - -stylelint-config-recommended@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz#1c9e07536a8cd875405f8ecef7314916d94e7e40" - integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== - -stylelint-order@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-1.0.0.tgz#089fc3d5cdf7e7d4ac1882f65b60b25db750413c" - integrity sha512-2IVM8GzeKIDQDTETNdmgX99ywGrb7OqFWkniCw7QLqS/xONPGMLY/xAQnvGcUS3oBSo8znsoshsWVBqPz2Kv4Q== - dependencies: - lodash "^4.17.10" - postcss "^7.0.2" - postcss-sorting "^4.0.0" - -stylelint@^14.16.1: - version "14.16.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.16.1.tgz#b911063530619a1bbe44c2b875fd8181ebdc742d" - integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - balanced-match "^2.0.0" - colord "^2.9.3" - cosmiconfig "^7.1.0" - css-functions-list "^3.1.0" - debug "^4.3.4" - fast-glob "^3.2.12" - fastest-levenshtein "^1.0.16" - file-entry-cache "^6.0.1" - global-modules "^2.0.0" - globby "^11.1.0" - globjoin "^0.1.4" - html-tags "^3.2.0" - ignore "^5.2.1" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - is-plain-object "^5.0.0" - known-css-properties "^0.26.0" - mathml-tag-names "^2.1.3" - meow "^9.0.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.19" - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - resolve-from "^5.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - style-search "^0.1.0" - supports-hyperlinks "^2.3.0" - svg-tags "^1.0.0" - table "^6.8.1" - v8-compile-cache "^2.3.0" - write-file-atomic "^4.0.2" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -swap-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-2.0.2.tgz#671aedb3c9c137e2985ef51c51f9e98445bf70d9" - integrity sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw== - dependencies: - tslib "^2.0.3" - -symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0, symlink-or-copy@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" - integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== - -synckit@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec" - integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw== - dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.4.0" - -table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -teex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" - integrity sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg== - dependencies: - streamx "^2.12.5" - -term-size@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@~4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tiny-glob@^0.2.9: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -title-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-3.0.3.tgz#bc689b46f02e411f1d1e1d081f7c3deca0489982" - integrity sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA== - dependencies: - tslib "^2.0.3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== - dependencies: - through2 "^2.0.3" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== - -ts-log@^2.2.3: - version "2.2.5" - resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.5.tgz#aef3252f1143d11047e2cb6f7cfaac7408d96623" - integrity sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== - -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.4.1, tslib@~2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.2.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typescript@^4.3.5: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -typescript@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== - -ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== - -underscore.string@~3.3.4: - version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" - integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== - dependencies: - sprintf-js "^1.1.1" - util-deprecate "^1.0.2" - -undici@^5.12.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.16.0.tgz#6b64f9b890de85489ac6332bd45ca67e4f7d9943" - integrity sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ== - dependencies: - busboy "^1.6.0" - -unified@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" - -unimported@^1.29.1: - version "1.29.1" - resolved "https://registry.yarnpkg.com/unimported/-/unimported-1.29.1.tgz#4977b1ea3e81d74748a0409de8f8eb058abb2ca0" - integrity sha512-HEQ+hJS8n3+Gwy3lQbXn1Bvkb+wHtBQbUJ8/sGcwHzcvyE8hvYQdl5SUNx/afFG1YR2D/XvqHXYZ8ak+F9lJDg== - dependencies: - "@typescript-eslint/parser" "^5.27.1" - "@typescript-eslint/typescript-estree" "^5.27.1" - chalk "^4.1.0" - debug "^4.3.2" - file-entry-cache "^6.0.1" - flow-remove-types "2.156.0" - glob "^7.1.6" - json5 "^2.2.0" - ora "^5.3.0" - read-pkg-up "^7.0.1" - resolve "^1.20.0" - simple-git "^3.18.0" - term-size "^2.2.1" - typescript "^4.3.5" - yargs "^16.2.0" - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unist-util-generated@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" - integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== - -unist-util-is@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" - integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-position@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" - integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" - integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" - integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unixify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== - dependencies: - normalize-path "^2.1.1" - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case-first@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" - integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== - dependencies: - tslib "^2.0.3" - -upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" - integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== - dependencies: - tslib "^2.0.3" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urlpattern-polyfill@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-6.0.2.tgz#a193fe773459865a2a5c93b246bb794b13d07256" - integrity sha512-5vZjFlH9ofROmuWmXM9yj2wljYKgWstGwe8YTyiqM7hVum/g9LyCizPZtb3UqsuppVwety9QJmfc42VggLpTgg== - dependencies: - braces "^3.0.2" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uvu@^0.5.0: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== - -value-or-promise@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" - integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== - -value-or-promise@1.0.12, value-or-promise@^1.0.11: - version "1.0.12" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" - integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== - -vfile-location@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" - integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== - dependencies: - "@types/unist" "^2.0.0" - vfile "^5.0.0" - -vfile-message@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile@^5.0.0: - version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" - integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -vinyl-fs@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -vinyl@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-3.0.0.tgz#11e14732bf56e2faa98ffde5157fe6c13259ff30" - integrity sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g== - dependencies: - clone "^2.1.2" - clone-stats "^1.0.0" - remove-trailing-separator "^1.1.0" - replace-ext "^2.0.0" - teex "^1.0.1" - -vlq@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -vue-template-compiler@^2.6.11: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -walk-sync@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.2.0.tgz#80786b0657fcc8c0e1c0b1a042a09eae2966387a" - integrity sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg== - dependencies: - "@types/minimatch" "^3.0.3" - ensure-posix-path "^1.1.0" - matcher-collection "^2.0.0" - minimatch "^3.0.4" - -watchpack@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - -web-streams-polyfill@4.0.0-beta.3: - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" - integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== - -web-streams-polyfill@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -webcrypto-core@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.5.tgz#c02104c953ca7107557f9c165d194c6316587ca4" - integrity sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A== - dependencies: - "@peculiar/asn1-schema" "^2.1.6" - "@peculiar/json-schema" "^1.1.12" - asn1js "^3.0.1" - pvtsutils "^1.3.2" - tslib "^2.4.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@8.12.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" - integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== - -xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml-ast-parser@^0.0.43: - version "0.0.43" - resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" - integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.0.0: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zod@3.21.4: - version "3.21.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== - -zwitch@^2.0.0, zwitch@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 6255e43c9278a1ce55ab8462df67d0046a71cf86 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Mon, 13 Jul 2026 08:38:06 +0545 Subject: [PATCH 17/52] fix: add favicon.ico 32px PNG-in-ICO generated from logo-compact.svg; BaseLayout already linked /favicon.ico but the file never existed (404 under Next too). --- public/favicon.ico | Bin 0 -> 2344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/favicon.ico diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1eaa47f4e36298ff43c003add6ff9c7a08fb66bd GIT binary patch literal 2344 zcmV+@3D@=j0096203aX$0096X01^oR02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|AOHXW zAP5Ek0047(dh`GQ010qNS#tmY3ljhU3ljkVnw%H_00_iML_t(|oTZn0R8-X-$F0`t z{&DXg-7-;z;VE)WMN?)NKr59r)3iheBvZ32yB2lVHLsdwDHj#9)X4CGS9{1q3{eb0 zlt>YQ6i6*3P;Wd2f&u3NoMFzK&t2yXgP>M++iU&S%sOZ7{r&vDzrFX_d%%D@Y=9bg z6-Wmz0&O^(75E9r2i5`OfxGT>+}~`#7~m-2Xlrfd`^rkHE?%UwqXP*Eb5|XrL*S-X z3p@|p^GAf;fKM%Evtw(*W}XTOA=G~uvmc$v44n?0pEt9g7)5+yIETv@Qd+x(hPF~9 z$UX$$;c&mXaI*&vM{#VF&gc?;>PQCj3#F^w{;Q! z*4sQ8HjI>lIed9GnuBMe$SzsJRYL)iB)LF#19$(H_-I)?J^wPAVIw(|nuVdc+bP~x z*xV;9&WKyFf(22d`LZOMgT>KgoQ~o^VHEjgt1wyXT@Y)3O?(h=E$4g-6Q5ejvc*fe zSSt{-tC8$;mj2?FTcfGf%2T=^lD>#^0u)7Y;F~DYPwF{vVjkBTPs;$Z9g)8TaG=J} zfqu&cf`$&K?92r+OU*ryhi=8iuObWoUN=vVJ@~L*^ znJadmYRA~&1StEq68&R3B&z|NxsHk}`#4xQm$ValQgb6o%Z;JAULxE%VV2CAC{1>#D56O)E}(_Op?+ZW-8 z<;j>V*En%*HK}=#q~t_$IR76qKquht5_gxEO6;C$p59c+l!Y6ZJ7uZ@@MFE82)v%! zM620OacyTmaaR<}rRcO{Fq)Y>!UtjhRBZnV!(B93w-HrXk=kGC4XR;{(=PNHV zdwd|az2mX%3B$H46x)tagro_G=Re2LT0vS)3`OS>Wy!NHfE1~u6zM^C7&I7Z$PlJ` zsrWkglmbwGwM%g!dS?SiDlB|c-N6g{42t-oy#@+vIuvm^k`uQQ7c-rSq< zii1Cscgf24hAw`Vmtc>0LyL*1$245ps8Ot!vlo&=5w?dQd=!GPRfq6FFl8H}NjtL2 zwJ(g70ou*M6W{^2UVsjjJJ0xdkh%Y$0`U2n>$lW>ezJkYlWkNr*=V(P6Zhupy!Wi8 zzxA?sVvqQTI)wLw5fZdq`Z&e~@U#qIw~QR)1bA>TxD5e!cdFDXrVsZeb?@gCS9jcY z^2zbyUIXh^uO=cqjHVrr-PU?xiwg9{cdETq%=7mocHsh+e_F+JyKe|D-q*m2)FQ0cBE)Ht>^2!7N(QLEK5;7iwFjW546+M&xFdL~$o5mSG{BP?4+o&1G7}x&h%h98`|eQF6ZJ*DwdacQWUIl+EJ2m4`=-BGJZoxYgZ4ZARXHG$>v+eliulG+Sq8?NYg zIs)$PImy!9{4?!2xzJIMn4>|=*CKwcMLZphqgaQddg$FO+qKAN(_5sztT$e2t*;$bAayaV(2?G7aRo6pvcqUV*)y%4e!XLLBu z>TrCgM>3Vbk3Yi9naZ-Q^Heb>$XA(=m&GCS*YKOQu@E^wZ7v?f^oG&SFjdS*s`ybXKH5ST4UI7OF z8o)ikv3@p~ui*G05ix&~b56)0Cwm-`VdN-{K(f|=)rz%ZExGZ5m@=7sXu-_>+7gxw#zJtvISaLd*+A%+(+smqY6Wl7CM=g4AAt)NmB>t02T9L5Rm^ zBDGh^z3YH+1Mai|cL8tpe6#yC>H7DG`A<4Uwo?Z19CSo3Wx@l%QqchMNg)W0)P3vgZ>ZTQN$~*;1{X@ O0000 Date: Mon, 13 Jul 2026 08:38:06 +0545 Subject: [PATCH 18/52] chore: restore docker dev setup node 22 + npm equivalent of the removed yarn/Next compose: mounts the repo, runs the dev server on 4321. --- .dockerignore | 7 +++++++ Dockerfile | 7 +++++++ docker-compose.yml | 10 ++++++++++ 3 files changed, 24 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..a968be31 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +node_modules +dist +dist-cache +.astro +.astro-incremental +.image-cache +.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..bd83081a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# Dev-only image; the app is mounted by docker-compose and built there. +FROM node:22-bookworm-slim + +RUN apt-get update && apt-get install -y --no-install-recommends git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /code diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..f9ef9544 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +services: + web: + build: . + command: sh -c 'npm install && npm run dev -- --host 0.0.0.0' + ports: + - '4321:4321' + volumes: + - .:/code + # keep container installs off the host checkout + - /code/node_modules From e5805eba3c89b080a19ce1e40a61d13c500d3151 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Mon, 13 Jul 2026 08:38:06 +0545 Subject: [PATCH 19/52] chore(lint): eslint + stylelint + pre-commit for the Astro app eslint 9 flat config (typescript-eslint, astro, react-hooks classic rules), stylelint-config-standard; both pass. Fixes surfaced by the first run: unused catch binding and dead assignment in fetchData, dead helper in DataExplorer, an irregular whitespace char. Pre-commit hooks call the npm scripts. --- .pre-commit-config.yaml | 15 + .stylelintrc.json | 7 + README.md | 1 + eslint.config.mjs | 33 + package-lock.json | 3089 +++++++++++++++++-- package.json | 24 +- packages/astro-hydration-dedup/src/index.ts | 2 +- packages/astro-remote-images/src/index.ts | 10 +- scripts/fetchData.ts | 11 +- src/components/DataExplorer.tsx | 11 +- src/components/MapIsland.tsx | 4 +- src/components/ProjectHistoryChart.tsx | 2 +- src/lib/data.ts | 2 +- src/lib/dataExplorer.ts | 4 +- src/lib/projectHistory.ts | 8 +- src/styles/global.css | 69 +- 16 files changed, 3045 insertions(+), 247 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 .stylelintrc.json create mode 100644 eslint.config.mjs diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..7194e45e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,15 @@ +repos: + - repo: local + hooks: + - id: lint + name: eslint + entry: npm run --silent lint + language: system + types_or: [ts, tsx, javascript] + pass_filenames: false + - id: css-lint + name: stylelint + entry: npm run --silent css-lint + language: system + types: [css] + pass_filenames: false diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 00000000..f266d60f --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,7 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "declaration-block-single-line-max-declarations": null, + "selector-class-pattern": null + } +} diff --git a/README.md b/README.md index 97d5f90a..489e072f 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ forces a full refetch (~50 s; run weekly as a safety net). | `npm run build` | **full** static build → `dist/` (always renders every page) | | `npm run build:incremental` | render-skip build: only pages whose data changed, merged over the previous `dist/` (~5–6 s vs ~33 s warm). See the [package README](packages/astro-incremental-static/README.md) — correctness contract applies | | `npm run preview` | serve `dist/` locally | +| `npm run lint` / `npm run css-lint` | eslint (ts/tsx/astro) / stylelint | A full warm build ≈ 33 s / 1.6 GB RAM; cold (empty image cache) ≈ 90–105 s because 2,375 remote project covers are fetched + optimized. `dist/` ≈ 430 MB diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..fe5c94d3 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,33 @@ +import js from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import astro from 'eslint-plugin-astro'; +import reactHooks from 'eslint-plugin-react-hooks'; +import globals from 'globals'; + +export default tseslint.config( + { ignores: ['dist/', '.astro/', 'node_modules/', 'generated/', 'public/', 'docs/'] }, + js.configs.recommended, + ...tseslint.configs.recommended, + ...astro.configs.recommended, + { + // build scripts and islands run under node and the browser respectively + languageOptions: { globals: { ...globals.node, ...globals.browser } }, + }, + { + files: ['**/*.tsx'], + plugins: { 'react-hooks': reactHooks }, + // just the two established rules; the newer compiler-era checks flag + // deliberate island patterns (SSR mount guard, ref-measured chart) + rules: { + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + }, + }, + { + rules: { + // the data layer casts GraphQL JSON at its boundaries; a blanket ban + // would force churn without adding safety there + '@typescript-eslint/no-explicit-any': 'off', + }, + }, +); diff --git a/package-lock.json b/package-lock.json index 40c8b2eb..e34879fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,11 +30,19 @@ "sharp": "^0.33.5" }, "devDependencies": { + "@eslint/js": "^10.0.1", "@types/leaflet": "^1.9.12", "@types/papaparse": "^5.3.15", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "typescript": "^5.7.0" + "eslint": "^10.7.0", + "eslint-plugin-astro": "^1.7.0", + "eslint-plugin-react-hooks": "^7.1.1", + "globals": "^17.7.0", + "stylelint": "^17.14.0", + "stylelint-config-standard": "^40.0.0", + "typescript": "^5.7.0", + "typescript-eslint": "^8.63.0" } }, "node_modules/@astrojs/compiler": { @@ -411,6 +419,67 @@ "node": ">=6.9.0" } }, + "node_modules/@cacheable/memory": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", + "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.5.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, "node_modules/@capsizecss/unpack": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", @@ -423,6 +492,168 @@ "node": ">=18" } }, + "node_modules/@csstools/css-calc": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", + "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz", + "integrity": "sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz", + "integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.1.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz", + "integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.1.1" + } + }, "node_modules/@emnapi/runtime": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", @@ -849,6 +1080,134 @@ "node": ">=18" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, "node_modules/@fontsource/dm-sans": { "version": "5.2.8", "resolved": "https://registry.npmjs.org/@fontsource/dm-sans/-/dm-sans-5.2.8.tgz", @@ -876,6 +1235,72 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -1435,15 +1860,73 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@oslojs/encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", - "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, "license": "MIT" }, - "node_modules/@react-leaflet/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", "license": "Hippocratic-2.1", "peerDependencies": { @@ -1917,6 +2400,19 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1967,6 +2463,13 @@ "@types/ms": "*" } }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", @@ -1989,6 +2492,13 @@ "@types/unist": "*" } }, + "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, + "license": "MIT" + }, "node_modules/@types/leaflet": { "version": "1.9.21", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.21.tgz", @@ -2082,6 +2592,249 @@ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", + "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/type-utils": "8.63.0", + "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.63.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", + "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", + "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.63.0", + "@typescript-eslint/types": "^8.63.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", + "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", + "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", + "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/utils": "8.63.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", + "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", + "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.63.0", + "@typescript-eslint/tsconfig-utils": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", + "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", + "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.63.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", @@ -2120,6 +2873,33 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -2250,6 +3030,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/astro": { "version": "5.18.2", "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.2.tgz", @@ -2336,46 +3126,147 @@ "sharp": "^0.34.0" } }, - "node_modules/astro-hydration-dedup": { - "resolved": "packages/astro-hydration-dedup", - "link": true - }, - "node_modules/astro-incremental-static": { - "resolved": "packages/astro-incremental-static", - "link": true - }, - "node_modules/astro-remote-images": { - "resolved": "packages/astro-remote-images", - "link": true - }, - "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/astro-eslint-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-1.4.0.tgz", + "integrity": "sha512-+QDcgc7e+au6EZ0YjMmRRjNoQo5bDMlaR45aWDoFsuxQTCM9qmCHRoiKJPELgckJ8Wmr7vcfpa9eCDHBFh6G4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.0.0 || ^3.0.0", + "@typescript-eslint/scope-manager": "^7.0.0 || ^8.0.0", + "@typescript-eslint/types": "^7.0.0 || ^8.0.0", + "astrojs-compiler-sync": "^1.0.0", + "debug": "^4.3.4", + "entities": "^7.0.0", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.0", + "fast-glob": "^3.3.3", + "is-glob": "^4.0.3", + "semver": "^7.3.8" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/astro-eslint-parser/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/astro/node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" + "node_modules/astro-eslint-parser/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/astro-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/astro-eslint-parser/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/astro-eslint-parser/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astro-hydration-dedup": { + "resolved": "packages/astro-hydration-dedup", + "link": true + }, + "node_modules/astro-incremental-static": { + "resolved": "packages/astro-incremental-static", + "link": true + }, + "node_modules/astro-remote-images": { + "resolved": "packages/astro-remote-images", + "link": true + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" ], "license": "Apache-2.0", "optional": true, @@ -2925,6 +3816,25 @@ "zod": "^3" } }, + "node_modules/astrojs-compiler-sync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/astrojs-compiler-sync/-/astrojs-compiler-sync-1.1.1.tgz", + "integrity": "sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "synckit": "^0.11.0" + }, + "engines": { + "node": "^18.18.0 || >=20.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "@astrojs/compiler": ">=0.27.0" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2950,6 +3860,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -2996,6 +3916,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.28.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", @@ -3029,6 +3975,30 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cacheable": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", + "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.2.0", + "@cacheable/utils": "^2.5.0", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -3042,6 +4012,16 @@ "node": ">= 0.4" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", @@ -3218,6 +4198,13 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3280,6 +4267,33 @@ "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", "license": "MIT" }, + "node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-fetch": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", @@ -3289,6 +4303,21 @@ "node-fetch": "^2.7.0" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/crossws": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", @@ -3298,6 +4327,16 @@ "uncrypto": "^0.1.3" } }, + "node_modules/css-functions-list": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", + "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/css-select": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", @@ -3420,6 +4459,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/defu": { "version": "6.1.7", "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", @@ -3619,6 +4665,33 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3732,87 +4805,495 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/eslint": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.7.0.tgz", + "integrity": "sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==", + "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "license": "MIT", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "picomatch": "^3 || ^4" + "jiti": "*" }, "peerDependenciesMeta": { - "picomatch": { + "jiti": { "optional": true } } }, - "node_modules/flattie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", - "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/fontace": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", - "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", - "license": "MIT", - "dependencies": { - "fontkitten": "^1.0.2" - } - }, - "node_modules/fontkitten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", - "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, "license": "MIT", "dependencies": { - "tiny-inflate": "^1.0.3" + "semver": "^7.5.4" }, "engines": { - "node": ">=20" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/form-data": { + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-astro": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-1.7.0.tgz", + "integrity": "sha512-89xpAn528UKCdmyysbg0AHHqi6sqcK89wXnJIpu4F0mFBN03zATEBNK7pRtMfl6gwtMOm5ECXs+Wz5qDHhwTFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "@typescript-eslint/types": "^7.7.1 || ^8", + "astro-eslint-parser": "^1.3.0", + "eslint-compat-utils": "^0.6.0", + "globals": "^16.0.0", + "postcss": "^8.4.14", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8.57.0" + } + }, + "node_modules/eslint-plugin-astro/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", + "license": "MIT", + "engines": { + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/form-data": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.5.tgz", "integrity": "sha512-j23EibVLnp4zNXGW7LjryXYa2X6U/M96yoOX+ybZxwkYajdxRNEqYY3zhh7y0i6kfISKS2jr+EJq1YTUDEv5+w==", @@ -3915,6 +5396,111 @@ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "license": "ISC" }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", + "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.1.tgz", + "integrity": "sha512-JmsqJalahxxgW8V2ecSQ2G7UjPlI9cpKdrkG9KoNiXhd/YslXOTEB0cViENWUznuovIuNT+FkMbraDGjr4FCUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3968,6 +5554,19 @@ "uncrypto": "^0.1.3" } }, + "node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -3995,6 +5594,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", @@ -4184,12 +5796,49 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "dev": true, + "license": "MIT" + }, "node_modules/html-escaper": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", "license": "MIT" }, + "node_modules/html-tags": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz", + "integrity": "sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/html-void-elements": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", @@ -4237,6 +5886,33 @@ } } }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/import-meta-resolve": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", @@ -4247,6 +5923,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -4277,6 +5970,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4286,6 +5989,19 @@ "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -4304,6 +6020,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -4331,6 +6070,13 @@ "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, + "license": "ISC" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4371,6 +6117,34 @@ "node": ">=6" } }, + "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, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -4383,6 +6157,26 @@ "node": ">=6" } }, + "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, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4398,6 +6192,50 @@ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", "license": "BSD-2-Clause" }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -4468,6 +6306,17 @@ "node": ">= 0.4" } }, + "node_modules/mathml-tag-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz", + "integrity": "sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/mdast-util-definitions": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", @@ -4699,6 +6548,29 @@ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "license": "CC0-1.0" }, + "node_modules/meow": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz", + "integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -5262,6 +7134,33 @@ ], "license": "MIT" }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5283,6 +7182,22 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -5316,6 +7231,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/neotraverse": { "version": "0.6.18", "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", @@ -5434,6 +7356,24 @@ "regex-recursion": "^6.0.2" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/p-limit": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", @@ -5449,6 +7389,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-queue": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", @@ -5489,6 +7474,38 @@ "integrity": "sha512-SwzWD9gl/ElwYLCI0nUja1mFJzjq2D8ziShfNBa7zCHzkOozeOGDwHWQ+tvCzEZcewecWZ5U7kUopDnG+DFYEQ==", "license": "MIT" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse-latin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", @@ -5519,6 +7536,26 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/piccolore": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", @@ -5571,6 +7608,64 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prismjs": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", @@ -5586,22 +7681,73 @@ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "license": "MIT", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" }, "engines": { - "node": ">= 6" + "node": ">=20" } }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/radix3": { "version": "1.1.2", @@ -5836,6 +7982,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/retext": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", @@ -5897,6 +8063,17 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.62.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", @@ -5941,6 +8118,30 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/sax": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", @@ -6019,6 +8220,29 @@ "node": ">=10" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/shiki": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", @@ -6035,6 +8259,19 @@ "@types/hast": "^3.0.4" } }, + "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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-swizzle": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", @@ -6065,108 +8302,349 @@ "sitemap": "dist/esm/cli.js" }, "engines": { - "node": ">=20.19.5", - "npm": ">=10.8.2" + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/sitemap/node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stylelint": { + "version": "17.14.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.0.tgz", + "integrity": "sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^3.2.1", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-syntax-patches-for-csstree": "^1.1.5", + "@csstools/css-tokenizer": "^4.0.0", + "@csstools/media-query-list-parser": "^5.0.0", + "@csstools/selector-resolve-nested": "^4.0.0", + "@csstools/selector-specificity": "^6.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.2", + "css-functions-list": "^3.3.3", + "css-tree": "^3.2.1", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^11.1.3", + "global-modules": "^2.0.0", + "globby": "^16.2.0", + "globjoin": "^0.1.4", + "html-tags": "^5.1.0", + "ignore": "^7.0.5", + "import-meta-resolve": "^4.2.0", + "mathml-tag-names": "^4.0.0", + "meow": "^14.1.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.15", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.4", + "postcss-value-parser": "^4.2.0", + "string-width": "^8.2.1", + "supports-hyperlinks": "^4.4.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^7.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz", + "integrity": "sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "stylelint": "^17.0.0" } }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "24.13.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", - "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "node_modules/stylelint-config-standard": { + "version": "40.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-40.0.0.tgz", + "integrity": "sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/sitemap/node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT" - }, - "node_modules/smol-toml": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", - "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", - "license": "BSD-3-Clause", + "stylelint-config-recommended": "^18.0.0" + }, "engines": { - "node": ">= 18" + "node": ">=20.19.0" }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" + "peerDependencies": { + "stylelint": "^17.0.0" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^6.1.23" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "cacheable": "^2.5.0", + "flatted": "^3.4.2", + "hookified": "^1.15.0" } }, - "node_modules/stream-replace-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", - "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", - "license": "MIT" + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/stylelint/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/supports-hyperlinks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.5.0.tgz", + "integrity": "sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "has-flag": "^5.0.1", + "supports-color": "^10.2.2" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, "node_modules/svgo": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", @@ -6192,6 +8670,108 @@ "url": "https://opencollective.com/svgo" } }, + "node_modules/synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.3.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/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, + "license": "MIT" + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", @@ -6223,6 +8803,19 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -6249,6 +8842,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/tsconfck": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", @@ -6277,6 +8883,19 @@ "license": "0BSD", "optional": true }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", @@ -6302,6 +8921,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz", + "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.63.0", + "@typescript-eslint/parser": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/utils": "8.63.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/ufo": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", @@ -6326,6 +8969,19 @@ "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -6509,6 +9165,23 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -7127,6 +9800,22 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-pm-runs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", @@ -7151,6 +9840,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", @@ -7168,6 +9867,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/write-file-atomic": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz", + "integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==", + "dev": true, + "license": "ISC", + "dependencies": { + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/xxhash-wasm": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", @@ -7246,6 +9958,19 @@ "zod": "^3.25.28 || ^4" } }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index 143b4236..760983bf 100644 --- a/package.json +++ b/package.json @@ -13,19 +13,21 @@ "prefetch": "node scripts/prefetch-images.mjs", "preview": "astro preview", "astro": "astro", - "fetch-data": "node scripts/fetchData.ts" + "fetch-data": "node scripts/fetchData.ts", + "lint": "eslint .", + "css-lint": "stylelint 'src/**/*.css'" }, "dependencies": { - "graphql": "^16.6.0", - "graphql-request": "^5.1.0", "@astrojs/react": "^4.2.0", "@astrojs/sitemap": "^3.2.1", - "astro-hydration-dedup": "*", - "astro-incremental-static": "*", - "astro-remote-images": "*", "@fontsource/dm-sans": "^5.2.8", "@fontsource/lato": "^5.2.7", "astro": "^5.7.0", + "astro-hydration-dedup": "*", + "astro-incremental-static": "*", + "astro-remote-images": "*", + "graphql": "^16.6.0", + "graphql-request": "^5.1.0", "i18next": "^24.2.0", "leaflet": "^1.9.4", "papaparse": "^5.4.1", @@ -35,10 +37,18 @@ "sharp": "^0.33.5" }, "devDependencies": { + "@eslint/js": "^10.0.1", "@types/leaflet": "^1.9.12", "@types/papaparse": "^5.3.15", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "typescript": "^5.7.0" + "eslint": "^10.7.0", + "eslint-plugin-astro": "^1.7.0", + "eslint-plugin-react-hooks": "^7.1.1", + "globals": "^17.7.0", + "stylelint": "^17.14.0", + "stylelint-config-standard": "^40.0.0", + "typescript": "^5.7.0", + "typescript-eslint": "^8.63.0" } } diff --git a/packages/astro-hydration-dedup/src/index.ts b/packages/astro-hydration-dedup/src/index.ts index 2a889fb9..f4bbaaf6 100644 --- a/packages/astro-hydration-dedup/src/index.ts +++ b/packages/astro-hydration-dedup/src/index.ts @@ -61,7 +61,7 @@ export interface HydrationDedupOptions { filenamePrefix?: string; /** * Page globs (relative to the build output, `/`-separated, `**`/`*`/`?`) - * to consider. Default: every `**​/*.html`. + * to consider. Default: every `** /*.html`. */ include?: string[]; /** Page globs to skip. Applied after `include`. Default none. */ diff --git a/packages/astro-remote-images/src/index.ts b/packages/astro-remote-images/src/index.ts index e632ba60..8bc5e81f 100644 --- a/packages/astro-remote-images/src/index.ts +++ b/packages/astro-remote-images/src/index.ts @@ -323,7 +323,7 @@ export function createRemoteImages(userOptions: RemoteImagesOptions = {}): Remot const policy = permanent ? options.onError : options.onTransientError; if (!warned.has(key)) { warned.add(key); - // eslint-disable-next-line no-console + console.warn(`[remote-images] ${policy} (${reason}): ${url}`); } if (policy === 'fail') { @@ -451,7 +451,7 @@ export function createRemoteImages(userOptions: RemoteImagesOptions = {}): Remot const result = await encodeToCache(url, w, key); if (!result.ok && !warned.has(key)) { warned.add(key); - // eslint-disable-next-line no-console + console.warn(`[remote-images] prefetch failed (${result.reason}): ${url}`); } return result.ok; @@ -467,7 +467,7 @@ export function createRemoteImages(userOptions: RemoteImagesOptions = {}): Remot const widths = opts.width !== undefined ? [opts.width] : options.widths; const jobs = urls.flatMap((url) => widths.map((w) => ({ url, w }))); const total = jobs.length; - // eslint-disable-next-line no-console + console.log( `[remote-images] prefetch: ${urls.length} unique URLs × ${widths.length} width(s), ` + `concurrency=${options.concurrency}`, @@ -491,7 +491,7 @@ export function createRemoteImages(userOptions: RemoteImagesOptions = {}): Remot } const done = optimized + failed; if (done % 250 === 0 || done === total) { - // eslint-disable-next-line no-console + console.log(`[remote-images] prefetch ${done}/${total} (optimized=${optimized} failed=${failed})`); } } @@ -499,7 +499,7 @@ export function createRemoteImages(userOptions: RemoteImagesOptions = {}): Remot await Promise.all(Array.from({ length: Math.min(options.concurrency, total) }, worker)); const seconds = (Date.now() - start) / 1000; - // eslint-disable-next-line no-console + console.log( `[remote-images] prefetch done: ${optimized} optimized / ${failed} failed / ${total} total ` + `in ${seconds.toFixed(1)}s`, diff --git a/scripts/fetchData.ts b/scripts/fetchData.ts index ba4b20a9..322cfc05 100644 --- a/scripts/fetchData.ts +++ b/scripts/fetchData.ts @@ -115,7 +115,7 @@ async function fetchAllProjects(): Promise { let offset = 0; let totalCount = 0; for (;;) { - // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(projectsQuery, { limit: PROJECTS_PAGE_SIZE, offset, })) as AllDataQuery; @@ -150,7 +150,7 @@ async function scanProjects(): Promise> { let offset = 0; let totalCount = 0; for (;;) { - // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(scanQuery, { limit: SCAN_PAGE_SIZE, offset, })) as ScanResponse; @@ -170,7 +170,7 @@ async function fetchProjectsByIds(ids: string[]): Promise { const out: ProjectResult[] = []; for (let i = 0; i < ids.length; i += PROJECTS_PAGE_SIZE) { const batch = ids.slice(i, i + PROJECTS_PAGE_SIZE); - // eslint-disable-next-line no-await-in-loop + const page = (await graphQLClient.request(projectsByIdsQuery, { ids: batch, limit: PROJECTS_PAGE_SIZE, offset: 0, })) as AllDataQuery; @@ -251,14 +251,13 @@ async function getCsrfTokenValue() { const csrfToken = parsedCookiesToSet.find((item) => item.key === COOKIE_NAME); return csrfToken?.value; } catch (err) { - // eslint-disable-next-line no-console - console.error('failed to do the healthcheck', healthcheckUrl); + console.error('failed to do the healthcheck', healthcheckUrl, err); } return undefined; } async function fetchAndWriteData() { - let data = {} as AllDataQuery; + let data: AllDataQuery; if (pipelineType === 'ci') { data = dummyData; } else { diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index 87108fb7..b1126376 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -52,15 +52,6 @@ function bound(value: number, min: number, max: number): number { function sum(list: number[]): number { return list.reduce((acc, v) => acc + v, 0); } -function listToMap( - list: T[], - keySelector: (item: T) => string, - valueSelector: (item: T) => V, -): Record { - const out: Record = {}; - for (const item of list) out[keySelector(item)] = valueSelector(item); - return out; -} function compareDate(a: string | null | undefined, b: string | null | undefined): number { if (!a && !b) return 0; if (!a) return -1; @@ -216,7 +207,7 @@ export default function DataExplorer(props: Props) { .catch((err: unknown) => { if (cancelled) return; // Fail-soft: keep showing the SSR'd initial slice. - // eslint-disable-next-line no-console + console.warn(`data-explorer: failed to load ${dataUrl}; showing the initial ${initialProjects.length} projects only`, err); setLoading(false); }); diff --git a/src/components/MapIsland.tsx b/src/components/MapIsland.tsx index 352bb8cd..b33ba866 100644 --- a/src/components/MapIsland.tsx +++ b/src/components/MapIsland.tsx @@ -25,7 +25,7 @@ export default function MapIsland(props: Props) { const d = await res.json(); if (active) setGeoJson(d); } catch (err) { - // eslint-disable-next-line no-console + console.error('Failed fetching map GeoJSON', geoJsonUrl, err); } })(); @@ -35,7 +35,7 @@ export default function MapIsland(props: Props) { }, [geoJsonUrl]); const handleGeoJSONAdd = useCallback((layer: LayerEvent) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + const bounds = (layer.target as any)?.getBounds?.(); if (bounds) { mapRef.current?.fitBounds(bounds, { padding: [12, 12] }); diff --git a/src/components/ProjectHistoryChart.tsx b/src/components/ProjectHistoryChart.tsx index 4e4f76ba..7edd1e53 100644 --- a/src/components/ProjectHistoryChart.tsx +++ b/src/components/ProjectHistoryChart.tsx @@ -66,7 +66,7 @@ export default function ProjectHistoryChart(props: Props) { setProjectHistory(history); } } catch (err) { - // eslint-disable-next-line no-console + console.error('Failed fetching project data', err); } })(); diff --git a/src/lib/data.ts b/src/lib/data.ts index 0f624101..3e1dafc7 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -11,7 +11,7 @@ const require = createRequire(import.meta.url); // breaks. cwd is stable across dev + bundled build -> fullData/staticData.json. // MAPSWIPE_DATA_FILE overrides the path (used by the incremental data-change // benchmark to point at a perturbed copy without touching the shared symlink). -// eslint-disable-next-line @typescript-eslint/no-explicit-any + const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); export interface UrlInfo { diff --git a/src/lib/dataExplorer.ts b/src/lib/dataExplorer.ts index 9395459b..54d7a0f6 100644 --- a/src/lib/dataExplorer.ts +++ b/src/lib/dataExplorer.ts @@ -10,7 +10,7 @@ import { join } from 'node:path'; const require = createRequire(import.meta.url); // Same anchor as src/lib/data.ts (cwd = repo root), stable after Vite bundling. // MAPSWIPE_DATA_FILE overrides the path (incremental data-change benchmark). -// eslint-disable-next-line @typescript-eslint/no-explicit-any + const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); export interface MiniProject { @@ -89,7 +89,7 @@ export function getDataExplorerPayload(): DataExplorerPayload { const { communityStats, publicOrganizations, globalExportAssets } = data ?? {}; const { totalContributors = null, totalSwipes = null } = communityStats ?? {}; - // eslint-disable-next-line @typescript-eslint/no-explicit-any + let publicProjects: any[] = data?.publicProjects?.results ?? []; const limit = Number(process.env.SLICE_LIMIT ?? 0); if (limit > 0) publicProjects = publicProjects.slice(0, limit); diff --git a/src/lib/projectHistory.ts b/src/lib/projectHistory.ts index 3351baf2..3080395c 100644 --- a/src/lib/projectHistory.ts +++ b/src/lib/projectHistory.ts @@ -14,7 +14,7 @@ function isFalsyString(v: unknown): boolean { const getProjectHistory = async (projectId: string, exportHistoryUrl?: string) => { if (!exportHistoryUrl) { - // eslint-disable-next-line no-console + console.warn(`No exportHistoryUrl for project ${projectId}`); return []; } @@ -27,7 +27,7 @@ const getProjectHistory = async (projectId: string, exportHistoryUrl?: string) = } csvContent = await res.text(); } catch { - // eslint-disable-next-line no-console + console.warn(`Could not fetch history for project ${projectId}.`); return []; } @@ -37,9 +37,9 @@ const getProjectHistory = async (projectId: string, exportHistoryUrl?: string) = delimiter: ',', newline: '\n', header: true, - // eslint-disable-next-line @typescript-eslint/no-explicit-any + complete: (results: any) => resolve(results), - // eslint-disable-next-line @typescript-eslint/no-explicit-any + error: (error: any) => reject(error), }); }); diff --git a/src/styles/global.css b/src/styles/global.css index 122a84b6..6e9c71ed 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -5,27 +5,23 @@ :root { --font-family-lato: 'Lato', sans-serif; --font-family-dm-sans: 'DM Sans', sans-serif; - --multiplier: 1.2599; /* Major third scale */ - --font-size-base: 1.2rem; --spacing-base: 1.125rem; - --color-text: #5B5B5B; --color-link: #0060C9; - --color-heading: #000000; - --color-heading-on-dark: #ffffff; - --color-text-on-dark: rgba(255, 255, 255, 1); - --color-text-on-dark-light: rgba(255, 255, 255, 0.8); + --color-heading: #000; + --color-heading-on-dark: #fff; + --color-text-on-dark: rgb(255 255 255 / 100%); + --color-text-on-dark-light: rgb(255 255 255 / 80%); --color-brand: #0F193F; --color-text-brand: var(--color-brand); - --color-accent: rgba(170, 190, 93, 1); + --color-accent: rgb(170 190 93 / 100%); --color-accent-dark: #8a9b49; - --color-accent-light: rgba(170, 190, 93, 0.48); + --color-accent-light: rgb(170 190 93 / 48%); --color-complement: #fff6ef; --color-brand-dark: #020e3b; - --color-foreground: #ffffff; - + --color-foreground: #fff; --color-finished: #AABE5D; --color-active: #f59143; --color-border-light: #d0d0d0; @@ -35,24 +31,19 @@ --color-background-brand-light: #f6f8ff; --color-background-accent-light: #f5f5f5; --color-background-leaflet: #d4dadc; - --color-separator: rgba(0, 0, 0, 0.1); - + --color-separator: rgb(0 0 0 / 10%); --width-page-max: 80rem; --width-heading-max: 50rem; --width-separator-thin: 1pt; - --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 400; --font-weight-semi-bold: 500; --font-weight-bold: 600; - --border-radius-small: 0.2rem; --border-radius-medium: 0.5rem; --border-radius-large: 1rem; - - --box-shadow-medium: 0 2pt 10pt -4pt rgba(0, 0, 0, 0.3); - + --box-shadow-medium: 0 2pt 10pt -4pt rgb(0 0 0 / 30%); --font-size-super-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); --font-size-extra-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier))); --font-size-small: calc(var(--font-size-base) / var(--multiplier)); @@ -62,7 +53,6 @@ --font-size-super-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); --font-size-mega-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); --font-size-gigantic: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-tiny: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); --spacing-ultra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); --spacing-super-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); @@ -84,6 +74,7 @@ /* Base element styles ported from Next's src/styles/globals.css. */ * { box-sizing: border-box; line-height: 1.5; } html { margin: 0; padding: 0; } + body { margin: 0; padding: 0; @@ -101,13 +92,14 @@ h1, h2, h3, h4, h5, h6 { margin: 0; font-family: var(--font-family-dm-sans); } Pragmatic classes for the already-ported project / data / blog pages. Kept intact (only re-scoped color var) so those pages don't regress. New pages (home / get-involved / privacy / 404) use faithfully-ported, - component-scoped styles instead (see below + per-page diff --git a/src/pages/404.module.css b/src/pages/404.module.css new file mode 100644 index 00000000..93eda380 --- /dev/null +++ b/src/pages/404.module.css @@ -0,0 +1,43 @@ +.fourHundredFour { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + gap: var(--spacing-gigantic); + + .leftContent { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + padding: var(--spacing-large); + gap: var(--spacing-extra-large); + + .headingContainer { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + text-align: center; + } + } + + .rightContent { + width: 40rem; + height: 40rem; + } + + @media screen and (width <= 720px) { + flex-direction: column; + + .rightContent { + order: 1; + width: 96vw; + height: 50vh; + } + + .leftContent { + order: 2; + } + } +} diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index a929b62f..e6fafb5e 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -3,8 +3,19 @@ import type { GetStaticPaths } from 'astro'; import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../../layouts/BlogLayout.astro'; +import Icon from '../../../../components/Icon.astro'; import { getT, LOCALES } from '../../../../i18n'; import { selectPaths } from '../../../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module + the component +// modules whose markup this page reproduces (Hero, Section, Tag, Heading, +// HtmlOutput, ImageWrapper). +import styles from './styles.module.css'; +import heroStyles from '../../../../components/Hero.module.css'; +import sectionStyles from '../../../../components/Section.module.css'; +import tagStyles from '../../../../components/Tag.module.css'; +import headingStyles from '../../../../components/Heading.module.css'; +import imageStyles from '../../../../components/ImageWrapper.module.css'; +import htmlOutputStyles from '../../../../components/HtmlOutput.module.css'; // Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing // //blogs// with exact URL parity to Next (slug == entry.id == @@ -63,23 +74,51 @@ const tabTitle = String(t('blog-tab-head', { blogTitle })); title={tabTitle} description={description} path={`blogs/${entry.id}/`} + mainClass={styles.blog} > -
    -
    -

    {blogTitle}

    -
    - {publishedDate && {dateFmt.format(publishedDate)}} - {author && {author}} + {/* Hero: title + date/author tags left, cover image right */} +
    +
    +
    +
    +

    + {blogTitle} +

    +
    +
    + {publishedDate && ( + + + {dateFmt.format(publishedDate)} + + )} + {author && ( + + {author} + + )} +
    +
    +
    +
    + {coverImage ? ( +
    + +
    + ) : ( +
    + )} +
    - {coverImage && ( - - )} -
    +
    + -
    -
    - +
    +
    +
    + +
    diff --git a/src/pages/[locale]/blogs/[slug]/styles.module.css b/src/pages/[locale]/blogs/[slug]/styles.module.css new file mode 100644 index 00000000..6a98c787 --- /dev/null +++ b/src/pages/[locale]/blogs/[slug]/styles.module.css @@ -0,0 +1,40 @@ +.blog { + display: block; + + .illustration { + width: 30rem; + height: 20rem; + + @media screen and (width <= 840px) { + width: 24rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + } + } + + .hero { + .heroMainContent { + .heroLeftContent { + padding-top: 0; + } + + @media screen and (width <= 720px) { + padding-top: var(--spacing-enourmous); + } + } + + .heroDescription { + display: flex; + gap: var(--spacing-gigantic); + + .heroTag { + padding: 0; + color: var(--color-text-on-dark-light); + font-size: var(--font-size-medium); + + } + } + } +} diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index fd59561f..0948053a 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -3,8 +3,20 @@ import type { GetStaticPaths } from 'astro'; import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from '../../../layouts/BlogLayout.astro'; +import Icon from '../../../components/Icon.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module + the component +// modules whose markup this page reproduces (Hero, Section, Card, Tag, +// Heading, Link, ImageWrapper). +import styles from './styles.module.css'; +import heroStyles from '../../../components/Hero.module.css'; +import sectionStyles from '../../../components/Section.module.css'; +import cardStyles from '../../../components/Card.module.css'; +import tagStyles from '../../../components/Tag.module.css'; +import headingStyles from '../../../components/Heading.module.css'; +import linkStyles from '../../../components/Link.module.css'; +import imageStyles from '../../../components/ImageWrapper.module.css'; // Blog LIST page. One variant per locale (blog content is single-language // English markdown; only the chrome is translated), producing //blogs/ @@ -64,52 +76,69 @@ const otherBlogs = blogs.filter((b) => !b.featured); const dateFmt = new Intl.DateTimeFormat(locale!); const fmtDate = (d?: Date) => (d ? dateFmt.format(d) : ''); +const sections = [ + { key: 'featured', title: t('featured-posts'), items: featuredBlogs }, + { key: 'other', title: t('other-posts'), items: otherBlogs }, +]; + const title = String(t('blogs-tab-head')); --- - -
    -

    {t('blogs-hero-title')}

    -
    - - {featuredBlogs.length > 0 && ( -
    -

    {t('featured-posts')}

    -
    - {featuredBlogs.map((blog) => ( -
    - {blog.coverImage && ( - - )} -
    -

    {blog.title}

    - {blog.publishedDate && {fmtDate(blog.publishedDate)}} -
    {blog.description}
    - {t('read-more')} -
    -
    - ))} + + {/* Hero (no right content -> centered, Next: ) */} +
    +
    +
    +
    +

    + {t('blogs-hero-title')} +

    +
    -
    - )} +
    +
    + - {otherBlogs.length > 0 && ( -
    -

    {t('other-posts')}

    -
    - {otherBlogs.map((blog) => ( -
    - {blog.coverImage && ( - - )} -
    -

    {blog.title}

    - {blog.publishedDate && {fmtDate(blog.publishedDate)}} -
    {blog.description}
    - {t('read-more')} -
    -
    - ))} + {sections.map((section) => section.items.length > 0 && ( +
    +
    +
    +

    + {section.title} +

    +
    +
    + {section.items.map((blog) => ( +
    + {blog.coverImage && ( +
    + +
    + )} +
    +
    +
    +
    + {blog.title} +
    +
    +
    +
    + {blog.publishedDate && ( + + + {fmtDate(blog.publishedDate)} + + )} +
    {blog.description}
    + + {t('read-more')} + +
    +
    +
    + ))} +
    - )} + ))} diff --git a/src/pages/[locale]/blogs/styles.module.css b/src/pages/[locale]/blogs/styles.module.css new file mode 100644 index 00000000..16e96952 --- /dev/null +++ b/src/pages/[locale]/blogs/styles.module.css @@ -0,0 +1,35 @@ +.blogs { + display: block; + + .list { + display: flex; + flex-direction: column; + gap: var(--spacing-large); + + .tag { + padding: var(--spacing-ultra-small) 0; + font-size: var(--font-size-small); + } + + .cardContent { + display: flex; + flex-direction: column; + gap: var(--spacing-ultra-small); + + .description { + display: -webkit-box; + flex-grow: 1; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .link { + color: var(--color-accent); + font-size: var(--font-size-medium); + font-weight: var(--font-weight-bold); + } + } + } +} diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index 54bdbd71..ec149849 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -2,11 +2,25 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import DataExplorer, { PAGE_SIZE } from '../../../components/DataExplorer.tsx'; +import ProjectTypeIcon from '../../../components/ProjectTypeIcon.astro'; +import Icon from '../../../components/Icon.astro'; import { getDataExplorerPayload } from '../../../lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; -import '../../../styles/global.css'; +// CSS Modules recovered from the Next app: the page module (shared with the +// DataExplorer island) + the component modules whose markup this page +// reproduces (Hero, Section, Card, KeyFigure, Heading, Link, ListItem, +// ImageWrapper). +import styles from './styles.module.css'; +import heroStyles from '../../../components/Hero.module.css'; +import sectionStyles from '../../../components/Section.module.css'; +import cardStyles from '../../../components/Card.module.css'; +import keyFigureStyles from '../../../components/KeyFigure.module.css'; +import headingStyles from '../../../components/Heading.module.css'; +import linkStyles from '../../../components/Link.module.css'; +import listItemStyles from '../../../components/ListItem.module.css'; +import imageStyles from '../../../components/ImageWrapper.module.css'; // One static page per locale: //data/ (parity with the Next Pages-Router // route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory @@ -68,139 +82,178 @@ const t = await getT(locale!, 'data'); const title = String(t('data-tab-head')); -// Static type-explainer cards (mirrors the Next page's type-section). +// Community stats (static, matching the Next page's statsHeader section). +const { totalSwipes, totalContributors } = payload; +const fmt = (n: number | null | undefined) => + (n == null ? '-' : new Intl.NumberFormat('en-US').format(n)); + +// Static type-explainer cards (mirrors the Next page's type-section: cover +// image + ProjectTypeIcon + heading + key-point list). const typeCards = [ - { key: 'find', title: t('type-find-title'), points: [t('type-find-key-point-1'), t('type-find-key-point-2'), t('type-find-key-point-3')] }, - { key: 'compare', title: t('type-compare-title'), points: [t('type-compare-key-point-1'), t('type-compare-key-point-2'), t('type-compare-key-point-3')] }, - { key: 'validate', title: t('type-validate-title'), points: [t('type-validate-key-point-1'), t('type-validate-key-point-2'), t('type-validate-key-point-3')] }, - { key: 'completeness', title: t('type-completeness-title'), points: [t('type-completeness-key-point-1'), t('type-completeness-key-point-2'), t('type-completeness-key-point-3')] }, - { key: 'validate_image', title: t('type-validate-image-title'), points: [t('type-validate-image-key-point-1'), t('type-validate-image-key-point-2'), t('type-validate-image-key-point-3')] }, - { key: 'street', title: t('type-streets-view-title'), points: [t('type-street-key-point-1'), t('type-street-key-point-2'), t('type-street-key-point-3')] }, - { key: 'locate', title: t('type-locate-title'), points: [t('type-locate-key-point-1'), t('type-locate-key-point-2'), t('type-locate-key-point-3')] }, -]; + { type: 'FIND', coverImageUrl: '/img/find.svg', title: t('type-find-title'), points: [t('type-find-key-point-1'), t('type-find-key-point-2'), t('type-find-key-point-3')] }, + { type: 'COMPARE', beforeAfter: true, title: t('type-compare-title'), points: [t('type-compare-key-point-1'), t('type-compare-key-point-2'), t('type-compare-key-point-3')] }, + { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', title: t('type-validate-title'), points: [t('type-validate-key-point-1'), t('type-validate-key-point-2'), t('type-validate-key-point-3')] }, + { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', title: t('type-completeness-title'), points: [t('type-completeness-key-point-1'), t('type-completeness-key-point-2'), t('type-completeness-key-point-3')] }, + { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', title: t('type-validate-image-title'), points: [t('type-validate-image-key-point-1'), t('type-validate-image-key-point-2'), t('type-validate-image-key-point-3')] }, + { type: 'STREET', coverImageUrl: '/img/street_image.png', title: t('type-streets-view-title'), points: [t('type-street-key-point-1'), t('type-street-key-point-2'), t('type-street-key-point-3')] }, + { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', title: t('type-locate-title'), points: [t('type-locate-key-point-1'), t('type-locate-key-point-2'), t('type-locate-key-point-3')] }, +] as const; --- - - -
    -
    -

    {t('data-page-heading')}

    -

    {t('data-page-description')}

    + + {/* Hero */} +
    +
    +
    +
    +

    + {t('data-page-heading')} +

    +
    {t('data-page-description')}
    -
    - - -
    -

    {t('type-section-heading')}

    -

    {t('type-section-description')}

    -
    - {typeCards.map((card) => ( -
    -

    {card.title}

    -
      - {card.points.map((p) =>
    • {p}
    • )} -
    -
    - ))} +
    +
    + {t('data-banner-image')} +
    -
    - - - - - -
    -

    {t('license-section-heading')}

    -

    {t('license-section-description')}

    -
    -
    -

    {t('contact-section-heading')}

    -

    {t('contact-section-description')}

    - {t('contact-link-label')} -
    -
    - + {/* License + contact (static) */} +
    +
    +
    +

    + {t('license-section-heading')} +

    +
    {t('license-section-description')}
    +
    +
    +
    +
    +
    +
    +

    + {t('contact-section-heading')} +

    +
    {t('contact-section-description')}
    +
    + +
    +
    + diff --git a/src/pages/[locale]/data/styles.module.css b/src/pages/[locale]/data/styles.module.css new file mode 100644 index 00000000..8d2702e8 --- /dev/null +++ b/src/pages/[locale]/data/styles.module.css @@ -0,0 +1,372 @@ +.data { + display: flex; + flex-direction: column; + gap: var(--spacing-gigantic); + background-color: var(--color-foreground); + + .active { + color: var(--color-active); + } + + .finished { + color: var(--color-finished); + } + + .illustration { + width: 30rem; + height: 24rem; + + @media screen and (width <= 840px) { + width: 24rem; + height: 20rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + height: 16rem; + } + } + + .statsHeader { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--spacing-enourmous); + + .leftContent { + display: flex; + align-self: center; + flex-direction: column; + justify-content: center; + padding: var(--spacing-mega-large); + width: 20rem; + + .figure { + align-self: flex-end; + } + + .largeFigure { + --size: 10rem; + --border-size: 5rem; + + align-self: flex-start; + } + } + + .rightContent { + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + gap: var(--spacing-medium); + + .heading { + align-self: center; + max-width: var(--width-heading-max); + text-align: center; + } + + .sectionDescription { + display: flex; + align-self: center; + flex-direction: column; + gap: var(--spacing-small); + max-width: 30rem; + text-align: center; + font-size: var(--font-size-medium); + } + } + } + + .typeSection { + .typeList { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + + .missionImage { + height: 20rem; + } + + .beforeAfterContainer { + display: flex; + flex-direction: column; + gap: var(--spacing-small); + + .beforeAfterImageWrapper { + height: calc(50% - var(--spacing-small) / 2); + + .beforeImage { + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + object-position: top center; + object-fit: cover; + } + + .afterImage { + object-position: top center; + object-fit: cover; + } + } + } + + .keyPointList { + display: flex; + flex-direction: column; + gap: var(--spacing-super-small); + } + } + } + + .exploreSection { + .exploreHeadingContainer { + gap: 0; + + .lastFetchedDate { + font-size: var(--font-size-small); + } + } + + .content { + display: flex; + flex-direction: column; + gap: var(--spacing-super-large); + + .topContainer { + display: flex; + flex-wrap: wrap; + gap: var(--spacing-large); + + .filters { + display: flex; + flex-basis: 25rem; + flex-direction: column; + border: var(--width-separator-thin) solid var(--color-border-light); + border-radius: var(--border-radius-medium); + padding: var(--spacing-medium); + gap: var(--spacing-large); + + /* Astro adaptation: the filters wrapper is a
    + * (so `disabled` cascades to every control while the + * dataset JSON loads) — Next used a plain div. Reset the + * fieldset chrome the rules above don't already cover. */ + margin: 0; + min-inline-size: auto; + + &:disabled { + opacity: 0.6; + } + + .filter { + border: var(--width-separator-thin) solid var(--color-border-light); + border-radius: var(--border-radius-small); + padding: var(--spacing-super-small) var(--spacing-medium); + } + + .dateFilter { + min-width: 6rem; + } + + .row { + display: flex; + flex-wrap: wrap; + gap: var(--spacing-large); + } + + .inputContainer { + display: flex; + flex-direction: column; + gap: var(--spacing-super-small); + + .filter { + max-width: 10rem; + } + } + + .clearButton { + display: flex; + align-items: center; + align-self: flex-end; + padding: var(--spacing-tiny) var(--spacing-extra-small); + font-size: var(--font-size-small); + gap: var(--spacing-ultra-small); + } + } + + .mapContainer { + position: relative; + flex-grow: 1; + border-radius: var(--border-radius-medium); + background-color: var(--color-background-leaflet); + height: auto; + + .projectsMap { + border: var(--width-separator-thin) solid var(--color-separator); + border-radius: var(--border-radius-medium); + background-color: var(--color-background-leaflet); + width: 100%; + height: 100%; + } + + .mapSettings { + position: absolute; + bottom: 0; + left: 0; + z-index: 100000; + border-radius: var(--border-radius-medium); + background-color: rgb(0 0 0 / 20%); + padding: var(--spacing-extra-small) var(--spacing-medium); + + .bubbleFilter { + align-items: center; + flex-direction: row; + } + } + } + + @media screen and (width <= 920px) { + flex-direction: column; + } + } + + .stats { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: var(--spacing-large); + font-size: var(--font-size-large); + + .circle { + font-size: var(--font-size-extra-small); + } + + @media screen and (width <= 720px) { + align-items: flex-start; + flex-direction: column; + + .circle { + display: none; + } + } + } + + .projectList { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + + .cardLink { + &:hover { + text-decoration: unset; + } + } + + .project { + height: 100%; + + .projectImage { + height: 10rem; + } + + &:hover { + box-shadow: var(--box-shadow-medium); + } + } + + .projectDetailsRow { + display: flex; + align-items: center; + gap: var(--spacing-extra-small); + } + + .progressBar { + display: flex; + flex-direction: column; + gap: var(--spacing-super-small); + + .progressLabel { + align-self: flex-start; + } + + .track { + border-radius: 0.25rem; + background-color: var(--color-separator); + height: 0.5rem; + + .progress { + border-radius: 0.25rem; + background-color: var(--color-background-bar); + height: 100%; + } + } + } + + .projectStats { + display: flex; + flex-direction: column; + gap: var(--spacing-medium); + + .tag { + padding: 0; + } + + .bottomTags { + display: flex; + flex-direction: column; + gap: var(--spacing-super-small); + } + } + } + } + } + + .downloadSection { + .urlList { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: repeat(auto-fit, minmax(30rem, 1fr)); + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + + .downloadCard { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: var(--spacing-large); + + .fileDetails { + display: flex; + align-items: center; + gap: var(--spacing-extra-small); + } + + .link { + display: flex; + align-items: center; + justify-content: center; + font-size: var(--font-size-medium); + gap: var(--spacing-extra-small); + } + + @media screen and (width <= 720px) { + align-items: unset; + flex-direction: column; + } + } + } + } + + @media screen and (width <= 720px) { + gap: unset; + } +} diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index 564706e8..416ad23b 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -3,10 +3,20 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module + the component +// modules whose markup this page reproduces (Hero, Section, CenteredCard, +// Heading, Link, ImageWrapper). +import styles from './styles.module.css'; +import heroStyles from '../../../components/Hero.module.css'; +import sectionStyles from '../../../components/Section.module.css'; +import centeredCardStyles from '../../../components/CenteredCard.module.css'; +import headingStyles from '../../../components/Heading.module.css'; +import linkStyles from '../../../components/Link.module.css'; +import imageStyles from '../../../components/ImageWrapper.module.css'; // Get-involved page. One static, translated variant per locale — // //get-involved/ — faithful to the Next Pages-Router page. Uses shared -// chrome (BaseLayout) + ported Hero/Section/CenteredCard styles. +// chrome (BaseLayout) + recovered Hero/Section/CenteredCard CSS Modules. // // The page renders NO project/blog data — its only content input is the // `get-involved` i18n namespace, which lives in the repo-root locales/ @@ -27,146 +37,173 @@ const { locale } = Astro.params; const t = await getT(locale!, 'get-involved'); const title = String(t('get-involved-tab-head')); --- - + {/* Hero */} -
    -
    -
    -
    -

    {t('hero-title')}

    -
    {t('hero-description')}
    +
    +
    +
    +
    +

    + {t('hero-title')} +

    +
    {t('hero-description')}
    -
    - {t('get-involved-banner')} +
    +
    + {t('get-involved-banner')} +
    -
    +
    {/* Contribute now */} -
    -
    -
    -

    {t('contribute-now')}

    -
    {t('contribute-now-description')}
    +
    +
    +
    +

    + {t('contribute-now')} +

    +
    {t('contribute-now-description')}
    -
    {/* Individual */} -
    -
    -
    -

    {t('individual-heading')}

    - {t('individual-heading-image')} -
    -
    -
    -
    {t('possess-language-skills')}
    -
    {t('possess-language-skills-description')}
    - +
    +
    +
    +
    +

    {t('individual-heading')}

    +
    + {t('individual-heading-image')} +
    -
    -
    {t('possess-technical-skills')}
    -
    {t('possess-techincal-skills-description')}
    - +
    +
    +
    {t('possess-language-skills')}
    +
    {t('possess-language-skills-description')}
    + +
    +
    +
    {t('possess-technical-skills')}
    +
    {t('possess-techincal-skills-description')}
    + +
    {/* Group */} -
    -
    -
    -
    -
    {t('want-to-host-mapswipe-events')}
    -
    {t('want-to-host-mapswipe-events-description')}
    - +
    +
    +
    +
    +
    +
    {t('want-to-host-mapswipe-events')}
    +
    {t('want-to-host-mapswipe-events-description')}
    + +
    +
    +
    {t('engage-your-csr')}
    +
    {t('engage-your-csr-description')}
    + +
    -
    -
    {t('engage-your-csr')}
    -
    {t('engage-your-csr-description')}
    - +
    +

    {t('group-heading')}

    +
    + {t('group-heading-image')} +
    -
    -

    {t('group-heading')}

    - {t('group-heading-image')} -
    {/* Organizational */} -
    -
    -
    -

    {t('organization-heading')}

    - {t('organization-logo')} -
    -
    -
    {t('humanitarian-or-nonprofit')}
    -
    {t('humanitarian-or-nonprofit-description')}
    - +
    +
    +
    +
    +

    {t('organization-heading')}

    +
    + {t('organization-logo')} +
    +
    +
    +
    {t('humanitarian-or-nonprofit')}
    +
    {t('humanitarian-or-nonprofit-description')}
    + +
    {/* Donate */} -
    -
    -
    -
    {t('interested-in-supporting')}
    -
    -

    {t('interested-in-supporting-description-1')}

    - {t('download-financial-report')} +
    +
    +
    +
    +
    {t('interested-in-supporting')}
    +
    +
    +

    {t('interested-in-supporting-description-1')}

    + {t('download-financial-report')} +
    +
    + +
    +
    +

    {t('donate-heading')}

    +
    + {t('donation-logo')} +
    - -
    -
    -

    {t('donate-heading')}

    - {t('donation-logo')}
    {/* Contact */} -
    -
    -
    -

    {t('contact-section-heading')}

    -
    {t('contact-section-description')}
    +
    +
    +
    +

    + {t('contact-section-heading')} +

    +
    {t('contact-section-description')}
    -
    - - diff --git a/src/pages/[locale]/get-involved/styles.module.css b/src/pages/[locale]/get-involved/styles.module.css new file mode 100644 index 00000000..861a38e6 --- /dev/null +++ b/src/pages/[locale]/get-involved/styles.module.css @@ -0,0 +1,210 @@ +.getInvolved { + display: flex; + flex-direction: column; + padding-bottom: var(--spacing-gigantic); + gap: var(--spacing-gigantic); + + .hero { + .illustration { + width: 30rem; + height: 24rem; + + @media screen and (width <= 840px) { + width: 24rem; + height: 20rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + height: 16rem; + } + } + } + + .imageContainer { + display: flex; + align-items: center; + flex-basis: 30rem; + flex-direction: column; + justify-content: center; + text-align: center; + gap: var(--spacing-extra-large); + + .illustration { + width: 24rem; + height: 28rem; + + @media screen and (width <= 840px) { + width: 20rem; + height: 24rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + height: 20rem; + } + } + } + + .card { + flex-grow: 1; + background-color: #fff; + padding: var(--spacing-gigantic); + } + + .contributeContainer { + gap: var(--spacing-small); + border-radius: var(--border-radius-large); + background-color: var(--color-background-brand-light); + max-width: calc(var(--width-page-max) - 2 * var(--spacing-super-large)); + + .contributeSection { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + gap: var(--spacing-small); + + .buttonsContainer { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--spacing-large); + + .buttonImageContainer { + position: relative; + width: 10rem; + height: 4rem; + + .image { + object-position: center center; + object-fit: contain; + border-radius: var(--border-radius-medium); + } + } + } + + .linkContainer{ + display: flex; + justify-content: center; + gap: var(--spacing-medium); + } + + .downloadLink { + color: var(--color-link); + } + } + } + + .sectionContainer { + gap: var(--spacing-gigantic); + } + + .individual { + .content { + display: flex; + justify-content: space-between; + gap: var(--spacing-large); + + .cards { + display: flex; + flex-direction: column; + flex-grow: 1; + gap: var(--spacing-large); + + .card { + max-width: 60rem; + } + } + + @media screen and (width <= 720px) { + flex-direction: column; + + .imageContainer { + flex-basis: unset; + order: 1; + } + + .cards { + order: 2; + } + } + } + } + + .group { + .content { + display: flex; + justify-content: space-between; + gap: var(--spacing-large); + + .cards { + display: flex; + flex-direction: column; + flex-grow: 1; + gap: var(--spacing-large); + + .card { + background-color: #fff; + max-width: 60rem; + } + } + + @media screen and (width <= 720px) { + flex-direction: column; + + .imageContainer { + flex-basis: unset; + order: 1; + } + + .cards { + order: 2; + } + } + } + } + + .organizational { + .content { + display: flex; + align-items: center; + gap: var(--spacing-large); + + @media screen and (width <= 720px) { + flex-wrap: wrap; + + .imageContainer { + flex-basis: 100%; + } + } + } + } + + .donate { + .content { + display: flex; + align-items: center; + gap: var(--spacing-large); + + .donateCardDescription { + display: flex; + flex-direction: column; + gap: var(--spacing-ultra-small); + } + + @media screen and (width <= 720px) { + flex-wrap: wrap; + + .imageContainer { + flex-basis: 100%; + order: 1; + } + + .card { + order: 2; + } + } + } + } +} diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index 06a52390..e2c63e57 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -8,11 +8,23 @@ import Icon from '../../components/Icon.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from '../../lib/data'; import { selectPaths } from '../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module + the component +// modules whose markup this page reproduces (Hero, Section, Card, KeyFigure, +// Heading, Link, Tag, ImageWrapper). +import styles from './styles.module.css'; +import heroStyles from '../../components/Hero.module.css'; +import sectionStyles from '../../components/Section.module.css'; +import headingStyles from '../../components/Heading.module.css'; +import linkStyles from '../../components/Link.module.css'; +import cardStyles from '../../components/Card.module.css'; +import keyFigureStyles from '../../components/KeyFigure.module.css'; +import tagStyles from '../../components/Tag.module.css'; +import imageStyles from '../../components/ImageWrapper.module.css'; // Home page. One static, translated variant per locale — // — matching // the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, // key figures, mission-type cards, featured blogs, download/get-involved CTAs -// and partners, using the shared chrome (BaseLayout) + ported design tokens. +// and partners, using the shared chrome (BaseLayout) + recovered CSS Modules. // // The home page renders ONLY the community stats (total swipes/contributors) // and the top-3 featured blogs — it does NOT render the project set. So its @@ -99,60 +111,74 @@ const missionTypes = [ const title = String(t('home-tab-head')); --- - - {/* Hero */} -
    -
    -
    -
    -

    {t('hero-title')}

    -
    {t('hero-description')}
    -
    - {t('download-app-label')} - {t('data-link')} + + {/* Hero (Next: components/Hero with video rightContent) */} +
    +
    +
    +
    +

    + {t('hero-title')} +

    +
    {t('hero-description')}
    +
    -
    -
    -
    +
    {/* Mobilizing volunteers + key figures */} -
    -
    -
    -

    {t('mobilizing-volunteer')}

    +
    +
    +
    +

    + {t('mobilizing-volunteer')} +

    -
    -
    -
    - {t('mobilize-volunteer')} +
    +
    +
    + {t('mobilize-volunteer')}
    -
    -
    - {t('mapathon')} +
    +
    + {t('mapathon')}
    -
    - {t('field-mapping')} +
    + {t('field-mapping')}
    -
    -

    {t('mobilizing-volunteer-description-paragraph-1')}

    -

    {t('mobilizing-volunteer-description-paragraph-2')}

    -
    -
    -
    {swipesFmt}
    -
    {t('total-swipes')}
    +
    +
    {t('mobilizing-volunteer-description-paragraph-1')}
    +
    {t('mobilizing-volunteer-description-paragraph-2')}
    +
    +
    +
    + {swipesFmt} + +
    +
    {t('total-swipes')}
    -
    -
    {contributorsFmt}
    -
    {t('total-contributors')}
    +
    +
    + {contributorsFmt} + +
    +
    {t('total-contributors')}
    @@ -161,31 +187,43 @@ const title = String(t('home-tab-head'));
    {/* Mission types */} -
    -
    -
    -

    {t('explore-mission-types')}

    -
    {t('explore-mission-types-description')}
    +
    +
    +
    +

    + {t('explore-mission-types')} +

    +
    {t('explore-mission-types-description')}
    -
    +
    {missionTypes.map((m) => ( -
    -
    - {'beforeAfter' in m ? ( - <> - before-image - after-image - - ) : ( - card-cover-image - )} -
    -
    -
    - -
    {m.heading}
    +
    + {'beforeAfter' in m ? ( +
    +
    + before-image +
    +
    + after-image +
    -
    {m.body}
    + ) : ( +
    + card-cover-image +
    + )} +
    +
    +
    +
    + +
    +
    + {m.heading} +
    +
    +
    +
    {m.body}
    ))} @@ -194,65 +232,95 @@ const title = String(t('home-tab-head'));
    {/* Start mapswiping (download + get involved) */} -
    -
    -
    -

    {t('start-mapswiping-title')}

    +
    +
    +
    +

    + {t('start-mapswiping-title')} +

    -
    -
    -
    {t('download-description')}
    - -
    {/* Recent news & updates (featured blogs) */} -
    -
    -
    -

    {t('news-and-updates-title')}

    +
    +
    +
    +

    + {t('news-and-updates-title')} +

    -
    +
    {featuredBlogs.map((blog, index) => ( -
    {/* Partners */} -
    -
    -
    -

    {t('partners')}

    +
    +
    +
    +

    + {t('partners')} +

    -
    - - {t('missing-maps')} +
    + +
    + {t('missing-maps')} +
    -
    {t('missing-map-description')}
    -
    +
    {t('missing-map-description')}
    +
    {partners.map((p) => ( - - + +
    + {p.altText} +
    ))}
    @@ -281,54 +355,3 @@ const title = String(t('home-tab-head'));
    - - diff --git a/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro index 34a87da3..da9cedff 100644 --- a/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -8,6 +8,14 @@ import rehypeStringify from 'rehype-stringify'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module + the component +// modules whose markup this page reproduces (Hero, Section, Heading, +// HtmlOutput). +import styles from './styles.module.css'; +import heroStyles from '../../../components/Hero.module.css'; +import sectionStyles from '../../../components/Section.module.css'; +import headingStyles from '../../../components/Heading.module.css'; +import htmlOutputStyles from '../../../components/HtmlOutput.module.css'; // Privacy page. The policy body is a fixed English markdown string (identical // in every locale — same as the Next app, which hardcoded it); only the tab @@ -121,38 +129,26 @@ const policyHtml = String( .process(policy.replace(/\\n/g, '\n')), ); --- - + {/* Hero (no right content -> centered) */} -
    -
    -
    -
    -

    {t('privacy-hero-title')}

    +
    +
    +
    +
    +

    + {t('privacy-hero-title')} +

    -
    +
    -
    -
    -
    +
    +
    +
    +
    +
    - - diff --git a/src/pages/[locale]/privacy/styles.module.css b/src/pages/[locale]/privacy/styles.module.css new file mode 100644 index 00000000..fda44ecf --- /dev/null +++ b/src/pages/[locale]/privacy/styles.module.css @@ -0,0 +1,13 @@ +.privacy { + display: flex; + flex-direction: column; + + .hero { + min-height: 24rem; + } + + .content { + margin: auto; + max-width: 60rem; + } +} diff --git a/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro index b37c06a7..43fd157d 100644 --- a/src/pages/[locale]/projects/[id].astro +++ b/src/pages/[locale]/projects/[id].astro @@ -5,10 +5,26 @@ import RemoteImage from '../../../components/RemoteImage.astro'; import { COVER_WIDTH } from '../../../lib/remoteImages'; import MapIsland from '../../../components/MapIsland.tsx'; import ProjectHistoryChart from '../../../components/ProjectHistoryChart.tsx'; +import ProjectTypeIcon from '../../../components/ProjectTypeIcon.astro'; +import type { ProjectTypeKey } from '../../../components/ProjectTypeIcon.tsx'; +import Icon from '../../../components/Icon.astro'; import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from '../../../lib/data'; import { getFileSizeProperties, resolveAoiDownload } from '../../../lib/common'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +// CSS Modules recovered from the Next app: the page module (also imported by +// the ProjectHistoryChart island for the SVG classes) + the component modules +// whose markup this page reproduces. +import styles from './styles.module.css'; +import heroStyles from '../../../components/Hero.module.css'; +import sectionStyles from '../../../components/Section.module.css'; +import cardStyles from '../../../components/Card.module.css'; +import tagStyles from '../../../components/Tag.module.css'; +import headingStyles from '../../../components/Heading.module.css'; +import linkStyles from '../../../components/Link.module.css'; +import keyFigureStyles from '../../../components/KeyFigure.module.css'; +import imageStyles from '../../../components/ImageWrapper.module.css'; +import htmlOutputStyles from '../../../components/HtmlOutput.module.css'; export const getStaticPaths = (async () => { let projects = getAllProjects(); @@ -64,6 +80,10 @@ const statusLabels: Record = { PUBLISHED: t('active'), FINISHED: t('finished'), }; +const statusClass: Record = { + PUBLISHED: styles.active, + FINISHED: styles.finished, +}; const roundedTotalArea = Math.round(aoiGeometry?.totalArea ?? 0); const aoiDownload = resolveAoiDownload(project); @@ -104,110 +124,218 @@ const lastFetched = project.exportHistory?.modifiedAt }) : undefined; --- - -
    -
    -

    {name}

    -
    - {projectType && {projectTypeLabels[projectType] ?? projectType}} - {status && {statusLabels[status] ?? status}} -
    -
    - {region && {region}} - {requestingOrganization?.name && ( - {requestingOrganization.name} + + {/* Hero: name + type/status/meta tags left, cover image right */} +
    +
    +
    +
    +

    + {name} +

    +
    +
    +
    + {projectType && ( + + + {projectTypeLabels[projectType] ?? projectType} + + )} + {status && ( + + + {statusLabels[status] ?? status} + + )} +
    +
    + {region && ( + + {region} + + )} + {requestingOrganization?.name && ( + + {requestingOrganization.name} + + )} + {createdAtLabel && ( + + + {createdAtLabel} + + )} +
    +
    +
    +
    + {imageUrl && ( +
    +
    + +
    +
    )} - {createdAtLabel && {createdAtLabel}}
    - {imageUrl && ( - - )} -
    +
    +
    -
    -

    {t('overview-section-title')}

    - {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} -
    -
    -
    - {roundedTotalArea} - km2 -
    -
    - {numberOfContributorUsers ?? 0} - {t('project-contributors-text')} + {/* Overview: description + circle key figures */} +
    +
    +
    +
    +

    + {t('overview-section-title')} +

    +
    + {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} +
    +
    +
    +
    +
    +
    + {roundedTotalArea} + +
    +
    km2
    +
    +
    +
    + {numberOfContributorUsers ?? 0} + +
    +
    {t('project-contributors-text')}
    +
    +
    -
    - {lastFetched &&

    {lastFetched}

    } - {aoiDownload && ( -
    - -
    - )} -
    -
    -
    {t('project-progress-label')}
    -
    {t('project-card-progress-text', { progress: progress * 100 })}
    -
    -
    -
    + {/* Stats: AOI map + progress bar + history chart */} +
    +
    +
    + {aoiDownload && ( +
    + +
    + )} +
    +
    +
    +
    {t('project-progress-label')}
    +
    {t('project-card-progress-text', { progress: progress * 100 })}
    +
    +
    +
    +
    +
    +
    + +
    +
    + {lastFetched && ( +
    {lastFetched}
    + )}
    -
    -
    -

    {t('data-section-heading')}

    -

    {t('data-section-description')}

    -
    - {cards.map((card) => - card.asset ? ( -
    -

    {card.heading}

    -

    {card.description}

    -
    - {card.asset.mimetype} - {downloadSizeText(card.asset.fileSize)} + {/* Downloads */} +
    +
    +
    +

    + {t('data-section-heading')} +

    +
    + {t('data-section-description')} +
    +
    +
    + {cards.map((card) => + card.asset ? ( +
    +
    +
    +
    +
    + {card.heading} +
    +
    +
    {card.description}
    +
    +
    +
    + {card.asset.mimetype} +
    {downloadSizeText(card.asset.fileSize)}
    +
    + {card.asset.file?.url && ( + + {t('download')} + + )} +
    +
    +
    + ) : null, + )} + {aoiDownload && ( +
    +
    +
    +
    +
    + {t('area-of-interest-title')} +
    +
    +
    {t('area-of-interest-description')}
    +
    +
    +
    + {aoiDownload.mimetype} +
    {downloadSizeText(aoiDownload.fileSize)}
    +
    + + {t('download')} + +
    - {card.asset.file?.url && ( - - {t('download')} - - )} -
    - ) : null, - )} - {aoiDownload && ( -
    -

    {t('area-of-interest-title')}

    -

    {t('area-of-interest-description')}

    -
    - {aoiDownload.mimetype} - {downloadSizeText(aoiDownload.fileSize)}
    - - {t('download')} - -
    - )} + )} +
    -
    -

    {t('license-section-heading')}

    -

    {t('license-section-description-1')}

    -

    {t('license-section-description-2')}

    + {/* License */} +
    +
    +
    +

    + {t('license-section-heading')} +

    + {/* Next passed the license body as Section's `description` node, so the + licenseDescription div nests inside the section description div. */} +
    +
    +

    {t('license-section-description-1')}

    +

    {t('license-section-description-2')}

    +
    +
    +
    +
    diff --git a/src/pages/[locale]/projects/styles.module.css b/src/pages/[locale]/projects/styles.module.css new file mode 100644 index 00000000..e2563137 --- /dev/null +++ b/src/pages/[locale]/projects/styles.module.css @@ -0,0 +1,325 @@ +.project { + display: flex; + flex-direction: column; + gap: var(--spacing-medium); + + .active { + color: var(--color-active); + } + + .finished { + color: var(--color-finished); + } + + .hero { + .mainContent { + padding: var(--spacing-medium); + } + + .heroDescription { + display: flex; + flex-direction: column; + gap: var(--spacing-large); + + .topTags { + display: flex; + gap: var(--spacing-small); + + >* { + padding: var(--spacing-tiny) var(--spacing-small); + font-size: var(--font-size-medium); + } + } + + .bottomTags { + display: flex; + flex-direction: column; + gap: var(--spacing-extra-small); + } + + .heroTag { + padding: 0; + color: var(--color-text-on-dark-light); + font-size: var(--font-size-medium); + } + } + } + + .illustration { + width: 30rem; + height: 28rem; + + @media screen and (width <= 840px) { + width: 24rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + } + } + + .statsContainer { + gap: var(--spacing-small); + } + + .statsSection { + .lastFetchedContainer { + display: flex; + justify-content: flex-end; + font-size: var(--font-size-small); + } + + .content { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr)); + + @media screen and (width <= 36rem) { + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + } + + @media screen and (width <= 30rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + + .stats { + display: grid; + gap: var(--spacing-large); + grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); + + @media screen and (width <= 30rem) { + grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr)); + } + } + + .mapContainer { + border-radius: var(--border-radius-medium); + height: 32rem; + + .projectsMap { + border: var(--width-separator-thin) solid var(--color-separator); + border-radius: var(--border-radius-medium); + width: 100%; + height: 100%; + } + } + + .rightContainer { + display: flex; + flex-direction: column; + gap: var(--spacing-large); + + .chartContainer { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + border: var(--width-separator-thin) solid var(--color-separator); + border-radius: var(--border-radius-medium); + padding: var(--spacing-large); + height: 100%; + min-height: 20rem; + gap: var(--spacing-small); + + .timelineChartContainer { + width: 100%; + height: 100%; + + .timelineChart { + width: 100%; + height: 100%; + + --path-stroke-width: 1pt; + + .stopStart { + stop-color: var(--color-accent); + stop-opacity: 0.5; + } + + .stopEnd { + stop-color: var(--color-accent); + stop-opacity: 0; + } + + .path { + stroke: var(--color-accent); + stroke-width: 2pt; + fill: none; + } + + .yAxisTickText { + text-anchor: middle; + font-size: var(--font-size-extra-small); + } + + .xAxisTickText { + text-anchor: middle; + transition: var(--duration-transition-medium) ease-in-out transform; + font-size: var(--font-size-extra-small); + } + + .xAxisGridLine, + .yAxisGridLine { + stroke: var(--color-text); + stroke-dasharray: 4 4; + stroke-opacity: 0.2; + transition: var(--duration-transition-medium) ease-in-out stroke-opacity; + } + } + } + + .emptyChart { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + opacity: 0.5; + height: 100%; + gap: var(--spacing-medium); + + .chartIcon { + font-size: 10rem; + } + + .message { + font-size: var(--font-size-large); + } + } + } + + .progressBar { + display: flex; + align-self: stretch; + flex-direction: column; + border: var(--width-separator-thin) solid var(--color-separator); + border-radius: var(--border-radius-medium); + padding: var(--spacing-large); + gap: var(--spacing-super-small); + + .progressLabel { + display: flex; + align-items: center; + justify-content: space-between; + } + + .track { + border-radius: 0.25rem; + background-color: var(--color-separator); + height: 0.5rem; + + .progress { + border-radius: 0.25rem; + background-color: var(--color-background-bar); + height: 100%; + } + } + } + } + } + } + + .overviewSection { + .overviewContent { + display: flex; + justify-content: space-between; + gap: var(--spacing-enourmous); + + .content { + display: flex; + flex-direction: column; + gap: var(--spacing-large); + + .description { + flex-grow: 1; + max-width: 50rem; + font-size: var(--font-size-medium); + } + } + + .stats { + display: flex; + align-self: center; + flex-direction: column; + justify-content: center; + padding: var(--spacing-mega-large); + width: 20rem; + + .figure { + align-self: flex-end; + } + + .largeFigure { + --size: 10rem; + --border-size: 5rem; + + align-self: flex-start; + } + } + + @media screen and (width <= 720px) { + flex-direction: column; + justify-content: center; + + .stats { + .largeFigure { + --size: 8rem; + --border-size: 4rem; + } + } + } + } + } + + .downloadSection { + .downloadDescription { + max-width: 60rem; + text-align: center; + font-size: var(--font-size-medium); + } + + .urlList { + display: flex; + flex-direction: column; + gap: var(--spacing-large); + + .downloadCard { + display: flex; + align-items: flex-end; + justify-content: flex-end; + gap: var(--spacing-large); + + .fileDetails { + display: flex; + align-items: center; + gap: var(--spacing-extra-small); + } + + .link { + display: flex; + align-items: center; + justify-content: center; + font-size: var(--font-size-medium); + gap: var(--spacing-extra-small); + } + + @media screen and (width <= 720px) { + align-items: unset; + flex-direction: column; + } + } + } + } + + .licenseDescription { + display: flex; + flex-direction: column; + max-width: 60rem; + text-align: center; + gap: var(--spacing-large); + font-size: var(--font-size-medium); + } + + @media screen and (width <= 720px) { + gap: unset; + } +} diff --git a/src/pages/[locale]/styles.module.css b/src/pages/[locale]/styles.module.css new file mode 100644 index 00000000..e6209c81 --- /dev/null +++ b/src/pages/[locale]/styles.module.css @@ -0,0 +1,329 @@ +.home { + display: flex; + flex-direction: column; + padding-bottom: var(--spacing-gigantic); + gap: var(--spacing-gigantic); + + .hero { + .screenshot { + width: 30rem; + height: 28rem; + + @media screen and (width <= 840px) { + width: 24rem; + height: 24rem; + } + + @media screen and (width <= 720px) { + width: 80vw; + height: 20rem; + } + } + } + + .mobilize { + .content { + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: center; + gap: var(--spacing-super-large); + + .pictures { + display: flex; + align-items: center; + flex-basis: 32rem; + flex-wrap: wrap; + justify-content: flex-start; + gap: var(--spacing-medium); + + .imageContainer { + position: relative; + + .image { + object-position: center right; + object-fit: cover; + border-radius: var(--border-radius-medium); + } + } + + .single { + width: 14rem; + height: 18rem; + } + + .double { + width: 14rem; + height: 14rem; + + .image { + object-position: center center; + object-fit: cover; + border-radius: var(--border-radius-medium); + } + } + + .images { + display: flex; + flex-direction: column; + gap: var(--spacing-medium); + } + } + + .descriptionContainer { + display: flex; + flex-basis: calc(100% - 32rem - var(--spacing-super-large)); + flex-direction: column; + gap: var(--spacing-medium); + + .description { + max-width: 100%; + font-size: var(--font-size-medium); + } + + .infoBoxContainer { + display: grid; + gap: var(--spacing-medium); + grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); + } + } + + @media screen and (width <= 840px) { + flex-direction: column; + + .pictures { + justify-content: center; + } + + .descriptionContainer { + flex-basis: 100%; + + .infoBoxContainer { + justify-content: center; + } + } + } + } + } + + .missionTypes { + .content { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + + @media screen and (width <= 20rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + + .missionType { + font-size: var(--font-size-medium); + + .missionImage { + height: 20rem; + } + + .beforeAfterContainer { + display: flex; + flex-direction: column; + gap: var(--spacing-small); + + .beforeAfterImageWrapper { + height: calc(50% - var(--spacing-small) / 2); + + .beforeImage { + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + object-position: top center; + object-fit: cover; + } + + .afterImage { + object-position: top center; + object-fit: cover; + } + } + } + } + } + } + + .startMapswiping { + .content { + display: flex; + gap: var(--spacing-mega-large); + + .startMapswipingDescription { + font-size: var(--font-size-large); + } + + .download { + display: flex; + flex-basis: calc(50% - var(--spacing-mega-large) / 2); + flex-direction: column; + justify-content: center; + border-radius: var(--border-radius-medium); + background-color: var(--color-background-brand-light); + padding: var(--spacing-extra-large) var(--spacing-gigantic); + gap: var(--spacing-extra-large); + text-align: center; + + .linksContainer { + display: flex; + flex-direction: column; + justify-content: center; + gap: var(--spacing-small); + + .buttonsContainer { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--spacing-large); + + .buttonImageContainer { + position: relative; + width: 12rem; + height: 4rem; + + .image { + object-position: center center; + object-fit: contain; + border-radius: var(--border-radius-medium); + } + } + } + + .downloadLinksContainer { + display: flex; + justify-content: center; + gap: var(--spacing-medium); + + .downloadLink { + color: var(--color-link); + } + } + } + } + + .getInvolved { + display: flex; + align-items: center; + flex-basis: calc(50% - var(--spacing-mega-large) / 2); + flex-direction: column; + border-radius: var(--border-radius-medium); + background-color: var(--color-background-accent-light); + padding: var(--spacing-extra-large) var(--spacing-gigantic); + gap: var(--spacing-extra-large); + text-align: center; + } + + @media screen and (width <= 720px) { + flex-direction: column; + } + } + } + + .recentNewsAndUpdates { + .content { + display: grid; + gap: var(--spacing-extra-large); + grid-template-columns: minmax(20rem, 2fr) minmax(20rem, 3fr); + + .blogItem { + .tag { + padding: var(--spacing-ultra-small) 0; + } + + .cardContent { + display: flex; + flex-direction: column; + gap: var(--spacing-small); + + .blogDescription { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .link { + color: var(--color-accent); + font-size: var(--font-size-medium); + font-weight: var(--font-weight-bold); + } + } + } + + .firstGrid { + grid-row: auto / span 2; + } + + .sectionDescription { + grid-column: 1 / -1; + + .seeMoreLink { + display: flex; + align-items: center; + justify-content: flex-end; + color: var(--color-accent); + font-size: var(--font-size-medium); + font-weight: var(--font-weight-bold); + gap: var(--spacing-super-small); + } + } + + @media screen and (width <= 800px) { + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + + .firstGrid { + grid-row: unset; + } + } + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } + } + } + + .partners { + display: flex; + flex-direction: column; + + .content { + display: flex; + align-items: center; + flex-direction: column; + gap: var(--spacing-super-large); + + .missingMapsLogo { + width: 12rem; + height: 4rem; + } + + .partnersDescription { + max-width: var(--width-heading-max); + text-align: center; + font-size: var(--font-size-medium); + } + + .partnerLogos { + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: center; + gap: var(--spacing-mega-large); + + .partnerLogo { + width: 8rem; + height: 4rem; + } + } + } + } + + @media screen and (width <= 720px) { + gap: unset; + } +} diff --git a/src/styles/global.css b/src/styles/global.css deleted file mode 100644 index 6e9c71ed..00000000 --- a/src/styles/global.css +++ /dev/null @@ -1,471 +0,0 @@ -/* Design tokens ported from the Next app's src/styles/variables.css (verbatim), - plus the two font-family vars that Next injected at runtime from next/font - (Lato body, DM Sans headings). Fonts are provided via @fontsource (see - BaseLayout.astro), so the family names are literal here. */ -:root { - --font-family-lato: 'Lato', sans-serif; - --font-family-dm-sans: 'DM Sans', sans-serif; - --multiplier: 1.2599; /* Major third scale */ - --font-size-base: 1.2rem; - --spacing-base: 1.125rem; - --color-text: #5B5B5B; - --color-link: #0060C9; - --color-heading: #000; - --color-heading-on-dark: #fff; - --color-text-on-dark: rgb(255 255 255 / 100%); - --color-text-on-dark-light: rgb(255 255 255 / 80%); - --color-brand: #0F193F; - --color-text-brand: var(--color-brand); - --color-accent: rgb(170 190 93 / 100%); - --color-accent-dark: #8a9b49; - --color-accent-light: rgb(170 190 93 / 48%); - --color-complement: #fff6ef; - --color-brand-dark: #020e3b; - --color-foreground: #fff; - --color-finished: #AABE5D; - --color-active: #f59143; - --color-border-light: #d0d0d0; - --color-border: #000; - --color-background-bar: #60667d; - --color-background: var(--color-brand); - --color-background-brand-light: #f6f8ff; - --color-background-accent-light: #f5f5f5; - --color-background-leaflet: #d4dadc; - --color-separator: rgb(0 0 0 / 10%); - --width-page-max: 80rem; - --width-heading-max: 50rem; - --width-separator-thin: 1pt; - --font-weight-light: 300; - --font-weight-normal: 400; - --font-weight-medium: 400; - --font-weight-semi-bold: 500; - --font-weight-bold: 600; - --border-radius-small: 0.2rem; - --border-radius-medium: 0.5rem; - --border-radius-large: 1rem; - --box-shadow-medium: 0 2pt 10pt -4pt rgb(0 0 0 / 30%); - --font-size-super-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); - --font-size-extra-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier))); - --font-size-small: calc(var(--font-size-base) / var(--multiplier)); - --font-size-medium: var(--font-size-base); - --font-size-large: calc(var(--font-size-base) * var(--multiplier)); - --font-size-extra-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier)); - --font-size-super-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --font-size-mega-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --font-size-gigantic: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-tiny: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-ultra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-super-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); - --spacing-extra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier))); - --spacing-small: calc(var(--spacing-base) / var(--multiplier)); - --spacing-medium: var(--spacing-base); - --spacing-large: calc(var(--spacing-base) * var(--multiplier)); - --spacing-extra-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier)); - --spacing-super-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-mega-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-gigantic: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); - --spacing-enourmous: calc(var(--spacing-gigantic) * var(--multiplier)); - - /* Kept for backward-compat with the already-ported project/data/blog pages, - whose pragmatic classes below reference --color-primary. */ - --color-primary: #0d1136; -} - -/* Base element styles ported from Next's src/styles/globals.css. */ -* { box-sizing: border-box; line-height: 1.5; } -html { margin: 0; padding: 0; } - -body { - margin: 0; - padding: 0; - min-height: 100vh; - color: var(--color-text); - font-family: var(--font-family-lato); - font-weight: var(--font-weight-medium); - font-size: 100%; -} -a { text-decoration: none; color: inherit; } -p { margin: 0; } -h1, h2, h3, h4, h5, h6 { margin: 0; font-family: var(--font-family-dm-sans); } - -/* --------------------------------------------------------------------------- - Pragmatic classes for the already-ported project / data / blog pages. - Kept intact (only re-scoped color var) so those pages don't regress. - New pages (home / get-involved / privacy / 404) use faithfully-ported, - component-scoped styles instead (see below + per-page \3c style>). ---------------------------------------------------------------------------- */ -.project { max-width: 1080px; margin: 0 auto; padding: 1.5rem; } -.hero { display: flex; gap: 2rem; flex-wrap: wrap; align-items: flex-start; } -.hero .heroMain { flex: 1 1 320px; } -.hero h1 { font-size: 2rem; margin: 0 0 0.5rem; } -.tags { display: flex; gap: 0.5rem; flex-wrap: wrap; margin: 0.5rem 0; } - -.tag { - display: inline-flex; align-items: center; gap: 0.35rem; - background: #f2f2f2; border-radius: 999px; padding: 0.2rem 0.7rem; font-size: 0.85rem; -} -.illustration { max-width: 320px; width: 100%; border-radius: 8px; } -.section { margin-top: 2.5rem; } -.section h2 { font-size: 1.4rem; } -.stats { display: flex; gap: 1.5rem; margin-top: 1rem; } -.figure { display: flex; flex-direction: column; align-items: center; } -.figure .value { font-size: 2rem; font-weight: 700; color: var(--color-accent); } -.progressBar { margin: 1rem 0; } -.track { background: #eee; border-radius: 999px; height: 10px; overflow: hidden; } -.progress { background: var(--color-accent); height: 100%; } -.mapContainer { height: 320px; border-radius: 8px; overflow: hidden; margin: 1rem 0; } -.urlList { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } -.card { border: 1px solid #eee; border-radius: 8px; padding: 1rem; } -.card h3 { margin-top: 0; font-size: 1.05rem; } -.fileDetails { display: flex; gap: 0.5rem; align-items: center; margin: 0.5rem 0; font-size: 0.85rem; color: #666; } -.link { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--color-primary); font-weight: 600; text-decoration: none; } -.link:hover { text-decoration: underline; } - -/* =========================================================================== - Shared chrome + design-system component styles, faithfully ported from the - Next app's CSS modules (Navbar, Footer, Page, Hero, Section, Card, KeyFigure, - Heading, Link, CenteredCard). Class names are `ms-`/component-prefixed to - avoid colliding with the pragmatic classes above used by earlier pages. - =========================================================================== */ - -/* Page shell (Page/styles.module.css) */ -.ms-page { display: flex; flex-direction: column; min-height: 100vh; } -.ms-page .ms-main { flex-grow: 1; } -.ms-navbar, .ms-footer { flex-shrink: 0; } - -/* Navbar (Navbar/styles.module.css) */ -.ms-navbar { - position: relative; - z-index: 2; - background-color: var(--color-background); - color: var(--color-text-on-dark); -} - -.ms-navbar .ms-navbar-content { - display: flex; - position: relative; - align-items: center; - margin: auto; - background-color: var(--color-background); - padding: var(--spacing-medium); - max-width: var(--width-page-max); - gap: var(--spacing-medium); -} - -.ms-navbar .ms-logo { - position: relative; - flex-shrink: 0; - width: 10rem; - height: 2rem; - object-fit: contain; - object-position: center left; -} -.ms-navbar .ms-logo img { width: 100%; height: 100%; object-fit: contain; object-position: center left; } - -.ms-navbar .ms-routes { - display: flex; - place-content: center flex-end; - flex-grow: 1; - flex-wrap: wrap; - text-align: center; - gap: var(--spacing-medium); -} - -.ms-navbar .ms-routes .ms-link { - border-bottom: var(--width-separator-thin) solid transparent; - font-size: var(--font-size-medium); - font-weight: var(--font-weight-semi-bold); -} -.ms-navbar .ms-routes .ms-link.ms-active { border-bottom-color: var(--color-accent); } -.ms-navbar .ms-routes .ms-link:hover { border-bottom-color: var(--color-accent); text-decoration: none; } -.ms-navbar .ms-right-container { display: flex; align-items: center; gap: var(--spacing-medium); } - -.ms-navbar .ms-dropdown { - display: flex; - align-items: center; - border: var(--width-separator-thin) solid var(--color-text-on-dark); - border-radius: var(--border-radius-medium); - padding: var(--spacing-tiny) var(--spacing-extra-small); - text-transform: uppercase; - color: var(--color-text-on-dark); - font-size: var(--font-size-small); - gap: var(--spacing-tiny); - background: transparent; - cursor: pointer; -} -.ms-navbar .ms-current-locale { font-size: var(--font-size-small); } - -.ms-navbar .ms-language-list { - display: none; - position: absolute; - right: 0; - flex-direction: column; - background-color: var(--color-foreground); - color: var(--color-text); - box-shadow: var(--box-shadow-medium); - border-radius: var(--border-radius-medium); - overflow: hidden; - z-index: 3; - min-width: 10rem; -} -.ms-navbar .ms-language-wrap { position: relative; } - -.ms-navbar .ms-language-wrap:hover .ms-language-list, -.ms-navbar .ms-language-wrap:focus-within .ms-language-list { display: flex; } - -.ms-navbar .ms-language { - padding: var(--spacing-ultra-small) var(--spacing-medium); - color: var(--color-text); - font-size: var(--font-size-small); -} - -.ms-navbar .ms-language.ms-active-language { - background-color: var(--color-background-brand-light); - color: var(--color-text); - font-weight: var(--font-weight-bold); -} -.ms-navbar .ms-language:hover { background-color: var(--color-background-brand-light); color: var(--color-text); } -.ms-navbar .ms-menu { display: none; } - -@media screen and (width <= 720px) { - .ms-navbar .ms-navbar-content { justify-content: space-between; } - - .ms-navbar .ms-routes { - display: none; - position: absolute; - top: 100%; - left: 0; - flex-direction: column; - background-color: var(--color-brand); - padding: var(--spacing-large); - width: 100%; - } -} - -/* Footer (Footer/styles.module.css) */ -.ms-footer { - display: flex; - flex-direction: column; - background-color: var(--color-brand); - min-height: 20rem; - color: var(--color-text-on-dark); -} -.ms-footer .ms-footer-heading { color: var(--color-heading-on-dark); font-weight: var(--font-weight-semi-bold); } - -.ms-footer .ms-footer-top { - display: flex; - flex-grow: 1; - flex-wrap: wrap; - justify-content: space-between; - margin: 0 auto; - padding: var(--spacing-mega-large) var(--spacing-large); - max-width: var(--width-page-max); - gap: var(--spacing-mega-large); -} -.ms-footer .ms-footer-section { display: flex; flex-basis: 24rem; flex-direction: column; gap: var(--spacing-small); } -.ms-footer .ms-footer-section.ms-mid { flex-basis: 12rem; } -.ms-footer .ms-footer-links { display: flex; flex-direction: column; gap: var(--spacing-super-small); } -.ms-footer .ms-social-links { display: flex; flex-wrap: wrap; gap: var(--spacing-extra-small); } -.ms-footer .ms-footer-bottom { background-color: var(--color-brand-dark); } - -.ms-footer .ms-footer-bottom-content { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: space-between; - margin: 0 auto; - padding: 0 var(--spacing-large); - max-width: var(--width-page-max); -} -.ms-footer .ms-footer-left { padding: var(--spacing-medium) 0; } -.ms-footer .ms-footer-mid { display: flex; align-items: flex-end; } -.ms-footer .ms-footer-mid .ms-uptime-logo { margin-bottom: 2px; width: 7rem; height: 1rem; } -.ms-footer .ms-footer-right { display: flex; padding: var(--spacing-medium) 0; gap: var(--spacing-medium); } -.ms-footer a:hover { text-decoration: underline; } - -.ms-icon-link { - display: inline-flex; - align-items: center; - border-radius: var(--border-radius-medium); - background-color: rgb(0 0 0 / 20%); - padding: var(--spacing-super-small) var(--spacing-extra-small); - line-height: 1; - color: var(--color-text-on-dark); - font-size: var(--font-size-large); -} -.ms-icon-link:hover { background-color: var(--color-accent); text-decoration: none; } -.ms-icon-link svg { width: 1em; height: 1em; } - -/* Heading (Heading/styles.module.css) */ -.ms-h { margin: 0; color: var(--color-heading); font-weight: var(--font-weight-bold); } -.ms-h.ms-normal { font-family: var(--font-family-lato); font-weight: var(--font-weight-normal); } -.ms-h.ms-super-large { font-size: var(--font-size-gigantic); } -.ms-h.ms-extra-large { font-size: var(--font-size-mega-large); } -.ms-h.ms-large { font-size: var(--font-size-super-large); } -.ms-h.ms-medium { font-size: var(--font-size-extra-large); } -.ms-h.ms-small { font-size: var(--font-size-large); } -.ms-h.ms-extra-small { font-size: var(--font-size-medium); } - -/* Link / button variants (Link/styles.module.css) */ -.ms-btn, .ms-btn-transparent, .ms-underline { display: inline-block; transition: 0.2s all ease-in-out; } - -.ms-btn { - border-radius: var(--border-radius-medium); - background-color: var(--color-accent-dark); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-text-on-dark); - font-size: var(--font-size-medium); -} -.ms-btn:hover { background-color: var(--color-accent); text-decoration: none; } - -.ms-btn-transparent { - border: var(--width-separator-thin) solid var(--color-accent-dark); - border-radius: var(--border-radius-medium); - padding: var(--spacing-super-small) var(--spacing-medium); - color: var(--color-accent-dark); - font-size: var(--font-size-medium); -} -.ms-btn-transparent:hover { border-color: var(--color-accent); color: var(--color-accent); text-decoration: none; } -.ms-underline { color: var(--color-link); } -.ms-underline:hover { text-decoration: underline; } -.ms-text-link:hover { text-decoration: underline; } - -/* Hero (Hero/styles.module.css) */ -.ms-hero { - --hero-min-height: 24rem; - - display: flex; - position: relative; - flex-direction: column; - z-index: 0; - min-height: var(--hero-min-height); - overflow: hidden; - color: var(--color-text-on-dark); -} -.ms-hero .ms-hero-section { flex-shrink: 0; background-color: var(--color-background); width: 100%; } - -.ms-hero .ms-hero-main { - display: flex; - position: relative; - flex-grow: 1; - justify-content: center; - margin: 0 auto; - padding: 6rem var(--spacing-medium) var(--spacing-medium) var(--spacing-medium); - width: 100%; - max-width: var(--width-page-max); - gap: var(--spacing-super-large); -} - -.ms-hero .ms-hero-left { - display: flex; - flex-direction: column; - gap: var(--spacing-extra-large); - padding-top: var(--spacing-mega-large); - max-width: 40rem; -} -.ms-hero .ms-hero-left .ms-h { color: var(--color-heading-on-dark); } -.ms-hero .ms-hero-description { font-size: var(--font-size-extra-large); } -.ms-hero .ms-hero-actions { display: flex; flex-wrap: wrap; gap: var(--spacing-medium); } -.ms-hero .ms-hero-right { display: flex; flex-grow: 1; justify-content: flex-end; } -.ms-hero .ms-hero-right img, .ms-hero .ms-hero-right video { max-width: 100%; height: auto; } - -.ms-hero .ms-angled-background { - border-width: 0 100vw 6rem 0; - border-style: solid; - border-color: transparent var(--color-background) transparent transparent; - width: 0; height: 0; -} -.ms-hero.ms-hero-centered .ms-hero-left { max-width: 50rem; text-align: center; align-items: center; } - -@media screen and (width <= 720px) { - .ms-hero .ms-hero-main { flex-direction: column; padding: var(--spacing-medium); } - .ms-hero .ms-hero-right { align-self: center; } -} - -/* Section (Section/styles.module.css) */ -.ms-section { width: 100%; } -.ms-section.ms-alt-bg { background-color: var(--color-background-brand-light); } - -.ms-section .ms-section-container { - display: flex; - flex-direction: column; - margin: 0 auto; - padding: var(--spacing-enourmous) var(--spacing-super-large); - width: 100%; - max-width: var(--width-page-max); - gap: var(--spacing-enourmous); -} -.ms-section .ms-section-heading-wrap { display: flex; flex-direction: column; gap: var(--spacing-large); } -.ms-section .ms-section-heading { align-self: center; max-width: var(--width-heading-max); text-align: center; } -.ms-section .ms-section-description { align-self: center; max-width: var(--width-heading-max); text-align: center; font-size: var(--font-size-medium); } -.ms-section .ms-section-actions { display: flex; justify-content: center; } - -/* Card (Card/styles.module.css) */ -.ms-card { - display: flex; - flex-direction: column; - transition: .3s box-shadow ease-in-out; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - background-color: var(--color-foreground); -} -.ms-card .ms-card-cover { flex-shrink: 0; width: 100%; height: 16rem; overflow: hidden; } - -.ms-card .ms-card-cover img { - width: 100%; height: 100%; object-fit: cover; - border-top-left-radius: var(--border-radius-medium); - border-top-right-radius: var(--border-radius-medium); -} -.ms-card .ms-card-cover.ms-before-after { display: flex; } -.ms-card .ms-card-cover.ms-before-after img { object-fit: contain; } - -.ms-card .ms-card-content { - display: flex; flex-direction: column; flex-grow: 1; - padding: var(--spacing-extra-large); gap: var(--spacing-small); -} -.ms-card .ms-card-header { display: flex; align-items: center; gap: var(--spacing-extra-small); } -.ms-card .ms-card-header .ms-h { flex-grow: 1; } -.ms-card .ms-card-icon { width: var(--font-size-extra-large); height: var(--font-size-extra-large); color: var(--color-accent-dark); flex-shrink: 0; } - -@media screen and (width >= 720px) { - .ms-card.ms-cover-side { flex-direction: row; } - .ms-card.ms-cover-side .ms-card-cover { width: 14rem; height: 16rem; } - .ms-card.ms-cover-side .ms-card-cover img { border-radius: 0; } -} -.ms-card.ms-borderless { border: 0; gap: var(--spacing-medium); } -.ms-card.ms-borderless .ms-card-cover img { border-radius: var(--border-radius-medium); } -.ms-card.ms-borderless .ms-card-content { padding: 0; } - -/* KeyFigure (KeyFigure/styles.module.css) */ -.ms-keyfigure { - display: flex; align-items: center; flex-direction: column; justify-content: center; - gap: var(--spacing-extra-small); - border: var(--width-separator-thin) solid var(--color-accent-light); - border-radius: 0.5rem; - padding: var(--spacing-large); -} - -.ms-keyfigure .ms-keyfigure-value { - display: flex; align-items: center; justify-content: center; - color: var(--color-heading); font-size: var(--font-size-extra-large); - font-weight: var(--font-weight-bold); gap: var(--spacing-super-small); -} -.ms-keyfigure .ms-keyfigure-plus { color: var(--color-accent); font-size: var(--font-size-large); } -.ms-keyfigure .ms-keyfigure-label { color: var(--color-heading); font-size: var(--font-size-medium); } - -/* CenteredCard (CenteredCard/styles.module.css) */ -.ms-centered-card { - display: flex; align-items: center; flex-direction: column; justify-content: center; - border: var(--width-separator-thin) solid var(--color-separator); - border-radius: var(--border-radius-medium); - padding: var(--spacing-extra-large) var(--spacing-large); - text-align: center; gap: var(--spacing-medium); -} - -.ms-centered-card .ms-cc-title { - max-width: 32rem; text-align: center; color: var(--color-text-brand); - font-family: var(--font-family-dm-sans); - font-size: var(--font-size-medium); font-weight: var(--font-weight-bold); -} -.ms-centered-card .ms-cc-description { max-width: 28rem; text-align: center; } -.ms-centered-card .ms-cc-actions { margin: var(--spacing-large) 0; } diff --git a/src/styles/globals.css b/src/styles/globals.css new file mode 100644 index 00000000..eeebd1da --- /dev/null +++ b/src/styles/globals.css @@ -0,0 +1,46 @@ +* { + box-sizing: border-box; + line-height: 1.5; +} + +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 0; + min-height: 100vh; + color: var(--color-text); + font-family: var(--font-family-lato), sans-serif; + font-weight: var(--font-weight-medium); +} + +a { + text-decoration: none; + color: inherit; +} + +p { + margin: 0; +} + +h1, h2, h3, h4, h5, h6 { + margin: 0; + font-family: var(--font-family-dm-sans), sans-serif; +} + +::-webkit-scrollbar { + background-color: var(--color-background-scrollbar); + width: var(--width-scrollbar); + height: var(--width-scrollbar); +} + +::-webkit-scrollbar-track { + background-color: var(--color-background-scrollbar); +} + +::-webkit-scrollbar-thumb { + background-color: var(--color-foreground-scrollbar); +} diff --git a/src/styles/variables.css b/src/styles/variables.css new file mode 100644 index 00000000..af0d2af2 --- /dev/null +++ b/src/styles/variables.css @@ -0,0 +1,77 @@ +:root { + --multiplier: 1.2599; /* Major third scale */ + --font-size-base: 1.2rem; + --spacing-base: 1.125rem; + --color-text: #5B5B5B; + --color-link: #0060C9; + --color-heading: #000; + --color-heading-on-dark: #fff; + --color-text-on-dark: rgb(255 255 255 / 100%); + --color-text-on-dark-light: rgb(255 255 255 / 80%); + --color-brand: #0F193F; + --color-text-brand: var(--color-brand); + --color-accent: rgb(170 190 93 / 100%); + --color-accent-dark: #8a9b49; + --color-accent-light: rgb(170 190 93 / 48%); + --color-complement: #fff6ef; + --color-brand-dark: #020e3b; + --color-foreground: #fff; + --color-finished: #AABE5D; + --color-active: #f59143; + --color-border-light: #d0d0d0; + --color-border: #000; + --color-background-bar: #60667d; + --color-background: var(--color-brand); + --color-background-brand-light: #f6f8ff; + --color-background-accent-light: #f5f5f5; + + /* NOTE: this is background tile color of leaflet */ + --color-background-leaflet: #d4dadc; + --color-separator: rgb(0 0 0 / 10%); + --width-page-max: 80rem; + --width-heading-max: 50rem; + --width-separator-thin: 1pt; + --font-weight-light: 300; + --font-weight-medium: 400; + --font-weight-semi-bold: 500; + --font-weight-bold: 600; + --border-radius-small: 0.2rem; + --border-radius-medium: 0.5rem; + --border-radius-large: 1rem; + --box-shadow-medium: 0 2pt 10pt -4pt rgb(0 0 0 / 30%); + + /* Font size */ + --font-size-super-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); + --font-size-extra-small: calc(var(--font-size-base) / (var(--multiplier) * var(--multiplier))); + --font-size-small: calc(var(--font-size-base) / var(--multiplier)); + --font-size-medium: var(--font-size-base); + --font-size-large: calc(var(--font-size-base) * var(--multiplier)); + --font-size-extra-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier)); + --font-size-super-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --font-size-mega-large: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --font-size-gigantic: calc(var(--font-size-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + + /* Spacing */ + --spacing-tiny: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-ultra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-super-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier) * var(--multiplier))); + --spacing-extra-small: calc(var(--spacing-base) / (var(--multiplier) * var(--multiplier))); + --spacing-small: calc(var(--spacing-base) / var(--multiplier)); + --spacing-medium: var(--spacing-base); + --spacing-large: calc(var(--spacing-base) * var(--multiplier)); + --spacing-extra-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier)); + --spacing-super-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-mega-large: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-gigantic: calc(var(--spacing-base) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier) * var(--multiplier)); + --spacing-enourmous: calc(var(--spacing-gigantic) * var(--multiplier)); + --width-scrollbar: 1rem; + --radius-scrollbar-border: 0.25rem; + --color-foreground-scrollbar: #ccc; + + /* Astro adaptation: the Next app injected these two variables at runtime + * via next/font (Lato body, DM Sans headings). Fonts now come from + * @fontsource (imported in BaseLayout.astro), so the family names are + * declared literally here. Everything above is verbatim from main. */ + --font-family-lato: 'Lato'; + --font-family-dm-sans: 'DM Sans'; +} From 9cc5e449aee71a7505d0b179d2ff4f979d34e73d Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 07:53:32 +0545 Subject: [PATCH 29/52] perf(css): short hashed module class names in production Class attributes were ~22% of every page with the default pattern. --- astro.config.mjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/astro.config.mjs b/astro.config.mjs index 398b114e..ad40e57f 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -12,6 +12,16 @@ const SITE = 'https://mapswipe.org'; export default defineConfig({ site: SITE, + vite: { + css: { + modules: { + // dev keeps readable names; prod ships short hashes — class + // attributes were ~22% of every page with the default pattern + generateScopedName: + process.env.NODE_ENV === 'production' ? '[hash:base64:6]' : '[local]_[hash:base64:4]', + }, + }, + }, output: 'static', trailingSlash: 'always', build: { format: 'directory' }, From faef0281f65cdcad3af4d3285498efbf7802d9d6 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 07:57:19 +0545 Subject: [PATCH 30/52] feat(data): generate types from the backend submodule schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GraphQL documents move to scripts/graphql/*.graphql (codegen's tag plucker cannot parse interpolated templates); fetchData reads the same files at runtime and uses the generated per-operation types. generated/ is no longer committed — 'pnpm generate:type' produces it from backend/schema.graphql, no running server needed. --- .gitignore | 3 + codegen.yml | 7 +- generated/types.ts | 2955 ------------------------ package.json | 13 +- pnpm-lock.yaml | 2539 +++++++++++++++++++- scripts/fetchData.ts | 135 +- scripts/graphql/projectFields.graphql | 31 + scripts/graphql/projectScan.graphql | 10 + scripts/graphql/projectsByIds.graphql | 9 + scripts/graphql/publicProjects.graphql | 9 + scripts/graphql/restData.graphql | 6 + 11 files changed, 2548 insertions(+), 3169 deletions(-) delete mode 100644 generated/types.ts create mode 100644 scripts/graphql/projectFields.graphql create mode 100644 scripts/graphql/projectScan.graphql create mode 100644 scripts/graphql/projectsByIds.graphql create mode 100644 scripts/graphql/publicProjects.graphql create mode 100644 scripts/graphql/restData.graphql diff --git a/.gitignore b/.gitignore index 7108fbcd..676b1e66 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ npm-debug.log* # playwright test-results/ playwright-report/ + +# generated from backend/schema.graphql via `pnpm generate:type` +generated/ diff --git a/codegen.yml b/codegen.yml index 6f6d1695..9f245719 100644 --- a/codegen.yml +++ b/codegen.yml @@ -2,14 +2,9 @@ overwrite: true schema: - "./backend/schema.graphql" documents: - - "src/**/*.ts" - - "scripts/**/*.ts" - - "src/**/*.graphql" + - "scripts/graphql/*.graphql" generates: ./generated/types.ts: plugins: - "typescript" - "typescript-operations" - ./generated/schema.json: - plugins: - - "introspection" diff --git a/generated/types.ts b/generated/types.ts deleted file mode 100644 index 87b46df2..00000000 --- a/generated/types.ts +++ /dev/null @@ -1,2955 +0,0 @@ -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - AreaSqKm: any; - /** A generic type to return error messages */ - CustomErrorType: any; - /** Date (isoformat) */ - Date: any; - /** Date with time (isoformat) */ - DateTime: any; - GenericJSON: any; - /** Represents a point as `(x, y, z)` or `(x, y)`. */ - Point: any; - /** A geographical object that gets 1 or 2 LinearRing objects as external and internal rings. */ - Polygon: any; - Upload: any; -}; - -export type AoiGeometryAssetPropertyType = { - __typename?: 'AoiGeometryAssetPropertyType'; - /** Positive float value */ - area: Scalars['Float']; - bbox: Array; - center: Array; -}; - -export type AoiGeometryAssetPropertyTypeObjectImageAssetPropertyType = AoiGeometryAssetPropertyType | ObjectImageAssetPropertyType; - -export type AppEnumCollection = { - __typename?: 'AppEnumCollection'; - AssetMimetypeEnum: Array; - AssetTypeEnum: Array; - ContributorUserGroupMembershipLogActionEnum: Array; - FirebasePushStatusEnum: Array; - GlobalExportAssetTypeEnum: Array; - IconEnum: Array; - MappingSessionClientTypeEnum: Array; - OverlayLayerTypeEnum: Array; - ProjectAssetExportTypeEnum: Array; - ProjectAssetInputTypeEnum: Array; - ProjectProcessingStatusEnum: Array; - ProjectProgressStatusEnum: Array; - ProjectStatusEnum: Array; - ProjectTypeEnum: Array; - RasterTileServerNameEnum: Array; - SubGridSizeEnum: Array; - TutorialAssetInputTypeEnum: Array; - TutorialInformationPageBlockTypeEnum: Array; - TutorialStatusEnum: Array; - ValidateImageSourceTypeEnum: Array; - ValidateObjectSourceTypeEnum: Array; - VectorTileServerNameEnum: Array; -}; - -export type AppEnumCollectionAssetMimetypeEnum = { - __typename?: 'AppEnumCollectionAssetMimetypeEnum'; - key: AssetMimetypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionAssetTypeEnum = { - __typename?: 'AppEnumCollectionAssetTypeEnum'; - key: AssetTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionContributorUserGroupMembershipLogActionEnum = { - __typename?: 'AppEnumCollectionContributorUserGroupMembershipLogActionEnum'; - key: ContributorUserGroupMembershipLogActionEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionFirebasePushStatusEnum = { - __typename?: 'AppEnumCollectionFirebasePushStatusEnum'; - key: FirebasePushStatusEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionGlobalExportAssetTypeEnum = { - __typename?: 'AppEnumCollectionGlobalExportAssetTypeEnum'; - key: GlobalExportAssetTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionIconEnum = { - __typename?: 'AppEnumCollectionIconEnum'; - key: IconEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionMappingSessionClientTypeEnum = { - __typename?: 'AppEnumCollectionMappingSessionClientTypeEnum'; - key: MappingSessionClientTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionOverlayLayerTypeEnum = { - __typename?: 'AppEnumCollectionOverlayLayerTypeEnum'; - key: OverlayLayerTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectAssetExportTypeEnum = { - __typename?: 'AppEnumCollectionProjectAssetExportTypeEnum'; - key: ProjectAssetExportTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectAssetInputTypeEnum = { - __typename?: 'AppEnumCollectionProjectAssetInputTypeEnum'; - key: ProjectAssetInputTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectProcessingStatusEnum = { - __typename?: 'AppEnumCollectionProjectProcessingStatusEnum'; - key: ProjectProcessingStatusEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectProgressStatusEnum = { - __typename?: 'AppEnumCollectionProjectProgressStatusEnum'; - key: ProjectProgressStatusEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectStatusEnum = { - __typename?: 'AppEnumCollectionProjectStatusEnum'; - key: ProjectStatusEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionProjectTypeEnum = { - __typename?: 'AppEnumCollectionProjectTypeEnum'; - key: ProjectTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionRasterTileServerNameEnum = { - __typename?: 'AppEnumCollectionRasterTileServerNameEnum'; - key: RasterTileServerNameEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionSubGridSizeEnum = { - __typename?: 'AppEnumCollectionSubGridSizeEnum'; - key: SubGridSizeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionTutorialAssetInputTypeEnum = { - __typename?: 'AppEnumCollectionTutorialAssetInputTypeEnum'; - key: TutorialAssetInputTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionTutorialInformationPageBlockTypeEnum = { - __typename?: 'AppEnumCollectionTutorialInformationPageBlockTypeEnum'; - key: TutorialInformationPageBlockTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionTutorialStatusEnum = { - __typename?: 'AppEnumCollectionTutorialStatusEnum'; - key: TutorialStatusEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionValidateImageSourceTypeEnum = { - __typename?: 'AppEnumCollectionValidateImageSourceTypeEnum'; - key: ValidateImageSourceTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionValidateObjectSourceTypeEnum = { - __typename?: 'AppEnumCollectionValidateObjectSourceTypeEnum'; - key: ValidateObjectSourceTypeEnum; - label: Scalars['String']; -}; - -export type AppEnumCollectionVectorTileServerNameEnum = { - __typename?: 'AppEnumCollectionVectorTileServerNameEnum'; - key: VectorTileServerNameEnum; - label: Scalars['String']; -}; - -export enum AssetMimetypeEnum { - Csv = 'CSV', - Geojson = 'GEOJSON', - Gzip = 'GZIP', - ImageGif = 'IMAGE_GIF', - ImageJpeg = 'IMAGE_JPEG', - ImagePng = 'IMAGE_PNG', - Json = 'JSON', - Plaintext = 'PLAINTEXT' -} - -export type AssetMimetypeEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export enum AssetTypeEnum { - Debug = 'DEBUG', - Export = 'EXPORT', - Input = 'INPUT', - Output = 'OUTPUT' -} - -export type AssetTypeEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export type AssetTypeSpecificInput = - { objectImage: ObjectImageAssetPropertyInput; }; - -export type BoolBaseFilterLookup = { - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; -}; - -export type CommunityFilteredStats = { - __typename?: 'CommunityFilteredStats'; - areaSwipedByProjectType: Array; - swipeByOrganizationName: Array; - swipeByProjectGeo: Array; - swipeByProjectType: Array; - swipeTimeByDate: Array; -}; - -export type CommunityStatsType = { - __typename?: 'CommunityStatsType'; - id: Scalars['ID']; - totalContributors: Scalars['Int']; - totalSwipes: Scalars['Int']; - totalUserGroups: Scalars['Int']; -}; - -export type CompareProjectPropertyInput = { - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - tileServerBProperty: ProjectRasterTileServerConfigInput; - tileServerProperty: ProjectRasterTileServerConfigInput; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type CompareProjectPropertyType = { - __typename?: 'CompareProjectPropertyType'; - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - tileServerBProperty: ProjectRasterTileServerConfig; - tileServerProperty: ProjectRasterTileServerConfig; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type CompareProjectPropertyTypeFindProjectPropertyTypeValidateProjectPropertyTypeValidateImageProjectPropertyTypeCompletenessProjectPropertyTypeStreetProjectPropertyTypeLocateProjectPropertyType = CompareProjectPropertyType | CompletenessProjectPropertyType | FindProjectPropertyType | LocateProjectPropertyType | StreetProjectPropertyType | ValidateImageProjectPropertyType | ValidateProjectPropertyType; - -export type CompareTutorialTaskPropertyInput = { - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type CompareTutorialTaskPropertyType = { - __typename?: 'CompareTutorialTaskPropertyType'; - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type CompareTutorialTaskPropertyTypeFindTutorialTaskPropertyTypeValidateTutorialTaskPropertyTypeValidateImageTutorialTaskPropertyTypeCompletenessTutorialTaskPropertyTypeStreetTutorialTaskPropertyTypeLocateTutorialTaskPropertyType = CompareTutorialTaskPropertyType | CompletenessTutorialTaskPropertyType | FindTutorialTaskPropertyType | LocateTutorialTaskPropertyType | StreetTutorialTaskPropertyType | ValidateImageTutorialTaskPropertyType | ValidateTutorialTaskPropertyType; - -export type CompletenessProjectPropertyInput = { - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - overlayTileServerProperty: ProjectOverlayTileServerConfigInput; - tileServerProperty: ProjectRasterTileServerConfigInput; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type CompletenessProjectPropertyType = { - __typename?: 'CompletenessProjectPropertyType'; - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - overlayTileServerProperty: ProjectOverlayTileServerConfig; - tileServerProperty: ProjectRasterTileServerConfig; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type CompletenessTutorialTaskPropertyInput = { - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type CompletenessTutorialTaskPropertyType = { - __typename?: 'CompletenessTutorialTaskPropertyType'; - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type ContributorSwipeStatType = { - __typename?: 'ContributorSwipeStatType'; - taskDate: Scalars['Date']; - totalSwipes: Scalars['Int']; -}; - -/** - * Model representing a private team that contributor users can be assigned to. - * - * Team membership is managed exclusively by system managers; contributor users - * cannot join or leave teams on their own. Members of a team can only access - * projects linked to that team. - */ -export type ContributorTeamFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - id?: InputMaybe; - isArchived?: InputMaybe; - name?: InputMaybe; -}; - -export type ContributorTeamOrder = { - id?: InputMaybe; - name?: InputMaybe; -}; - -/** - * Model representing a private team that contributor users can be assigned to. - * - * Team membership is managed exclusively by system managers; contributor users - * cannot join or leave teams on their own. Members of a team can only access - * projects linked to that team. - */ -export type ContributorTeamType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { - __typename?: 'ContributorTeamType'; - archivedAt?: Maybe; - archivedBy?: Maybe; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - firebaseId: Scalars['String']; - /** The latest time when resource was pushed to firebase */ - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; - id: Scalars['ID']; - isArchived: Scalars['Boolean']; - members: ContributorUserTypeOffsetPaginated; - membersCount: Scalars['Int']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - name: Scalars['String']; -}; - - -/** - * Model representing a private team that contributor users can be assigned to. - * - * Team membership is managed exclusively by system managers; contributor users - * cannot join or leave teams on their own. Members of a team can only access - * projects linked to that team. - */ -export type ContributorTeamTypeMembersArgs = { - pagination?: InputMaybe; -}; - -export type ContributorTeamTypeOffsetPaginated = { - __typename?: 'ContributorTeamTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ContributorTimeStatType = { - __typename?: 'ContributorTimeStatType'; - date: Scalars['Date']; - /** total swipe time (seconds) */ - totalSwipeTime: Scalars['Int']; -}; - -/** - * Model representing contributors synchronized from firebase. - * - * Contributor accounts are typically created in firebase and then synced into this system. - * A contributor user may or may not be linked to a corresponding user in the system. - */ -export type ContributorUserFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - /** Firebase User ID (External) */ - firebaseId?: InputMaybe; - id?: InputMaybe; - teamId?: InputMaybe; - username?: InputMaybe; -}; - -export type ContributorUserFilteredStats = ContributorUserUserGroupBaseFilterStatsQuery & { - __typename?: 'ContributorUserFilteredStats'; - areaSwipedByProjectType: Array; - id: Scalars['ID']; - swipeByDate: Array; - swipeByOrganizationName: Array; - swipeByProjectGeo: Array; - swipeByProjectType: Array; - swipeTimeByDate: Array; -}; - -/** - * Model representing a group that contributor users can join or leave. - * - * Groups are used to aggregate contributions made by users within the group, - * facilitating management and organization of collective efforts. - */ -export type ContributorUserGroupCreateInput = { - clientId: Scalars['String']; - description: Scalars['String']; - name: Scalars['String']; -}; - -/** - * Model representing a group that contributor users can join or leave. - * - * Groups are used to aggregate contributions made by users within the group, - * facilitating management and organization of collective efforts. - */ -export type ContributorUserGroupFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - id?: InputMaybe; - isArchived?: InputMaybe; - name?: InputMaybe; - userFirebaseId?: InputMaybe; -}; - -export type ContributorUserGroupFilteredStats = ContributorUserUserGroupBaseFilterStatsQuery & { - __typename?: 'ContributorUserGroupFilteredStats'; - areaSwipedByProjectType: Array; - swipeByDate: Array; - swipeByOrganizationName: Array; - swipeByProjectGeo: Array; - swipeByProjectType: Array; - swipeTimeByDate: Array; -}; - -export type ContributorUserGroupLatestStatsType = { - __typename?: 'ContributorUserGroupLatestStatsType'; - totalContributors: Scalars['Int']; - totalMappingProjects: Scalars['Int']; - /** total swipe time (seconds) */ - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; -}; - -/** Model representing membership of contributor users in contributor user groups. */ -export type ContributorUserGroupMembershipFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - id?: InputMaybe; - userGroupId?: InputMaybe; -}; - -export enum ContributorUserGroupMembershipLogActionEnum { - Join = 'JOIN', - Leave = 'LEAVE' -} - -export type ContributorUserGroupMembershipOrder = { - id?: InputMaybe; -}; - -/** Model representing membership of contributor users in contributor user groups. */ -export type ContributorUserGroupMembershipType = { - __typename?: 'ContributorUserGroupMembershipType'; - id: Scalars['ID']; - isActive: Scalars['Boolean']; - totalMappingProjects: Scalars['Int']; - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; - user: ContributorUserType; - userId: Scalars['ID']; -}; - -export type ContributorUserGroupMembershipTypeOffsetPaginated = { - __typename?: 'ContributorUserGroupMembershipTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ContributorUserGroupOrder = { - id?: InputMaybe; - name?: InputMaybe; -}; - -export type ContributorUserGroupStats = { - __typename?: 'ContributorUserGroupStats'; - filteredStats: ContributorUserGroupFilteredStats; - id: Scalars['ID']; - stats: ContributorUserGroupStatsType; - /** Stats from last 30 days */ - statsLatest: ContributorUserGroupLatestStatsType; -}; - - -export type ContributorUserGroupStatsFilteredStatsArgs = { - dateRange?: InputMaybe; -}; - -export type ContributorUserGroupStatsType = { - __typename?: 'ContributorUserGroupStatsType'; - totalAreaSwiped: Scalars['AreaSqKm']; - totalContributors: Scalars['Int']; - totalMappingProjects: Scalars['Int']; - totalOrganization: Scalars['Int']; - /** total swipe time (seconds) */ - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; -}; - -/** - * Model representing a group that contributor users can join or leave. - * - * Groups are used to aggregate contributions made by users within the group, - * facilitating management and organization of collective efforts. - */ -export type ContributorUserGroupType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { - __typename?: 'ContributorUserGroupType'; - archivedAt?: Maybe; - archivedBy?: Maybe; - clientId: Scalars['String']; - communityDashboardUrl: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - description: Scalars['String']; - firebaseId: Scalars['String']; - /** The latest time when resource was pushed to firebase */ - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; - id: Scalars['ID']; - isArchived: Scalars['Boolean']; - membersCount: Scalars['Int']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - name: Scalars['String']; - userMemberships: ContributorUserGroupMembershipTypeOffsetPaginated; -}; - - -/** - * Model representing a group that contributor users can join or leave. - * - * Groups are used to aggregate contributions made by users within the group, - * facilitating management and organization of collective efforts. - */ -export type ContributorUserGroupTypeUserMembershipsArgs = { - pagination?: InputMaybe; -}; - -export type ContributorUserGroupTypeMutationResponseType = { - __typename?: 'ContributorUserGroupTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type ContributorUserGroupTypeOffsetPaginated = { - __typename?: 'ContributorUserGroupTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -/** - * Model representing a group that contributor users can join or leave. - * - * Groups are used to aggregate contributions made by users within the group, - * facilitating management and organization of collective efforts. - */ -export type ContributorUserGroupUpdateInput = { - clientId: Scalars['String']; - description?: InputMaybe; - isArchived?: InputMaybe; - name?: InputMaybe; -}; - -export type ContributorUserLatestStatsType = { - __typename?: 'ContributorUserLatestStatsType'; - /** total swipe time (seconds) */ - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; - totalUserGroups: Scalars['Int']; -}; - -export type ContributorUserOrder = { - id?: InputMaybe; - username?: InputMaybe; -}; - -export type ContributorUserStatType = { - __typename?: 'ContributorUserStatType'; - totalAreaSwiped: Scalars['AreaSqKm']; - totalMappingProjects: Scalars['Int']; - totalOrganization: Scalars['Int']; - /** total swipe time (seconds) */ - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; -}; - -export type ContributorUserStats = { - __typename?: 'ContributorUserStats'; - filteredStats: ContributorUserFilteredStats; - firebaseId: Scalars['ID']; - id: Scalars['ID']; - stats: ContributorUserStatType; - /** Stats from last 30 days */ - statsLatest: ContributorUserLatestStatsType; -}; - - -export type ContributorUserStatsFilteredStatsArgs = { - dateRange?: InputMaybe; -}; - -/** - * Model representing contributors synchronized from firebase. - * - * Contributor accounts are typically created in firebase and then synced into this system. - * A contributor user may or may not be linked to a corresponding user in the system. - */ -export type ContributorUserType = { - __typename?: 'ContributorUserType'; - communityDashboardUrl: Scalars['String']; - createdAt?: Maybe; - /** Firebase User ID (External) */ - firebaseId: Scalars['ID']; - id: Scalars['ID']; - totalMappingProjects: Scalars['Int']; - totalSwipeTime: Scalars['Int']; - totalSwipes: Scalars['Int']; - username: Scalars['String']; -}; - -export type ContributorUserTypeOffsetPaginated = { - __typename?: 'ContributorUserTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ContributorUserUserGroupBaseFilterStatsQuery = { - areaSwipedByProjectType: Array; - swipeByDate: Array; - swipeByOrganizationName: Array; - swipeByProjectGeo: Array; - swipeByProjectType: Array; - swipeTimeByDate: Array; -}; - -export type CreateContributorUserGroupPayload = ContributorUserGroupTypeMutationResponseType | OperationInfo; - -export type CreateOrganizationPayload = OperationInfo | OrganizationTypeMutationResponseType; - -export type CreateProjectAssetPayload = OperationInfo | ProjectAssetTypeMutationResponseType; - -export type CreateProjectPayload = OperationInfo | ProjectTypeMutationResponseType; - -export type CreateTutorialAssetPayload = OperationInfo | TutorialAssetTypeMutationResponseType; - -export type CreateTutorialPayload = OperationInfo | TutorialTypeMutationResponseType; - -export type CustomOptionInput = { - /** ULID value */ - clientId: Scalars['String']; - description: Scalars['String']; - icon: IconEnum; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - iconColor: Scalars['String']; - subOptions?: InputMaybe>; - title: Scalars['String']; - /** Positive integer value */ - value: Scalars['Int']; -}; - -export type CustomOptionType = { - __typename?: 'CustomOptionType'; - description: Scalars['String']; - icon: IconEnum; - iconColor: Scalars['String']; - title: Scalars['String']; - value: Scalars['Int']; -}; - -export type CustomSubOptionInput = { - /** ULID value */ - clientId: Scalars['String']; - description: Scalars['String']; - /** Positive integer value */ - value: Scalars['Int']; -}; - -export type DateRangeInput = { - fromDate: Scalars['Date']; - toDate: Scalars['Date']; -}; - -export type DeleteInput = { - id: Scalars['ID']; -}; - -export type DeleteProjectAssetsPayload = OperationInfo | ProjectAssetsDeleteTypeMutationResponseType; - -export type DeleteProjectPayload = OperationInfo | ProjectType; - -export type DeleteTutorialPayload = OperationInfo | TutorialType; - -export type FindProjectPropertyInput = { - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - tileServerProperty: ProjectRasterTileServerConfigInput; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type FindProjectPropertyType = { - __typename?: 'FindProjectPropertyType'; - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - tileServerProperty: ProjectRasterTileServerConfig; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type FindTutorialTaskPropertyInput = { - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type FindTutorialTaskPropertyType = { - __typename?: 'FindTutorialTaskPropertyType'; - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type FirebaseOrInternalIdInputType = - { firebaseId: Scalars['ID']; id?: never; } - | { firebaseId?: never; id: Scalars['ID']; }; - -export type FirebasePushResourceTypeMixin = { - firebaseId: Scalars['String']; - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; -}; - -export enum FirebasePushStatusEnum { - Failed = 'FAILED', - Pending = 'PENDING', - Processing = 'PROCESSING', - Success = 'SUCCESS' -} - -/** Model representing an area. */ -export type GeometryType = { - __typename?: 'GeometryType'; - bbox?: Maybe; - centroid?: Maybe; - id: Scalars['ID']; - totalArea?: Maybe; -}; - -/** Model representing a global export asset with associated metadata. */ -export type GlobalExportAssetType = { - __typename?: 'GlobalExportAssetType'; - /** The file associated with the asset */ - file?: Maybe; - /** The size of the file in bytes */ - fileSize: Scalars['Int']; - lastUpdatedAt: Scalars['DateTime']; - type: GlobalExportAssetTypeEnum; -}; - -export enum GlobalExportAssetTypeEnum { - ProjectsCentroidGeojson = 'PROJECTS_CENTROID_GEOJSON', - ProjectsCsv = 'PROJECTS_CSV', - ProjectsGeomGeojson = 'PROJECTS_GEOM_GEOJSON', - ProjectStatsByTypes = 'PROJECT_STATS_BY_TYPES' -} - -export type IdBaseFilterLookup = { - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; -}; - -export enum IconEnum { - AddOutline = 'ADD_OUTLINE', - AlertOutline = 'ALERT_OUTLINE', - BanOutline = 'BAN_OUTLINE', - Check = 'CHECK', - CheckmarkOutline = 'CHECKMARK_OUTLINE', - CloseOutline = 'CLOSE_OUTLINE', - EggOutline = 'EGG_OUTLINE', - EllipseOutline = 'ELLIPSE_OUTLINE', - FlagOutline = 'FLAG_OUTLINE', - GeneralTap = 'GENERAL_TAP', - HandLeftOutline = 'HAND_LEFT_OUTLINE', - HandRightOutline = 'HAND_RIGHT_OUTLINE', - HappyOutline = 'HAPPY_OUTLINE', - HeartOutline = 'HEART_OUTLINE', - HelpOutline = 'HELP_OUTLINE', - InformationOutline = 'INFORMATION_OUTLINE', - PrismOutline = 'PRISM_OUTLINE', - RefreshOutline = 'REFRESH_OUTLINE', - RemoveOutline = 'REMOVE_OUTLINE', - SadOutline = 'SAD_OUTLINE', - SearchOutline = 'SEARCH_OUTLINE', - ShapesOutline = 'SHAPES_OUTLINE', - SquareOutline = 'SQUARE_OUTLINE', - StarOutline = 'STAR_OUTLINE', - SwipeLeft = 'SWIPE_LEFT', - Tap = 'TAP', - Tap_1 = 'TAP_1', - Tap_2 = 'TAP_2', - Tap_3 = 'TAP_3', - ThumbsDownOutline = 'THUMBS_DOWN_OUTLINE', - ThumbsUpOutline = 'THUMBS_UP_OUTLINE', - TriangleOutline = 'TRIANGLE_OUTLINE', - WarningOutline = 'WARNING_OUTLINE' -} - -export type IntComparisonFilterLookup = { - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Greater than. Filter will be skipped on `null` value */ - gt?: InputMaybe; - /** Greater than or equal to. Filter will be skipped on `null` value */ - gte?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Less than. Filter will be skipped on `null` value */ - lt?: InputMaybe; - /** Less than or equal to. Filter will be skipped on `null` value */ - lte?: InputMaybe; - /** Inclusive range test (between) */ - range?: InputMaybe; -}; - -export type IntRangeLookup = { - end?: InputMaybe; - start?: InputMaybe; -}; - -export type LocateProjectPropertyInput = { - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - customOptions?: InputMaybe>; - exportMetaKey: Scalars['String']; - exportMetaValue: Scalars['String']; - subGridSize: SubGridSizeEnum; - tileServerProperty: ProjectRasterTileServerConfigInput; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type LocateProjectPropertyType = { - __typename?: 'LocateProjectPropertyType'; - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - customOptions?: Maybe>; - exportMetaKey: Scalars['String']; - exportMetaValue: Scalars['String']; - subGridSize: SubGridSizeEnum; - tileServerProperty: ProjectRasterTileServerConfig; - /** Zoom level from 14 to 22 */ - zoomLevel: Scalars['Int']; -}; - -export type LocateTutorialTaskPropertyInput = { - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type LocateTutorialTaskPropertyType = { - __typename?: 'LocateTutorialTaskPropertyType'; - tileX: Scalars['Int']; - tileY: Scalars['Int']; - tileZ: Scalars['Int']; -}; - -export type MapContributionStatsType = { - __typename?: 'MapContributionStatsType'; - geojson: Scalars['GenericJSON']; - totalContribution: Scalars['Int']; -}; - -export enum MappingSessionClientTypeEnum { - MobileAndroid = 'MOBILE_ANDROID', - MobileIos = 'MOBILE_IOS', - Unknown = 'UNKNOWN', - Web = 'WEB' -} - -export type MapswipeDjangoFileType = { - __typename?: 'MapswipeDjangoFileType'; - name: Scalars['String']; - url: Scalars['String']; -}; - -export type Mutation = { - __typename?: 'Mutation'; - createContributorUserGroup: CreateContributorUserGroupPayload; - createOrganization: CreateOrganizationPayload; - createProject: CreateProjectPayload; - createProjectAsset: CreateProjectAssetPayload; - createTutorial: CreateTutorialPayload; - createTutorialAsset: CreateTutorialAssetPayload; - deleteProject: DeleteProjectPayload; - deleteProjectAssets: DeleteProjectAssetsPayload; - deleteTutorial: DeleteTutorialPayload; - login: UserMeType; - logout: Scalars['Boolean']; - updateContributorUserGroup: UpdateContributorUserGroupPayload; - updateOrganization: UpdateOrganizationPayload; - updateProcessedProject: UpdateProcessedProjectPayload; - updateProject: UpdateProjectPayload; - updateProjectStatus: UpdateProjectStatusPayload; - updateTutorial: UpdateTutorialPayload; - updateTutorialStatus: UpdateTutorialStatusPayload; -}; - - -export type MutationCreateContributorUserGroupArgs = { - data: ContributorUserGroupCreateInput; -}; - - -export type MutationCreateOrganizationArgs = { - data: OrganizationCreateInput; -}; - - -export type MutationCreateProjectArgs = { - data: ProjectCreateInput; -}; - - -export type MutationCreateProjectAssetArgs = { - data: ProjectAssetCreateInput; -}; - - -export type MutationCreateTutorialArgs = { - data: TutorialCreateInput; -}; - - -export type MutationCreateTutorialAssetArgs = { - data: TutorialAssetCreateInput; -}; - - -export type MutationDeleteProjectAssetsArgs = { - assetInputType: Array; - projectId: Scalars['ID']; -}; - - -export type MutationLoginArgs = { - password: Scalars['String']; - username: Scalars['String']; -}; - - -export type MutationUpdateContributorUserGroupArgs = { - data: ContributorUserGroupUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateOrganizationArgs = { - data: OrganizationUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateProcessedProjectArgs = { - data: ProcessedProjectUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateProjectArgs = { - data: ProjectUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateProjectStatusArgs = { - data: ProjectStatusUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateTutorialArgs = { - data: TutorialUpdateInput; - pk: Scalars['ID']; -}; - - -export type MutationUpdateTutorialStatusArgs = { - data: TutorialStatusUpdateInput; - pk: Scalars['ID']; -}; - -export type ObjectImageAnnotationInput = { - area?: InputMaybe; - bbox: Array; - categoryId?: InputMaybe; - /** Numeric value as string */ - id: Scalars['String']; - imageId?: InputMaybe; - iscrowd?: InputMaybe; - segmentation?: InputMaybe>>; -}; - -export type ObjectImageAnnotationType = { - __typename?: 'ObjectImageAnnotationType'; - area?: Maybe; - bbox: Array; - categoryId?: Maybe; - /** Numeric value as string */ - id: Scalars['String']; - imageId?: Maybe; - iscrowd?: Maybe; - segmentation?: Maybe>>; -}; - -export type ObjectImageAssetPropertyInput = { - annotations?: InputMaybe>; - image: ObjectImageInput; -}; - -export type ObjectImageAssetPropertyType = { - __typename?: 'ObjectImageAssetPropertyType'; - annotations?: Maybe>; - image: ObjectImageType; -}; - -export type ObjectImageInput = { - cocoUrl?: InputMaybe; - dateCaptured?: InputMaybe; - fileName: Scalars['String']; - flickrUrl?: InputMaybe; - height?: InputMaybe; - /** Numeric value as string */ - id: Scalars['String']; - license?: InputMaybe; - width?: InputMaybe; -}; - -export type ObjectImageType = { - __typename?: 'ObjectImageType'; - cocoUrl?: Maybe; - dateCaptured?: Maybe; - fileName: Scalars['String']; - flickrUrl?: Maybe; - height?: Maybe; - /** Numeric value as string */ - id: Scalars['String']; - license?: Maybe; - width?: Maybe; -}; - -export type OffsetPaginationInfo = { - __typename?: 'OffsetPaginationInfo'; - limit?: Maybe; - offset: Scalars['Int']; -}; - -export type OffsetPaginationInput = { - limit?: InputMaybe; - offset?: Scalars['Int']; -}; - -export type OperationInfo = { - __typename?: 'OperationInfo'; - /** List of messages returned by the operation. */ - messages: Array; -}; - -export type OperationMessage = { - __typename?: 'OperationMessage'; - /** The error code, or `null` if no error code was set. */ - code?: Maybe; - /** The field that caused the error, or `null` if it isn't associated with any particular field. */ - field?: Maybe; - /** The kind of this message. */ - kind: OperationMessageKind; - /** The error message. */ - message: Scalars['String']; -}; - -export enum OperationMessageKind { - Error = 'ERROR', - Info = 'INFO', - Permission = 'PERMISSION', - Validation = 'VALIDATION', - Warning = 'WARNING' -} - -export enum Ordering { - Asc = 'ASC', - AscNullsFirst = 'ASC_NULLS_FIRST', - AscNullsLast = 'ASC_NULLS_LAST', - Desc = 'DESC', - DescNullsFirst = 'DESC_NULLS_FIRST', - DescNullsLast = 'DESC_NULLS_LAST' -} - -/** Model representing the organization requesting the project. */ -export type OrganizationCreateInput = { - abbreviation?: InputMaybe; - clientId: Scalars['String']; - description?: InputMaybe; - name: Scalars['String']; -}; - -/** Model representing the organization requesting the project. */ -export type OrganizationFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - id?: InputMaybe; - isArchived?: InputMaybe; - name?: InputMaybe; -}; - -export type OrganizationOrder = { - id?: InputMaybe; - name?: InputMaybe; -}; - -export type OrganizationSwipeStatsType = { - __typename?: 'OrganizationSwipeStatsType'; - organizationName: Scalars['String']; - totalSwipes: Scalars['Int']; -}; - -/** Model representing the organization requesting the project. */ -export type OrganizationType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { - __typename?: 'OrganizationType'; - abbreviation?: Maybe; - archivedAt?: Maybe; - archivedBy?: Maybe; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - description?: Maybe; - firebaseId: Scalars['String']; - /** The latest time when resource was pushed to firebase */ - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; - id: Scalars['ID']; - isArchived: Scalars['Boolean']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - name: Scalars['String']; -}; - -export type OrganizationTypeMutationResponseType = { - __typename?: 'OrganizationTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type OrganizationTypeOffsetPaginated = { - __typename?: 'OrganizationTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -/** Model representing the organization requesting the project. */ -export type OrganizationUpdateInput = { - abbreviation?: InputMaybe; - clientId: Scalars['String']; - description?: InputMaybe; - isArchived?: InputMaybe; - name?: InputMaybe; -}; - -export enum OverlayLayerTypeEnum { - RasterTile = 'RASTER_TILE', - VectorTile = 'VECTOR_TILE' -} - -/** Model representing the project. */ -export type ProcessedProjectUpdateInput = { - /** Provide an optional link to a resource with additional information on the project */ - additionalInfoUrl?: InputMaybe; - clientId: Scalars['String']; - description?: InputMaybe; - image?: InputMaybe; - isFeatured?: InputMaybe; - /** What should the users look for (e.g. buildings, cars, trees) */ - lookFor?: InputMaybe; - /** How many tasks each user is allowed to work on for this project */ - maxTasksPerUser?: InputMaybe; - /** Provide project instruction */ - projectInstruction?: InputMaybe; - projectNumber?: InputMaybe; - region?: InputMaybe; - /** Which group, institution or community is requesting this project? */ - requestingOrganization?: InputMaybe; - team?: InputMaybe; - topic?: InputMaybe; - /** Tutorial used for this project. */ - tutorial?: InputMaybe; -}; - -/** Model representing assets for a project. */ -export type ProjectAssetCreateInput = { - assetTypeSpecifics?: InputMaybe; - clientId: Scalars['String']; - /** Provide link to the file associated with the asset */ - externalUrl?: InputMaybe; - /** The file associated with the asset */ - file?: InputMaybe; - inputType: ProjectAssetInputTypeEnum; - project: Scalars['ID']; -}; - -export enum ProjectAssetExportTypeEnum { - AggregatedResults = 'AGGREGATED_RESULTS', - AggregatedResultsWithGeometry = 'AGGREGATED_RESULTS_WITH_GEOMETRY', - AreaOfInterest = 'AREA_OF_INTEREST', - Groups = 'GROUPS', - History = 'HISTORY', - HotTaskingManagerGeometries = 'HOT_TASKING_MANAGER_GEOMETRIES', - ModerateToHighAgreementYesMaybeGeometries = 'MODERATE_TO_HIGH_AGREEMENT_YES_MAYBE_GEOMETRIES', - Results = 'RESULTS', - Tasks = 'TASKS', - Users = 'USERS' -} - -export type ProjectAssetExportTypeEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -/** Model representing assets for a project. */ -export type ProjectAssetFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - exportType?: InputMaybe; - id?: InputMaybe; - inputType?: InputMaybe; - mimetype?: InputMaybe; - projectId?: InputMaybe; - type?: InputMaybe; -}; - -export enum ProjectAssetInputTypeEnum { - AoiGeometry = 'AOI_GEOMETRY', - CoverImage = 'COVER_IMAGE', - ObjectImage = 'OBJECT_IMAGE' -} - -export type ProjectAssetInputTypeEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export type ProjectAssetOrder = { - id?: InputMaybe; -}; - -/** Model representing assets for a project. */ -export type ProjectAssetType = UserResourceTypeMixin & { - __typename?: 'ProjectAssetType'; - assetTypeSpecifics?: Maybe; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - exportType?: Maybe; - /** Provide link to the file associated with the asset */ - externalUrl?: Maybe; - /** The file associated with the asset */ - file?: Maybe; - /** The size of the file in bytes */ - fileSize: Scalars['Int']; - id: Scalars['ID']; - inputType?: Maybe; - /** If this flag is enabled, this asset will be deleted in the future */ - markedAsDeleted: Scalars['Boolean']; - mimetype?: Maybe; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - projectId: Scalars['ID']; - type: AssetTypeEnum; -}; - -export type ProjectAssetTypeMutationResponseType = { - __typename?: 'ProjectAssetTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type ProjectAssetTypeOffsetPaginated = { - __typename?: 'ProjectAssetTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ProjectAssetsDeleteType = { - __typename?: 'ProjectAssetsDeleteType'; - count: Scalars['Int']; -}; - -export type ProjectAssetsDeleteTypeMutationResponseType = { - __typename?: 'ProjectAssetsDeleteTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -/** Model representing the project. */ -export type ProjectCreateInput = { - /** Provide an optional link to a resource with additional information on the project */ - additionalInfoUrl?: InputMaybe; - clientId: Scalars['String']; - description?: InputMaybe; - /** What should the users look for (e.g. buildings, cars, trees) */ - lookFor?: InputMaybe; - /** Provide project instruction */ - projectInstruction: Scalars['String']; - projectNumber: Scalars['Int']; - projectType: ProjectTypeEnum; - region: Scalars['String']; - /** Which group, institution or community is requesting this project? */ - requestingOrganization: Scalars['ID']; - team?: InputMaybe; - topic: Scalars['String']; -}; - -export type ProjectCustomOption = { - __typename?: 'ProjectCustomOption'; - /** ULID value */ - clientId: Scalars['String']; - description: Scalars['String']; - icon: IconEnum; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - iconColor: Scalars['String']; - subOptions?: Maybe>; - title: Scalars['String']; - /** Positive integer value */ - value: Scalars['Int']; -}; - -export type ProjectCustomSubOption = { - __typename?: 'ProjectCustomSubOption'; - /** ULID value */ - clientId: Scalars['String']; - description: Scalars['String']; - /** Positive integer value */ - value: Scalars['Int']; -}; - -export type ProjectExportAssetTypeMixin = { - exportAggregatedResults?: Maybe; - exportAggregatedResultsWithGeometry?: Maybe; - exportAreaOfInterest?: Maybe; - exportGroups?: Maybe; - exportHistory?: Maybe; - exportHotTaskingManagerGeometries?: Maybe; - exportModerateToHighAgreementYesMaybeGeometries?: Maybe; - exportResults?: Maybe; - exportTasks?: Maybe; - exportUsers?: Maybe; -}; - -/** Model representing the project. */ -export type ProjectFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - createdById?: InputMaybe; - id?: InputMaybe; - isFeatured?: InputMaybe; - /** If the project is private, then it is only visible to the team members. */ - isPrivate?: InputMaybe; - name?: InputMaybe; - oldId?: InputMaybe; - progressStatus?: InputMaybe; - projectNumber?: InputMaybe; - projectType?: InputMaybe; - region?: InputMaybe; - /** Which group, institution or community is requesting this project? */ - requestingOrganizationId?: InputMaybe; - status?: InputMaybe; - teamId?: InputMaybe; - topic?: InputMaybe; -}; - -export type ProjectNameInput = { - projectNumber: Scalars['Int']; - projectType: ProjectTypeEnum; - region: Scalars['String']; - requestingOrganizationId: Scalars['ID']; - topic: Scalars['String']; -}; - -export type ProjectOrder = { - id?: InputMaybe; - name?: InputMaybe; - topic?: InputMaybe; -}; - -export type ProjectOverlayRasterTileServerConfig = { - __typename?: 'ProjectOverlayRasterTileServerConfig'; - /** Float value from 0.0 to 1.0 */ - opacity: Scalars['Float']; - tileServer: ProjectRasterTileServerConfig; -}; - -export type ProjectOverlayRasterTileServerConfigInput = { - /** Float value from 0.0 to 1.0 */ - opacity: Scalars['Float']; - tileServer: ProjectRasterTileServerConfigInput; -}; - -export type ProjectOverlayTileServerConfig = { - __typename?: 'ProjectOverlayTileServerConfig'; - raster?: Maybe; - type: OverlayLayerTypeEnum; - vector?: Maybe; -}; - -export type ProjectOverlayTileServerConfigInput = { - raster?: InputMaybe; - type: OverlayLayerTypeEnum; - vector?: InputMaybe; -}; - -export type ProjectOverlayVectorTileServerConfig = { - __typename?: 'ProjectOverlayVectorTileServerConfig'; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - circleColor: Scalars['String']; - /** Float value from 0.0 to 1.0 */ - circleOpacity: Scalars['Float']; - /** Positive float value */ - circleRadius: Scalars['Float']; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - fillColor: Scalars['String']; - /** Float value from 0.0 to 1.0 */ - fillOpacity: Scalars['Float']; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - lineColor: Scalars['String']; - lineDasharray: Array; - /** Float value from 0.0 to 1.0 */ - lineOpacity: Scalars['Float']; - /** Positive float value */ - lineWidth: Scalars['Float']; - tileServer: ProjectVectorTileServerConfig; -}; - -export type ProjectOverlayVectorTileServerConfigInput = { - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - circleColor: Scalars['String']; - /** Float value from 0.0 to 1.0 */ - circleOpacity: Scalars['Float']; - /** Positive float value */ - circleRadius: Scalars['Float']; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - fillColor: Scalars['String']; - /** Float value from 0.0 to 1.0 */ - fillOpacity: Scalars['Float']; - /** Hex color string like '#fff' or '#ffffff' or 'transparent' */ - lineColor: Scalars['String']; - lineDasharray: Array; - /** Float value from 0.0 to 1.0 */ - lineOpacity: Scalars['Float']; - /** Positive float value */ - lineWidth: Scalars['Float']; - tileServer: ProjectVectorTileServerConfigInput; -}; - -export enum ProjectProcessingStatusEnum { - AnalyzingGroupsAndTask = 'ANALYZING_GROUPS_AND_TASK', - Completed = 'COMPLETED', - GeneratingGroupsAndTasks = 'GENERATING_GROUPS_AND_TASKS', - GeneratingTasksGeojson = 'GENERATING_TASKS_GEOJSON', - Preparing = 'PREPARING', - ValidatingGeometry = 'VALIDATING_GEOMETRY' -} - -export enum ProjectProgressStatusEnum { - Completed = 'COMPLETED', - OnGoing = 'ON_GOING' -} - -export type ProjectProgressStatusEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export type ProjectRasterTileServerCommonConfig = { - __typename?: 'ProjectRasterTileServerCommonConfig'; - credits: Scalars['String']; -}; - -export type ProjectRasterTileServerConfig = { - __typename?: 'ProjectRasterTileServerConfig'; - bing?: Maybe; - custom?: Maybe; - esri?: Maybe; - esriBeta?: Maybe; - mapbox?: Maybe; - maxarPremium?: Maybe; - maxarStandard?: Maybe; - name: RasterTileServerNameEnum; -}; - -export type ProjectRasterTileServerConfigInput = { - bing?: InputMaybe; - custom?: InputMaybe; - esri?: InputMaybe; - esriBeta?: InputMaybe; - mapbox?: InputMaybe; - maxarPremium?: InputMaybe; - maxarStandard?: InputMaybe; - name: RasterTileServerNameEnum; -}; - -export type ProjectRasterTileServerCustomConfig = { - __typename?: 'ProjectRasterTileServerCustomConfig'; - credits: Scalars['String']; - maxZoom?: Maybe; - minZoom?: Maybe; - url: Scalars['String']; -}; - -export enum ProjectStatusEnum { - Discarded = 'DISCARDED', - Draft = 'DRAFT', - Finished = 'FINISHED', - Paused = 'PAUSED', - Processed = 'PROCESSED', - ProcessingFailed = 'PROCESSING_FAILED', - Published = 'PUBLISHED', - PublishingFailed = 'PUBLISHING_FAILED', - ReadyToProcess = 'READY_TO_PROCESS', - ReadyToPublish = 'READY_TO_PUBLISH', - Withdrawn = 'WITHDRAWN' -} - -export type ProjectStatusEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -/** Model representing the project. */ -export type ProjectStatusUpdateInput = { - clientId: Scalars['String']; - status?: InputMaybe; -}; - -/** Model representing the project. */ -export type ProjectType = FirebasePushResourceTypeMixin & ProjectExportAssetTypeMixin & UserResourceTypeMixin & { - __typename?: 'ProjectType'; - /** Provide an optional link to a resource with additional information on the project */ - additionalInfoUrl?: Maybe; - aoiGeometry?: Maybe; - aoiGeometryInputAsset?: Maybe; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - description?: Maybe; - exportAggregatedResults?: Maybe; - exportAggregatedResultsWithGeometry?: Maybe; - exportAreaOfInterest?: Maybe; - exportGroups?: Maybe; - exportHistory?: Maybe; - exportHotTaskingManagerGeometries?: Maybe; - exportModerateToHighAgreementYesMaybeGeometries?: Maybe; - exportResults?: Maybe; - exportTasks?: Maybe; - exportUsers?: Maybe; - firebaseId: Scalars['String']; - /** The latest time when resource was pushed to firebase */ - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; - /** How big should a mapping session be? Group size refers to the number of tasks per mapping session. */ - groupSize: Scalars['Int']; - id: Scalars['ID']; - image?: Maybe; - isFeatured: Scalars['Boolean']; - /** If the project is private, then it is only visible to the team members. */ - isPrivate: Scalars['Boolean']; - /** Last recent contribution date */ - lastContributionDate?: Maybe; - /** What should the users look for (e.g. buildings, cars, trees) */ - lookFor?: Maybe; - /** How many tasks each user is allowed to work on for this project */ - maxTasksPerUser?: Maybe; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - /** Project name generated from topic, region, project number, and requesting organization name. */ - name: Scalars['String']; - /** Number of users who made contributions to this project */ - numberOfContributorUsers: Scalars['Int']; - /** Number of results contributed to this project */ - numberOfResults: Scalars['Int']; - /** Number of results contributed to this project that can be used to calculate the progress of this project. Max no. of results per task that can be used to calculate progress is equal to the `verification number` */ - numberOfResultsForProgress: Scalars['Int']; - oldId?: Maybe; - processingStatus?: Maybe; - /** Percentage of the required contribution that has been completed */ - progress: Scalars['Float']; - progressStatus: ProjectProgressStatusEnum; - /** Provide project instruction */ - projectInstruction?: Maybe; - projectNumber: Scalars['Int']; - projectType: ProjectTypeEnum; - projectTypeSpecificOutputAsset?: Maybe; - projectTypeSpecifics?: Maybe; - region: Scalars['String']; - /** Which group, institution or community is requesting this project? */ - requestingOrganization: OrganizationType; - /** Which group, institution or community is requesting this project? */ - requestingOrganizationId: Scalars['ID']; - requiredResults: Scalars['Int']; - status: ProjectStatusEnum; - statusMessage?: Maybe; - team?: Maybe; - topic: Scalars['String']; - /** @deprecated Use AOI Geometry instead */ - totalArea?: Maybe; - /** Tutorial used for this project. */ - tutorial?: Maybe; - /** Tutorial used for this project. */ - tutorialId?: Maybe; - /** How many people do you want to see every tile before you consider it finished? */ - verificationNumber: Scalars['Int']; - websiteUrl: Scalars['String']; -}; - -export type ProjectTypeAreaStatsType = { - __typename?: 'ProjectTypeAreaStatsType'; - projectType: ProjectTypeEnum; - projectTypeDisplay: Scalars['String']; - totalArea: Scalars['AreaSqKm']; -}; - -export enum ProjectTypeEnum { - Compare = 'COMPARE', - Completeness = 'COMPLETENESS', - Find = 'FIND', - Locate = 'LOCATE', - Street = 'STREET', - Validate = 'VALIDATE', - ValidateImage = 'VALIDATE_IMAGE' -} - -export type ProjectTypeEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export type ProjectTypeMutationResponseType = { - __typename?: 'ProjectTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type ProjectTypeOffsetPaginated = { - __typename?: 'ProjectTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ProjectTypeSpecificInput = - { compare: CompareProjectPropertyInput; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness: CompletenessProjectPropertyInput; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find: FindProjectPropertyInput; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate: LocateProjectPropertyInput; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street: StreetProjectPropertyInput; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate: ValidateProjectPropertyInput; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage: ValidateImageProjectPropertyInput; }; - -export type ProjectTypeSwipeStatsType = { - __typename?: 'ProjectTypeSwipeStatsType'; - projectType: ProjectTypeEnum; - projectTypeDisplay: Scalars['String']; - totalSwipes: Scalars['Int']; -}; - -/** Model representing the project. */ -export type ProjectUpdateInput = { - /** Provide an optional link to a resource with additional information on the project */ - additionalInfoUrl?: InputMaybe; - clientId: Scalars['String']; - description?: InputMaybe; - /** How big should a mapping session be? Group size refers to the number of tasks per mapping session. */ - groupSize?: InputMaybe; - image?: InputMaybe; - /** What should the users look for (e.g. buildings, cars, trees) */ - lookFor?: InputMaybe; - /** How many tasks each user is allowed to work on for this project */ - maxTasksPerUser?: InputMaybe; - /** Provide project instruction */ - projectInstruction?: InputMaybe; - projectNumber?: InputMaybe; - projectTypeSpecifics?: InputMaybe; - region?: InputMaybe; - /** Which group, institution or community is requesting this project? */ - requestingOrganization?: InputMaybe; - team?: InputMaybe; - topic?: InputMaybe; - /** Tutorial used for this project. */ - tutorial?: InputMaybe; - /** How many people do you want to see every tile before you consider it finished? */ - verificationNumber?: InputMaybe; -}; - -export type ProjectVectorTileServerCommonConfig = { - __typename?: 'ProjectVectorTileServerCommonConfig'; - credits: Scalars['String']; - sourceLayer: Scalars['String']; -}; - -export type ProjectVectorTileServerConfig = { - __typename?: 'ProjectVectorTileServerConfig'; - custom?: Maybe; - name: VectorTileServerNameEnum; - openFreeMap?: Maybe; - openStreetMap?: Maybe; - versatiles?: Maybe; -}; - -export type ProjectVectorTileServerConfigInput = { - custom?: InputMaybe; - name: VectorTileServerNameEnum; - openFreeMap?: InputMaybe; - openStreetMap?: InputMaybe; - versatiles?: InputMaybe; -}; - -export type ProjectVectorTileServerCustomConfig = { - __typename?: 'ProjectVectorTileServerCustomConfig'; - credits: Scalars['String']; - /** Zoom level from 0 to 22 */ - maxZoom: Scalars['Int']; - /** Zoom level from 0 to 22 */ - minZoom: Scalars['Int']; - sourceLayer: Scalars['String']; - url: Scalars['String']; -}; - -export type Query = { - __typename?: 'Query'; - communityFilteredStats: CommunityFilteredStats; - communityStats: CommunityStatsType; - /** Stats from last 30 days. */ - communityStatsLatest: CommunityStatsType; - communityUserGroupStats: ContributorUserGroupStats; - communityUserStats: ContributorUserStats; - contributorTeam: ContributorTeamType; - contributorTeams: ContributorTeamTypeOffsetPaginated; - contributorUser: ContributorUserType; - contributorUserGroup: ContributorUserGroupType; - contributorUserGroupMembers: ContributorUserGroupMembershipTypeOffsetPaginated; - contributorUserGroups: ContributorUserGroupTypeOffsetPaginated; - contributorUsers: ContributorUserTypeOffsetPaginated; - defaultCustomOptions: Array; - enums: AppEnumCollection; - globalExportAsset: GlobalExportAssetType; - globalExportAssets: Array; - me?: Maybe; - organization: OrganizationType; - organizations: OrganizationTypeOffsetPaginated; - project: ProjectType; - projectAsset: ProjectAssetType; - projectAssets: ProjectAssetTypeOffsetPaginated; - projectName: Scalars['String']; - projects: ProjectTypeOffsetPaginated; - publicOrganization: OrganizationType; - publicOrganizations: OrganizationTypeOffsetPaginated; - publicProject: ProjectType; - publicProjects: ProjectTypeOffsetPaginated; - testAoiObjects: TestValidateAoiObjectsResponse; - testTaskingManagerProject: TestValidateTaskingManagerProjectResponse; - tileServers: RasterTileServersType; - tutorial: TutorialType; - tutorialAsset: TutorialAssetType; - tutorialAssets: TutorialAssetTypeOffsetPaginated; - tutorials: TutorialTypeOffsetPaginated; - users: UserTypeOffsetPaginated; -}; - - -export type QueryCommunityFilteredStatsArgs = { - dateRange?: InputMaybe; -}; - - -export type QueryCommunityUserGroupStatsArgs = { - userGroupId: FirebaseOrInternalIdInputType; -}; - - -export type QueryCommunityUserStatsArgs = { - userId: FirebaseOrInternalIdInputType; -}; - - -export type QueryContributorTeamArgs = { - id: Scalars['ID']; -}; - - -export type QueryContributorTeamsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryContributorUserArgs = { - userId: FirebaseOrInternalIdInputType; -}; - - -export type QueryContributorUserGroupArgs = { - userGroupId: FirebaseOrInternalIdInputType; -}; - - -export type QueryContributorUserGroupMembersArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryContributorUserGroupsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryContributorUsersArgs = { - filters?: InputMaybe; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryDefaultCustomOptionsArgs = { - projectType: ProjectTypeEnum; -}; - - -export type QueryGlobalExportAssetArgs = { - assetType: GlobalExportAssetTypeEnum; -}; - - -export type QueryOrganizationArgs = { - id: Scalars['ID']; -}; - - -export type QueryOrganizationsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryProjectArgs = { - id: Scalars['ID']; -}; - - -export type QueryProjectAssetArgs = { - id: Scalars['ID']; -}; - - -export type QueryProjectAssetsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryProjectNameArgs = { - params?: InputMaybe; -}; - - -export type QueryProjectsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryPublicOrganizationArgs = { - id: Scalars['ID']; -}; - - -export type QueryPublicOrganizationsArgs = { - filters?: InputMaybe; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryPublicProjectArgs = { - id: Scalars['ID']; -}; - - -export type QueryPublicProjectsArgs = { - filters?: InputMaybe; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryTestAoiObjectsArgs = { - assetId: Scalars['ID']; - ohsomeFilter: Scalars['String']; - projectId: Scalars['ID']; -}; - - -export type QueryTestTaskingManagerProjectArgs = { - hotTmId: Scalars['String']; - ohsomeFilter: Scalars['String']; -}; - - -export type QueryTutorialArgs = { - id: Scalars['ID']; -}; - - -export type QueryTutorialAssetArgs = { - id: Scalars['ID']; -}; - - -export type QueryTutorialAssetsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryTutorialsArgs = { - filters?: InputMaybe; - includeAll?: Scalars['Boolean']; - order?: InputMaybe; - pagination?: InputMaybe; -}; - - -export type QueryUsersArgs = { - filters?: InputMaybe; - order?: InputMaybe; - pagination?: InputMaybe; -}; - -export type RasterTileServerCommonConfigInput = { - credits: Scalars['String']; -}; - -export type RasterTileServerCustomConfigInput = { - credits: Scalars['String']; - maxZoom?: InputMaybe; - minZoom?: InputMaybe; - url: Scalars['String']; -}; - -export enum RasterTileServerNameEnum { - Bing = 'BING', - Custom = 'CUSTOM', - Esri = 'ESRI', - EsriBeta = 'ESRI_BETA', - Mapbox = 'MAPBOX', - MaxarPremium = 'MAXAR_PREMIUM', - MaxarStandard = 'MAXAR_STANDARD' -} - -export type RasterTileServerType = { - __typename?: 'RasterTileServerType'; - credits: Scalars['String']; - disabled: Scalars['Boolean']; - label: Scalars['String']; - maxZoom?: Maybe; - minZoom?: Maybe; - type: RasterTileServerNameEnum; - url: Scalars['String']; -}; - -export type RasterTileServersType = { - __typename?: 'RasterTileServersType'; - raster: Array; - vector: Array; -}; - -export type StrFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -export type StreetMapillaryImageFilters = { - __typename?: 'StreetMapillaryImageFilters'; - creatorId?: Maybe; - endTime?: Maybe; - isPano?: Maybe; - organizationId?: Maybe; - randomizeOrder: Scalars['Boolean']; - samplingThreshold?: Maybe; - startTime?: Maybe; -}; - -export type StreetMapillaryImageFiltersInput = { - creatorId?: InputMaybe; - endTime?: InputMaybe; - isPano?: InputMaybe; - organizationId?: InputMaybe; - randomizeOrder?: Scalars['Boolean']; - samplingThreshold?: InputMaybe; - startTime?: InputMaybe; -}; - -export type StreetProjectPropertyInput = { - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - customOptions?: InputMaybe>; - mapillaryImageFilters: StreetMapillaryImageFiltersInput; -}; - -export type StreetProjectPropertyType = { - __typename?: 'StreetProjectPropertyType'; - /** Numeric value as string */ - aoiGeometry: Scalars['String']; - customOptions?: Maybe>; - mapillaryImageFilters: StreetMapillaryImageFilters; -}; - -export type StreetTutorialTaskPropertyInput = { - geometry: Scalars['String']; - mapillaryImageId: Scalars['String']; -}; - -export type StreetTutorialTaskPropertyType = { - __typename?: 'StreetTutorialTaskPropertyType'; - geometry: Scalars['String']; - mapillaryImageId: Scalars['String']; -}; - -export enum SubGridSizeEnum { - Size_2X2 = 'SIZE_2X2', - Size_4X4 = 'SIZE_4X4', - Size_8X8 = 'SIZE_8X8' -} - -export type TestValidateAoiObjectsResponse = { - __typename?: 'TestValidateAoiObjectsResponse'; - assetId?: Maybe; - error?: Maybe; - objectCount?: Maybe; - ohsomeFilter?: Maybe; - ok: Scalars['Boolean']; - projectId?: Maybe; -}; - -export type TestValidateTaskingManagerProjectResponse = { - __typename?: 'TestValidateTaskingManagerProjectResponse'; - error?: Maybe; - hotTmId?: Maybe; - objectCount?: Maybe; - ohsomeFilter?: Maybe; - ok: Scalars['Boolean']; -}; - -/** Model representing assets for a tutorial. */ -export type TutorialAssetCreateInput = { - clientId: Scalars['String']; - /** The file associated with the asset */ - file: Scalars['Upload']; - inputType: TutorialAssetInputTypeEnum; - tutorial: Scalars['ID']; -}; - -/** Model representing assets for a tutorial. */ -export type TutorialAssetFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - id?: InputMaybe; - mimetype?: InputMaybe; - tutorialId?: InputMaybe; - type?: InputMaybe; -}; - -export enum TutorialAssetInputTypeEnum { - InformationBlockImage = 'INFORMATION_BLOCK_IMAGE' -} - -export type TutorialAssetOrder = { - id?: InputMaybe; -}; - -/** Model representing assets for a tutorial. */ -export type TutorialAssetType = UserResourceTypeMixin & { - __typename?: 'TutorialAssetType'; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - /** The file associated with the asset */ - file: MapswipeDjangoFileType; - /** The size of the file in bytes */ - fileSize: Scalars['Int']; - id: Scalars['ID']; - inputType?: Maybe; - /** If this flag is enabled, this asset will be deleted in the future */ - markedAsDeleted: Scalars['Boolean']; - mimetype?: Maybe; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - tutorialId: Scalars['ID']; - type: AssetTypeEnum; -}; - -export type TutorialAssetTypeMutationResponseType = { - __typename?: 'TutorialAssetTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type TutorialAssetTypeOffsetPaginated = { - __typename?: 'TutorialAssetTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -/** - * Model representing a tutorial associated with a specific project. - * - * Tutorial guides users through the process of contributing to a project. - * It includes instructions, and examples to help users understand how to complete tasks. - */ -export type TutorialCreateInput = { - clientId: Scalars['String']; - name: Scalars['String']; - /** Project this tutorial is referring to. */ - project: Scalars['ID']; -}; - -/** - * Model representing a tutorial associated with a specific project. - * - * Tutorial guides users through the process of contributing to a project. - * It includes instructions, and examples to help users understand how to complete tasks. - */ -export type TutorialFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - createdById?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; - /** Project this tutorial is referring to. */ - project?: InputMaybe; - status?: InputMaybe; -}; - -/** Model representing a text or image block in the information page. */ -export type TutorialInformationPageBlockCreateInput = { - blockNumber: Scalars['Int']; - blockType: TutorialInformationPageBlockTypeEnum; - clientId: Scalars['String']; - image?: InputMaybe; - text?: InputMaybe; -}; - -export type TutorialInformationPageBlockInput = { - create?: InputMaybe; - delete?: InputMaybe; - update?: InputMaybe; -}; - -/** Model representing a text or image block in the information page. */ -export type TutorialInformationPageBlockType = UserResourceTypeMixin & { - __typename?: 'TutorialInformationPageBlockType'; - blockNumber: Scalars['Int']; - blockType: TutorialInformationPageBlockTypeEnum; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - id: Scalars['ID']; - image?: Maybe; - imageId?: Maybe; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - pageId: Scalars['ID']; - text?: Maybe; -}; - -export enum TutorialInformationPageBlockTypeEnum { - Image = 'IMAGE', - Text = 'TEXT' -} - -/** Model representing a text or image block in the information page. */ -export type TutorialInformationPageBlockUpdateInput = { - blockNumber?: InputMaybe; - blockType?: InputMaybe; - clientId: Scalars['String']; - id: Scalars['ID']; - image?: InputMaybe; - text?: InputMaybe; -}; - -/** Model representing a information page in the tutorial. */ -export type TutorialInformationPageCreateInput = { - blocks: Array; - clientId: Scalars['String']; - pageNumber: Scalars['Int']; - title: Scalars['String']; -}; - -export type TutorialInformationPageInput = { - create?: InputMaybe; - delete?: InputMaybe; - update?: InputMaybe; -}; - -/** Model representing a information page in the tutorial. */ -export type TutorialInformationPageType = UserResourceTypeMixin & { - __typename?: 'TutorialInformationPageType'; - blocks: Array; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - id: Scalars['ID']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - pageNumber: Scalars['Int']; - title: Scalars['String']; - tutorialId: Scalars['ID']; -}; - -/** Model representing a information page in the tutorial. */ -export type TutorialInformationPageUpdateInput = { - blocks?: InputMaybe>; - clientId: Scalars['String']; - id: Scalars['ID']; - pageNumber?: InputMaybe; - title?: InputMaybe; -}; - -export type TutorialOrder = { - id?: InputMaybe; - name?: InputMaybe; -}; - -/** Model representing a scenario in the tutorial. */ -export type TutorialScenarioPageCreateInput = { - clientId: Scalars['String']; - hintDescription: Scalars['String']; - hintIcon: IconEnum; - hintTitle: Scalars['String']; - instructionsDescription: Scalars['String']; - instructionsIcon: IconEnum; - instructionsTitle: Scalars['String']; - scenarioPageNumber: Scalars['Int']; - successDescription: Scalars['String']; - successIcon: IconEnum; - successTitle: Scalars['String']; - tasks: Array; -}; - -/** Model representing a individual task in the scenario. */ -export type TutorialScenarioPageInput = { - create?: InputMaybe; - delete?: InputMaybe; - update?: InputMaybe; -}; - -/** Model representing a scenario in the tutorial. */ -export type TutorialScenarioPageType = UserResourceTypeMixin & { - __typename?: 'TutorialScenarioPageType'; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - hintDescription: Scalars['String']; - hintIcon: IconEnum; - hintTitle: Scalars['String']; - id: Scalars['ID']; - instructionsDescription: Scalars['String']; - instructionsIcon: IconEnum; - instructionsTitle: Scalars['String']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - scenarioPageNumber: Scalars['Int']; - successDescription: Scalars['String']; - successIcon: IconEnum; - successTitle: Scalars['String']; - tasks: Array; - tutorialId: Scalars['ID']; -}; - -/** Model representing a scenario in the tutorial. */ -export type TutorialScenarioPageUpdateInput = { - clientId: Scalars['String']; - hintDescription?: InputMaybe; - hintIcon?: InputMaybe; - hintTitle?: InputMaybe; - id: Scalars['ID']; - instructionsDescription?: InputMaybe; - instructionsIcon?: InputMaybe; - instructionsTitle?: InputMaybe; - scenarioPageNumber?: InputMaybe; - successDescription?: InputMaybe; - successIcon?: InputMaybe; - successTitle?: InputMaybe; - tasks?: InputMaybe>; -}; - -export enum TutorialStatusEnum { - Archived = 'ARCHIVED', - Discarded = 'DISCARDED', - Draft = 'DRAFT', - Published = 'PUBLISHED', - PublishingFailed = 'PUBLISHING_FAILED', - ReadyToPublish = 'READY_TO_PUBLISH' -} - -export type TutorialStatusEnumFilterLookup = { - /** Case-sensitive containment test. Filter will be skipped on `null` value */ - contains?: InputMaybe; - /** Case-sensitive ends-with. Filter will be skipped on `null` value */ - endsWith?: InputMaybe; - /** Exact match. Filter will be skipped on `null` value */ - exact?: InputMaybe; - /** Case-insensitive containment test. Filter will be skipped on `null` value */ - iContains?: InputMaybe; - /** Case-insensitive ends-with. Filter will be skipped on `null` value */ - iEndsWith?: InputMaybe; - /** Case-insensitive exact match. Filter will be skipped on `null` value */ - iExact?: InputMaybe; - /** Case-insensitive regular expression match. Filter will be skipped on `null` value */ - iRegex?: InputMaybe; - /** Case-insensitive starts-with. Filter will be skipped on `null` value */ - iStartsWith?: InputMaybe; - /** Exact match of items in a given list. Filter will be skipped on `null` value */ - inList?: InputMaybe>; - /** Assignment test. Filter will be skipped on `null` value */ - isNull?: InputMaybe; - /** Case-sensitive regular expression match. Filter will be skipped on `null` value */ - regex?: InputMaybe; - /** Case-sensitive starts-with. Filter will be skipped on `null` value */ - startsWith?: InputMaybe; -}; - -/** - * Model representing a tutorial associated with a specific project. - * - * Tutorial guides users through the process of contributing to a project. - * It includes instructions, and examples to help users understand how to complete tasks. - */ -export type TutorialStatusUpdateInput = { - clientId: Scalars['String']; - status?: InputMaybe; -}; - -/** Model representing a individual task in the scenario. */ -export type TutorialTaskCreateInput = { - clientId: Scalars['String']; - projectTypeSpecifics: TutorialTaskProjectTypeSpecificInput; - reference: Scalars['Int']; - taskPartitionIndex?: InputMaybe; -}; - -export type TutorialTaskInput = { - create?: InputMaybe; - delete?: InputMaybe; - update?: InputMaybe; -}; - -export type TutorialTaskProjectTypeSpecificInput = - { compare: CompareTutorialTaskPropertyInput; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness: CompletenessTutorialTaskPropertyInput; find?: never; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find: FindTutorialTaskPropertyInput; locate?: never; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate: LocateTutorialTaskPropertyInput; street?: never; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street: StreetTutorialTaskPropertyInput; validate?: never; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate: ValidateTutorialTaskPropertyInput; validateImage?: never; } - | { compare?: never; completeness?: never; find?: never; locate?: never; street?: never; validate?: never; validateImage: ValidateImageTutorialTaskPropertyInput; }; - -/** Model representing a individual task in the scenario. */ -export type TutorialTaskType = UserResourceTypeMixin & { - __typename?: 'TutorialTaskType'; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - id: Scalars['ID']; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - projectTypeSpecifics?: Maybe; - reference: Scalars['Int']; - scenarioId: Scalars['ID']; - taskPartitionIndex?: Maybe; -}; - -/** Model representing a individual task in the scenario. */ -export type TutorialTaskUpdateInput = { - clientId: Scalars['String']; - id: Scalars['ID']; - projectTypeSpecifics: TutorialTaskProjectTypeSpecificInput; - reference?: InputMaybe; - taskPartitionIndex?: InputMaybe; -}; - -/** - * Model representing a tutorial associated with a specific project. - * - * Tutorial guides users through the process of contributing to a project. - * It includes instructions, and examples to help users understand how to complete tasks. - */ -export type TutorialType = FirebasePushResourceTypeMixin & UserResourceTypeMixin & { - __typename?: 'TutorialType'; - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - firebaseId: Scalars['String']; - /** The latest time when resource was pushed to firebase */ - firebaseLastPushed?: Maybe; - firebasePushStatus?: Maybe; - id: Scalars['ID']; - informationPages: Array; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; - name: Scalars['String']; - /** Project this tutorial is referring to. */ - project: ProjectType; - /** Project this tutorial is referring to. */ - projectId: Scalars['ID']; - scenarios: Array; - status: TutorialStatusEnum; - statusMessage?: Maybe; -}; - -export type TutorialTypeMutationResponseType = { - __typename?: 'TutorialTypeMutationResponseType'; - errors?: Maybe; - ok: Scalars['Boolean']; - result?: Maybe; -}; - -export type TutorialTypeOffsetPaginated = { - __typename?: 'TutorialTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -/** - * Model representing a tutorial associated with a specific project. - * - * Tutorial guides users through the process of contributing to a project. - * It includes instructions, and examples to help users understand how to complete tasks. - */ -export type TutorialUpdateInput = { - clientId: Scalars['String']; - informationPages?: InputMaybe>; - name?: InputMaybe; - scenarios?: InputMaybe>; -}; - -export type UpdateContributorUserGroupPayload = ContributorUserGroupTypeMutationResponseType | OperationInfo; - -export type UpdateOrganizationPayload = OperationInfo | OrganizationTypeMutationResponseType; - -export type UpdateProcessedProjectPayload = OperationInfo | ProjectTypeMutationResponseType; - -export type UpdateProjectPayload = OperationInfo | ProjectTypeMutationResponseType; - -export type UpdateProjectStatusPayload = OperationInfo | ProjectTypeMutationResponseType; - -export type UpdateTutorialPayload = OperationInfo | TutorialTypeMutationResponseType; - -export type UpdateTutorialStatusPayload = OperationInfo | TutorialTypeMutationResponseType; - -/** - * Custom user model with email as unique identifier. - * - * The user is linked to a contributor user, which holds user information synced from firebase. - * This mapping is essential to integrate Firebase authentication this system. - * Additionally, the mapping ensures that data created or updated in this system - * can be accurately synchronized back to Firebase with the correct user association. - */ -export type UserFilter = { - AND?: InputMaybe; - DISTINCT?: InputMaybe; - NOT?: InputMaybe; - OR?: InputMaybe; - /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ - contributorUser?: InputMaybe; - displayName?: InputMaybe; - id?: InputMaybe; - search?: InputMaybe; -}; - -/** - * Custom user model with email as unique identifier. - * - * The user is linked to a contributor user, which holds user information synced from firebase. - * This mapping is essential to integrate Firebase authentication this system. - * Additionally, the mapping ensures that data created or updated in this system - * can be accurately synchronized back to Firebase with the correct user association. - */ -export type UserMeType = { - __typename?: 'UserMeType'; - anonymizedEmail: Scalars['String']; - /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ - contributorUser?: Maybe; - displayName: Scalars['String']; - email: Scalars['String']; - firstName: Scalars['String']; - id: Scalars['ID']; - lastName: Scalars['String']; -}; - -export type UserOrder = { - displayName?: InputMaybe; - id?: InputMaybe; -}; - -export type UserResourceTypeMixin = { - clientId: Scalars['String']; - createdAt: Scalars['DateTime']; - createdBy: UserType; - modifiedAt: Scalars['DateTime']; - modifiedBy: UserType; -}; - -/** - * Custom user model with email as unique identifier. - * - * The user is linked to a contributor user, which holds user information synced from firebase. - * This mapping is essential to integrate Firebase authentication this system. - * Additionally, the mapping ensures that data created or updated in this system - * can be accurately synchronized back to Firebase with the correct user association. - */ -export type UserType = { - __typename?: 'UserType'; - anonymizedEmail: Scalars['String']; - /** The Contributor user associated with this User. This will also be used for authentication using firebase. */ - contributorUser?: Maybe; - displayName: Scalars['String']; - firstName: Scalars['String']; - id: Scalars['ID']; - lastName: Scalars['String']; -}; - -export type UserTypeOffsetPaginated = { - __typename?: 'UserTypeOffsetPaginated'; - pageInfo: OffsetPaginationInfo; - /** List of paginated results. */ - results: Array; - /** Total count of existing results. */ - totalCount: Scalars['Int']; -}; - -export type ValidateImageProjectPropertyInput = { - customOptions?: InputMaybe>; - sourceType: ValidateImageSourceTypeEnum; -}; - -export type ValidateImageProjectPropertyType = { - __typename?: 'ValidateImageProjectPropertyType'; - customOptions?: Maybe>; - sourceType: ValidateImageSourceTypeEnum; -}; - -export enum ValidateImageSourceTypeEnum { - DatasetFile = 'DATASET_FILE', - DirectImages = 'DIRECT_IMAGES' -} - -export type ValidateImageTutorialTaskPropertyInput = { - annotation?: InputMaybe; - fileName: Scalars['String']; - height?: InputMaybe; - imageId?: InputMaybe; - url: Scalars['String']; - width?: InputMaybe; -}; - -export type ValidateImageTutorialTaskPropertyType = { - __typename?: 'ValidateImageTutorialTaskPropertyType'; - annotation?: Maybe; - fileName: Scalars['String']; - height?: Maybe; - imageId?: Maybe; - url: Scalars['String']; - width?: Maybe; -}; - -export type ValidateObjectSourceConfig = { - __typename?: 'ValidateObjectSourceConfig'; - aoiGeometry?: Maybe; - objectGeojsonUrl?: Maybe; - ohsomeFilter?: Maybe; - sourceType: ValidateObjectSourceTypeEnum; - taskingManagerProjectId?: Maybe; -}; - -export type ValidateObjectSourceConfigInput = { - aoiGeometry?: InputMaybe; - objectGeojsonUrl?: InputMaybe; - ohsomeFilter?: InputMaybe; - sourceType: ValidateObjectSourceTypeEnum; - taskingManagerProjectId?: InputMaybe; -}; - -export enum ValidateObjectSourceTypeEnum { - AoiGeojsonFile = 'AOI_GEOJSON_FILE', - ObjectGeojsonUrl = 'OBJECT_GEOJSON_URL', - TaskingManager = 'TASKING_MANAGER' -} - -export type ValidateProjectPropertyInput = { - customOptions?: InputMaybe>; - objectSource: ValidateObjectSourceConfigInput; - tileServerProperty: ProjectRasterTileServerConfigInput; -}; - -export type ValidateProjectPropertyType = { - __typename?: 'ValidateProjectPropertyType'; - customOptions?: Maybe>; - objectSource: ValidateObjectSourceConfig; - tileServerProperty: ProjectRasterTileServerConfig; -}; - -export type ValidateTutorialTaskPropertyInput = { - identifier: Scalars['Int']; - objectGeometry: Scalars['String']; -}; - -export type ValidateTutorialTaskPropertyType = { - __typename?: 'ValidateTutorialTaskPropertyType'; - identifier: Scalars['Int']; - objectGeometry: Scalars['String']; -}; - -export type VectorTileServerCommonConfigInput = { - credits: Scalars['String']; - sourceLayer: Scalars['String']; -}; - -export type VectorTileServerCustomConfigInput = { - credits: Scalars['String']; - /** Zoom level from 0 to 22 */ - maxZoom: Scalars['Int']; - /** Zoom level from 0 to 22 */ - minZoom: Scalars['Int']; - sourceLayer: Scalars['String']; - url: Scalars['String']; -}; - -export enum VectorTileServerNameEnum { - Custom = 'CUSTOM', - OpenFreeMap = 'OPEN_FREE_MAP', - OpenStreetMap = 'OPEN_STREET_MAP', - Versatiles = 'VERSATILES' -} - -export type VectorTileServerType = { - __typename?: 'VectorTileServerType'; - credits: Scalars['String']; - label: Scalars['String']; - layers: Array; - maxZoom?: Maybe; - minZoom?: Maybe; - type: VectorTileServerNameEnum; - url: Scalars['String']; -}; - -export type AllDataQueryVariables = Exact<{ [key: string]: never; }>; - - -export type AllDataQuery = { __typename?: 'Query', publicProjects: { __typename?: 'ProjectTypeOffsetPaginated', totalCount: number, results: Array<{ __typename?: 'ProjectType', id: string, name: string, firebaseId: string, description?: string | null, progress: number, status: ProjectStatusEnum, projectType: ProjectTypeEnum, createdAt: any, modifiedAt: any, region: string, requestingOrganizationId: string, numberOfContributorUsers: number, totalArea?: number | null, exportAggregatedResultsWithGeometry?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportAggregatedResults?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportAreaOfInterest?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportGroups?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportHistory?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, modifiedAt: any, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportResults?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportTasks?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, exportUsers?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, exportHotTaskingManagerGeometries?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, exportModerateToHighAgreementYesMaybeGeometries?: { __typename?: 'ProjectAssetType', id: string, mimetype?: AssetMimetypeEnum | null, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null } | null, image?: { __typename?: 'ProjectAssetType', id: string, createdAt: any, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null, requestingOrganization: { __typename?: 'OrganizationType', id: string, name: string, modifiedAt: any }, aoiGeometry?: { __typename?: 'GeometryType', centroid?: any | null, id: string, totalArea?: number | null, bbox?: any | null } | null, aoiGeometryInputAsset?: { __typename?: 'ProjectAssetType', id: string, fileSize: number, mimetype?: AssetMimetypeEnum | null, file?: { __typename?: 'MapswipeDjangoFileType', name: string, url: string } | null } | null }> }, communityStats: { __typename?: 'CommunityStatsType', id: string, totalContributors: number, totalUserGroups: number, totalSwipes: number }, publicOrganizations: { __typename?: 'OrganizationTypeOffsetPaginated', results: Array<{ __typename?: 'OrganizationType', id: string, name: string }> }, globalExportAssets: Array<{ __typename?: 'GlobalExportAssetType', type: GlobalExportAssetTypeEnum, lastUpdatedAt: any, fileSize: number, file?: { __typename?: 'MapswipeDjangoFileType', url: string, name: string } | null }> }; - -export type EnumsQueryVariables = Exact<{ [key: string]: never; }>; - - -export type EnumsQuery = { __typename?: 'Query', enums: { __typename?: 'AppEnumCollection', ProjectTypeEnum: Array<{ __typename?: 'AppEnumCollectionProjectTypeEnum', key: ProjectTypeEnum, label: string }>, ProjectStatusEnum: Array<{ __typename?: 'AppEnumCollectionProjectStatusEnum', key: ProjectStatusEnum, label: string }> } }; diff --git a/package.json b/package.json index dbdf436b..14e279fb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "css-lint": "stylelint 'src/**/*.css'", "typecheck": "astro check", "verify-dist": "node scripts/verify-dist.mjs", - "test:e2e": "playwright test" + "test:e2e": "playwright test", + "generate:type": "graphql-codegen --config codegen.yml", + "fetch-data:local": "node --env-file=.env.local scripts/fetchData.ts", + "check-unused": "knip" }, "dependencies": { "@astrojs/react": "^4.2.0", @@ -41,7 +44,12 @@ "devDependencies": { "@astrojs/check": "^0.9.9", "@eslint/js": "^10.0.1", + "@graphql-codegen/cli": "^7.2.0", + "@graphql-codegen/typescript": "^6.1.0", + "@graphql-codegen/typescript-operations": "^6.1.0", "@playwright/test": "^1.61.1", + "@stylistic/eslint-plugin": "^5.10.0", + "@stylistic/stylelint-plugin": "^5.2.1", "@types/leaflet": "^1.9.12", "@types/papaparse": "^5.3.15", "@types/react": "^18.3.12", @@ -50,13 +58,16 @@ "eslint-plugin-astro": "^1.7.0", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.7.0", + "knip": "^6.26.0", "postcss": "^8.5.19", "postcss-flexbugs-fixes": "^5.0.2", "postcss-nested": "^7.0.2", "postcss-normalize": "^13.0.1", "postcss-preset-env": "^11.3.2", "stylelint": "^17.14.0", + "stylelint-config-concentric-order": "^5.5.0", "stylelint-config-standard": "^40.0.0", + "stylelint-order": "^8.1.1", "typescript": "^5.7.0", "typescript-eslint": "^8.63.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e46ffdee..fa9503c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@astrojs/react': specifier: ^4.2.0 - version: 4.4.2(@types/node@26.1.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yaml@2.9.0) + version: 4.4.2(@types/node@26.1.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yaml@2.9.0) '@astrojs/sitemap': specifier: ^3.2.1 version: 3.7.3 @@ -22,7 +22,7 @@ importers: version: 5.2.7 astro: specifier: ^5.7.0 - version: 5.18.2(@types/node@26.1.1)(rollup@4.62.2)(typescript@5.9.3)(yaml@2.9.0) + version: 5.18.2(@types/node@26.1.1)(jiti@2.7.0)(rollup@4.62.2)(typescript@5.9.3)(yaml@2.9.0) graphql: specifier: ^16.6.0 version: 16.14.2 @@ -71,10 +71,25 @@ importers: version: 0.9.9(prettier@3.9.5)(typescript@5.9.3) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.7.0) + version: 10.0.1(eslint@10.7.0(jiti@2.7.0)) + '@graphql-codegen/cli': + specifier: ^7.2.0 + version: 7.2.0(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2)(typescript@5.9.3) + '@graphql-codegen/typescript': + specifier: ^6.1.0 + version: 6.1.0(graphql@16.14.2) + '@graphql-codegen/typescript-operations': + specifier: ^6.1.0 + version: 6.1.0(graphql@16.14.2) '@playwright/test': specifier: ^1.61.1 version: 1.61.1 + '@stylistic/eslint-plugin': + specifier: ^5.10.0 + version: 5.10.0(eslint@10.7.0(jiti@2.7.0)) + '@stylistic/stylelint-plugin': + specifier: ^5.2.1 + version: 5.2.1(stylelint@17.14.0(typescript@5.9.3)) '@types/leaflet': specifier: ^1.9.12 version: 1.9.21 @@ -89,16 +104,19 @@ importers: version: 18.3.7(@types/react@18.3.31) eslint: specifier: ^10.7.0 - version: 10.7.0 + version: 10.7.0(jiti@2.7.0) eslint-plugin-astro: specifier: ^1.7.0 - version: 1.7.0(eslint@10.7.0) + version: 1.7.0(eslint@10.7.0(jiti@2.7.0)) eslint-plugin-react-hooks: specifier: ^7.1.1 - version: 7.1.1(eslint@10.7.0) + version: 7.1.1(eslint@10.7.0(jiti@2.7.0)) globals: specifier: ^17.7.0 version: 17.7.0 + knip: + specifier: ^6.26.0 + version: 6.26.0 postcss: specifier: ^8.5.19 version: 8.5.19 @@ -117,18 +135,29 @@ importers: stylelint: specifier: ^17.14.0 version: 17.14.0(typescript@5.9.3) + stylelint-config-concentric-order: + specifier: ^5.5.0 + version: 5.5.0(stylelint@17.14.0(typescript@5.9.3)) stylelint-config-standard: specifier: ^40.0.0 version: 40.0.0(stylelint@17.14.0(typescript@5.9.3)) + stylelint-order: + specifier: ^8.1.1 + version: 8.1.1(stylelint@17.14.0(typescript@5.9.3)) typescript: specifier: ^5.7.0 version: 5.9.3 typescript-eslint: specifier: ^8.63.0 - version: 8.63.0(eslint@10.7.0)(typescript@5.9.3) + version: 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) packages: + '@ardatan/relay-compiler@13.0.1': + resolution: {integrity: sha512-afG3YPwuSA0E5foouZusz5GlXKs74dObv4cuWyLyfKsYFj2r7oGRNB28v18HvwuLSQtQFCi+DpIe0TZkgQDYyg==} + peerDependencies: + graphql: '*' + '@astrojs/check@0.9.9': resolution: {integrity: sha512-A5UW8uIuErLWEoRQvzgXpO1gTjUFtK8r7nU2Z7GewAMxUb7bPvpk11qaKKgxqXlHJWlAvaaxy+Xg28A6bmQ1Tg==} hasBin: true @@ -241,6 +270,12 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-import-assertions@7.29.7': + resolution: {integrity: sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.29.7': resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} engines: {node: '>=6.9.0'} @@ -635,9 +670,36 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/core@1.11.0': + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.11.0': + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@envelop/core@5.5.1': + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==} + engines: {node: '>=18.0.0'} + + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} + + '@envelop/types@5.2.1': + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} + engines: {node: '>=18.0.0'} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -989,12 +1051,242 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@fontsource/dm-sans@5.2.8': resolution: {integrity: sha512-tlovG42m9ESG28WiHpLq3F5umAlm64rv0RkqTbYowRn70e9OlRr5a3yTJhrhrY+k5lftR/OFJjPzOLQzk8EfCA==} '@fontsource/lato@5.2.7': resolution: {integrity: sha512-k5mum1ADbDW5cTw1Ett1eQVWeoZ6gq0ct6SFBibEhB4LRxhniChJZTBgd6ph5yBxLkN1fcnsnmicBNA4S/3nbw==} + '@graphql-codegen/add@7.1.0': + resolution: {integrity: sha512-bytJg1kel5zfgK3JSYbGwtpbNe6F9OPZSR6DiMDe9RVxblAgl6w4zEEPd/mM3rhNJ1VmGYLbNnf5e1eUfXQEbg==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/cli@7.2.0': + resolution: {integrity: sha512-JPJw2vquEIpO3b8XJyxFVTrYi6WRn/OKu/SlzQA+IwAVT7GZPeG+AHmfRXAvpVMj31899nTpQYEQGUxx3ZqubQ==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + + '@graphql-codegen/client-preset@6.1.0': + resolution: {integrity: sha512-mGmBuwrOU5oRoaWFodx8g9xu1jecYIiydqvk88QsAIsyMcZwuoybs1lyne85TovpBHjH5CC2wnZGsbDQfcgOCQ==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + graphql-sock: ^1.0.0 + peerDependenciesMeta: + graphql-sock: + optional: true + + '@graphql-codegen/core@6.2.0': + resolution: {integrity: sha512-RZadhhwYhuy2ZdIGK40vYVBMzXEFGkCC+58MUC/F2af/gKznEYNzHgmNBUBCk/BTklyUsNu0mIXmyGE4tTA0PA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/gql-tag-operations@6.1.0': + resolution: {integrity: sha512-AmMcZFwonufvWJnQm7I0lBxKpAm+35BcCrOOvUlBoviohiR17aPoTGAOaNAEtpcpI86lnZ9m9AXUdiKMdm8nnQ==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/plugin-helpers@7.1.0': + resolution: {integrity: sha512-ieJH7kZ5oSZKBPJs7CvHMrFY/CLYLklqv74ir93qMwRna6geZsbIMoJzTDBXohxcQTITiProiYSGrEtZjIpYGg==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/schema-ast@6.1.0': + resolution: {integrity: sha512-/xuGkM5gUNFRoaQLumKbENdX7Hc8ha49z9OXsEZY8E+46mMjqzXGF0NtCJ892cmoX7EUgI5c8T+LZqS2upx2Aw==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/typed-document-node@7.1.0': + resolution: {integrity: sha512-V6H+ItyqXtYY+JQb76LAoN627Xfzpn29/ifwCFAv61iEepzNzh86sa+yZclflr0G8LDmhcVY5hpPJd3a1qbOfw==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/typescript-operations@6.1.0': + resolution: {integrity: sha512-zv0ohBJqLP1G/Kgiq1MhLTdNmakChtJivpaMaBmuPz9gasKWJkc9MhxuVytF6xS27PkJOh81TNM9srAkqpdejA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + graphql-sock: ^1.0.0 + peerDependenciesMeta: + graphql-sock: + optional: true + + '@graphql-codegen/typescript@6.1.0': + resolution: {integrity: sha512-2Hu3111O/AwV28Ap7tNsixlmXSAJuQbQArQklx+IC/tNswpckZnCfmlcBtTJrGU1+mJXEneJXGfb2XWvKjbhlQ==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-codegen/visitor-plugin-common@7.2.0': + resolution: {integrity: sha512-qqtTY8taONuxlR0HvD8z+zgWC3CfJ47M2rATx+geWNIN8v8Itc5TflHYxjkWAtNL6E3q7WZRY5P7se+2S3EjBg==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-hive/signal@2.0.0': + resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==} + engines: {node: '>=20.0.0'} + + '@graphql-tools/apollo-engine-loader@8.0.32': + resolution: {integrity: sha512-717/RCJQd0RDuv50rqGtIR7KrAR2h/fWYhBeVnSq5zYPyMOVxpSCoB1dHYws3fFENar021mgHyGNcPwJO5Fb3A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/batch-execute@10.0.9': + resolution: {integrity: sha512-khIgAPlyaWJ3dVX6SsqOkABZCH1Gii32WHn3xMzavupsxPCfb/9G3zjdswptzTFrOcZ92dWo7MXvwNFkRfNN4w==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/code-file-loader@8.1.34': + resolution: {integrity: sha512-MOyXRh94EvBVIhlS8kh3aRhQiOdPfiCZvfd7g5/t7cW3VMa+Z0sfuNI5r7E2VxXZkZUsJ6yRj56EwAPY5fR4Jw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/delegate@12.0.19': + resolution: {integrity: sha512-TFDKalXQub5dV7FO1y+3kwwJm337jwUFkTmXHlmYAtTZTxDuSVeHc74OfnepFe+6zEDriHqhHKvxSq5TpHCTvA==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/documents@1.0.1': + resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-common@1.0.6': + resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-graphql-ws@3.1.5': + resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-http@3.3.0': + resolution: {integrity: sha512-IkKXIjSg9U8MNsQUBVJAXE4+LSxaQ0cs7p5JTALLGDABY1o17vPDRwWALsX81AXD5dY27ihi/+OhGMueW/Fopg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-legacy-ws@1.1.30': + resolution: {integrity: sha512-sCY1Fn5M7/1eMbFuvEwzGqAdjdkKECUWbaTO1lo3RQVyHC8HUYe/DB/tEoQfT7TQarauX9KjXsSf2uqCyJyOOQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor@1.5.5': + resolution: {integrity: sha512-JAdn4G+ehthnGdJABS+wO6LxAIcoGPiSRHIz1ECYLtaQGkpFIdqH6BLUbZcToX/W/nmOG0kTFLoepCGkugbsBA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/git-loader@8.0.38': + resolution: {integrity: sha512-uY6/Mth0nv35Jg6VSwZA0x19oALxuLnS9wU9r6L1QUDqMQib5agvbSjUGwond8vDXM0U5ZeDDnuyvpGz9yMH5w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/github-loader@9.1.4': + resolution: {integrity: sha512-+ul7Y5f7a5r9nc0KWaDt+Rf0NdRzU3L4njvVURcZM2oxn2RcHIVLZQBMjglO/Q8vgC+IUBtQ7C0llgBOBHiQKA==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-file-loader@8.1.16': + resolution: {integrity: sha512-1OFMnmadqwAalty2nka8EpejM1T9QCgtNApGMTvIsz141y9lfK3Xj9lNTgsJk+u2kyjsEYyo3F+tc6wEqMdqTA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-tag-pluck@8.3.33': + resolution: {integrity: sha512-12nfDKx1wpe5Zd2VhUCuZKaNzd0/ZQf1X5M8jHkRloGA61k+vr7dTDdlWrWcGDr1EufuoviL+e1UqGxD8D9PWg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/import@7.1.16': + resolution: {integrity: sha512-vx2v9qqiQF15RK3O68kaqSXDQ/++xU4qkcNBCME3Y82qLGsKNPNJT8alklWlAJAvFs7LrXrCr+ZqbidO4pYaxw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/json-file-loader@8.0.30': + resolution: {integrity: sha512-Ij97Ij+Uz3hvuetRTLX8v/d3ZyT2i17nyZN1maCTHW3tOypUevnuW7TKJcX0rOCsiP0juIcnnG91hcKsBh0Ktw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/load@8.1.13': + resolution: {integrity: sha512-XstLIkH2gDVk3xlzbfNyR+MFGTaCop2rJSEyShXTnIy4Sh+DoNM6re8eXzZPIOs+N33kuOWm6e0EGE9tGpHUNQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.2.0': + resolution: {integrity: sha512-kChDH/sOxm3TCICup5NgTiz/aJBk+5GAuC0lfJS8FcRfsqZvlCkNwpsYTGAATBCJMrgZ9+csRugCjS97jPcNMw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@2.0.0': + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@7.1.6': + resolution: {integrity: sha512-uh4ikON4vCb95M8pjGRckucCAm7eq6TB9FXP0zZByaSO6dFkTR1jKrOSWrJ2qx+IR8B6bVaR/Zst9vGs26ZjXw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.36': + resolution: {integrity: sha512-g8S5aLirZInoi3NojzmBxwsZfVawOE0UBlVWYe8kDAR0FxS0riBDiyW7JnlAKayooHMRAMwGaze4RQU3VTTyig==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/url-loader@9.1.4': + resolution: {integrity: sha512-w65oPIvUxdJ8eSydIfG2jllbBY5+lijG1mCY22kpGcp/gqPUdH+L6TIr81ZeTZIWnV2DioSP7g3rLE4JGW6uyA==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@11.2.0': + resolution: {integrity: sha512-eu9h1R3j/wWc4rvmYJF5AKtlwniDzstrZ/c6KSz+HdI+n7I7iog9xyKmBfpUwSbG1TqPNZBzWjFMkzdYOKq6Bg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/wrap@11.1.18': + resolution: {integrity: sha512-qSstY1hw8rY3bTvy8NlRrJ4QOLtPdo6ykiv4y9EHaeYtNO3TWiIs0nLbUZX2F9wKT/i7T1aMbVysfeQoNmJvdQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-typed-document-node/core@3.2.0': resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -1290,6 +1582,140 @@ packages: cpu: [x64] os: [win32] + '@inquirer/ansi@2.0.7': + resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + + '@inquirer/checkbox@5.2.1': + resolution: {integrity: sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.1.1': + resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@11.2.1': + resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.2.2': + resolution: {integrity: sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.1.1': + resolution: {integrity: sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@3.0.3': + resolution: {integrity: sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.7': + resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + + '@inquirer/input@5.1.2': + resolution: {integrity: sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.1.1': + resolution: {integrity: sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.1.1': + resolution: {integrity: sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.5.2': + resolution: {integrity: sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.3.1': + resolution: {integrity: sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.2.1': + resolution: {integrity: sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.2.1': + resolution: {integrity: sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.0.7': + resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1315,6 +1741,12 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1330,75 +1762,311 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@pkgr/core@0.3.6': - resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} - engines: {node: ^14.18.0 || >=16.0.0} - - '@playwright/test@1.61.1': - resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} - engines: {node: '>=18'} - hasBin: true - - '@react-leaflet/core@2.1.0': - resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} - peerDependencies: - leaflet: ^1.9.0 - react: ^18.0.0 - react-dom: ^18.0.0 - - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - - '@rollup/pluginutils@5.4.0': - resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.62.2': - resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + '@oxc-parser/binding-android-arm-eabi@0.137.0': + resolution: {integrity: sha512-KDs+0VPdEmasOkpuJHW9V5WCF+cvYdMQv2Jd+aJXt+cxIx12NToRQRbXaRwUEDsZw+/jMk81Ve8ZFbjUkJTOwA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.2': - resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + '@oxc-parser/binding-android-arm64@0.137.0': + resolution: {integrity: sha512-WhALNzfy3x/RfC6bsqX+csavuUY0yHHE7XfgPE5M542uhoBZUUoGTPG+nkMbGoG4+gcfss5s7urMyn5QBHu0sw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.2': - resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + '@oxc-parser/binding-darwin-arm64@0.137.0': + resolution: {integrity: sha512-bFPr5hgmNMOMoyPTGtdsK4Ug21RovIPojRMgDDhSp1LtCnc/DkLwGONKjgRjszg677RlGnkYSviQ8hHaUPOVYA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.2': - resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + '@oxc-parser/binding-darwin-x64@0.137.0': + resolution: {integrity: sha512-CL5dMm1asqXIDZHg14FLxj3Mc36w8PI7xCWh1uA4is6z8g2XrIILoTcQYOxDbwzuk34RDPX5IAGUxZr6LA9KAg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.2': - resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.62.2': - resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + '@oxc-parser/binding-freebsd-x64@0.137.0': + resolution: {integrity: sha512-79h8rYGnSlKPGWo7mHr2ixO6ea7aW8B0CT965SZ8SLbNnCOH5aOYBTeVXUY6eMvEaiLyWr8Skuiugr5pDYgLGw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.137.0': + resolution: {integrity: sha512-ASgmlSimhGyr0lksgVIo6hibz1obnDq4qJbiMX/AzltfgPnanRrzG1Q+23g8ljOHOjv6dsznkUuCYL3gg0sY1Q==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + '@oxc-parser/binding-linux-arm-musleabihf@0.137.0': + resolution: {integrity: sha512-AU2J9aa22Sx32wRGnDjybOU9TQXXQUud5sdUi+ZB0XxwM8aToWLweV+yA0wlQm0yIUVqljquqoHCYEq9II8gJQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - libc: [musl] + + '@oxc-parser/binding-linux-arm64-gnu@0.137.0': + resolution: {integrity: sha512-GdEtiG89yMr7XkUGxifgodXEEm2f+xW2f9CpDjlgAnBOwhTmrpQMvhOGobLVKUyzf/qHBXW16smk5zbF3nZU6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.137.0': + resolution: {integrity: sha512-EGJ+Bs8iXx8KBH8DQ5BLoEm5lnHaYjlh4/8j8vFhrr/6z4tqONy5BZDzLpKmmNWlN6Hlc5r8YOuBVHqZ9vRFEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.137.0': + resolution: {integrity: sha512-vzFUQENy/fnbSe5DZWovq6tIBc1uhuMztanSW6rz1e9WdQE4gHwYuD7ZII6JnrJifd1R3RSoqiZbgRFlVL2tYQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.137.0': + resolution: {integrity: sha512-SfVI14HBQs9gtLcUD5hTt5hsNbdrqSUNg9S8muN+LhVQ5nf1WwH3hAoK6B9NKgdYgWAQSXFXGiiBedQ4r/BKuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.137.0': + resolution: {integrity: sha512-e7Ppy4FCIFNQxT/ikSeIWFoQ0l+N9vgtRBtLcyZXeolTzApyVoPqEXsYPrcdM/9i0Bwk8knvYd37vaEMxHyi6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.137.0': + resolution: {integrity: sha512-Bho5qFwdhqsIFR7gipYEUlqvi3SRrY8sugxXig380MIaakBB1PyU9+7dBiBVScfImTNWhijUxdBwqrprGdq5WA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.137.0': + resolution: {integrity: sha512-36mGWtg7PyFzjJwGDkH6/F4o2nIDEoKXLPr/X/lwqklkomQwJJt1I5GJVmGhovUEmgPK5WAeAZMqlFCehwiy9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.137.0': + resolution: {integrity: sha512-/Jqx6+N7A44n2BdvUr7pXhVr2vFjs6WGH3unZRczwrfiH0H1zY0QwKQMG/dtRiTlKGDKGukznPT8lx84/oEsZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.137.0': + resolution: {integrity: sha512-9Uj0qHNNl+OgT1UTGwF7ixIXU6T1u2SbMidmgPy/h1h/fl2gRS6YpAxxY1gwHofcWjoTwkoMFd8xs5Vuj6GOFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.137.0': + resolution: {integrity: sha512-gW2vfkytNGgMVADiuzdvOfw0mWG9za20F/1fCJsif5aBMAvWJTSbpIXbIe0XkOe0VENk+PadpQ7cZgUy2sUJcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.137.0': + resolution: {integrity: sha512-x+pFANF0yL5uK/6T7lu6SlR5qid6sp//eZXKLq5iNsIE+EQg6EaS8/wsW7E91nXXjpnPhSoMOHXShSVhGRdn8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.137.0': + resolution: {integrity: sha512-sQUqym80PFi6McRsIqfJrSu2JrSClEZIXXD+/FjAFoULEKzOPsldIdFBG96xdX8aVMzCNQ9792FPx3MfkEIrFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.137.0': + resolution: {integrity: sha512-2AsevxlvNN4WKxpEn3RtqD5zbqMaXF+T7JXblsP4gVuY+vC9dXS4ED/PwfRCliFqoeisYS3Iro4DHzxr0TEvVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.137.0': + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + + '@oxc-resolver/binding-android-arm-eabi@11.21.3': + resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.21.3': + resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.21.3': + resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.21.3': + resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.21.3': + resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': + resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': + resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': + resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.21.3': + resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': + resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': + resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': + resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': + resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.21.3': + resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.21.3': + resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.21.3': + resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.21.3': + resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': + resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.21.3': + resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==} + cpu: [x64] + os: [win32] + + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} + + '@playwright/test@1.61.1': + resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} + engines: {node: '>=18'} + hasBin: true + + '@react-leaflet/core@2.1.0': + resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + + '@repeaterjs/repeater@3.1.0': + resolution: {integrity: sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==} + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + cpu: [arm] + os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.62.2': resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} @@ -1521,6 +2189,20 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + + '@stylistic/stylelint-plugin@5.2.1': + resolution: {integrity: sha512-BMRWJVtO16uADJmKcGi6mreei/QYdOviABXuaCeHEc3T3pxo4wFYYSvnxIoyiPVfDJqX+DxQdnGkuc6KxsRaSw==} + peerDependencies: + stylelint: ^17.6.0 + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1589,6 +2271,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@typescript-eslint/eslint-plugin@8.63.0': resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1683,6 +2368,22 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/fetch@0.10.13': + resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.8.6': + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1715,6 +2416,10 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1748,6 +2453,10 @@ packages: array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -1770,6 +2479,10 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + autoprefixer@10.5.2: resolution: {integrity: sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==} engines: {node: ^10 || ^12 || >=14} @@ -1841,6 +2554,12 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case-all@2.1.0: + resolution: {integrity: sha512-v6b0WWWkZUMHVuYk82l+WROgkUm4qEN2w5hKRNWtEOYwWqUGoi8C6xH0l1RLF1EoWqDFK6MFclmN3od6ws3/uw==} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1850,6 +2569,9 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1866,10 +2588,26 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1905,6 +2643,10 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1915,6 +2657,15 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cosmiconfig@9.0.2: resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} engines: {node: '>=14'} @@ -1927,6 +2678,10 @@ packages: cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1986,6 +2741,17 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + + debounce@3.0.0: + resolution: {integrity: sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==} + engines: {node: '>=20'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2008,6 +2774,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2015,6 +2785,10 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2033,6 +2807,10 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} @@ -2085,6 +2863,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -2230,9 +3012,18 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.3: resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -2240,6 +3031,9 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fd-package-json@2.0.0: + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2249,6 +3043,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} @@ -2289,6 +3087,15 @@ packages: resolution: {integrity: sha512-j23EibVLnp4zNXGW7LjryXYa2X6U/M96yoOX+ybZxwkYajdxRNEqYY3zhh7y0i6kfISKS2jr+EJq1YTUDEv5+w==} engines: {node: '>= 6'} + formatly@0.3.0: + resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} + engines: {node: '>=18.3.0'} + hasBin: true + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} @@ -2325,6 +3132,9 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -2352,6 +3162,10 @@ packages: resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + globby@16.2.1: resolution: {integrity: sha512-JmsqJalahxxgW8V2ecSQ2G7UjPlI9cpKdrkG9KoNiXhd/YslXOTEB0cViENWUznuovIuNT+FkMbraDGjr4FCUg==} engines: {node: '>=20'} @@ -2363,14 +3177,46 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graphql-config@5.1.6: + resolution: {integrity: sha512-fCkYnm4Kdq3un0YIM4BCZHVR5xl0UeLP6syxxO7KAstdY7QVyVvTHP0kRPDYEP1v08uwtJVgis5sj3IOTLOniQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + graphql-request@5.2.0: resolution: {integrity: sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==} peerDependencies: graphql: 14 - 16 - graphql@16.14.2: - resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + graphql-tag@2.12.7: + resolution: {integrity: sha512-xnE/NFzy+0eIesvAsREJZ284zTl/wYuBAvpsFSDhRGRdRHdnE90M21Q3xAWyYInb0J756c6x0pIQ62+vtvOs1Q==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + graphql-ws@6.1.0: + resolution: {integrity: sha512-7ft6KWkuaLnLABwzEIimjUMeF0iByo2ThD6q0MICgsvp6nDuT5ppubKzEHniu8Kmlp5GNsLgr5dil8JMrIwUEQ==} + engines: {node: '>=20'} + peerDependencies: + '@fastify/websocket': ^10 || ^11 + crossws: ~0.3 + graphql: ^15.10.1 || ^16 || ^17 + ws: ^8 + peerDependenciesMeta: + '@fastify/websocket': + optional: true + crossws: + optional: true + ws: + optional: true + + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} @@ -2458,6 +3304,10 @@ packages: typescript: optional: true + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2466,10 +3316,17 @@ packages: resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -2480,9 +3337,16 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2502,6 +3366,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2523,6 +3391,22 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -2530,6 +3414,20 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2557,6 +3455,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2586,6 +3488,11 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + knip@6.26.0: + resolution: {integrity: sha512-e9eELEEpBpGTd4H4HB7818/DYj9dMzMyUqAddfYwUN/EbSkgIjOuWEF96W/xHsmV0SDrsdXjIM+oZ2xpPzPsBA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} @@ -2596,13 +3503,28 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + listr2@10.2.2: + resolution: {integrity: sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==} + engines: {node: '>=22.13.0'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2623,6 +3545,10 @@ packages: magicast@0.5.3: resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -2686,6 +3612,15 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meros@1.3.2: + resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2782,6 +3717,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -2796,6 +3735,10 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + nanoid@3.3.16: resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2811,6 +3754,11 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -2823,6 +3771,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} @@ -2830,6 +3782,10 @@ packages: resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -2843,6 +3799,10 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.2: resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} @@ -2853,6 +3813,13 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxc-parser@0.137.0: + resolution: {integrity: sha512-yFImD+WLElJpLKy8llG1qe4DCmMsL18peRp8XP1JKfig/gISbJkglnpDtX2aTmAn10kZF7164HbN2H8QPsXxGg==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.21.3: + resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2883,6 +3850,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2904,6 +3875,18 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + piccolore@0.1.3: resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} @@ -3116,6 +4099,16 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} + postcss-sorting@10.0.0: + resolution: {integrity: sha512-TXbU+h6vVRW+86c/+ewhWq9k7pr7ijASTnepVhCQiC87zAOTkvB1v2dHyWP+ggstSTX/PNvjzS+IOqzejndz9w==} + peerDependencies: + postcss: ^8.4.20 + + postcss-sorting@9.1.0: + resolution: {integrity: sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==} + peerDependencies: + postcss: ^8.4.20 + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -3222,6 +4215,15 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + remove-trailing-spaces@1.0.9: + resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + request-light@0.5.8: resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} @@ -3240,6 +4242,17 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -3256,6 +4269,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup@4.62.2: resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3264,6 +4280,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize.css@13.0.0: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} @@ -3299,6 +4318,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} + engines: {node: '>= 0.4'} + shiki@3.23.0: resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} @@ -3317,6 +4340,10 @@ packages: engines: {node: '>=20.19.5', npm: '>=10.8.2'} hasBin: true + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -3325,6 +4352,14 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + smol-toml@1.7.0: resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==} engines: {node: '>= 18'} @@ -3336,9 +4371,15 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sponge-case@2.0.3: + resolution: {integrity: sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw==} + stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3362,6 +4403,16 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + + style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + + stylelint-config-concentric-order@5.5.0: + resolution: {integrity: sha512-Vo30Q8ROo4VovI4mDrkX5xmLhu0D+73lJxNmhFt/uqNzPX2rLTqkI+l0ycvP0ffRrlIoJKooLLWx/NVpmPvXhw==} + stylelint-config-recommended@18.0.0: resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} engines: {node: '>=20.19.0'} @@ -3374,6 +4425,18 @@ packages: peerDependencies: stylelint: ^17.0.0 + stylelint-order@7.0.1: + resolution: {integrity: sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.18.0 || ^17.0.0 + + stylelint-order@8.1.1: + resolution: {integrity: sha512-LqsEB6VggJuu5v10RtkrQsBObcdwBE7GuAOlwfc/LR3VL/w8UqKX2BOLIjhyGt0Gne/njo7gRNGiJAKhfmPMNw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.18.0 || ^17.0.0 + stylelint@17.14.0: resolution: {integrity: sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==} engines: {node: '>=20.19.0'} @@ -3395,6 +4458,13 @@ packages: engines: {node: '>=16'} hasBin: true + swap-case@3.0.3: + resolution: {integrity: sha512-6p4op8wE9CQv7uDFzulI6YXUw4lD9n4oQierdbFThEKVWVQcbQcUjdP27W8XE7V4QnWmnq9jueSHceyyQnqQVA==} + + sync-fetch@0.6.0: + resolution: {integrity: sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==} + engines: {node: '>=18'} + synckit@0.11.13: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3403,6 +4473,10 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} + timeout-signal@2.0.0: + resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==} + engines: {node: '>=16'} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -3414,6 +4488,9 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3433,6 +4510,10 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-log@3.0.2: + resolution: {integrity: sha512-esq6hx2lM66sQV1YcFkIYTqrWWabmqBqobKHyn1CswdI5FgfQhkmiKiRWVGBNlIbdjBxEIkNvMIwLKKPgRYZLQ==} + engines: {node: '>=20', npm: '>=10'} + tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} @@ -3479,6 +4560,14 @@ packages: ultrahtml@1.7.0: resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} + unbash@4.0.2: + resolution: {integrity: sha512-8gwNZ29+0/3zmXw7ToIHZtg6wK37xnniRUdBt7B27xZxaxfgR5tGMaGHT0t0dLtBV9fXE7zurh0s6Z1DHVjfWg==} + engines: {node: '>=14'} + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -3525,6 +4614,10 @@ packages: unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + unstorage@1.17.5: resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} peerDependencies: @@ -3596,6 +4689,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3758,12 +4854,24 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + walk-up-path@4.0.0: + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} + engines: {node: 20 || >=22} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -3788,6 +4896,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -3800,6 +4912,18 @@ packages: resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} engines: {node: ^20.17.0 || >=22.9.0} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} @@ -3828,10 +4952,18 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@17.7.3: resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3876,6 +5008,13 @@ packages: snapshots: + '@ardatan/relay-compiler@13.0.1(graphql@16.14.2)': + dependencies: + '@babel/runtime': 7.29.7 + graphql: 16.14.2 + immutable: 5.1.9 + invariant: 2.2.4 + '@astrojs/check@0.9.9(prettier@3.9.5)(typescript@5.9.3)': dependencies: '@astrojs/language-server': 2.16.11(prettier@3.9.5)(typescript@5.9.3) @@ -3948,15 +5087,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.4.2(@types/node@26.1.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yaml@2.9.0)': + '@astrojs/react@4.4.2(@types/node@26.1.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yaml@2.9.0)': dependencies: '@types/react': 18.3.31 '@types/react-dom': 18.3.7(@types/react@18.3.31) - '@vitejs/plugin-react': 4.7.0(vite@6.4.3(@types/node@26.1.1)(yaml@2.9.0)) + '@vitejs/plugin-react': 4.7.0(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.7.0 - vite: 6.4.3(@types/node@26.1.1)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -4072,6 +5211,11 @@ snapshots: dependencies: '@babel/types': 7.29.7 + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -4486,11 +5630,55 @@ snapshots: '@emmetio/stream-reader@2.2.0': {} + '@emnapi/core@1.11.0': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@envelop/core@5.5.1': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@envelop/types': 5.2.1 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/types@5.2.1': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -4647,9 +5835,9 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@2.7.0))': dependencies: - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -4670,9 +5858,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.7.0)': + '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -4681,10 +5869,399 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@fastify/busboy@3.2.0': {} + '@fontsource/dm-sans@5.2.8': {} '@fontsource/lato@5.2.7': {} + '@graphql-codegen/add@7.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/cli@7.2.0(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2)(typescript@5.9.3)': + dependencies: + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@graphql-codegen/client-preset': 6.1.0(graphql@16.14.2) + '@graphql-codegen/core': 6.2.0(graphql@16.14.2) + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-tools/apollo-engine-loader': 8.0.32(graphql@16.14.2) + '@graphql-tools/code-file-loader': 8.1.34(graphql@16.14.2) + '@graphql-tools/git-loader': 8.0.38(graphql@16.14.2) + '@graphql-tools/github-loader': 9.1.4(@types/node@26.1.1)(graphql@16.14.2) + '@graphql-tools/graphql-file-loader': 8.1.16(graphql@16.14.2) + '@graphql-tools/json-file-loader': 8.0.30(graphql@16.14.2) + '@graphql-tools/load': 8.1.13(graphql@16.14.2) + '@graphql-tools/merge': 9.2.0(graphql@16.14.2) + '@graphql-tools/url-loader': 9.1.4(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@inquirer/prompts': 8.5.2(@types/node@26.1.1) + '@whatwg-node/fetch': 0.10.13 + chalk: 5.6.2 + cosmiconfig: 9.0.2(typescript@5.9.3) + debounce: 3.0.0 + detect-indent: 7.0.2 + graphql: 16.14.2 + graphql-config: 5.1.6(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2)(typescript@5.9.3) + is-glob: 4.0.3 + jiti: 2.7.0 + json-to-pretty-yaml: 1.2.2 + listr2: 10.2.2 + log-symbols: 7.0.1 + micromatch: 4.0.8 + shell-quote: 1.10.0 + string-env-interpolation: 1.0.1 + ts-log: 3.0.2 + tslib: 2.8.1 + yaml: 2.9.0 + yargs: 18.0.0 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - crossws + - graphql-sock + - supports-color + - typescript + - utf-8-validate + + '@graphql-codegen/client-preset@6.1.0(graphql@16.14.2)': + dependencies: + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 + '@graphql-codegen/add': 7.1.0(graphql@16.14.2) + '@graphql-codegen/gql-tag-operations': 6.1.0(graphql@16.14.2) + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-codegen/typed-document-node': 7.1.0(graphql@16.14.2) + '@graphql-codegen/typescript': 6.1.0(graphql@16.14.2) + '@graphql-codegen/typescript-operations': 6.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 7.2.0(graphql@16.14.2) + '@graphql-tools/documents': 1.0.1(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/core@6.2.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-tools/schema': 10.0.36(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/gql-tag-operations@6.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 7.2.0(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + auto-bind: 5.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/plugin-helpers@7.1.0(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + change-case-all: 2.1.0 + common-tags: 1.8.2 + graphql: 16.14.2 + import-from: 4.0.0 + tslib: 2.8.1 + + '@graphql-codegen/schema-ast@6.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/typed-document-node@7.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 7.2.0(graphql@16.14.2) + auto-bind: 5.0.1 + change-case-all: 2.1.0 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/typescript-operations@6.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-codegen/schema-ast': 6.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 7.2.0(graphql@16.14.2) + auto-bind: 5.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/typescript@6.1.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-codegen/schema-ast': 6.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 7.2.0(graphql@16.14.2) + auto-bind: 5.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-codegen/visitor-plugin-common@7.2.0(graphql@16.14.2)': + dependencies: + '@graphql-codegen/plugin-helpers': 7.1.0(graphql@16.14.2) + '@graphql-tools/optimize': 2.0.0(graphql@16.14.2) + '@graphql-tools/relay-operation-optimizer': 7.1.6(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + auto-bind: 5.0.1 + change-case-all: 2.1.0 + dependency-graph: 1.0.0 + graphql: 16.14.2 + graphql-tag: 2.12.7(graphql@16.14.2) + parse-filepath: 1.0.2 + tslib: 2.8.1 + + '@graphql-hive/signal@2.0.0': {} + + '@graphql-tools/apollo-engine-loader@8.0.32(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@whatwg-node/fetch': 0.10.13 + graphql: 16.14.2 + sync-fetch: 0.6.0 + tslib: 2.8.1 + + '@graphql-tools/batch-execute@10.0.9(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/code-file-loader@8.1.34(graphql@16.14.2)': + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.3.33(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + globby: 11.1.0 + graphql: 16.14.2 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/delegate@12.0.19(graphql@16.14.2)': + dependencies: + '@graphql-tools/batch-execute': 10.0.9(graphql@16.14.2) + '@graphql-tools/executor': 1.5.5(graphql@16.14.2) + '@graphql-tools/schema': 10.0.36(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/documents@1.0.1(graphql@16.14.2)': + dependencies: + graphql: 16.14.2 + lodash.sortby: 4.7.0 + tslib: 2.8.1 + + '@graphql-tools/executor-common@1.0.6(graphql@16.14.2)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + + '@graphql-tools/executor-graphql-ws@3.1.5(crossws@0.3.5)(graphql@16.14.2)': + dependencies: + '@graphql-tools/executor-common': 1.0.6(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.14.2 + graphql-ws: 6.1.0(crossws@0.3.5)(graphql@16.14.2)(ws@8.21.0) + isows: 1.0.7(ws@8.21.0) + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - '@fastify/websocket' + - bufferutil + - crossws + - utf-8-validate + + '@graphql-tools/executor-http@3.3.0(@types/node@26.1.1)(graphql@16.14.2)': + dependencies: + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/executor-common': 1.0.6(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + meros: 1.3.2(@types/node@26.1.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + + '@graphql-tools/executor-legacy-ws@1.1.30(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@types/ws': 8.18.1 + graphql: 16.14.2 + isomorphic-ws: 5.0.0(ws@8.21.0) + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@graphql-tools/executor@1.5.5(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/git-loader@8.0.38(graphql@16.14.2)': + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.3.33(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + is-glob: 4.0.3 + micromatch: 4.0.8 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/github-loader@9.1.4(@types/node@26.1.1)(graphql@16.14.2)': + dependencies: + '@graphql-tools/executor-http': 3.3.0(@types/node@26.1.1)(graphql@16.14.2) + '@graphql-tools/graphql-tag-pluck': 8.3.33(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + sync-fetch: 0.6.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + + '@graphql-tools/graphql-file-loader@8.1.16(graphql@16.14.2)': + dependencies: + '@graphql-tools/import': 7.1.16(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + globby: 11.1.0 + graphql: 16.14.2 + tslib: 2.8.1 + unixify: 1.0.0 + + '@graphql-tools/graphql-tag-pluck@8.3.33(graphql@16.14.2)': + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/import@7.1.16(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + resolve-from: 5.0.0 + tslib: 2.8.1 + + '@graphql-tools/json-file-loader@8.0.30(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + globby: 11.1.0 + graphql: 16.14.2 + tslib: 2.8.1 + unixify: 1.0.0 + + '@graphql-tools/load@8.1.13(graphql@16.14.2)': + dependencies: + '@graphql-tools/schema': 10.0.36(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + p-limit: 3.1.0 + tslib: 2.8.1 + + '@graphql-tools/merge@9.2.0(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/optimize@2.0.0(graphql@16.14.2)': + dependencies: + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/relay-operation-optimizer@7.1.6(graphql@16.14.2)': + dependencies: + '@ardatan/relay-compiler': 13.0.1(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/schema@10.0.36(graphql@16.14.2)': + dependencies: + '@graphql-tools/merge': 9.2.0(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/url-loader@9.1.4(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2)': + dependencies: + '@graphql-tools/executor-graphql-ws': 3.1.5(crossws@0.3.5)(graphql@16.14.2) + '@graphql-tools/executor-http': 3.3.0(@types/node@26.1.1)(graphql@16.14.2) + '@graphql-tools/executor-legacy-ws': 1.1.30(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@graphql-tools/wrap': 11.1.18(graphql@16.14.2) + '@types/ws': 8.18.1 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + isomorphic-ws: 5.0.0(ws@8.21.0) + sync-fetch: 0.6.0 + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - crossws + - utf-8-validate + + '@graphql-tools/utils@11.2.0(graphql@16.14.2)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/wrap@11.1.18(graphql@16.14.2)': + dependencies: + '@graphql-tools/delegate': 12.0.19(graphql@16.14.2) + '@graphql-tools/schema': 10.0.36(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + tslib: 2.8.1 + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': dependencies: graphql: 16.14.2 @@ -4877,6 +6454,125 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/ansi@2.0.7': {} + + '@inquirer/checkbox@5.2.1(@types/node@26.1.1)': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/confirm@6.1.1(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/core@11.2.1(@types/node@26.1.1)': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@26.1.1) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/editor@5.2.2(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/external-editor': 3.0.3(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/expand@5.1.1(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/external-editor@3.0.3(@types/node@26.1.1)': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/figures@2.0.7': {} + + '@inquirer/input@5.1.2(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/number@4.1.1(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/password@5.1.1(@types/node@26.1.1)': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/prompts@8.5.2(@types/node@26.1.1)': + dependencies: + '@inquirer/checkbox': 5.2.1(@types/node@26.1.1) + '@inquirer/confirm': 6.1.1(@types/node@26.1.1) + '@inquirer/editor': 5.2.2(@types/node@26.1.1) + '@inquirer/expand': 5.1.1(@types/node@26.1.1) + '@inquirer/input': 5.1.2(@types/node@26.1.1) + '@inquirer/number': 4.1.1(@types/node@26.1.1) + '@inquirer/password': 5.1.1(@types/node@26.1.1) + '@inquirer/rawlist': 5.3.1(@types/node@26.1.1) + '@inquirer/search': 4.2.1(@types/node@26.1.1) + '@inquirer/select': 5.2.1(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/rawlist@5.3.1(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/search@4.2.1(@types/node@26.1.1)': + dependencies: + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/select@5.2.1(@types/node@26.1.1)': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@26.1.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@26.1.1) + optionalDependencies: + '@types/node': 26.1.1 + + '@inquirer/type@4.0.7(@types/node@26.1.1)': + optionalDependencies: + '@types/node': 26.1.1 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4904,6 +6600,20 @@ snapshots: '@keyv/serialize@1.1.1': {} + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4913,10 +6623,137 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oslojs/encoding@1.1.0': {} + + '@oxc-parser/binding-android-arm-eabi@0.137.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.137.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.137.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.137.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.137.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.137.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.137.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.137.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.137.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.137.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.137.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.137.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.137.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.137.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.137.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.137.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.137.0': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.137.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.137.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.137.0': + optional: true + + '@oxc-project/types@0.137.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.21.3': + optional: true + + '@oxc-resolver/binding-android-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.21.3': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.21.3': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + optional: true - '@oslojs/encoding@1.1.0': {} + '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.21.3': + optional: true '@pkgr/core@0.3.6': {} @@ -4930,6 +6767,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@repeaterjs/repeater@3.1.0': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/pluginutils@5.4.0(rollup@4.62.2)': @@ -5050,6 +6889,32 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.63.0 + eslint: 10.7.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.5 + + '@stylistic/stylelint-plugin@5.2.1(stylelint@17.14.0(typescript@5.9.3))': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + postcss: 8.5.19 + postcss-selector-parser: 7.1.4 + postcss-value-parser: 4.2.0 + style-search: 0.1.0 + stylelint: 17.14.0(typescript@5.9.3) + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.7 @@ -5130,15 +6995,19 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': + '@types/ws@8.18.1': + dependencies: + '@types/node': 26.1.1 + + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/type-utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.63.0 - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -5146,14 +7015,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -5176,13 +7045,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.63.0 '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -5205,13 +7074,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -5223,7 +7092,7 @@ snapshots: '@ungap/structured-clone@1.3.3': {} - '@vitejs/plugin-react@4.7.0(vite@6.4.3(@types/node@26.1.1)(yaml@2.9.0))': + '@vitejs/plugin-react@4.7.0(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -5231,7 +7100,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.3(@types/node@26.1.1)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -5285,6 +7154,27 @@ snapshots: '@vscode/l10n@0.0.18': {} + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/fetch@0.10.13': + dependencies: + '@whatwg-node/node-fetch': 0.8.6 + urlpattern-polyfill: 10.1.0 + + '@whatwg-node/node-fetch@0.8.6': + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/promise-helpers@1.3.2': + dependencies: + tslib: 2.8.1 + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -5317,6 +7207,10 @@ snapshots: dependencies: string-width: 4.2.3 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -5340,6 +7234,8 @@ snapshots: array-iterate@2.0.1: {} + array-union@2.1.0: {} + astral-regex@2.0.0: {} astro-eslint-parser@1.4.0: @@ -5359,7 +7255,7 @@ snapshots: transitivePeerDependencies: - supports-color - astro@5.18.2(@types/node@26.1.1)(rollup@4.62.2)(typescript@5.9.3)(yaml@2.9.0): + astro@5.18.2(@types/node@26.1.1)(jiti@2.7.0)(rollup@4.62.2)(typescript@5.9.3)(yaml@2.9.0): dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/internal-helpers': 0.7.6 @@ -5416,8 +7312,8 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.5 vfile: 6.0.3 - vite: 6.4.3(@types/node@26.1.1)(yaml@2.9.0) - vitefu: 1.1.3(vite@6.4.3(@types/node@26.1.1)(yaml@2.9.0)) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -5468,6 +7364,8 @@ snapshots: asynckit@0.4.0: {} + auto-bind@5.0.1: {} + autoprefixer@10.5.2(postcss@8.5.19): dependencies: browserslist: 4.28.6 @@ -5539,12 +7437,23 @@ snapshots: chalk@5.6.2: {} + change-case-all@2.1.0: + dependencies: + change-case: 5.4.4 + sponge-case: 2.0.3 + swap-case: 3.0.3 + title-case: 3.0.3 + + change-case@5.4.4: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} character-entities@2.0.2: {} + chardet@2.2.0: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -5557,12 +7466,29 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.2.0: + dependencies: + slice-ansi: 8.0.0 + string-width: 8.2.2 + + cli-width@4.1.0: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clsx@2.1.1: {} color-convert@2.0.1: @@ -5593,12 +7519,23 @@ snapshots: common-ancestor-path@1.0.1: {} + common-tags@1.8.2: {} + convert-source-map@2.0.0: {} cookie-es@1.2.3: {} cookie@1.1.1: {} + cosmiconfig@8.3.6(typescript@5.9.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + cosmiconfig@9.0.2(typescript@5.9.3): dependencies: env-paths: 2.2.1 @@ -5614,6 +7551,10 @@ snapshots: transitivePeerDependencies: - encoding + cross-inspect@1.0.1: + dependencies: + tslib: 2.8.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -5672,6 +7613,12 @@ snapshots: csstype@3.2.3: {} + data-uri-to-buffer@4.0.1: {} + + dataloader@2.2.3: {} + + debounce@3.0.0: {} + debug@4.4.3: dependencies: ms: 2.1.3 @@ -5686,10 +7633,14 @@ snapshots: delayed-stream@1.0.0: {} + dependency-graph@1.0.0: {} + dequal@2.0.3: {} destr@2.0.5: {} + detect-indent@7.0.2: {} + detect-libc@2.1.2: {} deterministic-object-hash@2.0.2: @@ -5704,6 +7655,10 @@ snapshots: diff@8.0.4: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + dlv@1.1.3: {} dom-serializer@2.0.0: @@ -5751,6 +7706,8 @@ snapshots: env-paths@2.2.1: {} + environment@1.1.0: {} + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -5836,30 +7793,30 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.6.5(eslint@10.7.0): + eslint-compat-utils@0.6.5(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) semver: 7.8.5 - eslint-plugin-astro@1.7.0(eslint@10.7.0): + eslint-plugin-astro@1.7.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 '@typescript-eslint/types': 8.63.0 astro-eslint-parser: 1.4.0 - eslint: 10.7.0 - eslint-compat-utils: 0.6.5(eslint@10.7.0) + eslint: 10.7.0(jiti@2.7.0) + eslint-compat-utils: 0.6.5(eslint@10.7.0(jiti@2.7.0)) globals: 16.5.0 postcss: 8.5.19 postcss-selector-parser: 7.1.4 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@7.1.1(eslint@10.7.0): + eslint-plugin-react-hooks@7.1.1(eslint@10.7.0(jiti@2.7.0)): dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - eslint: 10.7.0 + eslint: 10.7.0(jiti@2.7.0) hermes-parser: 0.25.1 zod: 4.4.3 zod-validation-error: 4.0.2(zod@4.4.3) @@ -5884,9 +7841,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.7.0: + eslint@10.7.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -5916,6 +7873,8 @@ snapshots: minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -5969,18 +7928,37 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.3: {} + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fastest-levenshtein@1.0.16: {} fastq@1.20.1: dependencies: reusify: 1.1.0 + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: picomatch: 4.0.5 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + file-entry-cache@11.1.5: dependencies: flat-cache: 6.1.23 @@ -6029,6 +8007,14 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 + formatly@0.3.0: + dependencies: + fd-package-json: 2.0.0 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fraction.js@5.3.4: {} fsevents@2.3.2: @@ -6063,6 +8049,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -6087,6 +8077,15 @@ snapshots: globals@17.7.0: {} + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + globby@16.2.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -6100,6 +8099,28 @@ snapshots: gopd@1.2.0: {} + graphql-config@5.1.6(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2)(typescript@5.9.3): + dependencies: + '@graphql-tools/graphql-file-loader': 8.1.16(graphql@16.14.2) + '@graphql-tools/json-file-loader': 8.0.30(graphql@16.14.2) + '@graphql-tools/load': 8.1.13(graphql@16.14.2) + '@graphql-tools/merge': 9.2.0(graphql@16.14.2) + '@graphql-tools/url-loader': 9.1.4(@types/node@26.1.1)(crossws@0.3.5)(graphql@16.14.2) + '@graphql-tools/utils': 11.2.0(graphql@16.14.2) + cosmiconfig: 8.3.6(typescript@5.9.3) + graphql: 16.14.2 + jiti: 2.7.0 + minimatch: 10.2.5 + string-env-interpolation: 1.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - crossws + - typescript + - utf-8-validate + graphql-request@5.2.0(graphql@16.14.2): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) @@ -6110,6 +8131,18 @@ snapshots: transitivePeerDependencies: - encoding + graphql-tag@2.12.7(graphql@16.14.2): + dependencies: + graphql: 16.14.2 + tslib: 2.8.1 + + graphql-ws@6.1.0(crossws@0.3.5)(graphql@16.14.2)(ws@8.21.0): + dependencies: + graphql: 16.14.2 + optionalDependencies: + crossws: 0.3.5 + ws: 8.21.0 + graphql@16.14.2: {} h3@1.15.11: @@ -6251,23 +8284,40 @@ snapshots: optionalDependencies: typescript: 5.9.3 + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} ignore@7.0.6: {} + immutable@5.1.9: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + import-from@4.0.0: {} + import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} ini@1.3.8: {} + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + iron-webcrypto@1.2.1: {} + is-absolute@1.0.0: + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + is-arrayish@0.2.1: {} is-arrayish@0.3.4: {} @@ -6278,6 +8328,10 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.6.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -6292,12 +8346,34 @@ snapshots: is-plain-obj@4.1.0: {} + is-relative@1.0.0: + dependencies: + is-unc-path: 1.0.0 + + is-unc-path@1.0.0: + dependencies: + unc-path-regex: 0.1.2 + + is-unicode-supported@2.1.0: {} + + is-windows@1.0.2: {} + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 isexe@2.0.0: {} + isomorphic-ws@5.0.0(ws@8.21.0): + dependencies: + ws: 8.21.0 + + isows@1.0.7(ws@8.21.0): + dependencies: + ws: 8.21.0 + + jiti@2.7.0: {} + js-tokens@4.0.0: {} js-yaml@4.3.0: @@ -6316,6 +8392,11 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-to-pretty-yaml@1.2.2: + dependencies: + remedial: 1.0.8 + remove-trailing-spaces: 1.0.9 + json5@2.2.3: {} jsonc-parser@2.3.1: {} @@ -6336,6 +8417,22 @@ snapshots: kleur@4.1.5: {} + knip@6.26.0: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + formatly: 0.3.0 + get-tsconfig: 4.14.0 + jiti: 2.7.0 + oxc-parser: 0.137.0 + oxc-resolver: 11.21.3 + picomatch: 4.0.5 + smol-toml: 1.7.0 + strip-json-comments: 5.0.3 + tinyglobby: 0.2.17 + unbash: 4.0.2 + yaml: 2.9.0 + zod: 4.4.3 + leaflet@1.9.4: {} levn@0.4.1: @@ -6345,12 +8442,35 @@ snapshots: lines-and-columns@1.2.4: {} + listr2@10.2.2: + dependencies: + cli-truncate: 5.2.0 + eventemitter3: 5.0.4 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 10.0.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.sortby@4.7.0: {} + lodash.truncate@4.4.2: {} + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -6373,6 +8493,8 @@ snapshots: '@babel/types': 7.29.7 source-map-js: 1.2.1 + map-cache@0.2.2: {} + markdown-table@3.0.4: {} math-intrinsics@1.1.0: {} @@ -6507,6 +8629,10 @@ snapshots: merge2@1.4.1: {} + meros@1.3.2(@types/node@26.1.1): + optionalDependencies: + '@types/node': 26.1.1 + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -6709,6 +8835,8 @@ snapshots: dependencies: mime-db: 1.52.0 + mimic-function@5.0.1: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.7 @@ -6719,6 +8847,8 @@ snapshots: muggle-string@0.4.1: {} + mute-stream@3.0.0: {} + nanoid@3.3.16: {} natural-compare@1.4.0: {} @@ -6729,16 +8859,28 @@ snapshots: dependencies: '@types/nlcst': 2.0.3 + node-domexception@1.0.0: {} + node-fetch-native@1.6.7: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-mock-http@1.0.4: {} node-releases@2.0.51: {} + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + normalize-path@3.0.0: {} nth-check@2.1.1: @@ -6753,6 +8895,10 @@ snapshots: ohash@2.0.11: {} + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.2: {} oniguruma-to-es@4.3.6: @@ -6770,6 +8916,53 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-parser@0.137.0: + dependencies: + '@oxc-project/types': 0.137.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.137.0 + '@oxc-parser/binding-android-arm64': 0.137.0 + '@oxc-parser/binding-darwin-arm64': 0.137.0 + '@oxc-parser/binding-darwin-x64': 0.137.0 + '@oxc-parser/binding-freebsd-x64': 0.137.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.137.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.137.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.137.0 + '@oxc-parser/binding-linux-arm64-musl': 0.137.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.137.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.137.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.137.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.137.0 + '@oxc-parser/binding-linux-x64-gnu': 0.137.0 + '@oxc-parser/binding-linux-x64-musl': 0.137.0 + '@oxc-parser/binding-openharmony-arm64': 0.137.0 + '@oxc-parser/binding-wasm32-wasi': 0.137.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.137.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.137.0 + '@oxc-parser/binding-win32-x64-msvc': 0.137.0 + + oxc-resolver@11.21.3: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.21.3 + '@oxc-resolver/binding-android-arm64': 11.21.3 + '@oxc-resolver/binding-darwin-arm64': 11.21.3 + '@oxc-resolver/binding-darwin-x64': 11.21.3 + '@oxc-resolver/binding-freebsd-x64': 11.21.3 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.3 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.3 + '@oxc-resolver/binding-linux-arm64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-arm64-musl': 11.21.3 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-riscv64-musl': 11.21.3 + '@oxc-resolver/binding-linux-s390x-gnu': 11.21.3 + '@oxc-resolver/binding-linux-x64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-x64-musl': 11.21.3 + '@oxc-resolver/binding-openharmony-arm64': 11.21.3 + '@oxc-resolver/binding-wasm32-wasi': 11.21.3 + '@oxc-resolver/binding-win32-arm64-msvc': 11.21.3 + '@oxc-resolver/binding-win32-x64-msvc': 11.21.3 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -6797,6 +8990,12 @@ snapshots: dependencies: callsites: 3.1.0 + parse-filepath@1.0.2: + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.29.7 @@ -6823,6 +9022,14 @@ snapshots: path-key@3.1.1: {} + path-root-regex@0.1.2: {} + + path-root@0.1.1: + dependencies: + path-root-regex: 0.1.2 + + path-type@4.0.0: {} + piccolore@0.1.3: {} picocolors@1.1.1: {} @@ -7094,6 +9301,14 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-sorting@10.0.0(postcss@8.5.19): + dependencies: + postcss: 8.5.19 + + postcss-sorting@9.1.0(postcss@8.5.19): + dependencies: + postcss: 8.5.19 + postcss-value-parser@4.2.0: {} postcss@8.5.19: @@ -7224,6 +9439,12 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remedial@1.0.8: {} + + remove-trailing-separator@1.1.0: {} + + remove-trailing-spaces@1.0.9: {} + request-light@0.5.8: {} request-light@0.7.0: {} @@ -7234,6 +9455,15 @@ snapshots: resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -7261,6 +9491,8 @@ snapshots: reusify@1.1.0: {} + rfdc@1.4.1: {} + rollup@4.62.2: dependencies: '@types/estree': 1.0.9 @@ -7296,6 +9528,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safer-buffer@2.1.2: {} + sanitize.css@13.0.0: {} sax@1.6.0: {} @@ -7372,6 +9606,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.10.0: {} + shiki@3.23.0: dependencies: '@shikijs/core': 3.23.0 @@ -7398,6 +9634,8 @@ snapshots: arg: 5.0.2 sax: 1.6.0 + slash@3.0.0: {} + slash@5.1.0: {} slice-ansi@4.0.0: @@ -7406,14 +9644,28 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + smol-toml@1.7.0: {} source-map-js@1.2.1: {} space-separated-tokens@2.0.2: {} + sponge-case@2.0.3: {} + stream-replace-string@2.0.0: {} + string-env-interpolation@1.0.1: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -7444,6 +9696,16 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-json-comments@5.0.3: {} + + style-search@0.1.0: {} + + stylelint-config-concentric-order@5.5.0(stylelint@17.14.0(typescript@5.9.3)): + dependencies: + stylelint-order: 7.0.1(stylelint@17.14.0(typescript@5.9.3)) + transitivePeerDependencies: + - stylelint + stylelint-config-recommended@18.0.0(stylelint@17.14.0(typescript@5.9.3)): dependencies: stylelint: 17.14.0(typescript@5.9.3) @@ -7453,6 +9715,18 @@ snapshots: stylelint: 17.14.0(typescript@5.9.3) stylelint-config-recommended: 18.0.0(stylelint@17.14.0(typescript@5.9.3)) + stylelint-order@7.0.1(stylelint@17.14.0(typescript@5.9.3)): + dependencies: + postcss: 8.5.19 + postcss-sorting: 9.1.0(postcss@8.5.19) + stylelint: 17.14.0(typescript@5.9.3) + + stylelint-order@8.1.1(stylelint@17.14.0(typescript@5.9.3)): + dependencies: + postcss: 8.5.19 + postcss-sorting: 10.0.0(postcss@8.5.19) + stylelint: 17.14.0(typescript@5.9.3) + stylelint@17.14.0(typescript@5.9.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) @@ -7513,6 +9787,14 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 + swap-case@3.0.3: {} + + sync-fetch@0.6.0: + dependencies: + node-fetch: 3.3.2 + timeout-signal: 2.0.0 + whatwg-mimetype: 4.0.0 + synckit@0.11.13: dependencies: '@pkgr/core': 0.3.6 @@ -7525,6 +9807,8 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + timeout-signal@2.0.0: {} + tiny-inflate@1.0.3: {} tinyexec@1.2.4: {} @@ -7534,6 +9818,10 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 + title-case@3.0.3: + dependencies: + tslib: 2.8.1 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -7548,12 +9836,13 @@ snapshots: dependencies: typescript: 5.9.3 + ts-log@3.0.2: {} + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 - tslib@2.8.1: - optional: true + tslib@2.8.1: {} type-check@0.4.0: dependencies: @@ -7567,13 +9856,13 @@ snapshots: dependencies: semver: 7.8.5 - typescript-eslint@8.63.0(eslint@10.7.0)(typescript@5.9.3): + typescript-eslint@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - eslint: 10.7.0 + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.7.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7584,6 +9873,10 @@ snapshots: ultrahtml@1.7.0: {} + unbash@4.0.2: {} + + unc-path-regex@0.1.2: {} + uncrypto@0.1.3: {} undici-types@7.18.2: {} @@ -7650,6 +9943,10 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + unixify@1.0.0: + dependencies: + normalize-path: 2.1.1 + unstorage@1.17.5: dependencies: anymatch: 3.1.3 @@ -7671,6 +9968,8 @@ snapshots: dependencies: punycode: 2.3.1 + urlpattern-polyfill@10.1.0: {} + util-deprecate@1.0.2: {} vfile-location@5.0.3: @@ -7688,7 +9987,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.4.3(@types/node@26.1.1)(yaml@2.9.0): + vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.5) @@ -7699,11 +9998,12 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 fsevents: 2.3.3 + jiti: 2.7.0 yaml: 2.9.0 - vitefu@1.1.3(vite@6.4.3(@types/node@26.1.1)(yaml@2.9.0)): + vitefu@1.1.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0)): optionalDependencies: - vite: 6.4.3(@types/node@26.1.1)(yaml@2.9.0) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0) volar-service-css@0.0.71(@volar/language-service@2.4.28): dependencies: @@ -7811,10 +10111,16 @@ snapshots: vscode-uri@3.1.0: {} + walk-up-path@4.0.0: {} + web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} + whatwg-mimetype@4.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -7836,6 +10142,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.2 + strip-ansi: 7.2.0 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -7852,6 +10164,8 @@ snapshots: dependencies: signal-exit: 4.1.0 + ws@8.21.0: {} + xxhash-wasm@1.1.0: {} y18n@5.0.8: {} @@ -7879,6 +10193,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@17.7.3: dependencies: cliui: 8.0.1 @@ -7889,6 +10205,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} diff --git a/scripts/fetchData.ts b/scripts/fetchData.ts index 322cfc05..56b08914 100644 --- a/scripts/fetchData.ts +++ b/scripts/fetchData.ts @@ -1,9 +1,17 @@ // Run with plain `node scripts/fetchData.ts` (Node >= 22 type stripping — the // type-only import below is erased, so no ts-node/tsc is needed at runtime). -import { GraphQLClient, gql } from 'graphql-request'; +// The GraphQL documents live in scripts/graphql/*.graphql so graphql-codegen +// can parse them (interpolated template literals break its tag plucker); the +// same files are read here at runtime. +import { GraphQLClient } from 'graphql-request'; import fs from 'fs'; import path from 'path'; -import type { AllDataQuery } from '../generated/types'; +import type { + ProjectScanQuery, + ProjectsByIdsQuery, + PublicProjectsQuery, + RestDataQuery, +} from '../generated/types'; const datadir = path.join(import.meta.dirname, '../fullData'); const outputPath = path.join(datadir, 'staticData.json'); @@ -23,102 +31,36 @@ const forceFull = process.env.FORCE_FULL_FETCH === '1' || process.env.FORCE_FULL const graphQLClient = new GraphQLClient(GRAPHQL_ENDPOINT); -const dummyData: AllDataQuery = { +const gqlDir = path.join(import.meta.dirname, 'graphql'); +const readDoc = (name: string) => fs.readFileSync(path.join(gqlDir, name), 'utf8'); +const projectFieldsFragment = readDoc('projectFields.graphql'); +const scanQuery = readDoc('projectScan.graphql'); +const projectsQuery = `${readDoc('publicProjects.graphql')}\n${projectFieldsFragment}`; +const projectsByIdsQuery = `${readDoc('projectsByIds.graphql')}\n${projectFieldsFragment}`; +const restQuery = readDoc('restData.graphql'); + +// staticData.json's shape: the singular rest-data plus the project list. +type StaticData = RestDataQuery & Pick; +type PublicProjects = NonNullable; +type ProjectResult = NonNullable[number]; + +const dummyData: StaticData = { publicProjects: { results: [], totalCount: 0 }, communityStats: { - id: '0', totalContributors: 1, totalUserGroups: 1, totalSwipes: 1, + id: '0', totalContributors: 1, totalSwipes: 1, }, publicOrganizations: { results: [] }, globalExportAssets: [], }; -// Only fields the pages render (see the page slim functions). Shared between the -// full and by-id project queries so the selection can't drift. -const PROJECT_FIELDS = ` - id - exportAggregatedResultsWithGeometry { id fileSize file { url } mimetype } - exportAggregatedResults { id fileSize file { url } mimetype } - exportAreaOfInterest { id fileSize file { url } mimetype } - exportGroups { id fileSize file { url } mimetype } - exportHistory { id fileSize file { url } mimetype modifiedAt } - exportResults { id fileSize file { url } mimetype } - exportTasks { id fileSize file { url } mimetype } - exportUsers { id fileSize file { url } mimetype } - exportHotTaskingManagerGeometries { id fileSize file { url } mimetype } - exportModerateToHighAgreementYesMaybeGeometries { id fileSize file { url } mimetype } - name - firebaseId - image { file { url } } - description - requestingOrganization { id name } - progress - status - projectType - createdAt - modifiedAt - lastContributionDate - region - requestingOrganizationId - numberOfContributorUsers - aoiGeometry { centroid id totalArea bbox } - aoiGeometryInputAsset { id fileSize file { url } mimetype } -`; - -const STATUS_FILTER = 'status: { inList: [PUBLISHED, FINISHED] }'; - -// Cheap change-detection scan: id + the two timestamps that signal a change. -// `modifiedAt` covers project edits; `lastContributionDate` covers new swipes/ -// contributions that update progress without bumping `modifiedAt`. -const scanQuery = gql` - query ProjectScan($limit: Int!, $offset: Int!) { - publicProjects(filters: { ${STATUS_FILTER} }, pagination: { limit: $limit, offset: $offset }) { - results { id modifiedAt lastContributionDate } - totalCount - } - } -`; - -// Full fetch of all projects (cold / forced-full path). -const projectsQuery = gql` - query PublicProjects($limit: Int!, $offset: Int!) { - publicProjects(filters: { ${STATUS_FILTER} }, pagination: { limit: $limit, offset: $offset }) { - results { ${PROJECT_FIELDS} } - totalCount - } - } -`; - -// Full fetch restricted to a set of ids (incremental path). -const projectsByIdsQuery = gql` - query ProjectsByIds($ids: [ID!], $limit: Int!, $offset: Int!) { - publicProjects(filters: { ${STATUS_FILTER}, id: { inList: $ids } }, pagination: { limit: $limit, offset: $offset }) { - results { ${PROJECT_FIELDS} } - totalCount - } - } -`; - -// The non-project data — small, singular, fetched every run. -const restQuery = gql` - query RestData { - communityStats { id totalContributors totalSwipes } - publicOrganizations(pagination: { limit: 9999 }) { results { id name } } - globalExportAssets { type lastUpdatedAt fileSize file { url name } } - } -`; - -type PublicProjects = NonNullable; -type ProjectResult = NonNullable[number]; - async function fetchAllProjects(): Promise { const results: ProjectResult[] = []; let offset = 0; let totalCount = 0; for (;;) { - const page = (await graphQLClient.request(projectsQuery, { limit: PROJECTS_PAGE_SIZE, offset, - })) as AllDataQuery; + })) as PublicProjectsQuery; const pageResults = page.publicProjects?.results ?? []; totalCount = page.publicProjects?.totalCount ?? totalCount; results.push(...pageResults); @@ -131,29 +73,23 @@ async function fetchAllProjects(): Promise { return { results, totalCount }; } -// A project is considered changed when either timestamp differs. Note the -// generated `AllDataQuery` type predates `lastContributionDate`; it is present -// at runtime (fetched in both the scan and PROJECT_FIELDS) so reads are safe. +// A project is considered changed when either timestamp differs: `modifiedAt` +// covers project edits; `lastContributionDate` covers new swipes that update +// progress without bumping `modifiedAt`. type ChangeKeyFields = { modifiedAt?: string | null; lastContributionDate?: string | null }; function changeSignature(p: ChangeKeyFields): string { return `${p.modifiedAt ?? ''}|${p.lastContributionDate ?? ''}`; } -type ScanRow = { id: string; modifiedAt?: string | null; lastContributionDate?: string | null }; -type ScanResponse = { - publicProjects?: { results?: ScanRow[] | null; totalCount?: number | null } | null; -}; - // Cheap scan → Map of the current published/finished set. async function scanProjects(): Promise> { const map = new Map(); let offset = 0; let totalCount = 0; for (;;) { - const page = (await graphQLClient.request(scanQuery, { limit: SCAN_PAGE_SIZE, offset, - })) as ScanResponse; + })) as ProjectScanQuery; const pageResults = page.publicProjects?.results ?? []; totalCount = page.publicProjects?.totalCount ?? totalCount; pageResults.forEach((p) => map.set(p.id, changeSignature(p))); @@ -170,10 +106,9 @@ async function fetchProjectsByIds(ids: string[]): Promise { const out: ProjectResult[] = []; for (let i = 0; i < ids.length; i += PROJECTS_PAGE_SIZE) { const batch = ids.slice(i, i + PROJECTS_PAGE_SIZE); - const page = (await graphQLClient.request(projectsByIdsQuery, { ids: batch, limit: PROJECTS_PAGE_SIZE, offset: 0, - })) as AllDataQuery; + })) as ProjectsByIdsQuery; out.push(...(page.publicProjects?.results ?? [])); } return out; @@ -183,7 +118,7 @@ async function fetchProjectsByIds(ids: string[]): Promise { // full data). In CI this file is restored from actions/cache before the run. function loadPreviousProjects(): Map | null { try { - const prev = JSON.parse(fs.readFileSync(outputPath, 'utf8')) as AllDataQuery; + const prev = JSON.parse(fs.readFileSync(outputPath, 'utf8')) as StaticData; const results = prev.publicProjects?.results ?? []; if (results.length === 0) { return null; @@ -216,7 +151,7 @@ async function fetchProjectsIncrementally(): Promise { // Assemble in the current scan order; deleted projects (in cache, not in // scan) are naturally excluded. Missing new ids (edge race) are dropped. const results: ProjectResult[] = []; - scan.forEach((_modifiedAt, id) => { + scan.forEach((_sig, id) => { const project = freshById.get(id) ?? prevById.get(id); if (project) { results.push(project); @@ -257,7 +192,7 @@ async function getCsrfTokenValue() { } async function fetchAndWriteData() { - let data: AllDataQuery; + let data: StaticData; if (pipelineType === 'ci') { data = dummyData; } else { @@ -275,7 +210,7 @@ async function fetchAndWriteData() { graphQLClient.setHeader('Referer', referer); const publicProjects = await fetchProjectsIncrementally(); - const rest = (await graphQLClient.request(restQuery)) as AllDataQuery; + const rest = (await graphQLClient.request(restQuery)) as RestDataQuery; data = { ...rest, publicProjects }; } diff --git a/scripts/graphql/projectFields.graphql b/scripts/graphql/projectFields.graphql new file mode 100644 index 00000000..ee4431ac --- /dev/null +++ b/scripts/graphql/projectFields.graphql @@ -0,0 +1,31 @@ +# Only fields the pages render (see the page slim functions). Shared by the +# full and by-id queries so the selection can't drift. +fragment ProjectFields on ProjectType { + id + exportAggregatedResultsWithGeometry { id fileSize file { url } mimetype } + exportAggregatedResults { id fileSize file { url } mimetype } + exportAreaOfInterest { id fileSize file { url } mimetype } + exportGroups { id fileSize file { url } mimetype } + exportHistory { id fileSize file { url } mimetype modifiedAt } + exportResults { id fileSize file { url } mimetype } + exportTasks { id fileSize file { url } mimetype } + exportUsers { id fileSize file { url } mimetype } + exportHotTaskingManagerGeometries { id fileSize file { url } mimetype } + exportModerateToHighAgreementYesMaybeGeometries { id fileSize file { url } mimetype } + name + firebaseId + image { file { url } } + description + requestingOrganization { id name } + progress + status + projectType + createdAt + modifiedAt + lastContributionDate + region + requestingOrganizationId + numberOfContributorUsers + aoiGeometry { centroid id totalArea bbox } + aoiGeometryInputAsset { id fileSize file { url } mimetype } +} diff --git a/scripts/graphql/projectScan.graphql b/scripts/graphql/projectScan.graphql new file mode 100644 index 00000000..8808148b --- /dev/null +++ b/scripts/graphql/projectScan.graphql @@ -0,0 +1,10 @@ +# Cheap change-detection scan: id + the two timestamps that signal a change. +query ProjectScan($limit: Int!, $offset: Int!) { + publicProjects( + filters: { status: { inList: [PUBLISHED, FINISHED] } }, + pagination: { limit: $limit, offset: $offset }, + ) { + results { id modifiedAt lastContributionDate } + totalCount + } +} diff --git a/scripts/graphql/projectsByIds.graphql b/scripts/graphql/projectsByIds.graphql new file mode 100644 index 00000000..bbacd083 --- /dev/null +++ b/scripts/graphql/projectsByIds.graphql @@ -0,0 +1,9 @@ +query ProjectsByIds($ids: [ID!], $limit: Int!, $offset: Int!) { + publicProjects( + filters: { status: { inList: [PUBLISHED, FINISHED] }, id: { inList: $ids } }, + pagination: { limit: $limit, offset: $offset }, + ) { + results { ...ProjectFields } + totalCount + } +} diff --git a/scripts/graphql/publicProjects.graphql b/scripts/graphql/publicProjects.graphql new file mode 100644 index 00000000..5b34f4aa --- /dev/null +++ b/scripts/graphql/publicProjects.graphql @@ -0,0 +1,9 @@ +query PublicProjects($limit: Int!, $offset: Int!) { + publicProjects( + filters: { status: { inList: [PUBLISHED, FINISHED] } }, + pagination: { limit: $limit, offset: $offset }, + ) { + results { ...ProjectFields } + totalCount + } +} diff --git a/scripts/graphql/restData.graphql b/scripts/graphql/restData.graphql new file mode 100644 index 00000000..e8ea9a22 --- /dev/null +++ b/scripts/graphql/restData.graphql @@ -0,0 +1,6 @@ +# The non-project data — small, singular, fetched every run. +query RestData { + communityStats { id totalContributors totalSwipes } + publicOrganizations(pagination: { limit: 9999 }) { results { id name } } + globalExportAssets { type lastUpdatedAt fileSize file { url name } } +} From fa767061a0a1d3f48c9d51e5df549a54e9fd87f4 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:00:50 +0545 Subject: [PATCH 31/52] feat(types): tsconfig path aliases; slim generated types Astro applies tsconfig paths natively; src imports use components/*, lib/*, layouts/*, i18n/*, styles/*, packages/* instead of relative chains. Boundary: files reachable from plain-node scripts keep relative imports (node does not read tsconfig). Codegen emits union types and operation types only (enums are not erasable; the full schema dump emitted duplicate enum names). --- codegen.yml | 9 ++ package.json | 152 ++++++++++---------- scripts/generateTypes.mjs | 29 ++++ src/components/DataExplorer.tsx | 4 +- src/components/ProjectHistoryChart.tsx | 6 +- src/components/ProjectsMapIsland.tsx | 2 +- src/components/RemoteImage.astro | 4 +- src/layouts/BaseLayout.astro | 12 +- src/lib/remoteImages.ts | 2 + src/pages/404.astro | 8 +- src/pages/[locale]/blogs/[slug]/index.astro | 18 +-- src/pages/[locale]/blogs/index.astro | 20 +-- src/pages/[locale]/data/index.astro | 30 ++-- src/pages/[locale]/get-involved/index.astro | 16 +-- src/pages/[locale]/index.astro | 26 ++-- src/pages/[locale]/privacy/index.astro | 12 +- src/pages/[locale]/projects/[id].astro | 40 +++--- src/pages/data-explorer.json.ts | 4 +- tsconfig.json | 45 ++++-- 19 files changed, 254 insertions(+), 185 deletions(-) create mode 100644 scripts/generateTypes.mjs diff --git a/codegen.yml b/codegen.yml index 9f245719..ab9b4144 100644 --- a/codegen.yml +++ b/codegen.yml @@ -8,3 +8,12 @@ generates: plugins: - "typescript" - "typescript-operations" + config: + enumsAsTypes: true + onlyOperationTypes: true + # JSON-serialized over HTTP: date/time scalars arrive as ISO strings + scalars: + DateTime: string + Date: string + Time: string + GenericScalar: unknown diff --git a/package.json b/package.json index 14e279fb..f68bfec4 100644 --- a/package.json +++ b/package.json @@ -1,78 +1,78 @@ { - "name": "mapswipe-website", - "type": "module", - "private": true, - "version": "0.0.1", - "scripts": { - "dev": "astro dev", - "build": "node scripts/prefetch-images.mjs && astro build", - "build:incremental": "node scripts/incremental-build.mjs", - "prefetch": "node scripts/prefetch-images.mjs", - "preview": "astro preview", - "astro": "astro", - "fetch-data": "node scripts/fetchData.ts", - "lint": "eslint .", - "css-lint": "stylelint 'src/**/*.css'", - "typecheck": "astro check", - "verify-dist": "node scripts/verify-dist.mjs", - "test:e2e": "playwright test", - "generate:type": "graphql-codegen --config codegen.yml", - "fetch-data:local": "node --env-file=.env.local scripts/fetchData.ts", - "check-unused": "knip" - }, - "dependencies": { - "@astrojs/react": "^4.2.0", - "@astrojs/sitemap": "^3.2.1", - "@fontsource/dm-sans": "^5.2.8", - "@fontsource/lato": "^5.2.7", - "astro": "^5.7.0", - "graphql": "^16.6.0", - "graphql-request": "^5.1.0", - "i18next": "^24.2.0", - "leaflet": "^1.9.4", - "papaparse": "^5.4.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-leaflet": "^4.2.1", - "rehype-stringify": "^10.0.1", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "sharp": "^0.33.5", - "unified": "^11.0.5" - }, - "devDependencies": { - "@astrojs/check": "^0.9.9", - "@eslint/js": "^10.0.1", - "@graphql-codegen/cli": "^7.2.0", - "@graphql-codegen/typescript": "^6.1.0", - "@graphql-codegen/typescript-operations": "^6.1.0", - "@playwright/test": "^1.61.1", - "@stylistic/eslint-plugin": "^5.10.0", - "@stylistic/stylelint-plugin": "^5.2.1", - "@types/leaflet": "^1.9.12", - "@types/papaparse": "^5.3.15", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "eslint": "^10.7.0", - "eslint-plugin-astro": "^1.7.0", - "eslint-plugin-react-hooks": "^7.1.1", - "globals": "^17.7.0", - "knip": "^6.26.0", - "postcss": "^8.5.19", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-nested": "^7.0.2", - "postcss-normalize": "^13.0.1", - "postcss-preset-env": "^11.3.2", - "stylelint": "^17.14.0", - "stylelint-config-concentric-order": "^5.5.0", - "stylelint-config-standard": "^40.0.0", - "stylelint-order": "^8.1.1", - "typescript": "^5.7.0", - "typescript-eslint": "^8.63.0" - }, - "packageManager": "pnpm@10.34.5", - "engines": { - "node": ">=22.18" - } + "name": "mapswipe-website", + "type": "module", + "private": true, + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "build": "node scripts/prefetch-images.mjs && astro build", + "build:incremental": "node scripts/incremental-build.mjs", + "prefetch": "node scripts/prefetch-images.mjs", + "preview": "astro preview", + "astro": "astro", + "fetch-data": "node scripts/fetchData.ts", + "lint": "eslint .", + "css-lint": "stylelint 'src/**/*.css'", + "typecheck": "astro check", + "verify-dist": "node scripts/verify-dist.mjs", + "test:e2e": "playwright test", + "generate:type": "node scripts/generateTypes.mjs", + "fetch-data:local": "node --env-file=.env.local scripts/fetchData.ts", + "check-unused": "knip" + }, + "dependencies": { + "@astrojs/react": "^4.2.0", + "@astrojs/sitemap": "^3.2.1", + "@fontsource/dm-sans": "^5.2.8", + "@fontsource/lato": "^5.2.7", + "astro": "^5.7.0", + "graphql": "^16.6.0", + "graphql-request": "^5.1.0", + "i18next": "^24.2.0", + "leaflet": "^1.9.4", + "papaparse": "^5.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-leaflet": "^4.2.1", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "sharp": "^0.33.5", + "unified": "^11.0.5" + }, + "devDependencies": { + "@astrojs/check": "^0.9.9", + "@eslint/js": "^10.0.1", + "@graphql-codegen/cli": "^7.2.0", + "@graphql-codegen/typescript": "^6.1.0", + "@graphql-codegen/typescript-operations": "^6.1.0", + "@playwright/test": "^1.61.1", + "@stylistic/eslint-plugin": "^5.10.0", + "@stylistic/stylelint-plugin": "^5.2.1", + "@types/leaflet": "^1.9.12", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "eslint": "^10.7.0", + "eslint-plugin-astro": "^1.7.0", + "eslint-plugin-react-hooks": "^7.1.1", + "globals": "^17.7.0", + "knip": "^6.26.0", + "postcss": "^8.5.19", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-nested": "^7.0.2", + "postcss-normalize": "^13.0.1", + "postcss-preset-env": "^11.3.2", + "stylelint": "^17.14.0", + "stylelint-config-concentric-order": "^5.5.0", + "stylelint-config-standard": "^40.0.0", + "stylelint-order": "^8.1.1", + "typescript": "^5.7.0", + "typescript-eslint": "^8.63.0" + }, + "packageManager": "pnpm@10.34.5", + "engines": { + "node": ">=22.18" + } } \ No newline at end of file diff --git a/scripts/generateTypes.mjs b/scripts/generateTypes.mjs new file mode 100644 index 00000000..507b7be9 --- /dev/null +++ b/scripts/generateTypes.mjs @@ -0,0 +1,29 @@ +// graphql-codegen wrapper: the typescript + typescript-operations plugin pair +// emits the operation-referenced enums twice (identical blocks), which is a +// TS "duplicate identifier" error. Run codegen, then drop exact-duplicate +// top-level `export type X = ...` blocks. +import { execSync } from 'node:child_process'; +import { readFileSync, writeFileSync } from 'node:fs'; + +execSync('pnpm exec graphql-codegen --config codegen.yml', { stdio: 'inherit' }); + +const path = 'generated/types.ts'; +const src = readFileSync(path, 'utf8'); +const blocks = src.split(/\n\n(?=export |\/\*\*)/); +const seenName = new Set(); +const seenBody = new Set(); +const out = blocks.filter((block) => { + const m = block.match(/^export type (\w+)/); + if (!m) return true; + const name = m[1]; + const body = block.trim(); + if (seenName.has(name)) { + if (seenBody.has(body)) return false; // identical duplicate — drop + throw new Error(`conflicting duplicate type: ${name}`); + } + seenName.add(name); + seenBody.add(body); + return true; +}); +writeFileSync(path, out.join('\n\n')); +console.log(`generated/types.ts: ${blocks.length - out.length} duplicate block(s) removed`); diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index c7b91fd1..241c3595 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -8,13 +8,13 @@ import React, { } from 'react'; import ProjectTypeIcon from './ProjectTypeIcon'; -import type { MiniProject, Organization, ExportAsset } from '../lib/dataExplorer'; +import type { MiniProject, Organization, ExportAsset } from 'lib/dataExplorer'; // CSS Modules recovered from the Next app. The island shares the data page's // module (same hashed classes as the .astro page that mounts it) plus the // component modules its markup reproduces (Section, Card, Tag, Heading, Link, // Button, MultiSelectInput, RadioInput, RawInput, SelectInput, ImageWrapper). -import styles from '../pages/[locale]/data/styles.module.css'; +import styles from 'pages/[locale]/data/styles.module.css'; import sectionStyles from './Section.module.css'; import cardStyles from './Card.module.css'; import tagStyles from './Tag.module.css'; diff --git a/src/components/ProjectHistoryChart.tsx b/src/components/ProjectHistoryChart.tsx index 11c8e58c..d1570cf0 100644 --- a/src/components/ProjectHistoryChart.tsx +++ b/src/components/ProjectHistoryChart.tsx @@ -1,10 +1,10 @@ import React, { useEffect, useRef, useState, useMemo } from 'react'; -import getProjectHistory from '../lib/projectHistory'; -import { getBounds, getScaleFunction, getPathData, bound } from '../lib/chart'; +import getProjectHistory from 'lib/projectHistory'; +import { getBounds, getScaleFunction, getPathData, bound } from 'lib/chart'; // The timeline-chart SVG classes live in the recovered projects page module // (Next kept them in src/pages/[locale]/projects/styles.module.css); importing // the same module here yields the same hashed classes as the .astro page. -import styles from '../pages/[locale]/projects/styles.module.css'; +import styles from 'pages/[locale]/projects/styles.module.css'; // Self-contained port of the project-history chart from the Next `Project` // component. Takes projectId + historyUrl, does its own fetch + SVG render, diff --git a/src/components/ProjectsMapIsland.tsx b/src/components/ProjectsMapIsland.tsx index 0cf1fa87..e41036d7 100644 --- a/src/components/ProjectsMapIsland.tsx +++ b/src/components/ProjectsMapIsland.tsx @@ -3,7 +3,7 @@ import type { CircleMarkerOptions, LatLngTuple } from 'leaflet'; import { MapContainer, TileLayer, CircleMarker, Popup } from 'react-leaflet'; import 'leaflet/dist/leaflet.css'; -import type { MiniProject } from '../lib/dataExplorer'; +import type { MiniProject } from 'lib/dataExplorer'; // CSS Modules recovered from the Next app's ProjectsMap (popup card link) + // Tag (popup tag pills). import styles from './ProjectsMap.module.css'; diff --git a/src/components/RemoteImage.astro b/src/components/RemoteImage.astro index 5f0d87a9..c8c9d21e 100644 --- a/src/components/RemoteImage.astro +++ b/src/components/RemoteImage.astro @@ -2,8 +2,8 @@ // Thin wrapper over astro-remote-images' component: importing the app config // module first guarantees the package's default instance is OUR configured // one (fail-soft optimize, error-image policy, COVER_WIDTH default width). -import '../lib/remoteImages'; -import RemoteImage from '../../packages/astro-remote-images/src/RemoteImage.astro'; +import 'lib/remoteImages'; +import RemoteImage from 'packages/astro-remote-images/src/RemoteImage.astro'; interface Props { src: string; diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index b534a27b..d624fa91 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -1,15 +1,15 @@ --- -import OgMeta from '../components/OgMeta.astro'; -import Navbar from '../components/Navbar.astro'; -import Footer from '../components/Footer.astro'; +import OgMeta from 'components/OgMeta.astro'; +import Navbar from 'components/Navbar.astro'; +import Footer from 'components/Footer.astro'; import { LOCALES } from '../i18n'; // Design tokens + base element styles, restored from the Next app's // src/styles/{variables,globals}.css. Component/page styling lives in // co-located CSS Modules (same system as the Next app). -import '../styles/variables.css'; -import '../styles/globals.css'; +import 'styles/variables.css'; +import 'styles/globals.css'; // Page shell (Next: components/Page/styles.module.css). -import pageStyles from '../components/Page.module.css'; +import pageStyles from 'components/Page.module.css'; // Fonts: the Next app used next/font (Lato body + DM Sans headings, preloaded // woff2, display:swap). Astro has no next/font, so we import the equivalent diff --git a/src/lib/remoteImages.ts b/src/lib/remoteImages.ts index dca420f0..834865e6 100644 --- a/src/lib/remoteImages.ts +++ b/src/lib/remoteImages.ts @@ -2,6 +2,8 @@ // This module MUST be imported before the package's component // renders (the component uses the default = last-created instance); every // consumer here imports it directly, which guarantees the ordering. +// Imported by scripts/prefetch-images.mjs under plain node, which does not +// read tsconfig paths — this file must stick to relative imports. import { createRemoteImages } from '../../packages/astro-remote-images/src/index.ts'; // The render width used for project cover images (projects/[id].astro, the diff --git a/src/pages/404.astro b/src/pages/404.astro index dad6f497..040296ae 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,13 +1,13 @@ --- -import BaseLayout from '../layouts/BaseLayout.astro'; +import BaseLayout from 'layouts/BaseLayout.astro'; import { DEFAULT_LOCALE } from '../i18n'; // CSS Modules recovered from the Next app: the page module (pages/404/ // styles.module.css, co-located here as 404.module.css) + Heading/Link/ // ImageWrapper component modules. import styles from './404.module.css'; -import headingStyles from '../components/Heading.module.css'; -import linkStyles from '../components/Link.module.css'; -import imageStyles from '../components/ImageWrapper.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; // 404 page (Next: src/pages/404/index.tsx). Locale-less single page. The Next // version's copy was hardcoded English, so it stays English here. Rendered with diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index e6fafb5e..39ce6004 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -2,20 +2,20 @@ import type { GetStaticPaths } from 'astro'; import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; -import BlogLayout from '../../../../layouts/BlogLayout.astro'; -import Icon from '../../../../components/Icon.astro'; +import BlogLayout from 'layouts/BlogLayout.astro'; +import Icon from 'components/Icon.astro'; import { getT, LOCALES } from '../../../../i18n'; -import { selectPaths } from '../../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module + the component // modules whose markup this page reproduces (Hero, Section, Tag, Heading, // HtmlOutput, ImageWrapper). import styles from './styles.module.css'; -import heroStyles from '../../../../components/Hero.module.css'; -import sectionStyles from '../../../../components/Section.module.css'; -import tagStyles from '../../../../components/Tag.module.css'; -import headingStyles from '../../../../components/Heading.module.css'; -import imageStyles from '../../../../components/ImageWrapper.module.css'; -import htmlOutputStyles from '../../../../components/HtmlOutput.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import tagStyles from 'components/Tag.module.css'; +import headingStyles from 'components/Heading.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; +import htmlOutputStyles from 'components/HtmlOutput.module.css'; // Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing // //blogs// with exact URL parity to Next (slug == entry.id == diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index 0948053a..bd51162b 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -2,21 +2,21 @@ import type { GetStaticPaths } from 'astro'; import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; -import BlogLayout from '../../../layouts/BlogLayout.astro'; -import Icon from '../../../components/Icon.astro'; +import BlogLayout from 'layouts/BlogLayout.astro'; +import Icon from 'components/Icon.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module + the component // modules whose markup this page reproduces (Hero, Section, Card, Tag, // Heading, Link, ImageWrapper). import styles from './styles.module.css'; -import heroStyles from '../../../components/Hero.module.css'; -import sectionStyles from '../../../components/Section.module.css'; -import cardStyles from '../../../components/Card.module.css'; -import tagStyles from '../../../components/Tag.module.css'; -import headingStyles from '../../../components/Heading.module.css'; -import linkStyles from '../../../components/Link.module.css'; -import imageStyles from '../../../components/ImageWrapper.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import cardStyles from 'components/Card.module.css'; +import tagStyles from 'components/Tag.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; // Blog LIST page. One variant per locale (blog content is single-language // English markdown; only the chrome is translated), producing //blogs/ diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index ec149849..f6090d66 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -1,26 +1,26 @@ --- import type { GetStaticPaths } from 'astro'; -import BaseLayout from '../../../layouts/BaseLayout.astro'; -import DataExplorer, { PAGE_SIZE } from '../../../components/DataExplorer.tsx'; -import ProjectTypeIcon from '../../../components/ProjectTypeIcon.astro'; -import Icon from '../../../components/Icon.astro'; -import { getDataExplorerPayload } from '../../../lib/dataExplorer'; -import { resolveRemoteImage, COVER_WIDTH } from '../../../lib/remoteImages'; +import BaseLayout from 'layouts/BaseLayout.astro'; +import DataExplorer, { PAGE_SIZE } from 'components/DataExplorer.tsx'; +import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; +import Icon from 'components/Icon.astro'; +import { getDataExplorerPayload } from 'lib/dataExplorer'; +import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module (shared with the // DataExplorer island) + the component modules whose markup this page // reproduces (Hero, Section, Card, KeyFigure, Heading, Link, ListItem, // ImageWrapper). import styles from './styles.module.css'; -import heroStyles from '../../../components/Hero.module.css'; -import sectionStyles from '../../../components/Section.module.css'; -import cardStyles from '../../../components/Card.module.css'; -import keyFigureStyles from '../../../components/KeyFigure.module.css'; -import headingStyles from '../../../components/Heading.module.css'; -import linkStyles from '../../../components/Link.module.css'; -import listItemStyles from '../../../components/ListItem.module.css'; -import imageStyles from '../../../components/ImageWrapper.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import cardStyles from 'components/Card.module.css'; +import keyFigureStyles from 'components/KeyFigure.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import listItemStyles from 'components/ListItem.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; // One static page per locale: //data/ (parity with the Next Pages-Router // route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index 416ad23b..2b7dba02 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -1,18 +1,18 @@ --- import type { GetStaticPaths } from 'astro'; -import BaseLayout from '../../../layouts/BaseLayout.astro'; +import BaseLayout from 'layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module + the component // modules whose markup this page reproduces (Hero, Section, CenteredCard, // Heading, Link, ImageWrapper). import styles from './styles.module.css'; -import heroStyles from '../../../components/Hero.module.css'; -import sectionStyles from '../../../components/Section.module.css'; -import centeredCardStyles from '../../../components/CenteredCard.module.css'; -import headingStyles from '../../../components/Heading.module.css'; -import linkStyles from '../../../components/Link.module.css'; -import imageStyles from '../../../components/ImageWrapper.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import centeredCardStyles from 'components/CenteredCard.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; // Get-involved page. One static, translated variant per locale — // //get-involved/ — faithful to the Next Pages-Router page. Uses shared diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index e2c63e57..23076821 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -2,24 +2,24 @@ import type { GetStaticPaths } from 'astro'; import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; -import BaseLayout from '../../layouts/BaseLayout.astro'; -import ProjectTypeIcon from '../../components/ProjectTypeIcon.astro'; -import Icon from '../../components/Icon.astro'; +import BaseLayout from 'layouts/BaseLayout.astro'; +import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; +import Icon from 'components/Icon.astro'; import { getT, LOCALES } from '../../i18n'; -import { getCommunityStats } from '../../lib/data'; -import { selectPaths } from '../../../packages/astro-incremental-static/src/index.ts'; +import { getCommunityStats } from 'lib/data'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module + the component // modules whose markup this page reproduces (Hero, Section, Card, KeyFigure, // Heading, Link, Tag, ImageWrapper). import styles from './styles.module.css'; -import heroStyles from '../../components/Hero.module.css'; -import sectionStyles from '../../components/Section.module.css'; -import headingStyles from '../../components/Heading.module.css'; -import linkStyles from '../../components/Link.module.css'; -import cardStyles from '../../components/Card.module.css'; -import keyFigureStyles from '../../components/KeyFigure.module.css'; -import tagStyles from '../../components/Tag.module.css'; -import imageStyles from '../../components/ImageWrapper.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import cardStyles from 'components/Card.module.css'; +import keyFigureStyles from 'components/KeyFigure.module.css'; +import tagStyles from 'components/Tag.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; // Home page. One static, translated variant per locale — // — matching // the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, diff --git a/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro index da9cedff..796d3316 100644 --- a/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -5,17 +5,17 @@ import remarkParse from 'remark-parse'; import remarkGfm from 'remark-gfm'; import remarkRehype from 'remark-rehype'; import rehypeStringify from 'rehype-stringify'; -import BaseLayout from '../../../layouts/BaseLayout.astro'; +import BaseLayout from 'layouts/BaseLayout.astro'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module + the component // modules whose markup this page reproduces (Hero, Section, Heading, // HtmlOutput). import styles from './styles.module.css'; -import heroStyles from '../../../components/Hero.module.css'; -import sectionStyles from '../../../components/Section.module.css'; -import headingStyles from '../../../components/Heading.module.css'; -import htmlOutputStyles from '../../../components/HtmlOutput.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import headingStyles from 'components/Heading.module.css'; +import htmlOutputStyles from 'components/HtmlOutput.module.css'; // Privacy page. The policy body is a fixed English markdown string (identical // in every locale — same as the Next app, which hardcoded it); only the tab diff --git a/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro index 43fd157d..4e88ce4f 100644 --- a/src/pages/[locale]/projects/[id].astro +++ b/src/pages/[locale]/projects/[id].astro @@ -1,30 +1,30 @@ --- import type { GetStaticPaths } from 'astro'; -import ProjectLayout from '../../../layouts/ProjectLayout.astro'; -import RemoteImage from '../../../components/RemoteImage.astro'; -import { COVER_WIDTH } from '../../../lib/remoteImages'; -import MapIsland from '../../../components/MapIsland.tsx'; -import ProjectHistoryChart from '../../../components/ProjectHistoryChart.tsx'; -import ProjectTypeIcon from '../../../components/ProjectTypeIcon.astro'; -import type { ProjectTypeKey } from '../../../components/ProjectTypeIcon.tsx'; -import Icon from '../../../components/Icon.astro'; -import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from '../../../lib/data'; -import { getFileSizeProperties, resolveAoiDownload } from '../../../lib/common'; +import ProjectLayout from 'layouts/ProjectLayout.astro'; +import RemoteImage from 'components/RemoteImage.astro'; +import { COVER_WIDTH } from 'lib/remoteImages'; +import MapIsland from 'components/MapIsland.tsx'; +import ProjectHistoryChart from 'components/ProjectHistoryChart.tsx'; +import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; +import type { ProjectTypeKey } from 'components/ProjectTypeIcon.tsx'; +import Icon from 'components/Icon.astro'; +import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from 'lib/data'; +import { getFileSizeProperties, resolveAoiDownload } from 'lib/common'; import { getT, LOCALES } from '../../../i18n'; -import { selectPaths } from '../../../../packages/astro-incremental-static/src/index.ts'; +import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // CSS Modules recovered from the Next app: the page module (also imported by // the ProjectHistoryChart island for the SVG classes) + the component modules // whose markup this page reproduces. import styles from './styles.module.css'; -import heroStyles from '../../../components/Hero.module.css'; -import sectionStyles from '../../../components/Section.module.css'; -import cardStyles from '../../../components/Card.module.css'; -import tagStyles from '../../../components/Tag.module.css'; -import headingStyles from '../../../components/Heading.module.css'; -import linkStyles from '../../../components/Link.module.css'; -import keyFigureStyles from '../../../components/KeyFigure.module.css'; -import imageStyles from '../../../components/ImageWrapper.module.css'; -import htmlOutputStyles from '../../../components/HtmlOutput.module.css'; +import heroStyles from 'components/Hero.module.css'; +import sectionStyles from 'components/Section.module.css'; +import cardStyles from 'components/Card.module.css'; +import tagStyles from 'components/Tag.module.css'; +import headingStyles from 'components/Heading.module.css'; +import linkStyles from 'components/Link.module.css'; +import keyFigureStyles from 'components/KeyFigure.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; +import htmlOutputStyles from 'components/HtmlOutput.module.css'; export const getStaticPaths = (async () => { let projects = getAllProjects(); diff --git a/src/pages/data-explorer.json.ts b/src/pages/data-explorer.json.ts index a56e7592..38a814e1 100644 --- a/src/pages/data-explorer.json.ts +++ b/src/pages/data-explorer.json.ts @@ -14,8 +14,8 @@ // (scripts/prefetch-images.mjs warmed these exact URLs at COVER_WIDTH before // the build, so these are pure cache hits). import type { APIRoute } from 'astro'; -import { getDataExplorerPayload } from '../lib/dataExplorer'; -import { resolveRemoteImage, COVER_WIDTH } from '../lib/remoteImages'; +import { getDataExplorerPayload } from 'lib/dataExplorer'; +import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; export const GET: APIRoute = async () => { const payload = getDataExplorerPayload(); diff --git a/tsconfig.json b/tsconfig.json index 92a18df9..18e9add2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,38 @@ { - "extends": "astro/tsconfigs/strict", - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"], - "compilerOptions": { - "jsx": "react-jsx", - "jsxImportSource": "react" - } -} + "extends": "astro/tsconfigs/strict", + "include": [ + ".astro/types.d.ts", + "**/*" + ], + "exclude": [ + "dist" + ], + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react", + "baseUrl": ".", + "paths": { + "components/*": [ + "src/components/*" + ], + "layouts/*": [ + "src/layouts/*" + ], + "lib/*": [ + "src/lib/*" + ], + "i18n/*": [ + "src/i18n/*" + ], + "styles/*": [ + "src/styles/*" + ], + "pages/*": [ + "src/pages/*" + ], + "packages/*": [ + "packages/*" + ] + } + } +} \ No newline at end of file From fe1f124692f0ed9331d669801ad31f7111432396 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:04:25 +0545 Subject: [PATCH 32/52] chore: knip replaces unimported; drop dead exports it found unimported cannot parse .astro entry points; knip understands them. Package public APIs are entry files (exports exempt). Removed two genuinely unused app exports it flagged. --- knip.json | 13 +++++++++++++ src/i18n/index.ts | 3 --- src/lib/common.ts | 13 ------------- 3 files changed, 13 insertions(+), 16 deletions(-) create mode 100644 knip.json diff --git a/knip.json b/knip.json new file mode 100644 index 00000000..3f45c4f5 --- /dev/null +++ b/knip.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://unpkg.com/knip@latest/schema.json", + "entry": [ + "src/pages/**/*.astro", + "src/pages/**/*.ts", + "scripts/*.mjs", + "tests/e2e/**/*.spec.ts", + "packages/*/src/index.ts", + "packages/*/src/runner.ts", + "packages/*/src/*.astro" + ], + "project": ["src/**", "scripts/**", "packages/**"] +} diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 7c99a5b5..c218ac84 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -96,6 +96,3 @@ export async function getDict(locale: string, ns: string): Promise Date: Tue, 14 Jul 2026 08:06:10 +0545 Subject: [PATCH 33/52] chore(css): concentric ordering + indentation via modern stylelint Main's config (recommended + concentric + 4-space indentation) on stylelint 16: @stylistic plugin supplies the removed indentation rule, stylelint-config-concentric-order the property order. 100+ order issues auto-fixed; one real specificity fix in the navbar dropdown. --- .stylelintrc.json | 21 ++++-- knip.json | 11 ++- package.json | 2 +- pnpm-lock.yaml | 27 +------ src/components/Button.module.css | 2 +- src/components/Card.module.css | 40 +++++------ src/components/CenteredCard.module.css | 4 +- src/components/Footer.module.css | 6 +- src/components/Hero.module.css | 2 +- src/components/KeyFigure.module.css | 8 +-- src/components/MultiSelectInput.module.css | 2 +- src/components/Navbar.module.css | 23 +++--- src/components/ProjectTypeIcon.module.css | 2 +- src/components/ProjectsMap.module.css | 2 +- src/components/RadioInput.module.css | 2 +- src/components/Section.module.css | 2 +- src/components/SelectInput.module.css | 12 ++-- src/components/Tag.module.css | 2 +- src/lib/common.ts | 14 ++++ src/pages/404.module.css | 8 +-- src/pages/[locale]/data/styles.module.css | 70 +++++++++---------- .../[locale]/get-involved/styles.module.css | 22 +++--- src/pages/[locale]/projects/styles.module.css | 50 ++++++------- src/pages/[locale]/styles.module.css | 44 ++++++------ 24 files changed, 195 insertions(+), 183 deletions(-) diff --git a/.stylelintrc.json b/.stylelintrc.json index f266d60f..4503a259 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,7 +1,18 @@ { - "extends": "stylelint-config-standard", - "rules": { - "declaration-block-single-line-max-declarations": null, - "selector-class-pattern": null - } + "plugins": [ + "@stylistic/stylelint-plugin" + ], + "extends": [ + "stylelint-config-recommended", + "stylelint-config-concentric-order" + ], + "rules": { + "@stylistic/indentation": 4, + "selector-pseudo-class-no-unknown": [ + true, + { + "ignorePseudoClasses": ["global"] + } + ] + } } diff --git a/knip.json b/knip.json index 3f45c4f5..1e8f8962 100644 --- a/knip.json +++ b/knip.json @@ -9,5 +9,12 @@ "packages/*/src/runner.ts", "packages/*/src/*.astro" ], - "project": ["src/**", "scripts/**", "packages/**"] -} + "project": [ + "src/**", + "scripts/**", + "packages/**" + ], + "ignoreBinaries": [ + "du" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index f68bfec4..b6906a87 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ "postcss-preset-env": "^11.3.2", "stylelint": "^17.14.0", "stylelint-config-concentric-order": "^5.5.0", + "stylelint-config-recommended": "^18.0.0", "stylelint-config-standard": "^40.0.0", - "stylelint-order": "^8.1.1", "typescript": "^5.7.0", "typescript-eslint": "^8.63.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa9503c2..6e456cc5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,12 +138,12 @@ importers: stylelint-config-concentric-order: specifier: ^5.5.0 version: 5.5.0(stylelint@17.14.0(typescript@5.9.3)) + stylelint-config-recommended: + specifier: ^18.0.0 + version: 18.0.0(stylelint@17.14.0(typescript@5.9.3)) stylelint-config-standard: specifier: ^40.0.0 version: 40.0.0(stylelint@17.14.0(typescript@5.9.3)) - stylelint-order: - specifier: ^8.1.1 - version: 8.1.1(stylelint@17.14.0(typescript@5.9.3)) typescript: specifier: ^5.7.0 version: 5.9.3 @@ -4099,11 +4099,6 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss-sorting@10.0.0: - resolution: {integrity: sha512-TXbU+h6vVRW+86c/+ewhWq9k7pr7ijASTnepVhCQiC87zAOTkvB1v2dHyWP+ggstSTX/PNvjzS+IOqzejndz9w==} - peerDependencies: - postcss: ^8.4.20 - postcss-sorting@9.1.0: resolution: {integrity: sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==} peerDependencies: @@ -4431,12 +4426,6 @@ packages: peerDependencies: stylelint: ^16.18.0 || ^17.0.0 - stylelint-order@8.1.1: - resolution: {integrity: sha512-LqsEB6VggJuu5v10RtkrQsBObcdwBE7GuAOlwfc/LR3VL/w8UqKX2BOLIjhyGt0Gne/njo7gRNGiJAKhfmPMNw==} - engines: {node: '>=20.19.0'} - peerDependencies: - stylelint: ^16.18.0 || ^17.0.0 - stylelint@17.14.0: resolution: {integrity: sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==} engines: {node: '>=20.19.0'} @@ -9301,10 +9290,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sorting@10.0.0(postcss@8.5.19): - dependencies: - postcss: 8.5.19 - postcss-sorting@9.1.0(postcss@8.5.19): dependencies: postcss: 8.5.19 @@ -9721,12 +9706,6 @@ snapshots: postcss-sorting: 9.1.0(postcss@8.5.19) stylelint: 17.14.0(typescript@5.9.3) - stylelint-order@8.1.1(stylelint@17.14.0(typescript@5.9.3)): - dependencies: - postcss: 8.5.19 - postcss-sorting: 10.0.0(postcss@8.5.19) - stylelint: 17.14.0(typescript@5.9.3) - stylelint@17.14.0(typescript@5.9.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) diff --git a/src/components/Button.module.css b/src/components/Button.module.css index 3acefde8..70891122 100644 --- a/src/components/Button.module.css +++ b/src/components/Button.module.css @@ -2,9 +2,9 @@ outline: none; border: 0; background-color: transparent; - cursor: pointer; font-family: inherit; font-size: inherit; + cursor: pointer; &.primary { transition: 0.2s all ease-in-out; diff --git a/src/components/Card.module.css b/src/components/Card.module.css index 32696282..1a8abe7f 100644 --- a/src/components/Card.module.css +++ b/src/components/Card.module.css @@ -18,29 +18,12 @@ } } - @media screen and (width >= 720px) { - &.coverImageOnSide { - flex-direction: row; - - .coverImageWrapper { - width: 14rem; - height: 16rem; - - .image { - border-top-left-radius: 0; - border-top-right-radius: 0; - object-fit: cover; - } - } - } - } - .cardContent { display: flex; flex-direction: column; flex-grow: 1; - padding: var(--spacing-extra-large); gap: var(--spacing-small); + padding: var(--spacing-extra-large); .headerWrapper { display: flex; @@ -49,9 +32,9 @@ .header { display: flex; - align-items: center; flex-shrink: 0; gap: var(--spacing-extra-small); + align-items: center; .heading { display: -webkit-box; @@ -79,8 +62,8 @@ } &.borderless { - border: 0; gap: var(--spacing-medium); + border: 0; .coverImageWrapper { .image { @@ -92,4 +75,21 @@ padding: 0; } } + + @media screen and (width >= 720px) { + &.coverImageOnSide { + flex-direction: row; + + .coverImageWrapper { + width: 14rem; + height: 16rem; + + .image { + border-top-left-radius: 0; + border-top-right-radius: 0; + object-fit: cover; + } + } + } + } } diff --git a/src/components/CenteredCard.module.css b/src/components/CenteredCard.module.css index d9c18bbd..fe1c1c1a 100644 --- a/src/components/CenteredCard.module.css +++ b/src/components/CenteredCard.module.css @@ -1,13 +1,13 @@ .card { display: flex; - align-items: center; flex-direction: column; + gap: var(--spacing-medium); + align-items: center; justify-content: center; border: var(--width-separator-thin) solid var(--color-separator); border-radius: var(--border-radius-medium); padding: var(--spacing-extra-large) var(--spacing-large); text-align: center; - gap: var(--spacing-medium); .heading { max-width: 32rem; diff --git a/src/components/Footer.module.css b/src/components/Footer.module.css index c5bf1530..f799b3eb 100644 --- a/src/components/Footer.module.css +++ b/src/components/Footer.module.css @@ -14,11 +14,11 @@ display: flex; flex-grow: 1; flex-wrap: wrap; + gap: var(--spacing-mega-large); justify-content: space-between; margin: 0 auto; padding: var(--spacing-mega-large) var(--spacing-large); max-width: var(--width-page-max); - gap: var(--spacing-mega-large); .section { display: flex; @@ -49,8 +49,8 @@ .content { display: flex; - align-items: center; flex-wrap: wrap; + align-items: center; justify-content: space-between; margin: 0 auto; padding: 0 var(--spacing-large); @@ -75,8 +75,8 @@ .rightContainer { display: flex; - padding: var(--spacing-medium) 0; gap: var(--spacing-medium); + padding: var(--spacing-medium) 0; } } } diff --git a/src/components/Hero.module.css b/src/components/Hero.module.css index eedbf2ea..de1f1a4c 100644 --- a/src/components/Hero.module.css +++ b/src/components/Hero.module.css @@ -18,12 +18,12 @@ display: flex; position: relative; flex-grow: 1; + gap: var(--spacing-super-large); justify-content: center; margin: 0 auto; padding: 6rem var(--spacing-medium) var(--spacing-medium) var(--spacing-medium); width: 100%; max-width: var(--width-page-max); - gap: var(--spacing-super-large); .left { display: flex; diff --git a/src/components/KeyFigure.module.css b/src/components/KeyFigure.module.css index d814ffdd..cebf003b 100644 --- a/src/components/KeyFigure.module.css +++ b/src/components/KeyFigure.module.css @@ -1,9 +1,9 @@ .keyFigure { display: flex; - align-items: center; flex-direction: column; - justify-content: center; gap: var(--spacing-extra-small); + align-items: center; + justify-content: center; border: var(--width-separator-thin) solid var(--color-accent-light); border-radius: 0.5rem; padding: var(--spacing-large); @@ -15,12 +15,12 @@ .value { display: flex; + gap: var(--spacing-super-small); align-items: center; justify-content: center; color: var(--color-heading); font-size: var(--font-size-extra-large); font-weight: var(--font-weight-bold); - gap: var(--spacing-super-small); .icon { color: var(--color-accent); @@ -37,6 +37,7 @@ --border-size: 4rem; position: relative; + gap: var(--spacing-tiny); border: none; border-radius: var(--border-size); box-shadow: 0 0 0 2rem var(--color-background-brand-light); @@ -44,7 +45,6 @@ width: var(--size); height: var(--size); text-align: center; - gap: var(--spacing-tiny); .label { color: var(--color-heading); diff --git a/src/components/MultiSelectInput.module.css b/src/components/MultiSelectInput.module.css index 84ce55ee..ac45411c 100644 --- a/src/components/MultiSelectInput.module.css +++ b/src/components/MultiSelectInput.module.css @@ -10,13 +10,13 @@ .option { display: flex; + gap: var(--spacing-super-small); align-items: center; border: transparent solid var(--width-separator-thin); border-radius: var(--border-radius-medium); background-color: var(--color-background-accent-light); padding: var(--spacing-super-small) var(--spacing-extra-small); color: var(--color-text); - gap: var(--spacing-super-small); font-size: var(--font-size-small); &.selected { diff --git a/src/components/Navbar.module.css b/src/components/Navbar.module.css index 4ea4dccc..2be2d3f6 100644 --- a/src/components/Navbar.module.css +++ b/src/components/Navbar.module.css @@ -7,12 +7,12 @@ .navbarContent { display: flex; position: relative; + gap: var(--spacing-medium); align-items: center; margin: auto; background-color: var(--color-background); padding: var(--spacing-medium); max-width: var(--width-page-max); - gap: var(--spacing-medium); .logo { position: relative; @@ -34,35 +34,36 @@ .routes { display: flex; - place-content: center flex-end; flex-grow: 1; flex-wrap: wrap; - text-align: center; gap: var(--spacing-medium); + place-content: center flex-end; + text-align: center; .link { border-bottom: var(--width-separator-thin) solid transparent; font-size: var(--font-size-medium); font-weight: var(--font-weight-semi-bold); - &.active { + &:hover { border-bottom-color: var(--color-accent); + text-decoration: unset; } - &:hover { + &.active { border-bottom-color: var(--color-accent); - text-decoration: unset; } } } .rightContainer { display: flex; - align-items: center; gap: var(--spacing-medium); + align-items: center; .dropdown { display: flex; + gap: var(--spacing-tiny); align-items: center; border-radius: var(--border-radius-medium); border-color: var(--color-text-on-dark); @@ -70,7 +71,6 @@ text-transform: uppercase; color: var(--color-text-on-dark); font-size: var(--font-size-small); - gap: var(--spacing-tiny); .currentLocale { font-size: var(--font-size-small); @@ -101,15 +101,15 @@ .language { padding: var(--spacing-ultra-small) var(--spacing-medium); - &.activeLanguage { + &:hover { background-color: var(--color-background-brand-light); color: var(--color-text); - font-weight: var(--font-weight-bold); } - &:hover { + &.activeLanguage { background-color: var(--color-background-brand-light); color: var(--color-text); + font-weight: var(--font-weight-bold); } } } @@ -142,4 +142,5 @@ &:focus-within .languageList { display: flex; } + } diff --git a/src/components/ProjectTypeIcon.module.css b/src/components/ProjectTypeIcon.module.css index 50a30965..adbf56dd 100644 --- a/src/components/ProjectTypeIcon.module.css +++ b/src/components/ProjectTypeIcon.module.css @@ -1,7 +1,7 @@ .icon { - display: block; --height: 1.5rem; + display: block; width: var(--height); height: var(--height); diff --git a/src/components/ProjectsMap.module.css b/src/components/ProjectsMap.module.css index 7590890f..e46505b4 100644 --- a/src/components/ProjectsMap.module.css +++ b/src/components/ProjectsMap.module.css @@ -25,8 +25,8 @@ .row { display: flex; - align-items: center; gap: var(--spacing-extra-small); + align-items: center; } .progressBar { diff --git a/src/components/RadioInput.module.css b/src/components/RadioInput.module.css index d9041830..ed2c8779 100644 --- a/src/components/RadioInput.module.css +++ b/src/components/RadioInput.module.css @@ -11,8 +11,8 @@ .option { display: flex; - align-items: center; flex-shrink: 0; + align-items: center; border: transparent solid var(--width-separator-thin); border-radius: 1rem; background-color: var(--color-background-accent-light); diff --git a/src/components/Section.module.css b/src/components/Section.module.css index b623312d..28a06b9a 100644 --- a/src/components/Section.module.css +++ b/src/components/Section.module.css @@ -4,11 +4,11 @@ .container { display: flex; flex-direction: column; + gap: var(--spacing-enourmous); margin: 0 auto; padding: var(--spacing-enourmous) var(--spacing-super-large); width: 100%; max-width: var(--width-page-max); - gap: var(--spacing-enourmous); .heading { align-self: center; diff --git a/src/components/SelectInput.module.css b/src/components/SelectInput.module.css index 22470123..2fb6a24b 100644 --- a/src/components/SelectInput.module.css +++ b/src/components/SelectInput.module.css @@ -1,22 +1,22 @@ .selectInput { + + /* Original had -moz-/-webkit- prefixed copies; autoprefixer (via + * postcss-preset-env) re-adds vendor prefixes at build time. */ + appearance: none; margin: unset; outline: unset; border: unset; background-color: unset; background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; - background-position-x: 98%; - background-position-y: 50%; padding: unset; width: 100%; color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; - - /* Original had -moz-/-webkit- prefixed copies; autoprefixer (via - * postcss-preset-env) re-adds vendor prefixes at build time. */ - appearance: none; + background-position-x: 98%; + background-position-y: 50%; &:disabled { cursor: not-allowed; diff --git a/src/components/Tag.module.css b/src/components/Tag.module.css index 6bcc561d..5055a035 100644 --- a/src/components/Tag.module.css +++ b/src/components/Tag.module.css @@ -1,12 +1,12 @@ .tag { display: flex; + gap: var(--spacing-super-small); align-items: center; border: transparent solid var(--width-separator-thin); border-radius: var(--border-radius-medium); background-color: var(--color-background-accent-light); padding: var(--spacing-super-small) var(--spacing-extra-small); color: var(--color-text); - gap: var(--spacing-super-small); font-size: var(--font-size-small); &.border { diff --git a/src/lib/common.ts b/src/lib/common.ts index 31b6d5fb..672b5e83 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -1,6 +1,20 @@ // Ported verbatim from the Next app's src/utils/common.ts (relevant helpers only). const mb = 1024 * 1024; +function transformAoiToGeoJson(aoi: Project['aoiGeometry']) { + if (!aoi || !aoi.bbox) return undefined; + return { + type: 'FeatureCollection', + features: [ + { + geometry: { type: 'Polygon', coordinates: aoi.bbox }, + type: 'Feature', + properties: {}, + }, + ], + } as const; +} + export function getFileSizeProperties(fileSize: number) { if (fileSize > mb / 10) { return { size: fileSize / mb, unit: 'megabyte' as const }; diff --git a/src/pages/404.module.css b/src/pages/404.module.css index 93eda380..4e674f75 100644 --- a/src/pages/404.module.css +++ b/src/pages/404.module.css @@ -1,22 +1,22 @@ .fourHundredFour { display: flex; + gap: var(--spacing-gigantic); align-items: center; justify-content: center; min-height: 100vh; - gap: var(--spacing-gigantic); .leftContent { display: flex; - align-items: center; flex-direction: column; + gap: var(--spacing-extra-large); + align-items: center; justify-content: center; padding: var(--spacing-large); - gap: var(--spacing-extra-large); .headingContainer { display: flex; - align-items: center; flex-direction: column; + align-items: center; justify-content: center; text-align: center; } diff --git a/src/pages/[locale]/data/styles.module.css b/src/pages/[locale]/data/styles.module.css index 8d2702e8..d804a519 100644 --- a/src/pages/[locale]/data/styles.module.css +++ b/src/pages/[locale]/data/styles.module.css @@ -30,13 +30,13 @@ .statsHeader { display: flex; flex-wrap: wrap; - justify-content: center; gap: var(--spacing-enourmous); + justify-content: center; .leftContent { display: flex; - align-self: center; flex-direction: column; + align-self: center; justify-content: center; padding: var(--spacing-mega-large); width: 20rem; @@ -57,8 +57,8 @@ display: flex; flex-direction: column; flex-grow: 1; - justify-content: center; gap: var(--spacing-medium); + justify-content: center; .heading { align-self: center; @@ -68,9 +68,9 @@ .sectionDescription { display: flex; - align-self: center; flex-direction: column; gap: var(--spacing-small); + align-self: center; max-width: 30rem; text-align: center; font-size: var(--font-size-medium); @@ -81,12 +81,8 @@ .typeSection { .typeList { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (width <= 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } + gap: var(--spacing-extra-large); .missionImage { height: 20rem; @@ -119,6 +115,10 @@ flex-direction: column; gap: var(--spacing-super-small); } + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } } } @@ -145,9 +145,6 @@ display: flex; flex-basis: 25rem; flex-direction: column; - border: var(--width-separator-thin) solid var(--color-border-light); - border-radius: var(--border-radius-medium); - padding: var(--spacing-medium); gap: var(--spacing-large); /* Astro adaptation: the filters wrapper is a
    @@ -155,6 +152,9 @@ * dataset JSON loads) — Next used a plain div. Reset the * fieldset chrome the rules above don't already cover. */ margin: 0; + border: var(--width-separator-thin) solid var(--color-border-light); + border-radius: var(--border-radius-medium); + padding: var(--spacing-medium); min-inline-size: auto; &:disabled { @@ -189,11 +189,11 @@ .clearButton { display: flex; + gap: var(--spacing-ultra-small); align-items: center; align-self: flex-end; padding: var(--spacing-tiny) var(--spacing-extra-small); font-size: var(--font-size-small); - gap: var(--spacing-ultra-small); } } @@ -222,8 +222,8 @@ padding: var(--spacing-extra-small) var(--spacing-medium); .bubbleFilter { - align-items: center; flex-direction: row; + align-items: center; } } } @@ -235,9 +235,9 @@ .stats { display: flex; - align-items: center; flex-wrap: wrap; gap: var(--spacing-large); + align-items: center; font-size: var(--font-size-large); .circle { @@ -245,8 +245,8 @@ } @media screen and (width <= 720px) { - align-items: flex-start; flex-direction: column; + align-items: flex-start; .circle { display: none; @@ -256,12 +256,8 @@ .projectList { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (width <= 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } + gap: var(--spacing-extra-large); .cardLink { &:hover { @@ -272,19 +268,19 @@ .project { height: 100%; - .projectImage { - height: 10rem; - } - &:hover { box-shadow: var(--box-shadow-medium); } + + .projectImage { + height: 10rem; + } } .projectDetailsRow { display: flex; - align-items: center; gap: var(--spacing-extra-small); + align-items: center; } .progressBar { @@ -324,6 +320,10 @@ gap: var(--spacing-super-small); } } + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } } } } @@ -331,38 +331,38 @@ .downloadSection { .urlList { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: repeat(auto-fit, minmax(30rem, 1fr)); - - @media screen and (width <= 24rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } + gap: var(--spacing-extra-large); .downloadCard { display: flex; + gap: var(--spacing-large); align-items: flex-end; justify-content: space-between; - gap: var(--spacing-large); .fileDetails { display: flex; - align-items: center; gap: var(--spacing-extra-small); + align-items: center; } .link { display: flex; + gap: var(--spacing-extra-small); align-items: center; justify-content: center; font-size: var(--font-size-medium); - gap: var(--spacing-extra-small); } @media screen and (width <= 720px) { - align-items: unset; flex-direction: column; + align-items: unset; } } + + @media screen and (width <= 24rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } } } diff --git a/src/pages/[locale]/get-involved/styles.module.css b/src/pages/[locale]/get-involved/styles.module.css index 861a38e6..ee1d22de 100644 --- a/src/pages/[locale]/get-involved/styles.module.css +++ b/src/pages/[locale]/get-involved/styles.module.css @@ -1,8 +1,8 @@ .getInvolved { display: flex; flex-direction: column; - padding-bottom: var(--spacing-gigantic); gap: var(--spacing-gigantic); + padding-bottom: var(--spacing-gigantic); .hero { .illustration { @@ -23,12 +23,12 @@ .imageContainer { display: flex; - align-items: center; flex-basis: 30rem; flex-direction: column; + gap: var(--spacing-extra-large); + align-items: center; justify-content: center; text-align: center; - gap: var(--spacing-extra-large); .illustration { width: 24rem; @@ -60,16 +60,16 @@ .contributeSection { display: flex; - align-items: center; flex-direction: column; - justify-content: center; gap: var(--spacing-small); + align-items: center; + justify-content: center; .buttonsContainer { display: flex; flex-wrap: wrap; - justify-content: center; gap: var(--spacing-large); + justify-content: center; .buttonImageContainer { position: relative; @@ -86,8 +86,8 @@ .linkContainer{ display: flex; - justify-content: center; gap: var(--spacing-medium); + justify-content: center; } .downloadLink { @@ -103,8 +103,8 @@ .individual { .content { display: flex; - justify-content: space-between; gap: var(--spacing-large); + justify-content: space-between; .cards { display: flex; @@ -135,8 +135,8 @@ .group { .content { display: flex; - justify-content: space-between; gap: var(--spacing-large); + justify-content: space-between; .cards { display: flex; @@ -168,8 +168,8 @@ .organizational { .content { display: flex; - align-items: center; gap: var(--spacing-large); + align-items: center; @media screen and (width <= 720px) { flex-wrap: wrap; @@ -184,8 +184,8 @@ .donate { .content { display: flex; - align-items: center; gap: var(--spacing-large); + align-items: center; .donateCardDescription { display: flex; diff --git a/src/pages/[locale]/projects/styles.module.css b/src/pages/[locale]/projects/styles.module.css index e2563137..67c0efb0 100644 --- a/src/pages/[locale]/projects/styles.module.css +++ b/src/pages/[locale]/projects/styles.module.css @@ -71,21 +71,13 @@ .content { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr)); - - @media screen and (width <= 36rem) { - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - } - - @media screen and (width <= 30rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } + gap: var(--spacing-extra-large); .stats { display: grid; - gap: var(--spacing-large); grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); + gap: var(--spacing-large); @media screen and (width <= 30rem) { grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr)); @@ -111,25 +103,25 @@ .chartContainer { display: flex; - align-items: center; flex-direction: column; + gap: var(--spacing-small); + align-items: center; justify-content: center; border: var(--width-separator-thin) solid var(--color-separator); border-radius: var(--border-radius-medium); padding: var(--spacing-large); height: 100%; min-height: 20rem; - gap: var(--spacing-small); .timelineChartContainer { width: 100%; height: 100%; .timelineChart { - width: 100%; - height: 100%; --path-stroke-width: 1pt; + width: 100%; + height: 100%; .stopStart { stop-color: var(--color-accent); @@ -170,12 +162,12 @@ .emptyChart { display: flex; - align-items: center; flex-direction: column; + gap: var(--spacing-medium); + align-items: center; justify-content: center; opacity: 0.5; height: 100%; - gap: var(--spacing-medium); .chartIcon { font-size: 10rem; @@ -189,12 +181,12 @@ .progressBar { display: flex; - align-self: stretch; flex-direction: column; + gap: var(--spacing-super-small); + align-self: stretch; border: var(--width-separator-thin) solid var(--color-separator); border-radius: var(--border-radius-medium); padding: var(--spacing-large); - gap: var(--spacing-super-small); .progressLabel { display: flex; @@ -215,14 +207,22 @@ } } } + + @media screen and (width <= 36rem) { + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + } + + @media screen and (width <= 30rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } } } .overviewSection { .overviewContent { display: flex; - justify-content: space-between; gap: var(--spacing-enourmous); + justify-content: space-between; .content { display: flex; @@ -238,8 +238,8 @@ .stats { display: flex; - align-self: center; flex-direction: column; + align-self: center; justify-content: center; padding: var(--spacing-mega-large); width: 20rem; @@ -284,27 +284,27 @@ .downloadCard { display: flex; + gap: var(--spacing-large); align-items: flex-end; justify-content: flex-end; - gap: var(--spacing-large); .fileDetails { display: flex; - align-items: center; gap: var(--spacing-extra-small); + align-items: center; } .link { display: flex; + gap: var(--spacing-extra-small); align-items: center; justify-content: center; font-size: var(--font-size-medium); - gap: var(--spacing-extra-small); } @media screen and (width <= 720px) { - align-items: unset; flex-direction: column; + align-items: unset; } } } @@ -313,9 +313,9 @@ .licenseDescription { display: flex; flex-direction: column; + gap: var(--spacing-large); max-width: 60rem; text-align: center; - gap: var(--spacing-large); font-size: var(--font-size-medium); } diff --git a/src/pages/[locale]/styles.module.css b/src/pages/[locale]/styles.module.css index e6209c81..143d2846 100644 --- a/src/pages/[locale]/styles.module.css +++ b/src/pages/[locale]/styles.module.css @@ -1,8 +1,8 @@ .home { display: flex; flex-direction: column; - padding-bottom: var(--spacing-gigantic); gap: var(--spacing-gigantic); + padding-bottom: var(--spacing-gigantic); .hero { .screenshot { @@ -24,18 +24,18 @@ .mobilize { .content { display: flex; - align-items: center; flex-wrap: wrap; - justify-content: center; gap: var(--spacing-super-large); + align-items: center; + justify-content: center; .pictures { display: flex; - align-items: center; flex-basis: 32rem; flex-wrap: wrap; - justify-content: flex-start; gap: var(--spacing-medium); + align-items: center; + justify-content: flex-start; .imageContainer { position: relative; @@ -83,8 +83,8 @@ .infoBoxContainer { display: grid; - gap: var(--spacing-medium); grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); + gap: var(--spacing-medium); } } @@ -109,12 +109,8 @@ .missionTypes { .content { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); - - @media screen and (width <= 20rem) { - grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); - } + gap: var(--spacing-extra-large); .missionType { font-size: var(--font-size-medium); @@ -145,6 +141,10 @@ } } } + + @media screen and (width <= 20rem) { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + } } } @@ -161,24 +161,24 @@ display: flex; flex-basis: calc(50% - var(--spacing-mega-large) / 2); flex-direction: column; + gap: var(--spacing-extra-large); justify-content: center; border-radius: var(--border-radius-medium); background-color: var(--color-background-brand-light); padding: var(--spacing-extra-large) var(--spacing-gigantic); - gap: var(--spacing-extra-large); text-align: center; .linksContainer { display: flex; flex-direction: column; - justify-content: center; gap: var(--spacing-small); + justify-content: center; .buttonsContainer { display: flex; flex-wrap: wrap; - justify-content: center; gap: var(--spacing-large); + justify-content: center; .buttonImageContainer { position: relative; @@ -195,8 +195,8 @@ .downloadLinksContainer { display: flex; - justify-content: center; gap: var(--spacing-medium); + justify-content: center; .downloadLink { color: var(--color-link); @@ -207,13 +207,13 @@ .getInvolved { display: flex; - align-items: center; flex-basis: calc(50% - var(--spacing-mega-large) / 2); flex-direction: column; + gap: var(--spacing-extra-large); + align-items: center; border-radius: var(--border-radius-medium); background-color: var(--color-background-accent-light); padding: var(--spacing-extra-large) var(--spacing-gigantic); - gap: var(--spacing-extra-large); text-align: center; } @@ -226,8 +226,8 @@ .recentNewsAndUpdates { .content { display: grid; - gap: var(--spacing-extra-large); grid-template-columns: minmax(20rem, 2fr) minmax(20rem, 3fr); + gap: var(--spacing-extra-large); .blogItem { .tag { @@ -264,12 +264,12 @@ .seeMoreLink { display: flex; + gap: var(--spacing-super-small); align-items: center; justify-content: flex-end; color: var(--color-accent); font-size: var(--font-size-medium); font-weight: var(--font-weight-bold); - gap: var(--spacing-super-small); } } @@ -293,9 +293,9 @@ .content { display: flex; - align-items: center; flex-direction: column; gap: var(--spacing-super-large); + align-items: center; .missingMapsLogo { width: 12rem; @@ -310,10 +310,10 @@ .partnerLogos { display: flex; - align-items: center; flex-wrap: wrap; - justify-content: center; gap: var(--spacing-mega-large); + align-items: center; + justify-content: center; .partnerLogo { width: 8rem; From 2cf5bcdf8555000f92b94e7522c8d83740d3f1c4 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:08:29 +0545 Subject: [PATCH 34/52] style: 4-space indentation everywhere, enforced eslint @stylistic/indent + stylelint @stylistic/indentation + editorconfig; 2,713 violations autofixed. Navbar dropdown state rule moved after its base rule (no-descending-specificity). --- astro.config.mjs | 118 +- eslint.config.mjs | 47 +- package.json | 1 - .../astro-remote-images/src/RemoteImage.astro | 36 +- playwright.config.ts | 16 +- pnpm-lock.yaml | 14 - scripts/verify-dist.mjs | 18 +- src/components/DataExplorer.tsx | 1130 ++++++++--------- src/components/Footer.astro | 104 +- src/components/Icon.astro | 32 +- src/components/MapIsland.tsx | 118 +- src/components/Navbar.astro | 106 +- src/components/Navbar.module.css | 11 +- src/components/OgMeta.astro | 4 +- src/components/ProjectHistoryChart.tsx | 294 ++--- src/components/ProjectTypeIcon.astro | 36 +- src/components/ProjectTypeIcon.tsx | 152 +-- src/components/ProjectsMapIsland.tsx | 140 +- src/components/RemoteImage.astro | 10 +- src/content.config.ts | 38 +- src/i18n/index.ts | 96 +- src/layouts/BaseLayout.astro | 72 +- src/layouts/BlogLayout.astro | 12 +- src/layouts/ProjectLayout.astro | 10 +- src/lib/chart.ts | 56 +- src/lib/common.ts | 86 +- src/lib/data.ts | 148 +-- src/lib/dataExplorer.ts | 198 +-- src/lib/projectHistory.ts | 74 +- src/pages/404.astro | 38 +- src/pages/[locale]/blogs/[slug]/index.astro | 132 +- src/pages/[locale]/blogs/index.astro | 158 +-- src/pages/[locale]/data/index.astro | 328 ++--- src/pages/[locale]/get-involved/index.astro | 314 ++--- src/pages/[locale]/index.astro | 536 ++++---- src/pages/[locale]/privacy/index.astro | 60 +- src/pages/[locale]/projects/[id].astro | 510 ++++---- src/pages/data-explorer.json.ts | 38 +- tests/e2e/islands.spec.ts | 86 +- 39 files changed, 2684 insertions(+), 2693 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index ad40e57f..57d726a1 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -11,66 +11,66 @@ import hydrationDedup from './packages/astro-hydration-dedup/src/index.ts'; const SITE = 'https://mapswipe.org'; export default defineConfig({ - site: SITE, - vite: { - css: { - modules: { - // dev keeps readable names; prod ships short hashes — class - // attributes were ~22% of every page with the default pattern - generateScopedName: + site: SITE, + vite: { + css: { + modules: { + // dev keeps readable names; prod ships short hashes — class + // attributes were ~22% of every page with the default pattern + generateScopedName: process.env.NODE_ENV === 'production' ? '[hash:base64:6]' : '[local]_[hash:base64:4]', - }, + }, + }, }, - }, - output: 'static', - trailingSlash: 'always', - build: { format: 'directory' }, - // Root/locale-less redirect stubs (parity with the Next app's src/pages/*.tsx - // Redirect stubs). Next did client-side language detection; for a static - // export we redirect the locale-less path to the default-locale (en) variant. - // Emitted as meta-refresh HTML pages in dist. `/` is handled by - // src/pages/index.astro. - redirects: { - '/blogs': '/en/blogs/', - '/data': '/en/data/', - '/get-involved': '/en/get-involved/', - '/privacy': '/en/privacy/', - '/projects': '/en/projects/', - }, - integrations: [ - react(), - // Emit a sitemap with per-locale alternate links (hreflang). The i18n option - // groups the 6 locale-prefixed variants of each page and cross-links them, - // matching the hreflang alternates we emit in . - sitemap({ - i18n: { + output: 'static', + trailingSlash: 'always', + build: { format: 'directory' }, + // Root/locale-less redirect stubs (parity with the Next app's src/pages/*.tsx + // Redirect stubs). Next did client-side language detection; for a static + // export we redirect the locale-less path to the default-locale (en) variant. + // Emitted as meta-refresh HTML pages in dist. `/` is handled by + // src/pages/index.astro. + redirects: { + '/blogs': '/en/blogs/', + '/data': '/en/data/', + '/get-involved': '/en/get-involved/', + '/privacy': '/en/privacy/', + '/projects': '/en/projects/', + }, + integrations: [ + react(), + // Emit a sitemap with per-locale alternate links (hreflang). The i18n option + // groups the 6 locale-prefixed variants of each page and cross-links them, + // matching the hreflang alternates we emit in . + sitemap({ + i18n: { + defaultLocale: 'en', + locales: { en: 'en', ne: 'ne', hu: 'hu', de: 'de', cs: 'cs', pt: 'pt' }, + }, + }), + // Default minOccurrences (10): the 3 sitewide runtimes are externalized; + // the data pages' 6-page client:load loader stays inline by design. + hydrationDedup({ minOccurrences: 10 }), + ], + // Blog markdown is rendered by Astro's built-in pipeline. Next used remark-gfm + // (remark().use(remarkGfm) in its Pages-Router detail page), so we enable it + // here for GFM parity (tables, strikethrough, autolinks, etc.). + // In-body relative images (./images/*) are optimized natively by astro:assets. + markdown: { + remarkPlugins: [remarkGfm], + }, + i18n: { defaultLocale: 'en', - locales: { en: 'en', ne: 'ne', hu: 'hu', de: 'de', cs: 'cs', pt: 'pt' }, - }, - }), - // Default minOccurrences (10): the 3 sitewide runtimes are externalized; - // the data pages' 6-page client:load loader stays inline by design. - hydrationDedup({ minOccurrences: 10 }), - ], - // Blog markdown is rendered by Astro's built-in pipeline. Next used remark-gfm - // (remark().use(remarkGfm) in its Pages-Router detail page), so we enable it - // here for GFM parity (tables, strikethrough, autolinks, etc.). - // In-body relative images (./images/*) are optimized natively by astro:assets. - markdown: { - remarkPlugins: [remarkGfm], - }, - i18n: { - defaultLocale: 'en', - locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], - routing: { prefixDefaultLocale: true }, - }, - // NOTE: Remote project cover images are optimized by our build-time, - // fail-soft resolver (the astro-remote-images workspace package, configured - // in src/lib/remoteImages.ts + wrapped by components/RemoteImage.astro), - // NOT by Astro's astro:assets pipeline — its optimize phase is all-or-nothing - // and one malformed remote image aborts the whole build. LOCAL blog images - // (blogs/images/*, a small trusted set) DO go through astro:assets (default - // sharp service): covers via the image() schema helper + , in-body - // relative markdown images natively. We don't declare remotePatterns, so - // astro:assets never touches a remote URL. + locales: ['en', 'ne', 'hu', 'de', 'cs', 'pt'], + routing: { prefixDefaultLocale: true }, + }, + // NOTE: Remote project cover images are optimized by our build-time, + // fail-soft resolver (the astro-remote-images workspace package, configured + // in src/lib/remoteImages.ts + wrapped by components/RemoteImage.astro), + // NOT by Astro's astro:assets pipeline — its optimize phase is all-or-nothing + // and one malformed remote image aborts the whole build. LOCAL blog images + // (blogs/images/*, a small trusted set) DO go through astro:assets (default + // sharp service): covers via the image() schema helper + , in-body + // relative markdown images natively. We don't declare remotePatterns, so + // astro:assets never touches a remote URL. }); diff --git a/eslint.config.mjs b/eslint.config.mjs index fe5c94d3..24eb371e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,31 +3,34 @@ import tseslint from 'typescript-eslint'; import astro from 'eslint-plugin-astro'; import reactHooks from 'eslint-plugin-react-hooks'; import globals from 'globals'; +import stylistic from '@stylistic/eslint-plugin'; export default tseslint.config( - { ignores: ['dist/', '.astro/', 'node_modules/', 'generated/', 'public/', 'docs/'] }, - js.configs.recommended, - ...tseslint.configs.recommended, - ...astro.configs.recommended, - { + { ignores: ['dist/', '.astro/', 'node_modules/', 'generated/', 'public/', 'docs/'] }, + js.configs.recommended, + ...tseslint.configs.recommended, + ...astro.configs.recommended, + { // build scripts and islands run under node and the browser respectively - languageOptions: { globals: { ...globals.node, ...globals.browser } }, - }, - { - files: ['**/*.tsx'], - plugins: { 'react-hooks': reactHooks }, - // just the two established rules; the newer compiler-era checks flag - // deliberate island patterns (SSR mount guard, ref-measured chart) - rules: { - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', + languageOptions: { globals: { ...globals.node, ...globals.browser } }, }, - }, - { - rules: { - // the data layer casts GraphQL JSON at its boundaries; a blanket ban - // would force churn without adding safety there - '@typescript-eslint/no-explicit-any': 'off', + { + files: ['**/*.tsx'], + plugins: { 'react-hooks': reactHooks }, + // just the two established rules; the newer compiler-era checks flag + // deliberate island patterns (SSR mount guard, ref-measured chart) + rules: { + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + }, + }, + { + plugins: { '@stylistic': stylistic }, + rules: { + // the data layer casts GraphQL JSON at its boundaries; a blanket ban + // would force churn without adding safety there + '@typescript-eslint/no-explicit-any': 'off', + '@stylistic/indent': ['error', 4], + }, }, - }, ); diff --git a/package.json b/package.json index b6906a87..13516829 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "stylelint": "^17.14.0", "stylelint-config-concentric-order": "^5.5.0", "stylelint-config-recommended": "^18.0.0", - "stylelint-config-standard": "^40.0.0", "typescript": "^5.7.0", "typescript-eslint": "^8.63.0" }, diff --git a/packages/astro-remote-images/src/RemoteImage.astro b/packages/astro-remote-images/src/RemoteImage.astro index bb0a4a75..9c79ee68 100644 --- a/packages/astro-remote-images/src/RemoteImage.astro +++ b/packages/astro-remote-images/src/RemoteImage.astro @@ -14,19 +14,19 @@ import { getDefaultRemoteImages } from './index.ts'; // the module that configures your instance is imported before this component // renders — e.g. import it from the same file that imports this component. interface Props { - src: string; - alt: string; - class?: string; - width?: number; - height?: number; + src: string; + alt: string; + class?: string; + width?: number; + height?: number; } const remoteImages = getDefaultRemoteImages(); const { - src, - alt, - class: className, - width = remoteImages.options.width, - height = 420, + src, + alt, + class: className, + width = remoteImages.options.width, + height = 420, } = Astro.props; // Explicit width (inferSize:false semantics) so there is no render-time @@ -34,12 +34,12 @@ const { const { src: resolvedSrc, optimized } = await remoteImages.resolve(src, { width }); --- {alt} diff --git a/playwright.config.ts b/playwright.config.ts index 58d6459e..92bfdabe 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -3,13 +3,13 @@ import { defineConfig } from '@playwright/test'; // Island smoke tests against the built site (`astro preview` over dist/). // Run a full build first; CI wires this after verify-dist. export default defineConfig({ - testDir: 'tests/e2e', - timeout: 30_000, - use: { baseURL: 'http://localhost:43210' }, - webServer: { - command: 'pnpm preview --port 43210', - url: 'http://localhost:43210/en/', - reuseExistingServer: true, + testDir: 'tests/e2e', timeout: 30_000, - }, + use: { baseURL: 'http://localhost:43210' }, + webServer: { + command: 'pnpm preview --port 43210', + url: 'http://localhost:43210/en/', + reuseExistingServer: true, + timeout: 30_000, + }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e456cc5..556bad6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -141,9 +141,6 @@ importers: stylelint-config-recommended: specifier: ^18.0.0 version: 18.0.0(stylelint@17.14.0(typescript@5.9.3)) - stylelint-config-standard: - specifier: ^40.0.0 - version: 40.0.0(stylelint@17.14.0(typescript@5.9.3)) typescript: specifier: ^5.7.0 version: 5.9.3 @@ -4414,12 +4411,6 @@ packages: peerDependencies: stylelint: ^17.0.0 - stylelint-config-standard@40.0.0: - resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} - engines: {node: '>=20.19.0'} - peerDependencies: - stylelint: ^17.0.0 - stylelint-order@7.0.1: resolution: {integrity: sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==} engines: {node: '>=20.19.0'} @@ -9695,11 +9686,6 @@ snapshots: dependencies: stylelint: 17.14.0(typescript@5.9.3) - stylelint-config-standard@40.0.0(stylelint@17.14.0(typescript@5.9.3)): - dependencies: - stylelint: 17.14.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.14.0(typescript@5.9.3)) - stylelint-order@7.0.1(stylelint@17.14.0(typescript@5.9.3)): dependencies: postcss: 8.5.19 diff --git a/scripts/verify-dist.mjs b/scripts/verify-dist.mjs index f10466ba..5c9710fe 100644 --- a/scripts/verify-dist.mjs +++ b/scripts/verify-dist.mjs @@ -7,8 +7,8 @@ import { join } from 'node:path'; const DIST = 'dist'; const failures = []; const check = (name, ok, detail = '') => { - console.log(`${ok ? ' ok ' : 'FAIL '} ${name}${detail ? ` — ${detail}` : ''}`); - if (!ok) failures.push(name); + console.log(`${ok ? ' ok ' : 'FAIL '} ${name}${detail ? ` — ${detail}` : ''}`); + if (!ok) failures.push(name); }; const data = JSON.parse(readFileSync('fullData/staticData.json', 'utf8')); @@ -29,22 +29,22 @@ check('sitemap not partial', locs > 1000, `${locs} (a partial-merge sitemap woul const dataJson = JSON.parse(readFileSync(join(DIST, 'data-explorer.json'), 'utf8')); check('data-explorer.json matches data', dataJson.miniProjects.length === projects, - `${dataJson.miniProjects.length} vs ${projects}`); + `${dataJson.miniProjects.length} vs ${projects}`); const sampleProject = execSync( - `find ${DIST}/en/projects -mindepth 2 -name index.html | head -1`).toString().trim(); + `find ${DIST}/en/projects -mindepth 2 -name index.html | head -1`).toString().trim(); const page = readFileSync(sampleProject, 'utf8'); const hydrationSrc = page.match(/src="(\/_astro\/dedup-[^"]+\.js)"/); check('hydration script referenced', !!hydrationSrc); check('hydration script exists', !!hydrationSrc && existsSync(join(DIST, hydrationSrc[1]))); check('no unoptimized blog-image refs', - execSync(`grep -rl "/img/blogImages" ${DIST} --include='*.html' | wc -l`).toString().trim() === '0'); + execSync(`grep -rl "/img/blogImages" ${DIST} --include='*.html' | wc -l`).toString().trim() === '0'); check('error-image asset shipped', existsSync(join(DIST, '_img/image-error.svg'))); const animated = execSync( - `for f in ${DIST}/_astro/*.webp; do grep -lq ANMF "$f" 2>/dev/null && echo "$f"; done | wc -l`, - { shell: '/bin/bash' }).toString().trim(); + `for f in ${DIST}/_astro/*.webp; do grep -lq ANMF "$f" 2>/dev/null && echo "$f"; done | wc -l`, + { shell: '/bin/bash' }).toString().trim(); check('animated webp survives (GIF regression guard)', Number(animated) >= 1, `${animated} animated`); check('German content renders', readFileSync(join(DIST, 'de/index.html'), 'utf8').includes('Projekt')); @@ -55,7 +55,7 @@ const distMB = Number(execSync(`du -sm ${DIST}`).toString().split('\t')[0]); check('dist under 900 MB (1 GB Pages limit early warning)', distMB < 900, `${distMB} MB`); if (failures.length) { - console.error(`\n${failures.length} check(s) failed: ${failures.join(', ')}`); - process.exit(1); + console.error(`\n${failures.length} check(s) failed: ${failures.join(', ')}`); + process.exit(1); } console.log(`\nall checks passed (dist ${distMB} MB, ${htmlCount} pages)`); diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index 241c3595..6c3eec45 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -1,10 +1,10 @@ import React, { - useState, - useCallback, - useMemo, - useEffect, - Suspense, - lazy, + useState, + useCallback, + useMemo, + useEffect, + Suspense, + lazy, } from 'react'; import ProjectTypeIcon from './ProjectTypeIcon'; @@ -29,7 +29,7 @@ import imageStyles from './ImageWrapper.module.css'; // Tiny className joiner (parity with @togglecorp/fujs _cs). function cs(...parts: (string | false | null | undefined)[]): string { - return parts.filter(Boolean).join(' '); + return parts.filter(Boolean).join(' '); } // Leaflet touches window at import time and cannot SSR. We lazy-load the map @@ -66,46 +66,46 @@ export const PAGE_SIZE = 9; // --- Inlined @togglecorp/fujs helpers (fujs isn't a dep of the astro app; we // avoid adding it just for these tiny functions) -------------------------- function isDefined(v: T | null | undefined): v is T { - return v !== null && v !== undefined; + return v !== null && v !== undefined; } function bound(value: number, min: number, max: number): number { - return Math.max(min, Math.min(max, value)); + return Math.max(min, Math.min(max, value)); } function sum(list: number[]): number { - return list.reduce((acc, v) => acc + v, 0); + return list.reduce((acc, v) => acc + v, 0); } function compareDate(a: string | null | undefined, b: string | null | undefined): number { - if (!a && !b) return 0; - if (!a) return -1; - if (!b) return 1; - const ta = new Date(a).getTime(); - const tb = new Date(b).getTime(); - return ta < tb ? -1 : ta > tb ? 1 : 0; + if (!a && !b) return 0; + if (!a) return -1; + if (!b) return 1; + const ta = new Date(a).getTime(); + const tb = new Date(b).getTime(); + return ta < tb ? -1 : ta > tb ? 1 : 0; } function caseInsensitiveSubmatch(text: string | undefined, search: string): boolean { - return (text ?? '').toLowerCase().includes(search.toLowerCase()); + return (text ?? '').toLowerCase().includes(search.toLowerCase()); } function compareStringSearch(a: string, b: string, search: string): number { - const la = a.toLowerCase(); - const lb = b.toLowerCase(); - const s = search.toLowerCase(); - return (la.indexOf(s)) - (lb.indexOf(s)); + const la = a.toLowerCase(); + const lb = b.toLowerCase(); + const s = search.toLowerCase(); + return (la.indexOf(s)) - (lb.indexOf(s)); } // Faithful port of utils/common#rankedSearchOnList. function rankedSearchOnList( - list: T[], - searchString: string | undefined, - labelSelector: (item: T) => string, + list: T[], + searchString: string | undefined, + labelSelector: (item: T) => string, ): T[] { - if (!searchString || searchString.trim() === '') return list; - return list - .filter((option) => caseInsensitiveSubmatch(labelSelector(option), searchString)) - .sort((a, b) => compareStringSearch(labelSelector(a), labelSelector(b), searchString)); + if (!searchString || searchString.trim() === '') return list; + return list + .filter((option) => caseInsensitiveSubmatch(labelSelector(option), searchString)) + .sort((a, b) => compareStringSearch(labelSelector(a), labelSelector(b), searchString)); } function getFileSizeProperties(fileSize: number) { - const mb = 1024 * 1024; - if (fileSize > mb / 10) return { size: fileSize / mb, unit: 'megabyte' }; - return { size: fileSize / 1024, unit: 'kilobyte' }; + const mb = 1024 * 1024; + if (fileSize > mb / 10) return { size: fileSize / mb, unit: 'megabyte' }; + return { size: fileSize / 1024, unit: 'kilobyte' }; } // --- Tiny i18n interpolation. The .astro frontmatter hands us the raw template @@ -114,35 +114,35 @@ function getFileSizeProperties(fileSize: number) { // app's i18next number/datetime formatting) ------------------------------- type Dict = Record; function makeT(dict: Dict) { - return function t(key: string, params?: Record): string { - let str = dict[key] ?? key; - if (params) { - str = str.replace(/\{\{\s*([^},]+?)\s*(?:,\s*(number|datetime))?\s*\}\}/g, (_m, name, fmt) => { - const raw = params[name as string]; - if (raw === undefined || raw === null) return ''; - if (fmt === 'number' && typeof raw === 'number') { - return new Intl.NumberFormat().format(raw); + return function t(key: string, params?: Record): string { + let str = dict[key] ?? key; + if (params) { + str = str.replace(/\{\{\s*([^},]+?)\s*(?:,\s*(number|datetime))?\s*\}\}/g, (_m, name, fmt) => { + const raw = params[name as string]; + if (raw === undefined || raw === null) return ''; + if (fmt === 'number' && typeof raw === 'number') { + return new Intl.NumberFormat().format(raw); + } + if (fmt === 'datetime') { + const d = raw instanceof Date ? raw : new Date(String(raw)); + if (!Number.isNaN(d.getTime())) return d.toLocaleDateString(undefined, { dateStyle: 'medium' }); + return String(raw); + } + return String(raw); + }); } - if (fmt === 'datetime') { - const d = raw instanceof Date ? raw : new Date(String(raw)); - if (!Number.isNaN(d.getTime())) return d.toLocaleDateString(undefined, { dateStyle: 'medium' }); - return String(raw); - } - return String(raw); - }); - } - return str; - }; + return str; + }; } // --- Debounce hook (parity with hooks/useDebouncedValue) ------------------ function useDebouncedValue(value: T, delay = 200): T { - const [debounced, setDebounced] = useState(value); - useEffect(() => { - const id = setTimeout(() => setDebounced(value), delay); - return () => clearTimeout(id); - }, [value, delay]); - return debounced; + const [debounced, setDebounced] = useState(value); + useEffect(() => { + const id = setTimeout(() => setDebounced(value), delay); + return () => clearTimeout(id); + }, [value, delay]); + return debounced; } const PROJECT_TYPES = ['FIND', 'VALIDATE', 'COMPARE', 'COMPLETENESS', 'VALIDATE_IMAGE', 'STREET', 'LOCATE'] as const; @@ -150,540 +150,540 @@ const PROJECT_TYPES = ['FIND', 'VALIDATE', 'COMPARE', 'COMPLETENESS', 'VALIDATE_ // Shape of the shared /data-explorer.json emitted at build time by // src/pages/data-explorer.json.ts. interface DataExplorerDataset { - miniProjects: MiniProject[]; - organizations: Organization[]; - imageMap: Record; + miniProjects: MiniProject[]; + organizations: Organization[]; + imageMap: Record; } interface Props { - dict: Dict; - // {originalCoverUrl -> optimized (or passthrough) src} for the INITIAL slice - // only, resolved at build time by the fail-soft optimizer; the full map - // arrives with the fetched dataset. - imageMap: Record; - // First PAGE_SIZE projects, SSR'd for SEO / no blank page. - initialProjects: MiniProject[]; - // Total project count (the fetched dataset's length) — lets the summary line - // show the real count while the dataset is still loading. - totalCount: number; - // URL of the shared locale-independent dataset JSON. - dataUrl: string; - globalExportAssets: ExportAsset[]; - minArea: number; - maxArea: number; - minContributors: number; - maxContributors: number; - buildDate: string | null; + dict: Dict; + // {originalCoverUrl -> optimized (or passthrough) src} for the INITIAL slice + // only, resolved at build time by the fail-soft optimizer; the full map + // arrives with the fetched dataset. + imageMap: Record; + // First PAGE_SIZE projects, SSR'd for SEO / no blank page. + initialProjects: MiniProject[]; + // Total project count (the fetched dataset's length) — lets the summary line + // show the real count while the dataset is still loading. + totalCount: number; + // URL of the shared locale-independent dataset JSON. + dataUrl: string; + globalExportAssets: ExportAsset[]; + minArea: number; + maxArea: number; + minContributors: number; + maxContributors: number; + buildDate: string | null; } export default function DataExplorer(props: Props) { - const { - dict, - imageMap: initialImageMap, - initialProjects, - totalCount, - dataUrl, - globalExportAssets, - minArea, - maxArea, - minContributors, - maxContributors, - buildDate, - } = props; - - const t = useMemo(() => makeT(dict), [dict]); - - // client-guard for the (non-SSR-able) leaflet map only. - const [mounted, setMounted] = useState(false); - useEffect(() => setMounted(true), []); - - // Full dataset, fetched on mount from the shared locale-independent JSON. - // Initial state mirrors the SSR'd props so hydration matches the static - // HTML. `loading` starts true (also in the SSR'd HTML — filter inputs render - // disabled until the data they filter has arrived). - const [projects, setProjects] = useState(initialProjects); - const [organizations, setOrganizations] = useState([]); - const [imageMap, setImageMap] = useState>(initialImageMap); - const [loading, setLoading] = useState(true); - - useEffect(() => { - let cancelled = false; - fetch(dataUrl) - .then((res) => { - if (!res.ok) throw new Error(`HTTP ${res.status}`); - return res.json() as Promise; - }) - .then((dataset) => { - if (cancelled) return; - setProjects(dataset.miniProjects ?? []); - setOrganizations(dataset.organizations ?? []); - // Merge over the initial map so the already-rendered cards never lose - // their resolved src even if the fetched map were somehow partial. - setImageMap((prev) => ({ ...prev, ...(dataset.imageMap ?? {}) })); - setLoading(false); - }) - .catch((err: unknown) => { - if (cancelled) return; - // Fail-soft: keep showing the SSR'd initial slice. - - console.warn(`data-explorer: failed to load ${dataUrl}; showing the initial ${initialProjects.length} projects only`, err); - setLoading(false); - }); - return () => { cancelled = true; }; + const { + dict, + imageMap: initialImageMap, + initialProjects, + totalCount, + dataUrl, + globalExportAssets, + minArea, + maxArea, + minContributors, + maxContributors, + buildDate, + } = props; + + const t = useMemo(() => makeT(dict), [dict]); + + // client-guard for the (non-SSR-able) leaflet map only. + const [mounted, setMounted] = useState(false); + useEffect(() => setMounted(true), []); + + // Full dataset, fetched on mount from the shared locale-independent JSON. + // Initial state mirrors the SSR'd props so hydration matches the static + // HTML. `loading` starts true (also in the SSR'd HTML — filter inputs render + // disabled until the data they filter has arrived). + const [projects, setProjects] = useState(initialProjects); + const [organizations, setOrganizations] = useState([]); + const [imageMap, setImageMap] = useState>(initialImageMap); + const [loading, setLoading] = useState(true); + + useEffect(() => { + let cancelled = false; + fetch(dataUrl) + .then((res) => { + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return res.json() as Promise; + }) + .then((dataset) => { + if (cancelled) return; + setProjects(dataset.miniProjects ?? []); + setOrganizations(dataset.organizations ?? []); + // Merge over the initial map so the already-rendered cards never lose + // their resolved src even if the fetched map were somehow partial. + setImageMap((prev) => ({ ...prev, ...(dataset.imageMap ?? {}) })); + setLoading(false); + }) + .catch((err: unknown) => { + if (cancelled) return; + // Fail-soft: keep showing the SSR'd initial slice. + + console.warn(`data-explorer: failed to load ${dataUrl}; showing the initial ${initialProjects.length} projects only`, err); + setLoading(false); + }); + return () => { cancelled = true; }; // dataUrl is a build-time constant; initialProjects only feeds the warning. // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dataUrl]); - - const [items, setItems] = useState(PAGE_SIZE); - const [searchText, setSearchText] = useState(''); - const [locationSearchText, setLocationSearchText] = useState(''); - const [dateFrom, setDateFrom] = useState(''); - const [dateTo, setDateTo] = useState(''); - const [projectTypes, setProjectTypes] = useState([]); - const [projectStatuses, setProjectStatuses] = useState([]); - const [bubble, setBubble] = useState(''); - const [organization, setOrganization] = useState(''); - - const debouncedSearchText = useDebouncedValue(searchText); - const debouncedLocationSearchText = useDebouncedValue(locationSearchText); - - const typeLabels = useMemo>(() => ({ - FIND: t('type-find-title'), - VALIDATE: t('type-validate-title'), - COMPARE: t('type-compare-title'), - COMPLETENESS: t('type-completeness-title'), - VALIDATE_IMAGE: t('type-validate-image-title'), - STREET: t('type-streets-view-title'), - LOCATE: t('type-locate-title'), - }), [t]); - const statusLabels = useMemo>(() => ({ - PUBLISHED: t('active'), - FINISHED: t('finished'), - }), [t]); - const statusClass: Record = { - PUBLISHED: styles.active, - FINISHED: styles.finished, - }; - - const toggleInList = useCallback((list: string[], value: string): string[] => - list.includes(value) ? list.filter((v) => v !== value) : [...list, value], []); - - const visibleProjects = useMemo(() => { - let filtered = projects; - if (projectStatuses.length > 0) { - filtered = filtered.filter((p) => p.status !== null && projectStatuses.includes(p.status)); - } - if (projectTypes.length > 0) { - filtered = filtered.filter((p) => projectTypes.includes(String(p.projectType))); - } - if (dateFrom) { - filtered = filtered.filter((p) => compareDate(p.createdAt, dateFrom) >= 0); - } - if (dateTo) { - filtered = filtered.filter((p) => compareDate(dateTo, p.createdAt) >= 0); - } - if (organization) { - filtered = filtered.filter((p) => p.requestingOrganizationId === organization); - } - if (debouncedLocationSearchText) { - filtered = rankedSearchOnList(filtered, debouncedLocationSearchText, (p) => p.region ?? ''); - } - if (debouncedSearchText) { - filtered = rankedSearchOnList(filtered, debouncedSearchText, (p) => p.name); - } - return filtered; - }, [ - projects, projectStatuses, projectTypes, dateFrom, dateTo, organization, - debouncedLocationSearchText, debouncedSearchText, - ]); - - const handleSeeMore = useCallback(() => { - setItems((n) => bound(n + PAGE_SIZE, 0, projects.length)); - }, [projects.length]); - - const totalAreaSum = sum(visibleProjects.map((p) => p.aoiGeometry?.totalArea ?? 0).filter(isDefined)); - const roundedTotalArea = Math.round(totalAreaSum / 1000) * 1000; - const tableProjects = visibleProjects.slice(0, items); - - const radiusSelector = useCallback((project: MiniProject) => { - if (bubble === 'area') { - return 4 + 16 * (((project.aoiGeometry?.totalArea ?? 0) - minArea) / (maxArea - minArea || 1)); - } - if (bubble === 'contributors') { - return 4 + 16 * (((project.numberOfContributorUsers ?? 0) - minContributors) / (maxContributors - minContributors || 1)); - } - return 4; - }, [bubble, maxArea, minArea, maxContributors, minContributors]); - - const handleClearFilters = useCallback(() => { - setProjectStatuses([]); - setOrganization(''); - setSearchText(''); - setDateFrom(''); - setDateTo(''); - setProjectTypes([]); - setLocationSearchText(''); - }, []); - - const filtersApplied = !!( - searchText || dateFrom || locationSearchText || dateTo || + }, [dataUrl]); + + const [items, setItems] = useState(PAGE_SIZE); + const [searchText, setSearchText] = useState(''); + const [locationSearchText, setLocationSearchText] = useState(''); + const [dateFrom, setDateFrom] = useState(''); + const [dateTo, setDateTo] = useState(''); + const [projectTypes, setProjectTypes] = useState([]); + const [projectStatuses, setProjectStatuses] = useState([]); + const [bubble, setBubble] = useState(''); + const [organization, setOrganization] = useState(''); + + const debouncedSearchText = useDebouncedValue(searchText); + const debouncedLocationSearchText = useDebouncedValue(locationSearchText); + + const typeLabels = useMemo>(() => ({ + FIND: t('type-find-title'), + VALIDATE: t('type-validate-title'), + COMPARE: t('type-compare-title'), + COMPLETENESS: t('type-completeness-title'), + VALIDATE_IMAGE: t('type-validate-image-title'), + STREET: t('type-streets-view-title'), + LOCATE: t('type-locate-title'), + }), [t]); + const statusLabels = useMemo>(() => ({ + PUBLISHED: t('active'), + FINISHED: t('finished'), + }), [t]); + const statusClass: Record = { + PUBLISHED: styles.active, + FINISHED: styles.finished, + }; + + const toggleInList = useCallback((list: string[], value: string): string[] => + list.includes(value) ? list.filter((v) => v !== value) : [...list, value], []); + + const visibleProjects = useMemo(() => { + let filtered = projects; + if (projectStatuses.length > 0) { + filtered = filtered.filter((p) => p.status !== null && projectStatuses.includes(p.status)); + } + if (projectTypes.length > 0) { + filtered = filtered.filter((p) => projectTypes.includes(String(p.projectType))); + } + if (dateFrom) { + filtered = filtered.filter((p) => compareDate(p.createdAt, dateFrom) >= 0); + } + if (dateTo) { + filtered = filtered.filter((p) => compareDate(dateTo, p.createdAt) >= 0); + } + if (organization) { + filtered = filtered.filter((p) => p.requestingOrganizationId === organization); + } + if (debouncedLocationSearchText) { + filtered = rankedSearchOnList(filtered, debouncedLocationSearchText, (p) => p.region ?? ''); + } + if (debouncedSearchText) { + filtered = rankedSearchOnList(filtered, debouncedSearchText, (p) => p.name); + } + return filtered; + }, [ + projects, projectStatuses, projectTypes, dateFrom, dateTo, organization, + debouncedLocationSearchText, debouncedSearchText, + ]); + + const handleSeeMore = useCallback(() => { + setItems((n) => bound(n + PAGE_SIZE, 0, projects.length)); + }, [projects.length]); + + const totalAreaSum = sum(visibleProjects.map((p) => p.aoiGeometry?.totalArea ?? 0).filter(isDefined)); + const roundedTotalArea = Math.round(totalAreaSum / 1000) * 1000; + const tableProjects = visibleProjects.slice(0, items); + + const radiusSelector = useCallback((project: MiniProject) => { + if (bubble === 'area') { + return 4 + 16 * (((project.aoiGeometry?.totalArea ?? 0) - minArea) / (maxArea - minArea || 1)); + } + if (bubble === 'contributors') { + return 4 + 16 * (((project.numberOfContributorUsers ?? 0) - minContributors) / (maxContributors - minContributors || 1)); + } + return 4; + }, [bubble, maxArea, minArea, maxContributors, minContributors]); + + const handleClearFilters = useCallback(() => { + setProjectStatuses([]); + setOrganization(''); + setSearchText(''); + setDateFrom(''); + setDateTo(''); + setProjectTypes([]); + setLocationSearchText(''); + }, []); + + const filtersApplied = !!( + searchText || dateFrom || locationSearchText || dateTo || organization || projectTypes.length > 0 || projectStatuses.length > 0 - ); - - const assetConfig: Record = { - PROJECTS_CSV: { - heading: t('download-projects-overview-heading'), - description: t('download-projects-overview-description'), - fileLabel: 'CSV', - }, - PROJECT_STATS_BY_TYPES: { - heading: t('download-projects-csv-heading'), - description: t('download-projects-csv-description'), - fileLabel: 'CSV', - }, - PROJECTS_CENTROID_GEOJSON: { - heading: t('download-projects-with-centroid-heading'), - description: t('download-projects-with-centroid-description'), - fileLabel: 'GEOJSON', - }, - PROJECTS_GEOM_GEOJSON: { - heading: t('download-projects-with-geometry-headingdownload-projects-geometry-heading'), - description: t('download-projects-with-geometry-description'), - fileLabel: 'GEOJSON', - }, - }; - - return ( - <> - {/* Explore: filters + map + list (Next: exploreSection Section) */} -
    -
    -
    -

    - {t('explore-section-heading')} -

    - {buildDate && ( -
    - {t('data-last-fetched', { date: new Date(Number(buildDate)) })} -
    - {t('explore-section-heading-description')} -
    - )} -
    - -
    -
    - {/* One disabled-able fieldset: while the shared dataset JSON is + ); + + const assetConfig: Record = { + PROJECTS_CSV: { + heading: t('download-projects-overview-heading'), + description: t('download-projects-overview-description'), + fileLabel: 'CSV', + }, + PROJECT_STATS_BY_TYPES: { + heading: t('download-projects-csv-heading'), + description: t('download-projects-csv-description'), + fileLabel: 'CSV', + }, + PROJECTS_CENTROID_GEOJSON: { + heading: t('download-projects-with-centroid-heading'), + description: t('download-projects-with-centroid-description'), + fileLabel: 'GEOJSON', + }, + PROJECTS_GEOM_GEOJSON: { + heading: t('download-projects-with-geometry-headingdownload-projects-geometry-heading'), + description: t('download-projects-with-geometry-description'), + fileLabel: 'GEOJSON', + }, + }; + + return ( + <> + {/* Explore: filters + map + list (Next: exploreSection Section) */} +
    +
    +
    +

    + {t('explore-section-heading')} +

    + {buildDate && ( +
    + {t('data-last-fetched', { date: new Date(Number(buildDate)) })} +
    + {t('explore-section-heading-description')} +
    + )} +
    + +
    +
    + {/* One disabled-able fieldset: while the shared dataset JSON is loading, every filter control is disabled (native fieldset cascade) — they apply against the full dataset once it arrives. (Next used a plain div; see the fieldset adaptation note in styles.module.css.) */} -
    - {/* Project status (MultiSelectInput as toggle chips) */} -
    -
    {t('project-status')}
    -
    - {(['PUBLISHED', 'FINISHED'] as const).map((key) => ( - - ))} -
    -
    - - {/* Project type (MultiSelectInput as toggle chips) */} -
    -
    {t('project-type')}
    -
    - {PROJECT_TYPES.map((key) => ( - - ))} -
    -
    - - setSearchText(e.target.value)} - /> - setLocationSearchText(e.target.value)} - /> - -
    - - -
    - {filtersApplied && ( - - )} -
    - -
    - {/* Map is client-only: rendered after mount so SSR never touches +
    + {/* Project status (MultiSelectInput as toggle chips) */} +
    +
    {t('project-status')}
    +
    + {(['PUBLISHED', 'FINISHED'] as const).map((key) => ( + + ))} +
    +
    + + {/* Project type (MultiSelectInput as toggle chips) */} +
    +
    {t('project-type')}
    +
    + {PROJECT_TYPES.map((key) => ( + + ))} +
    +
    + + setSearchText(e.target.value)} + /> + setLocationSearchText(e.target.value)} + /> + +
    + + +
    + {filtersApplied && ( + + )} +
    + +
    + {/* Map is client-only: rendered after mount so SSR never touches leaflet. Placeholder keeps layout stable pre-hydration. Also waits for the fetched dataset so it never draws just the 9-item initial slice and then re-jumps to the full set. */} - {mounted && !loading ? ( - - ) : ( - -
    + {mounted && !loading ? ( + + ) : ( + +
    -
    - {/* While loading, the true total comes from the build-time count — +
    + {/* While loading, the true total comes from the build-time count — visibleProjects only holds the initial slice. The area sum is slice-only until the dataset arrives, so hide it until then. */} -
    {t('visible-projects-count', { totalProjects: loading ? totalCount : visibleProjects.length })}
    - {!loading && ( - <> - -
    {t('total-area-card-text', { area: roundedTotalArea })}
    - - )} -
    - -
    - {tableProjects.map((project) => ( - - {/* `de-card` is a stable, hash-free hook kept for the e2e - tests (tests/e2e/islands.spec.ts selects article.de-card). */} -
    - {project.image?.file?.url && ( -
    - {project.name} -
    - )} -
    -
    -
    -
    - {project.name} -
    -
    -
    - {project.projectType && ( -
    - - {typeLabels[project.projectType] ?? project.projectType} -
    - )} - {project.status && ( -
    - - {statusLabels[project.status] ?? project.status} -
    - )} -
    -
    -
    -
    - {project.region && ( -
    - {project.region} -
    - )} - {project.requestingOrganization && ( -
    - {project.requestingOrganization.name} -
    - )} -
    - {project.createdAt && ( -
    - {t('project-card-last-update', { date: project.createdAt })} -
    +
    {t('visible-projects-count', { totalProjects: loading ? totalCount : visibleProjects.length })}
    + {!loading && ( + <> + +
    {t('total-area-card-text', { area: roundedTotalArea })}
    + )} -
    - {t('project-card-contributors-text', { contributors: project.numberOfContributorUsers ?? 0 })} -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - {t('project-card-progress-text', { progress: project.progress * 100 })} -
    -
    + +
    + {tableProjects.map((project) => ( + + {/* `de-card` is a stable, hash-free hook kept for the e2e + tests (tests/e2e/islands.spec.ts selects article.de-card). */} +
    + {project.image?.file?.url && ( +
    + {project.name} +
    + )} +
    +
    +
    +
    + {project.name} +
    +
    +
    + {project.projectType && ( +
    + + {typeLabels[project.projectType] ?? project.projectType} +
    + )} + {project.status && ( +
    + + {statusLabels[project.status] ?? project.status} +
    + )} +
    +
    +
    +
    + {project.region && ( +
    + {project.region} +
    + )} + {project.requestingOrganization && ( +
    + {project.requestingOrganization.name} +
    + )} +
    + {project.createdAt && ( +
    + {t('project-card-last-update', { date: project.createdAt })} +
    + )} +
    + {t('project-card-contributors-text', { contributors: project.numberOfContributorUsers ?? 0 })} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {t('project-card-progress-text', { progress: project.progress * 100 })} +
    +
    +
    +
    +
    +
    +
    + ))}
    -
    -
    - - ))} -
    -
    - - {/* Next rendered the see-more button as the Section's `actions`. */} - {tableProjects.length !== visibleProjects.length && ( -
    - -
    - )} -
    -
    - - {/* Download section (global export assets) */} -
    -
    -
    -

    - {t('download-section-heading')} -

    -
    -
    - {globalExportAssets.map((asset) => { - const config = assetConfig[asset.type]; - if (!config) return null; - const { size, unit } = getFileSizeProperties(asset.fileSize); - const sizeStr = new Intl.NumberFormat(undefined, { - style: 'unit', unit, maximumFractionDigits: 1, - }).format(size); - return ( -
    -
    -
    -
    -
    - {config.heading} -
    -
    -
    {config.description}
    + + {/* Next rendered the see-more button as the Section's `actions`. */} + {tableProjects.length !== visibleProjects.length && ( +
    + +
    + )} +
    +
    + + {/* Download section (global export assets) */} +
    +
    +
    +

    + {t('download-section-heading')} +

    -
    -
    -
    {config.fileLabel}
    -
    {sizeStr}
    -
    - - {t('download')} - +
    + {globalExportAssets.map((asset) => { + const config = assetConfig[asset.type]; + if (!config) return null; + const { size, unit } = getFileSizeProperties(asset.fileSize); + const sizeStr = new Intl.NumberFormat(undefined, { + style: 'unit', unit, maximumFractionDigits: 1, + }).format(size); + return ( +
    +
    +
    +
    +
    + {config.heading} +
    +
    +
    {config.description}
    +
    +
    +
    +
    {config.fileLabel}
    +
    {sizeStr}
    +
    + + {t('download')} + +
    +
    +
    + ); + })}
    -
    - ); - })} -
    -
    -
    - - ); +
    + + ); } diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 27ad254e..60979115 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -11,8 +11,8 @@ import linkStyles from './Link.module.css'; // at build time (Next did `new Date().getFullYear()` at render — same result // for a static build). i18next {{year}} interpolation reproduced via getT. interface Props { - locale: string; - class?: string; + locale: string; + class?: string; } const { locale, class: className } = Astro.props; const t = await getT(locale, 'common'); @@ -21,59 +21,59 @@ const currentYear = new Date().getFullYear(); const headingClass = [headingStyles.heading, headingStyles.small, styles.heading]; type IconName = 'logo-facebook' | 'logo-mastodon' | 'logo-instagram' | 'logo-github' | 'newspaper' | 'mail'; const socialLinks: { href: string; title: string; icon: IconName; rel?: string }[] = [ - { href: 'https://www.facebook.com/TheMissingMaps', title: t('facebook'), icon: 'logo-facebook' }, - { href: 'https://floss.social/@mapswipe', title: t('mastodon'), icon: 'logo-mastodon', rel: 'me' }, - { href: 'https://www.instagram.com/themissingmaps/', title: t('instagram'), icon: 'logo-instagram' }, - { href: 'https://github.com/mapswipe', title: t('github'), icon: 'logo-github' }, - { href: 'https://wiki.openstreetmap.org/wiki/MapSwipe', title: t('osm-wiki'), icon: 'newspaper' }, - { href: 'mailto:info@mapswipe.org', title: t('email'), icon: 'mail' }, + { href: 'https://www.facebook.com/TheMissingMaps', title: t('facebook'), icon: 'logo-facebook' }, + { href: 'https://floss.social/@mapswipe', title: t('mastodon'), icon: 'logo-mastodon', rel: 'me' }, + { href: 'https://www.instagram.com/themissingmaps/', title: t('instagram'), icon: 'logo-instagram' }, + { href: 'https://github.com/mapswipe', title: t('github'), icon: 'logo-github' }, + { href: 'https://wiki.openstreetmap.org/wiki/MapSwipe', title: t('osm-wiki'), icon: 'newspaper' }, + { href: 'mailto:info@mapswipe.org', title: t('email'), icon: 'mail' }, ]; ---
    -
    -
    -
    {t('footer-about-us-title')}
    -
    {t('footer-about-us-description')}
    +
    +
    +
    {t('footer-about-us-title')}
    +
    {t('footer-about-us-description')}
    +
    + +
    +
    {t('footer-follow-us-title')}
    +
    + {socialLinks.map((link) => ( + + + + ))} +
    +
    -
    -
    {t('footer-quick-links')}
    - +
    +
    +
    {t('copyright', { year: currentYear })}
    +
    + {t('uptime-pretext')} + + Uptime Robot + +
    + +
    -
    -
    {t('footer-follow-us-title')}
    -
    - {socialLinks.map((link) => ( - - - - ))} -
    -
    -
    -
    -
    -
    {t('copyright', { year: currentYear })}
    -
    - {t('uptime-pretext')} - - Uptime Robot - -
    - -
    -
    diff --git a/src/components/Icon.astro b/src/components/Icon.astro index 496758cb..19665b86 100644 --- a/src/components/Icon.astro +++ b/src/components/Icon.astro @@ -10,7 +10,7 @@ // fill="none"/stroke="currentColor" (calendar, arrow-forward) carry those attrs // on their paths inside the symbol, so they still inherit the page color. interface Props { - name: + name: | 'calendar-clear-outline' | 'arrow-forward-sharp' | 'menu' @@ -23,26 +23,26 @@ interface Props { | 'mail' | 'checkmark-circle-outline' | 'plus'; - class?: string; - size?: string | number; + class?: string; + size?: string | number; } const { name, class: className, size = '1em' } = Astro.props; // Per-name viewBox lookup — kept on the outer so aspect ratio/scaling // matches the original inline icons (most are 512x512, but a few differ). const viewBoxForName: Record = { - 'calendar-clear-outline': '0 0 512 512', - 'arrow-forward-sharp': '0 0 512 512', - menu: '0 0 24 24', - 'earth-sharp': '0 0 512 512', - newspaper: '0 0 576 512', - 'logo-facebook': '0 0 512 512', - 'logo-mastodon': '0 0 512 512', - 'logo-github': '0 0 512 512', - 'logo-instagram': '0 0 512 512', - mail: '0 0 512 512', - 'checkmark-circle-outline': '0 0 512 512', - plus: '0 0 448 512', + 'calendar-clear-outline': '0 0 512 512', + 'arrow-forward-sharp': '0 0 512 512', + menu: '0 0 24 24', + 'earth-sharp': '0 0 512 512', + newspaper: '0 0 576 512', + 'logo-facebook': '0 0 512 512', + 'logo-mastodon': '0 0 512 512', + 'logo-github': '0 0 512 512', + 'logo-instagram': '0 0 512 512', + mail: '0 0 512 512', + 'checkmark-circle-outline': '0 0 512 512', + plus: '0 0 448 512', }; // Sprite lives at the site root (/icons.svg), matching the logos' convention @@ -51,5 +51,5 @@ const viewBoxForName: Record = { const spriteHref = `${import.meta.env.BASE_URL}icons.svg`.replace(/\/{2,}/g, '/'); --- diff --git a/src/components/MapIsland.tsx b/src/components/MapIsland.tsx index b33ba866..8d185e7b 100644 --- a/src/components/MapIsland.tsx +++ b/src/components/MapIsland.tsx @@ -8,71 +8,71 @@ import 'leaflet/dist/leaflet.css'; // Hydrated with client:only="react" (parity with Next's dynamic ssr:false). interface Props { - className?: string; - geoJsonUrl: string; + className?: string; + geoJsonUrl: string; } export default function MapIsland(props: Props) { - const { className, geoJsonUrl } = props; - const mapRef = useRef(null); - const [geoJson, setGeoJson] = useState(); + const { className, geoJsonUrl } = props; + const mapRef = useRef(null); + const [geoJson, setGeoJson] = useState(); - useEffect(() => { - let active = true; - (async () => { - try { - const res = await fetch(geoJsonUrl); - const d = await res.json(); - if (active) setGeoJson(d); - } catch (err) { + useEffect(() => { + let active = true; + (async () => { + try { + const res = await fetch(geoJsonUrl); + const d = await res.json(); + if (active) setGeoJson(d); + } catch (err) { - console.error('Failed fetching map GeoJSON', geoJsonUrl, err); - } - })(); - return () => { - active = false; - }; - }, [geoJsonUrl]); + console.error('Failed fetching map GeoJSON', geoJsonUrl, err); + } + })(); + return () => { + active = false; + }; + }, [geoJsonUrl]); - const handleGeoJSONAdd = useCallback((layer: LayerEvent) => { + const handleGeoJSONAdd = useCallback((layer: LayerEvent) => { - const bounds = (layer.target as any)?.getBounds?.(); - if (bounds) { - mapRef.current?.fitBounds(bounds, { padding: [12, 12] }); - } - }, []); + const bounds = (layer.target as any)?.getBounds?.(); + if (bounds) { + mapRef.current?.fitBounds(bounds, { padding: [12, 12] }); + } + }, []); - return ( - - {geoJson && ( - - )} - - - ); + return ( + + {geoJson && ( + + )} + + + ); } diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index fa92daf4..74669aa3 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -13,21 +13,21 @@ import linkStyles from './Link.module.css'; // highlights the current route link, matching Next's router.pathname === // '/[locale]/...' check. interface Props { - locale: string; - activePath?: string; // e.g. 'get-involved' | 'data' - class?: string; + locale: string; + activePath?: string; // e.g. 'get-involved' | 'data' + class?: string; } const { locale, activePath, class: className } = Astro.props; const t = await getT(locale, 'common'); // Per-locale abbreviations/labels (ported from utils/languages.ts). const languageTitleMap: Record = { - ne: { abbreviation: 'ने', label: 'नेपाली' }, - en: { abbreviation: 'EN', label: 'English' }, - hu: { abbreviation: 'HU', label: 'Magyar nyelv' }, - de: { abbreviation: 'DE', label: 'Deutsch' }, - cs: { abbreviation: 'CS', label: 'Čeština' }, - pt: { abbreviation: 'PT', label: 'Português' }, + ne: { abbreviation: 'ने', label: 'नेपाली' }, + en: { abbreviation: 'EN', label: 'English' }, + hu: { abbreviation: 'HU', label: 'Magyar nyelv' }, + de: { abbreviation: 'DE', label: 'Deutsch' }, + cs: { abbreviation: 'CS', label: 'Čeština' }, + pt: { abbreviation: 'PT', label: 'Português' }, }; // The current page path WITHOUT the locale prefix (e.g. '' for home, @@ -36,53 +36,53 @@ const languageTitleMap: Record const localelessPath = activePath ? `${activePath}/` : ''; ---
    -
    - - {t('mapswipe-logo')} - - -
    -
    - - -
    diff --git a/src/components/Navbar.module.css b/src/components/Navbar.module.css index 2be2d3f6..4587cb54 100644 --- a/src/components/Navbar.module.css +++ b/src/components/Navbar.module.css @@ -138,9 +138,12 @@ color: var(--color-text); } - &:hover .languageList, - &:focus-within .languageList { - display: flex; - } +} +/* State kept un-nested: concentric's order/order wants &:state rules first, + * no-descending-specificity wants the base rule first — top-level satisfies + * both. */ +.languageWrap:hover .languageList, +.languageWrap:focus-within .languageList { + display: flex; } diff --git a/src/components/OgMeta.astro b/src/components/OgMeta.astro index dfbd7018..efbc12c7 100644 --- a/src/components/OgMeta.astro +++ b/src/components/OgMeta.astro @@ -2,8 +2,8 @@ // Ported from the Next app's src/components/OgMeta. Emits title + og/twitter // meta. buildDate/url come from env like the Next version. interface Props { - title: string; - description?: string; + title: string; + description?: string; } const { title, description } = Astro.props; const buildDate = import.meta.env.MAPSWIPE_BUILD_DATE; diff --git a/src/components/ProjectHistoryChart.tsx b/src/components/ProjectHistoryChart.tsx index d1570cf0..c40493b1 100644 --- a/src/components/ProjectHistoryChart.tsx +++ b/src/components/ProjectHistoryChart.tsx @@ -16,169 +16,169 @@ const Y_AXIS_WIDTH = 10; const CHART_OFFSET = 10; const chartMargin = { - left: 2 * Y_AXIS_WIDTH + CHART_OFFSET, - top: CHART_OFFSET, - right: CHART_OFFSET * 3, - bottom: 2 * X_AXIS_HEIGHT + CHART_OFFSET, + left: 2 * Y_AXIS_WIDTH + CHART_OFFSET, + top: CHART_OFFSET, + right: CHART_OFFSET * 3, + bottom: 2 * X_AXIS_HEIGHT + CHART_OFFSET, }; const xAxisFormatter = (date: Date) => - date.toLocaleString(undefined, { day: '2-digit', month: 'short', year: '2-digit' }); + date.toLocaleString(undefined, { day: '2-digit', month: 'short', year: '2-digit' }); // Ported from src/hooks/useSizeTracking.ts (ResizeObserver replaced with the // browser-native one to avoid the resize-observer-polyfill dependency). function useSizeTracking(ref: React.RefObject) { - const [size, setSize] = useState(() => { - const bcr = ref.current?.getBoundingClientRect(); - return { width: bcr?.width ?? 0, height: bcr?.height ?? 0 }; - }); - useEffect(() => { - const ro = new ResizeObserver((entries) => { - const rect = entries.at(0)?.contentRect; - if (rect) setSize({ width: rect.width, height: rect.height }); + const [size, setSize] = useState(() => { + const bcr = ref.current?.getBoundingClientRect(); + return { width: bcr?.width ?? 0, height: bcr?.height ?? 0 }; }); - const el = ref.current; - if (el) ro.observe(el); - return () => { - if (el) ro.unobserve(el); - }; - }, [ref]); - return size; + useEffect(() => { + const ro = new ResizeObserver((entries) => { + const rect = entries.at(0)?.contentRect; + if (rect) setSize({ width: rect.width, height: rect.height }); + }); + const el = ref.current; + if (el) ro.observe(el); + return () => { + if (el) ro.unobserve(el); + }; + }, [ref]); + return size; } interface Props { - projectId: string; - historyUrl?: string; - emptyMessage?: string; - className?: string; + projectId: string; + historyUrl?: string; + emptyMessage?: string; + className?: string; } export default function ProjectHistoryChart(props: Props) { - const { projectId, historyUrl, emptyMessage = 'Not enough data points for the chart!', className } = props; + const { projectId, historyUrl, emptyMessage = 'Not enough data points for the chart!', className } = props; - const svgContainerRef = useRef(null); - const svgBounds = useSizeTracking(svgContainerRef); - const [projectHistory, setProjectHistory] = useState< + const svgContainerRef = useRef(null); + const svgBounds = useSizeTracking(svgContainerRef); + const [projectHistory, setProjectHistory] = useState< { timestamp: number; progress: number }[] | undefined - >(); - - useEffect(() => { - (async () => { - try { - if (historyUrl) { - const history = await getProjectHistory(projectId, historyUrl); - setProjectHistory(history); + >(); + + useEffect(() => { + (async () => { + try { + if (historyUrl) { + const history = await getProjectHistory(projectId, historyUrl); + setProjectHistory(history); + } + } catch (err) { + + console.error('Failed fetching project data', err); + } + })(); + }, [historyUrl, projectId]); + + const [chartPoints, chartPointsForArea, xAxisTicks, yAxisTicks] = useMemo(() => { + if (!projectHistory || projectHistory.length === 0) { + return [[], [], [], []] as const; } - } catch (err) { - - console.error('Failed fetching project data', err); - } - })(); - }, [historyUrl, projectId]); - - const [chartPoints, chartPointsForArea, xAxisTicks, yAxisTicks] = useMemo(() => { - if (!projectHistory || projectHistory.length === 0) { - return [[], [], [], []] as const; - } - const timestamps = projectHistory.map((ph) => ph.timestamp); - const initialTimeBounds = getBounds(timestamps); - - const NUM_BREAKPOINT_X = 5; - const timeDiff = initialTimeBounds.max - initialTimeBounds.min; - const tickDuration = Math.ceil(timeDiff / NUM_BREAKPOINT_X); - - const timeBounds = { - min: initialTimeBounds.min, - max: initialTimeBounds.min + tickDuration * NUM_BREAKPOINT_X, - }; - - const xScale = getScaleFunction( - timeBounds, - { min: 0, max: svgBounds.width }, - { start: chartMargin.left, end: chartMargin.right }, - ); - const yScale = getScaleFunction( - { min: 0, max: 100 }, - { min: 0, max: svgBounds.height }, - { start: chartMargin.top, end: chartMargin.bottom }, - true, - ); - - const percentageTicks = [0, 20, 40, 60, 80, 100].map((percentage) => ({ - value: percentage, - y: yScale(percentage), - })); - - const points = projectHistory.map((hist) => ({ - x: xScale(hist.timestamp), - y: yScale(bound(100 * hist.progress, 0, 100)), - })); - - const timeTicks = Array.from(Array(NUM_BREAKPOINT_X + 1)).map((_, i) => { - const timestamp = initialTimeBounds.min + tickDuration * i; - return { date: new Date(timestamp), timestamp, x: xScale(timestamp) }; - }); - - return [ - points, - [ - { x: xScale(timeBounds.min), y: svgBounds.height }, - ...points, - { x: xScale(timeBounds.max), y: svgBounds.height }, - ], - timeTicks, - percentageTicks, - ] as const; - }, [projectHistory, svgBounds]); - - const hasData = projectHistory !== undefined && chartPoints.length > 1; - - return ( -
    - {hasData ? ( - - - - - - - - {yAxisTicks.map((point, i) => ( - - - {point.value} - - - - ))} - {xAxisTicks.map((tick) => ( - - - {xAxisFormatter(tick.date)} - - - - ))} - - - - ) : ( -
    -
    {emptyMessage}
    + const timestamps = projectHistory.map((ph) => ph.timestamp); + const initialTimeBounds = getBounds(timestamps); + + const NUM_BREAKPOINT_X = 5; + const timeDiff = initialTimeBounds.max - initialTimeBounds.min; + const tickDuration = Math.ceil(timeDiff / NUM_BREAKPOINT_X); + + const timeBounds = { + min: initialTimeBounds.min, + max: initialTimeBounds.min + tickDuration * NUM_BREAKPOINT_X, + }; + + const xScale = getScaleFunction( + timeBounds, + { min: 0, max: svgBounds.width }, + { start: chartMargin.left, end: chartMargin.right }, + ); + const yScale = getScaleFunction( + { min: 0, max: 100 }, + { min: 0, max: svgBounds.height }, + { start: chartMargin.top, end: chartMargin.bottom }, + true, + ); + + const percentageTicks = [0, 20, 40, 60, 80, 100].map((percentage) => ({ + value: percentage, + y: yScale(percentage), + })); + + const points = projectHistory.map((hist) => ({ + x: xScale(hist.timestamp), + y: yScale(bound(100 * hist.progress, 0, 100)), + })); + + const timeTicks = Array.from(Array(NUM_BREAKPOINT_X + 1)).map((_, i) => { + const timestamp = initialTimeBounds.min + tickDuration * i; + return { date: new Date(timestamp), timestamp, x: xScale(timestamp) }; + }); + + return [ + points, + [ + { x: xScale(timeBounds.min), y: svgBounds.height }, + ...points, + { x: xScale(timeBounds.max), y: svgBounds.height }, + ], + timeTicks, + percentageTicks, + ] as const; + }, [projectHistory, svgBounds]); + + const hasData = projectHistory !== undefined && chartPoints.length > 1; + + return ( +
    + {hasData ? ( + + + + + + + + {yAxisTicks.map((point, i) => ( + + + {point.value} + + + + ))} + {xAxisTicks.map((tick) => ( + + + {xAxisFormatter(tick.date)} + + + + ))} + + + + ) : ( +
    +
    {emptyMessage}
    +
    + )}
    - )} -
    - ); + ); } diff --git a/src/components/ProjectTypeIcon.astro b/src/components/ProjectTypeIcon.astro index fa710b1c..5b2783a6 100644 --- a/src/components/ProjectTypeIcon.astro +++ b/src/components/ProjectTypeIcon.astro @@ -14,32 +14,32 @@ type ProjectTypeKey = | 'FIND' | 'VALIDATE' | 'VALIDATE_IMAGE' | 'COMPARE' | 'COMPLETENESS' | 'STREET' | 'LOCATE'; interface Props { - type: ProjectTypeKey; - class?: string; - size?: 'small' | 'medium' | 'large'; + type: ProjectTypeKey; + class?: string; + size?: 'small' | 'medium' | 'large'; } const { type, class: className, size = 'medium' } = Astro.props; // Per-type viewBox, matching ProjectTypeIcon.tsx's inline icons exactly. const viewBox: Record = { - FIND: '0 0 138 162', - VALIDATE: '0 0 138 162', - VALIDATE_IMAGE: '0 0 283 332', - COMPARE: '0 0 138 162', - COMPLETENESS: '0 0 283 331', - STREET: '0 0 283 332', - LOCATE: '0 0 35 38', + FIND: '0 0 138 162', + VALIDATE: '0 0 138 162', + VALIDATE_IMAGE: '0 0 283 332', + COMPARE: '0 0 138 162', + COMPLETENESS: '0 0 283 331', + STREET: '0 0 283 332', + LOCATE: '0 0 35 38', }; // Type -> sprite symbol id. const symbolId: Record = { - FIND: 'project-type-find', - VALIDATE: 'project-type-validate', - VALIDATE_IMAGE: 'project-type-validate-image', - COMPARE: 'project-type-compare', - COMPLETENESS: 'project-type-completeness', - STREET: 'project-type-street', - LOCATE: 'project-type-locate', + FIND: 'project-type-find', + VALIDATE: 'project-type-validate', + VALIDATE_IMAGE: 'project-type-validate-image', + COMPARE: 'project-type-compare', + COMPLETENESS: 'project-type-completeness', + STREET: 'project-type-street', + LOCATE: 'project-type-locate', }; // Sprite at site root (/icons.svg), matching the logos' convention; built from @@ -47,5 +47,5 @@ const symbolId: Record = { const spriteHref = `${import.meta.env.BASE_URL}icons.svg`.replace(/\/{2,}/g, '/'); --- diff --git a/src/components/ProjectTypeIcon.tsx b/src/components/ProjectTypeIcon.tsx index d4b8f418..3ebe0e42 100644 --- a/src/components/ProjectTypeIcon.tsx +++ b/src/components/ProjectTypeIcon.tsx @@ -9,86 +9,86 @@ export type ProjectTypeKey = | 'FIND' | 'VALIDATE' | 'VALIDATE_IMAGE' | 'COMPARE' | 'COMPLETENESS' | 'STREET' | 'LOCATE'; const icons: Record = { - FIND: { - viewBox: "0 0 138 162", - paths: ( - <> - - - ), - }, - VALIDATE: { - viewBox: "0 0 138 162", - paths: ( - <> - - - ), - }, - VALIDATE_IMAGE: { - viewBox: "0 0 283 332", - paths: ( - <> - - - ), - }, - COMPARE: { - viewBox: "0 0 138 162", - paths: ( - <> - - - ), - }, - COMPLETENESS: { - viewBox: "0 0 283 331", - paths: ( - <> - - - ), - }, - STREET: { - viewBox: "0 0 283 332", - paths: ( - <> - - - ), - }, - LOCATE: { - viewBox: "0 0 35 38", - paths: ( - <> - - - - - ), - }, + FIND: { + viewBox: "0 0 138 162", + paths: ( + <> + + + ), + }, + VALIDATE: { + viewBox: "0 0 138 162", + paths: ( + <> + + + ), + }, + VALIDATE_IMAGE: { + viewBox: "0 0 283 332", + paths: ( + <> + + + ), + }, + COMPARE: { + viewBox: "0 0 138 162", + paths: ( + <> + + + ), + }, + COMPLETENESS: { + viewBox: "0 0 283 331", + paths: ( + <> + + + ), + }, + STREET: { + viewBox: "0 0 283 332", + paths: ( + <> + + + ), + }, + LOCATE: { + viewBox: "0 0 35 38", + paths: ( + <> + + + + + ), + }, }; interface Props { - type: ProjectTypeKey; - size?: 'small' | 'medium' | 'large'; - className?: string; + type: ProjectTypeKey; + size?: 'small' | 'medium' | 'large'; + className?: string; } export default function ProjectTypeIcon(props: Props) { - const { type, size = 'medium', className } = props; - const icon = icons[type]; - if (!icon) return null; - const cls = [styles.icon, styles[size], className].filter(Boolean).join(' '); - return ( - - ); + const { type, size = 'medium', className } = props; + const icon = icons[type]; + if (!icon) return null; + const cls = [styles.icon, styles[size], className].filter(Boolean).join(' '); + return ( + + ); } diff --git a/src/components/ProjectsMapIsland.tsx b/src/components/ProjectsMapIsland.tsx index e41036d7..5e0eca54 100644 --- a/src/components/ProjectsMapIsland.tsx +++ b/src/components/ProjectsMapIsland.tsx @@ -17,88 +17,88 @@ import tagStyles from './Tag.module.css'; // colors, popups). const pathOptions: Record = { - PUBLISHED: { fillColor: '#F69143', color: '#0F193F', weight: 1, opacity: 0.2, fillOpacity: 0.9 }, - FINISHED: { fillColor: '#AABE5D', color: '#0F193F', weight: 1, opacity: 0.2, fillOpacity: 0.9 }, + PUBLISHED: { fillColor: '#F69143', color: '#0F193F', weight: 1, opacity: 0.2, fillOpacity: 0.9 }, + FINISHED: { fillColor: '#AABE5D', color: '#0F193F', weight: 1, opacity: 0.2, fillOpacity: 0.9 }, }; const defaultPathOptions: CircleMarkerOptions = { - fillColor: '#0F193F', color: '#0F193F', weight: 1, opacity: 0.3, fillOpacity: 0.9, + fillColor: '#0F193F', color: '#0F193F', weight: 1, opacity: 0.3, fillOpacity: 0.9, }; function isDefined(v: T | null | undefined): v is T { - return v !== null && v !== undefined; + return v !== null && v !== undefined; } interface Props { - className?: string; - projects: MiniProject[]; - radiusSelector: (p: MiniProject) => number; - typeLabels: Record; - statusLabels: Record; + className?: string; + projects: MiniProject[]; + radiusSelector: (p: MiniProject) => number; + typeLabels: Record; + statusLabels: Record; } export default function ProjectsMapIsland(props: Props) { - const { className, projects, radiusSelector, typeLabels, statusLabels } = props; + const { className, projects, radiusSelector, typeLabels, statusLabels } = props; - const sanitized = useMemo( - () => - projects - .map((project) => - isDefined(project.aoiGeometry?.centroid) - ? { - project, - centroid: [ - project.aoiGeometry!.centroid![1], - project.aoiGeometry!.centroid![0], - ] as LatLngTuple, - } - : undefined, - ) - .filter(isDefined), - [projects], - ); + const sanitized = useMemo( + () => + projects + .map((project) => + isDefined(project.aoiGeometry?.centroid) + ? { + project, + centroid: [ + project.aoiGeometry!.centroid![1], + project.aoiGeometry!.centroid![0], + ] as LatLngTuple, + } + : undefined, + ) + .filter(isDefined), + [projects], + ); - return ( - - {sanitized.map(({ project, centroid }) => ( - - - - {project.name} -
    - {project.projectType && ( - - {typeLabels[project.projectType] ?? project.projectType} - - )} - {project.status && ( - - {statusLabels[project.status] ?? project.status} - - )} -
    -
    -
    -
    - ))} - -
    - ); + {sanitized.map(({ project, centroid }) => ( + + + + {project.name} +
    + {project.projectType && ( + + {typeLabels[project.projectType] ?? project.projectType} + + )} + {project.status && ( + + {statusLabels[project.status] ?? project.status} + + )} +
    +
    +
    +
    + ))} + + + ); } diff --git a/src/components/RemoteImage.astro b/src/components/RemoteImage.astro index c8c9d21e..e1c363e2 100644 --- a/src/components/RemoteImage.astro +++ b/src/components/RemoteImage.astro @@ -6,11 +6,11 @@ import 'lib/remoteImages'; import RemoteImage from 'packages/astro-remote-images/src/RemoteImage.astro'; interface Props { - src: string; - alt: string; - class?: string; - width?: number; - height?: number; + src: string; + alt: string; + class?: string; + width?: number; + height?: number; } --- diff --git a/src/content.config.ts b/src/content.config.ts index 1486364a..105bf216 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -21,25 +21,25 @@ import { glob } from 'astro/loaders'; // (name/markdownContent in the Next Blog interface are the loader-derived id + // body, not frontmatter — Astro provides those separately.) const blogs = defineCollection({ - loader: glob({ - pattern: '*.md', - base: './blogs', - // Preserve Next's slug exactly: filename without extension, case intact. - generateId: ({ entry }) => entry.replace(/\.md$/, ''), - }), - schema: ({ image }) => z.object({ - title: z.string().optional(), - // Frontmatter dates are plain YYYY-MM-DD; zod coerces to a Date. Next stored - // this as a ms timestamp (new Date(...).getTime()); we derive that from the - // Date at use-site to keep i18next datetime formatting identical. - publishedDate: z.coerce.date().optional(), - author: z.string().optional(), - description: z.string().optional(), - // Relative path (./images/*) next to the content, resolved + optimized by - // astro:assets — render with from the pages. - coverImage: image().optional(), - featured: z.boolean().default(false), - }), + loader: glob({ + pattern: '*.md', + base: './blogs', + // Preserve Next's slug exactly: filename without extension, case intact. + generateId: ({ entry }) => entry.replace(/\.md$/, ''), + }), + schema: ({ image }) => z.object({ + title: z.string().optional(), + // Frontmatter dates are plain YYYY-MM-DD; zod coerces to a Date. Next stored + // this as a ms timestamp (new Date(...).getTime()); we derive that from the + // Date at use-site to keep i18next datetime formatting identical. + publishedDate: z.coerce.date().optional(), + author: z.string().optional(), + description: z.string().optional(), + // Relative path (./images/*) next to the content, resolved + optimized by + // astro:assets — render with from the pages. + coverImage: image().optional(), + featured: z.boolean().default(false), + }), }); export const collections = { blogs }; diff --git a/src/i18n/index.ts b/src/i18n/index.ts index c218ac84..2e449afc 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -18,62 +18,62 @@ const NAMESPACES = ['project', 'common', 'data', 'blog', 'blogs', 'home', 'get-i // Narrow the glob to the namespaces this app uses; a broader glob would // eagerly parse unrelated (and occasionally malformed) locale files at build. const files = import.meta.glob(['../../locales/*/project.json', '../../locales/*/common.json', '../../locales/*/data.json', '../../locales/*/blog.json', '../../locales/*/blogs.json', '../../locales/*/home.json', '../../locales/*/get-involved.json', '../../locales/*/privacy.json'], { - eager: true, - import: 'default', + eager: true, + import: 'default', }) as Record>; const resources: Record>> = {}; for (const [path, mod] of Object.entries(files)) { - const match = path.match(/\/locales\/([^/]+)\/([^/]+)\.json$/); - if (!match) continue; - const [, locale, ns] = match; - if (!(LOCALES as readonly string[]).includes(locale)) continue; - if (!(NAMESPACES as readonly string[]).includes(ns)) continue; - resources[locale] ??= {}; - resources[locale][ns] = mod; + const match = path.match(/\/locales\/([^/]+)\/([^/]+)\.json$/); + if (!match) continue; + const [, locale, ns] = match; + if (!(LOCALES as readonly string[]).includes(locale)) continue; + if (!(NAMESPACES as readonly string[]).includes(ns)) continue; + resources[locale] ??= {}; + resources[locale][ns] = mod; } // Translation gaps fall back to English silently (returnEmptyString: false), // so surface them once per build instead of letting them hide. let gapsReported = false; function reportTranslationGaps() { - if (gapsReported) return; - gapsReported = true; - const lines: string[] = []; - for (const locale of LOCALES) { - if (locale === DEFAULT_LOCALE) continue; - let empty = 0; - let total = 0; - for (const ns of NAMESPACES) { - for (const v of Object.values(resources[locale]?.[ns] ?? {})) { - total += 1; - if (v === '') empty += 1; - } + if (gapsReported) return; + gapsReported = true; + const lines: string[] = []; + for (const locale of LOCALES) { + if (locale === DEFAULT_LOCALE) continue; + let empty = 0; + let total = 0; + for (const ns of NAMESPACES) { + for (const v of Object.values(resources[locale]?.[ns] ?? {})) { + total += 1; + if (v === '') empty += 1; + } + } + if (empty > 0) lines.push(`${locale}: ${empty}/${total} empty (falls back to en)`); } - if (empty > 0) lines.push(`${locale}: ${empty}/${total} empty (falls back to en)`); - } - if (lines.length) console.warn(`[i18n] translation gaps — ${lines.join(' · ')}`); + if (lines.length) console.warn(`[i18n] translation gaps — ${lines.join(' · ')}`); } let ready = false; async function ensureInit() { - if (ready) return; - reportTranslationGaps(); - await i18next.init({ - lng: DEFAULT_LOCALE, - fallbackLng: DEFAULT_LOCALE, - ns: NAMESPACES as unknown as string[], - defaultNS: 'common', - resources, - returnEmptyString: false, - interpolation: { escapeValue: false }, - }); - ready = true; + if (ready) return; + reportTranslationGaps(); + await i18next.init({ + lng: DEFAULT_LOCALE, + fallbackLng: DEFAULT_LOCALE, + ns: NAMESPACES as unknown as string[], + defaultNS: 'common', + resources, + returnEmptyString: false, + interpolation: { escapeValue: false }, + }); + ready = true; } export async function getT(locale: string, ns: string) { - await ensureInit(); - return i18next.getFixedT(locale, ns); + await ensureInit(); + return i18next.getFixedT(locale, ns); } // Resolve EVERY key of a namespace for `locale` into a plain {key: string} dict. @@ -84,15 +84,15 @@ export async function getT(locale: string, ns: string) { // strings fall back to the English source (parity with returnEmptyString:false, // which would otherwise surface the raw key). Missing English -> the key itself. export async function getDict(locale: string, ns: string): Promise> { - await ensureInit(); - const source = resources[locale]?.[ns] ?? {}; - const fallback = resources[DEFAULT_LOCALE]?.[ns] ?? {}; - const dict: Record = {}; - const keys = new Set([...Object.keys(fallback), ...Object.keys(source)]); - for (const key of keys) { - const value = source[key]; - dict[key] = value && value.trim() !== '' ? value : (fallback[key] ?? key); - } - return dict; + await ensureInit(); + const source = resources[locale]?.[ns] ?? {}; + const fallback = resources[DEFAULT_LOCALE]?.[ns] ?? {}; + const dict: Record = {}; + const keys = new Set([...Object.keys(fallback), ...Object.keys(source)]); + for (const key of keys) { + const value = source[key]; + dict[key] = value && value.trim() !== '' ? value : (fallback[key] ?? key); + } + return dict; } diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index d624fa91..4c0c87bf 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -37,48 +37,48 @@ import dmSansHeading from '@fontsource/dm-sans/files/dm-sans-latin-400-normal.wo // components/Page. `path` is the locale-less route suffix used for hreflang // (e.g. '' for home, 'get-involved/'); `activePath` drives navbar highlight. interface Props { - locale: string; - title: string; - description?: string; - path: string; - activePath?: string; - mainClass?: string; - hreflang?: boolean; // default true; 404 opts out (no canonical per-locale set) + locale: string; + title: string; + description?: string; + path: string; + activePath?: string; + mainClass?: string; + hreflang?: boolean; // default true; 404 opts out (no canonical per-locale set) } const { - locale, - title, - description, - path, - activePath, - mainClass, - hreflang = true, + locale, + title, + description, + path, + activePath, + mainClass, + hreflang = true, } = Astro.props; const site = Astro.site?.toString().replace(/\/$/, '') ?? 'https://mapswipe.org'; --- - - - - - - - - - {hreflang && LOCALES.map((l) => ( - - ))} - {hreflang && } - - -
    - -
    - -
    -
    -
    - + + + + + + + + + {hreflang && LOCALES.map((l) => ( + + ))} + {hreflang && } + + +
    + +
    + +
    +
    +
    + diff --git a/src/layouts/BlogLayout.astro b/src/layouts/BlogLayout.astro index 2a42bd8a..864ed9a5 100644 --- a/src/layouts/BlogLayout.astro +++ b/src/layouts/BlogLayout.astro @@ -7,14 +7,14 @@ import BaseLayout from './BaseLayout.astro'; // its own CSS-Module root class via `mainClass`. `path` is the locale-less // route suffix (e.g. "blogs/" or "blogs//"). interface Props { - locale: string; - title: string; - description?: string; - path: string; - mainClass?: string; // the page's CSS-Module root class (e.g. styles.blogs) + locale: string; + title: string; + description?: string; + path: string; + mainClass?: string; // the page's CSS-Module root class (e.g. styles.blogs) } const { locale, title, description, path, mainClass } = Astro.props; --- - + diff --git a/src/layouts/ProjectLayout.astro b/src/layouts/ProjectLayout.astro index eb730d07..f78549f5 100644 --- a/src/layouts/ProjectLayout.astro +++ b/src/layouts/ProjectLayout.astro @@ -6,13 +6,13 @@ import BaseLayout from './BaseLayout.astro'; // the SAME project in every locale (path = projects//), matching // the Next app's URL scheme. interface Props { - locale: string; - firebaseId: string; - title: string; - mainClass?: string; // the page's CSS-Module root class (e.g. styles.project) + locale: string; + firebaseId: string; + title: string; + mainClass?: string; // the page's CSS-Module root class (e.g. styles.project) } const { locale, firebaseId, title, mainClass } = Astro.props; --- - + diff --git a/src/lib/chart.ts b/src/lib/chart.ts index ea324209..c7c26b3f 100644 --- a/src/lib/chart.ts +++ b/src/lib/chart.ts @@ -1,48 +1,48 @@ // Ported VERBATIM from the Next app's src/utils/chart.ts. export interface Point { - x: number; - y: number; + x: number; + y: number; } export interface Boundary { - min: number; - max: number; + min: number; + max: number; } export function getScaleFunction( - domain: Boundary, - range: Boundary, - offset: { start: number; end: number }, - inverted = false, + domain: Boundary, + range: Boundary, + offset: { start: number; end: number }, + inverted = false, ) { - const rangeSize = range.max - range.min - (offset.start + offset.end); - const domainSize = domain.max - domain.min; + const rangeSize = range.max - range.min - (offset.start + offset.end); + const domainSize = domain.max - domain.min; - return (value: number) => { - const normalizedValue = (value - domain.min) / domainSize; - if (inverted) { - return rangeSize + offset.start - rangeSize * normalizedValue; - } - return offset.start + rangeSize * normalizedValue; - }; + return (value: number) => { + const normalizedValue = (value - domain.min) / domainSize; + if (inverted) { + return rangeSize + offset.start - rangeSize * normalizedValue; + } + return offset.start + rangeSize * normalizedValue; + }; } export function getBounds(numList: number[]) { - if (!numList || numList.length === 0) { - return { min: 0, max: 0 }; - } - return { min: Math.min(...numList), max: Math.max(...numList) }; + if (!numList || numList.length === 0) { + return { min: 0, max: 0 }; + } + return { min: Math.min(...numList), max: Math.max(...numList) }; } export function getPathData(pointList: readonly Point[] | undefined) { - if (!pointList || pointList.length < 2) { - return undefined; - } - return pointList - .map((point, i) => (i === 0 ? `M${point.x} ${point.y}` : `L${point.x} ${point.y}`)) - .join(' '); + if (!pointList || pointList.length < 2) { + return undefined; + } + return pointList + .map((point, i) => (i === 0 ? `M${point.x} ${point.y}` : `L${point.x} ${point.y}`)) + .join(' '); } // bound() ported from @togglecorp/fujs. export function bound(value: number, min: number, max: number) { - return Math.max(min, Math.min(max, value)); + return Math.max(min, Math.min(max, value)); } diff --git a/src/lib/common.ts b/src/lib/common.ts index 672b5e83..f2d175e5 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -2,24 +2,24 @@ const mb = 1024 * 1024; function transformAoiToGeoJson(aoi: Project['aoiGeometry']) { - if (!aoi || !aoi.bbox) return undefined; - return { - type: 'FeatureCollection', - features: [ - { - geometry: { type: 'Polygon', coordinates: aoi.bbox }, - type: 'Feature', - properties: {}, - }, - ], - } as const; + if (!aoi || !aoi.bbox) return undefined; + return { + type: 'FeatureCollection', + features: [ + { + geometry: { type: 'Polygon', coordinates: aoi.bbox }, + type: 'Feature', + properties: {}, + }, + ], + } as const; } export function getFileSizeProperties(fileSize: number) { - if (fileSize > mb / 10) { - return { size: fileSize / mb, unit: 'megabyte' as const }; - } - return { size: fileSize / 1024, unit: 'kilobyte' as const }; + if (fileSize > mb / 10) { + return { size: fileSize / mb, unit: 'megabyte' as const }; + } + return { size: fileSize / 1024, unit: 'kilobyte' as const }; } import type { Project } from './data'; @@ -28,32 +28,32 @@ import type { Project } from './data'; // Ported from the Next page's aoiDownload priority chain. export function resolveAoiDownload(project: Project) { - const { aoiGeometryInputAsset, exportAreaOfInterest, aoiGeometry } = project; - if (aoiGeometryInputAsset?.file?.url) { - return { - kind: 'link' as const, - url: aoiGeometryInputAsset.file.url, - mimetype: aoiGeometryInputAsset.mimetype, - fileSize: aoiGeometryInputAsset.fileSize ?? 0, - }; - } - if (exportAreaOfInterest?.file?.url) { - return { - kind: 'link' as const, - url: exportAreaOfInterest.file.url, - mimetype: exportAreaOfInterest.mimetype, - fileSize: exportAreaOfInterest.fileSize ?? 0, - }; - } - const feature = transformAoiToGeoJson(aoiGeometry); - if (feature) { - const geojson = JSON.stringify(feature); - return { - kind: 'data' as const, - url: `data:application/geo+json;charset=utf-8,${encodeURIComponent(geojson)}`, - mimetype: 'GEOJSON', - fileSize: new TextEncoder().encode(geojson).length, - }; - } - return undefined; + const { aoiGeometryInputAsset, exportAreaOfInterest, aoiGeometry } = project; + if (aoiGeometryInputAsset?.file?.url) { + return { + kind: 'link' as const, + url: aoiGeometryInputAsset.file.url, + mimetype: aoiGeometryInputAsset.mimetype, + fileSize: aoiGeometryInputAsset.fileSize ?? 0, + }; + } + if (exportAreaOfInterest?.file?.url) { + return { + kind: 'link' as const, + url: exportAreaOfInterest.file.url, + mimetype: exportAreaOfInterest.mimetype, + fileSize: exportAreaOfInterest.fileSize ?? 0, + }; + } + const feature = transformAoiToGeoJson(aoiGeometry); + if (feature) { + const geojson = JSON.stringify(feature); + return { + kind: 'data' as const, + url: `data:application/geo+json;charset=utf-8,${encodeURIComponent(geojson)}`, + mimetype: 'GEOJSON', + fileSize: new TextEncoder().encode(geojson).length, + }; + } + return undefined; } diff --git a/src/lib/data.ts b/src/lib/data.ts index d732a847..eff07c16 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -20,101 +20,101 @@ const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), import { z } from 'astro/zod'; const StaticDataShape = z.object({ - publicProjects: z.object({ - totalCount: z.number(), - results: z.array( - z.object({ - id: z.union([z.string(), z.number()]), - firebaseId: z.union([z.string(), z.number()]), - name: z.string(), - projectType: z.string().nullish(), - modifiedAt: z.string().nullish(), - }).passthrough(), - ).min(1), - }), - communityStats: z.object({ - totalContributors: z.number().nullish(), - totalSwipes: z.number().nullish(), - }).passthrough(), - publicOrganizations: z.object({ results: z.array(z.unknown()) }), - globalExportAssets: z.array(z.unknown()), + publicProjects: z.object({ + totalCount: z.number(), + results: z.array( + z.object({ + id: z.union([z.string(), z.number()]), + firebaseId: z.union([z.string(), z.number()]), + name: z.string(), + projectType: z.string().nullish(), + modifiedAt: z.string().nullish(), + }).passthrough(), + ).min(1), + }), + communityStats: z.object({ + totalContributors: z.number().nullish(), + totalSwipes: z.number().nullish(), + }).passthrough(), + publicOrganizations: z.object({ results: z.array(z.unknown()) }), + globalExportAssets: z.array(z.unknown()), }); const parsed = StaticDataShape.safeParse(data); if (!parsed.success) { - const issues = parsed.error.issues - .slice(0, 10) - .map((i) => ` ${i.path.join('.')}: ${i.message}`) - .join('\n'); - throw new Error(`staticData.json failed validation (backend schema drift?):\n${issues}`); + const issues = parsed.error.issues + .slice(0, 10) + .map((i) => ` ${i.path.join('.')}: ${i.message}`) + .join('\n'); + throw new Error(`staticData.json failed validation (backend schema drift?):\n${issues}`); } export interface UrlInfo { - id?: string; - fileSize?: number; - mimetype?: string; - file?: { url?: string | null; name?: string | null } | null; - modifiedAt?: string; + id?: string; + fileSize?: number; + mimetype?: string; + file?: { url?: string | null; name?: string | null } | null; + modifiedAt?: string; } export interface Project { - id: string; - firebaseId: string; - name: string; - description?: string | null; - projectType?: string | null; - status?: string | null; - region?: string | null; - progress: number; - createdAt?: string | null; - numberOfContributorUsers?: number | null; - requestingOrganization?: { name?: string | null } | null; - image?: { file?: { url?: string | null } | null } | null; - aoiGeometry?: { - centroid?: [number, number] | number[] | null; - bbox?: number[][][] | null; - totalArea?: number | null; - } | null; - aoiGeometryInputAsset?: UrlInfo; - exportAggregatedResults?: UrlInfo; - exportAggregatedResultsWithGeometry?: UrlInfo; - exportGroups?: UrlInfo; - exportHistory?: UrlInfo; - exportAreaOfInterest?: UrlInfo; - exportResults?: UrlInfo; - exportTasks?: UrlInfo; - exportUsers?: UrlInfo; - exportHotTaskingManagerGeometries?: UrlInfo; - exportModerateToHighAgreementYesMaybeGeometries?: UrlInfo; + id: string; + firebaseId: string; + name: string; + description?: string | null; + projectType?: string | null; + status?: string | null; + region?: string | null; + progress: number; + createdAt?: string | null; + numberOfContributorUsers?: number | null; + requestingOrganization?: { name?: string | null } | null; + image?: { file?: { url?: string | null } | null } | null; + aoiGeometry?: { + centroid?: [number, number] | number[] | null; + bbox?: number[][][] | null; + totalArea?: number | null; + } | null; + aoiGeometryInputAsset?: UrlInfo; + exportAggregatedResults?: UrlInfo; + exportAggregatedResultsWithGeometry?: UrlInfo; + exportGroups?: UrlInfo; + exportHistory?: UrlInfo; + exportAreaOfInterest?: UrlInfo; + exportResults?: UrlInfo; + exportTasks?: UrlInfo; + exportUsers?: UrlInfo; + exportHotTaskingManagerGeometries?: UrlInfo; + exportModerateToHighAgreementYesMaybeGeometries?: UrlInfo; } export function getAllProjects(): Project[] { - const projects = (data?.publicProjects?.results ?? []) as Project[]; - // Test knob: inject a deliberately bad cover URL into the first image-bearing - // project so we can prove the resolver fails soft to passthrough without - // killing the build. No-op unless BAD_IMAGE_TEST is set. - if (process.env.BAD_IMAGE_TEST) { - const badUrl = process.env.BAD_IMAGE_TEST; - const target = projects.find((p) => p.image?.file?.url); - if (target?.image?.file) target.image.file.url = badUrl; - } - return projects; + const projects = (data?.publicProjects?.results ?? []) as Project[]; + // Test knob: inject a deliberately bad cover URL into the first image-bearing + // project so we can prove the resolver fails soft to passthrough without + // killing the build. No-op unless BAD_IMAGE_TEST is set. + if (process.env.BAD_IMAGE_TEST) { + const badUrl = process.env.BAD_IMAGE_TEST; + const target = projects.find((p) => p.image?.file?.url); + if (target?.image?.file) target.image.file.url = badUrl; + } + return projects; } export function getProjectByFirebaseId(id: string): Project | undefined { - return getAllProjects().find((p) => String(p.firebaseId) === String(id)); + return getAllProjects().find((p) => String(p.firebaseId) === String(id)); } // Home-page key figures. Mirrors the Next home page's // value?.communityStats?.{totalContributors,totalSwipes}. export interface CommunityStats { - totalContributors: number | null; - totalSwipes: number | null; + totalContributors: number | null; + totalSwipes: number | null; } export function getCommunityStats(): CommunityStats { - const stats = data?.communityStats ?? {}; - return { - totalContributors: stats.totalContributors ?? null, - totalSwipes: stats.totalSwipes ?? null, - }; + const stats = data?.communityStats ?? {}; + return { + totalContributors: stats.totalContributors ?? null, + totalSwipes: stats.totalSwipes ?? null, + }; } diff --git a/src/lib/dataExplorer.ts b/src/lib/dataExplorer.ts index 54d7a0f6..24dde1a6 100644 --- a/src/lib/dataExplorer.ts +++ b/src/lib/dataExplorer.ts @@ -14,48 +14,48 @@ const require = createRequire(import.meta.url); const data: any = require(process.env.MAPSWIPE_DATA_FILE ?? join(process.cwd(), 'fullData', 'staticData.json')); export interface MiniProject { - id: string; - projectType: string | null; - name: string; - firebaseId: string; - status: string | null; - region: string | null; - requestingOrganizationId: string | null; - requestingOrganization: { id: string; name: string } | null; - progress: number; - numberOfContributorUsers: number | null; - // Locale-neutral date string (as produced by the Next page). Used for - // date-range filtering (string compare) and card display. - createdAt: string | null; - image: { file: { url: string } } | null; - // Only centroid (map markers) + totalArea (bubble sizing / area sum) kept; - // the heavy bbox geometry is dropped to keep the payload small. - aoiGeometry: { centroid: number[] | null; totalArea: number | null } | null; - modifiedAt: string | null; + id: string; + projectType: string | null; + name: string; + firebaseId: string; + status: string | null; + region: string | null; + requestingOrganizationId: string | null; + requestingOrganization: { id: string; name: string } | null; + progress: number; + numberOfContributorUsers: number | null; + // Locale-neutral date string (as produced by the Next page). Used for + // date-range filtering (string compare) and card display. + createdAt: string | null; + image: { file: { url: string } } | null; + // Only centroid (map markers) + totalArea (bubble sizing / area sum) kept; + // the heavy bbox geometry is dropped to keep the payload small. + aoiGeometry: { centroid: number[] | null; totalArea: number | null } | null; + modifiedAt: string | null; } export interface Organization { - id: string; - name: string; + id: string; + name: string; } export interface ExportAsset { - type: string; - fileSize: number; - file: { url: string }; + type: string; + fileSize: number; + file: { url: string }; } export interface DataExplorerPayload { - projects: MiniProject[]; - minArea: number; - maxArea: number; - minContributors: number; - maxContributors: number; - buildDate: string | null; - totalContributors: number | null; - totalSwipes: number | null; - organizations: Organization[]; - globalExportAssets: ExportAsset[]; + projects: MiniProject[]; + minArea: number; + maxArea: number; + minContributors: number; + maxContributors: number; + buildDate: string | null; + totalContributors: number | null; + totalSwipes: number | null; + organizations: Organization[]; + globalExportAssets: ExportAsset[]; } const isDefined = (v: T | null | undefined): v is T => v !== null && v !== undefined; @@ -63,79 +63,79 @@ const isDefined = (v: T | null | undefined): v is T => v !== null && v !== un // compareDate parity with @togglecorp/fujs: compares two date-ish strings, // nulls sort last. direction -1 => descending. Returns -1/0/1 * direction. function compareDate(a: string | null, b: string | null, direction = 1): number { - if (!a && !b) return 0; - if (!a) return 1; - if (!b) return -1; - const ta = new Date(a).getTime(); - const tb = new Date(b).getTime(); - if (ta < tb) return -1 * direction; - if (ta > tb) return 1 * direction; - return 0; + if (!a && !b) return 0; + if (!a) return 1; + if (!b) return -1; + const ta = new Date(a).getTime(); + const tb = new Date(b).getTime(); + if (ta < tb) return -1 * direction; + if (ta > tb) return 1 * direction; + return 0; } function formatDate(value: string | null | undefined): string | null { - return value - ? new Date(value).toLocaleDateString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - }) - : null; + return value + ? new Date(value).toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + }) + : null; } export function getDataExplorerPayload(): DataExplorerPayload { - const buildDate = process.env.MAPSWIPE_BUILD_DATE ?? null; + const buildDate = process.env.MAPSWIPE_BUILD_DATE ?? null; - const { communityStats, publicOrganizations, globalExportAssets } = data ?? {}; - const { totalContributors = null, totalSwipes = null } = communityStats ?? {}; + const { communityStats, publicOrganizations, globalExportAssets } = data ?? {}; + const { totalContributors = null, totalSwipes = null } = communityStats ?? {}; - let publicProjects: any[] = data?.publicProjects?.results ?? []; - const limit = Number(process.env.SLICE_LIMIT ?? 0); - if (limit > 0) publicProjects = publicProjects.slice(0, limit); - - const miniProjects: MiniProject[] = publicProjects.map((feature) => ({ - id: feature.id ?? '', - projectType: feature.projectType ?? null, - name: feature.name, - firebaseId: feature.firebaseId, - status: feature.status ?? null, - region: feature.region ?? null, - requestingOrganizationId: feature.requestingOrganization?.id ?? null, - requestingOrganization: feature.requestingOrganization - ? { id: feature.requestingOrganization.id, name: feature.requestingOrganization.name } - : null, - progress: feature.progress, - numberOfContributorUsers: feature.numberOfContributorUsers ?? null, - createdAt: formatDate(feature.createdAt), - image: feature.image?.file?.url ? { file: { url: feature.image.file.url } } : null, - aoiGeometry: feature.aoiGeometry - ? { centroid: feature.aoiGeometry.centroid ?? null, totalArea: feature.aoiGeometry.totalArea ?? null } - : null, - modifiedAt: formatDate(feature.modifiedAt), - })); - - const contributors = miniProjects.map((p) => p.numberOfContributorUsers).filter(isDefined); - const minContributors = contributors.length > 0 ? Math.min(...contributors) : 0; - const maxContributors = contributors.length > 0 ? Math.max(...contributors) : 0; - - const sortedProjects = [...miniProjects]; - sortedProjects.sort((a, b) => compareDate(a.createdAt, b.createdAt, -1)); - - const areas = miniProjects.map((p) => p.aoiGeometry?.totalArea).filter(isDefined); - const minArea = areas.length > 0 ? Math.min(...areas) : 0; - const maxArea = areas.length > 0 ? Math.max(...areas) : 0; - - return { - projects: sortedProjects, - minArea, - maxArea, - minContributors, - maxContributors, - buildDate, - totalContributors, - totalSwipes, - organizations: (publicOrganizations?.results ?? []) as Organization[], - globalExportAssets: (globalExportAssets ?? []) as ExportAsset[], - }; + let publicProjects: any[] = data?.publicProjects?.results ?? []; + const limit = Number(process.env.SLICE_LIMIT ?? 0); + if (limit > 0) publicProjects = publicProjects.slice(0, limit); + + const miniProjects: MiniProject[] = publicProjects.map((feature) => ({ + id: feature.id ?? '', + projectType: feature.projectType ?? null, + name: feature.name, + firebaseId: feature.firebaseId, + status: feature.status ?? null, + region: feature.region ?? null, + requestingOrganizationId: feature.requestingOrganization?.id ?? null, + requestingOrganization: feature.requestingOrganization + ? { id: feature.requestingOrganization.id, name: feature.requestingOrganization.name } + : null, + progress: feature.progress, + numberOfContributorUsers: feature.numberOfContributorUsers ?? null, + createdAt: formatDate(feature.createdAt), + image: feature.image?.file?.url ? { file: { url: feature.image.file.url } } : null, + aoiGeometry: feature.aoiGeometry + ? { centroid: feature.aoiGeometry.centroid ?? null, totalArea: feature.aoiGeometry.totalArea ?? null } + : null, + modifiedAt: formatDate(feature.modifiedAt), + })); + + const contributors = miniProjects.map((p) => p.numberOfContributorUsers).filter(isDefined); + const minContributors = contributors.length > 0 ? Math.min(...contributors) : 0; + const maxContributors = contributors.length > 0 ? Math.max(...contributors) : 0; + + const sortedProjects = [...miniProjects]; + sortedProjects.sort((a, b) => compareDate(a.createdAt, b.createdAt, -1)); + + const areas = miniProjects.map((p) => p.aoiGeometry?.totalArea).filter(isDefined); + const minArea = areas.length > 0 ? Math.min(...areas) : 0; + const maxArea = areas.length > 0 ? Math.max(...areas) : 0; + + return { + projects: sortedProjects, + minArea, + maxArea, + minContributors, + maxContributors, + buildDate, + totalContributors, + totalSwipes, + organizations: (publicOrganizations?.results ?? []) as Organization[], + globalExportAssets: (globalExportAssets ?? []) as ExportAsset[], + }; } diff --git a/src/lib/projectHistory.ts b/src/lib/projectHistory.ts index 3080395c..2814b85e 100644 --- a/src/lib/projectHistory.ts +++ b/src/lib/projectHistory.ts @@ -4,57 +4,57 @@ import Papa from 'papaparse'; interface ProjectHistoryRaw { - day: string; - cum_progress: string; + day: string; + cum_progress: string; } function isFalsyString(v: unknown): boolean { - return v === undefined || v === null || v === ''; + return v === undefined || v === null || v === ''; } const getProjectHistory = async (projectId: string, exportHistoryUrl?: string) => { - if (!exportHistoryUrl) { + if (!exportHistoryUrl) { - console.warn(`No exportHistoryUrl for project ${projectId}`); - return []; - } - - let csvContent: string; - try { - const res = await fetch(exportHistoryUrl); - if (!res.ok) { - throw new Error(`Failed to fetch history: ${res.status}`); + console.warn(`No exportHistoryUrl for project ${projectId}`); + return []; } - csvContent = await res.text(); - } catch { + + let csvContent: string; + try { + const res = await fetch(exportHistoryUrl); + if (!res.ok) { + throw new Error(`Failed to fetch history: ${res.status}`); + } + csvContent = await res.text(); + } catch { - console.warn(`Could not fetch history for project ${projectId}.`); - return []; - } + console.warn(`Could not fetch history for project ${projectId}.`); + return []; + } - const parsedContent = await new Promise<{ data: ProjectHistoryRaw[] }>((resolve, reject) => { - Papa.parse(csvContent?.toString() ?? '', { - delimiter: ',', - newline: '\n', - header: true, + const parsedContent = await new Promise<{ data: ProjectHistoryRaw[] }>((resolve, reject) => { + Papa.parse(csvContent?.toString() ?? '', { + delimiter: ',', + newline: '\n', + header: true, - complete: (results: any) => resolve(results), + complete: (results: any) => resolve(results), - error: (error: any) => reject(error), + error: (error: any) => reject(error), + }); }); - }); - const histories = parsedContent.data; - return histories - .filter((h) => !isFalsyString(h.day)) - .map((hist) => { - if (isFalsyString(hist.cum_progress)) return undefined; - return { - timestamp: new Date(hist.day).getTime(), - progress: Number(hist.cum_progress), - }; - }) - .filter((x): x is { timestamp: number; progress: number } => x !== undefined); + const histories = parsedContent.data; + return histories + .filter((h) => !isFalsyString(h.day)) + .map((hist) => { + if (isFalsyString(hist.cum_progress)) return undefined; + return { + timestamp: new Date(hist.day).getTime(), + progress: Number(hist.cum_progress), + }; + }) + .filter((x): x is { timestamp: number; progress: number } => x !== undefined); }; export default getProjectHistory; diff --git a/src/pages/404.astro b/src/pages/404.astro index 040296ae..a7bb780d 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -15,25 +15,25 @@ import imageStyles from 'components/ImageWrapper.module.css'; // Astro emits this to dist/404.html. --- -
    -
    -
    -

    404

    -

    - This area has not been swiped yet! -

    -
    - Go back to home +
    +
    +
    +

    404

    +

    + This area has not been swiped yet! +

    +
    + Go back to home +
    +
    +
    + 404 Page +
    +
    -
    -
    - 404 Page -
    -
    -
    diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index 39ce6004..76e0d549 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -30,26 +30,26 @@ import htmlOutputStyles from 'components/HtmlOutput.module.css'; // absolute paths). All 6 locale variants of a post share the SAME signature // object so it hashes once. export const getStaticPaths = (async () => { - const entries = await getCollection('blogs'); - const candidates = entries.flatMap((entry) => { - const signature = { - id: entry.id, - title: entry.data.title ?? null, - publishedDate: entry.data.publishedDate?.getTime() ?? null, - author: entry.data.author ?? null, - description: entry.data.description ?? null, - featured: entry.data.featured ?? false, - coverImage: entry.data.coverImage?.src ?? null, - body: entry.body ?? '', - }; - return LOCALES.map((locale) => ({ - key: `${locale}/blogs/${entry.id}`, - params: { locale, slug: entry.id }, - props: { entry }, - propsData: signature, - })); - }); - return selectPaths('blogs-detail', candidates); + const entries = await getCollection('blogs'); + const candidates = entries.flatMap((entry) => { + const signature = { + id: entry.id, + title: entry.data.title ?? null, + publishedDate: entry.data.publishedDate?.getTime() ?? null, + author: entry.data.author ?? null, + description: entry.data.description ?? null, + featured: entry.data.featured ?? false, + coverImage: entry.data.coverImage?.src ?? null, + body: entry.body ?? '', + }; + return LOCALES.map((locale) => ({ + key: `${locale}/blogs/${entry.id}`, + params: { locale, slug: entry.id }, + props: { entry }, + propsData: signature, + })); + }); + return selectPaths('blogs-detail', candidates); }) satisfies GetStaticPaths; const { locale } = Astro.params; @@ -70,55 +70,55 @@ const dateFmt = new Intl.DateTimeFormat(locale!); const tabTitle = String(t('blog-tab-head', { blogTitle })); --- - {/* Hero: title + date/author tags left, cover image right */} -
    -
    -
    -
    -

    - {blogTitle} -

    -
    -
    - {publishedDate && ( - - - {dateFmt.format(publishedDate)} - - )} - {author && ( - - {author} - - )} + {/* Hero: title + date/author tags left, cover image right */} +
    +
    +
    +
    +

    + {blogTitle} +

    +
    +
    + {publishedDate && ( + + + {dateFmt.format(publishedDate)} + + )} + {author && ( + + {author} + + )} +
    +
    +
    +
    + {coverImage ? ( +
    + +
    + ) : ( +
    + )} +
    -
    -
    - {coverImage ? ( -
    - -
    - ) : ( -
    - )} -
    -
    +
    -
    -
    -
    -
    -
    - -
    -
    -
    +
    +
    +
    + +
    +
    +
    diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index bd51162b..ab2dcedc 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -33,22 +33,22 @@ import imageStyles from 'components/ImageWrapper.module.css'; // children, so there is no key collision or accidental prune. The same // signature object is shared across all 6 locales so it hashes once. export const getStaticPaths = (async () => { - const entries = await getCollection('blogs'); - const listSignature = entries - .map((entry) => ({ - slug: entry.id, - title: entry.data.title ?? entry.id, - publishedDate: entry.data.publishedDate?.getTime() ?? null, - description: entry.data.description ?? null, - coverImage: entry.data.coverImage?.src ?? null, - featured: entry.data.featured ?? false, - })) - .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)); - return selectPaths('blogs-list', LOCALES.map((locale) => ({ - key: `${locale}/blogs`, - params: { locale }, - propsData: listSignature, - }))); + const entries = await getCollection('blogs'); + const listSignature = entries + .map((entry) => ({ + slug: entry.id, + title: entry.data.title ?? entry.id, + publishedDate: entry.data.publishedDate?.getTime() ?? null, + description: entry.data.description ?? null, + coverImage: entry.data.coverImage?.src ?? null, + featured: entry.data.featured ?? false, + })) + .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)); + return selectPaths('blogs-list', LOCALES.map((locale) => ({ + key: `${locale}/blogs`, + params: { locale }, + propsData: listSignature, + }))); }) satisfies GetStaticPaths; const { locale } = Astro.params; @@ -58,15 +58,15 @@ const t = await getT(locale!, 'blogs'); // compareDate(foo, bar, -1). Undated entries sort last (getTime NaN -> 0 floor). const entries = await getCollection('blogs'); const blogs = entries - .map((entry) => ({ - slug: entry.id, // == Next's path.parse(filename).name - title: entry.data.title ?? entry.id, - publishedDate: entry.data.publishedDate, - description: entry.data.description, - coverImage: entry.data.coverImage, - featured: entry.data.featured, - })) - .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)); + .map((entry) => ({ + slug: entry.id, // == Next's path.parse(filename).name + title: entry.data.title ?? entry.id, + publishedDate: entry.data.publishedDate, + description: entry.data.description, + coverImage: entry.data.coverImage, + featured: entry.data.featured, + })) + .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)); const featuredBlogs = blogs.filter((b) => b.featured); const otherBlogs = blogs.filter((b) => !b.featured); @@ -77,68 +77,68 @@ const dateFmt = new Intl.DateTimeFormat(locale!); const fmtDate = (d?: Date) => (d ? dateFmt.format(d) : ''); const sections = [ - { key: 'featured', title: t('featured-posts'), items: featuredBlogs }, - { key: 'other', title: t('other-posts'), items: otherBlogs }, + { key: 'featured', title: t('featured-posts'), items: featuredBlogs }, + { key: 'other', title: t('other-posts'), items: otherBlogs }, ]; const title = String(t('blogs-tab-head')); --- - {/* Hero (no right content -> centered, Next: ) */} -
    -
    -
    -
    -

    - {t('blogs-hero-title')} -

    + {/* Hero (no right content -> centered, Next: ) */} +
    +
    +
    +
    +

    + {t('blogs-hero-title')} +

    +
    +
    -
    +
    -
    -
    - {sections.map((section) => section.items.length > 0 && ( -
    -
    -
    -

    - {section.title} -

    -
    -
    - {section.items.map((blog) => ( -
    - {blog.coverImage && ( -
    - + {sections.map((section) => section.items.length > 0 && ( +
    +
    +
    +

    + {section.title} +

    - )} -
    -
    -
    -
    - {blog.title} -
    -
    +
    + {section.items.map((blog) => ( +
    + {blog.coverImage && ( +
    + +
    + )} +
    +
    +
    +
    + {blog.title} +
    +
    +
    +
    + {blog.publishedDate && ( + + + {fmtDate(blog.publishedDate)} + + )} +
    {blog.description}
    + + {t('read-more')} + +
    +
    +
    + ))}
    -
    - {blog.publishedDate && ( - - - {fmtDate(blog.publishedDate)} - - )} -
    {blog.description}
    - - {t('read-more')} - -
    -
    -
    - ))} -
    -
    -
    - ))} +
    +
    + ))} diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index f6090d66..ebcf97eb 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -37,12 +37,12 @@ import imageStyles from 'components/ImageWrapper.module.css'; // /data-explorer.json static endpoint has no getStaticPaths at all, so it // re-renders on every build and stays fresh regardless.) export const getStaticPaths = (async () => { - const payload = getDataExplorerPayload(); - return selectPaths('data', LOCALES.map((locale) => ({ - key: `${locale}/data`, - params: { locale }, - propsData: payload, - }))); + const payload = getDataExplorerPayload(); + return selectPaths('data', LOCALES.map((locale) => ({ + key: `${locale}/data`, + params: { locale }, + propsData: payload, + }))); }) satisfies GetStaticPaths; const { locale } = Astro.params; @@ -62,15 +62,15 @@ const DATA_EXPLORER_JSON_URL = '/data-explorer.json'; // exact firebase URLs at COVER_WIDTH — pure cache hits). const initialProjects = payload.projects.slice(0, PAGE_SIZE); const initialImageMap: Record = Object.fromEntries( - await Promise.all( - initialProjects - .map((p) => p.image?.file?.url) - .filter((url): url is string => Boolean(url)) - .map(async (url) => { - const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); - return [url, src] as const; - }), - ), + await Promise.all( + initialProjects + .map((p) => p.image?.file?.url) + .filter((url): url is string => Boolean(url)) + .map(async (url) => { + const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); + return [url, src] as const; + }), + ), ); // Resolve the `data` namespace for THIS locale into a plain {key:string} dict @@ -85,175 +85,175 @@ const title = String(t('data-tab-head')); // Community stats (static, matching the Next page's statsHeader section). const { totalSwipes, totalContributors } = payload; const fmt = (n: number | null | undefined) => - (n == null ? '-' : new Intl.NumberFormat('en-US').format(n)); + (n == null ? '-' : new Intl.NumberFormat('en-US').format(n)); // Static type-explainer cards (mirrors the Next page's type-section: cover // image + ProjectTypeIcon + heading + key-point list). const typeCards = [ - { type: 'FIND', coverImageUrl: '/img/find.svg', title: t('type-find-title'), points: [t('type-find-key-point-1'), t('type-find-key-point-2'), t('type-find-key-point-3')] }, - { type: 'COMPARE', beforeAfter: true, title: t('type-compare-title'), points: [t('type-compare-key-point-1'), t('type-compare-key-point-2'), t('type-compare-key-point-3')] }, - { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', title: t('type-validate-title'), points: [t('type-validate-key-point-1'), t('type-validate-key-point-2'), t('type-validate-key-point-3')] }, - { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', title: t('type-completeness-title'), points: [t('type-completeness-key-point-1'), t('type-completeness-key-point-2'), t('type-completeness-key-point-3')] }, - { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', title: t('type-validate-image-title'), points: [t('type-validate-image-key-point-1'), t('type-validate-image-key-point-2'), t('type-validate-image-key-point-3')] }, - { type: 'STREET', coverImageUrl: '/img/street_image.png', title: t('type-streets-view-title'), points: [t('type-street-key-point-1'), t('type-street-key-point-2'), t('type-street-key-point-3')] }, - { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', title: t('type-locate-title'), points: [t('type-locate-key-point-1'), t('type-locate-key-point-2'), t('type-locate-key-point-3')] }, + { type: 'FIND', coverImageUrl: '/img/find.svg', title: t('type-find-title'), points: [t('type-find-key-point-1'), t('type-find-key-point-2'), t('type-find-key-point-3')] }, + { type: 'COMPARE', beforeAfter: true, title: t('type-compare-title'), points: [t('type-compare-key-point-1'), t('type-compare-key-point-2'), t('type-compare-key-point-3')] }, + { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', title: t('type-validate-title'), points: [t('type-validate-key-point-1'), t('type-validate-key-point-2'), t('type-validate-key-point-3')] }, + { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', title: t('type-completeness-title'), points: [t('type-completeness-key-point-1'), t('type-completeness-key-point-2'), t('type-completeness-key-point-3')] }, + { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', title: t('type-validate-image-title'), points: [t('type-validate-image-key-point-1'), t('type-validate-image-key-point-2'), t('type-validate-image-key-point-3')] }, + { type: 'STREET', coverImageUrl: '/img/street_image.png', title: t('type-streets-view-title'), points: [t('type-street-key-point-1'), t('type-street-key-point-2'), t('type-street-key-point-3')] }, + { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', title: t('type-locate-title'), points: [t('type-locate-key-point-1'), t('type-locate-key-point-2'), t('type-locate-key-point-3')] }, ] as const; --- - {/* Hero */} -
    -
    -
    -
    -

    - {t('data-page-heading')} -

    -
    {t('data-page-description')}
    -
    -
    -
    - {t('data-banner-image')} -
    -
    -
    -
    -
    -
    - - {/* Community stats (Next: statsHeader Section with circle KeyFigures) */} -
    -
    -
    -
    -
    -
    - {fmt(totalSwipes)} - -
    -
    {t('total-swipes')}
    -
    -
    -
    - {fmt(totalContributors)} - + {/* Hero */} +
    +
    +
    +
    +

    + {t('data-page-heading')} +

    +
    {t('data-page-description')}
    +
    +
    +
    + {t('data-banner-image')} +
    +
    -
    {t('contributors')}
    -
    -
    -
    -

    - {t('community-stats-section-heading')} -

    -
    - {t('community-stats-section-description')} - - {t('community-dashboard-link-label')} - -
    -
    +
    -
    - {/* Project-type explainer cards (static, SSR-only) */} -
    -
    -
    -

    - {t('type-section-heading')} -

    -
    {t('type-section-description')}
    -
    -
    - {typeCards.map((card) => ( -
    - {'beforeAfter' in card && card.beforeAfter ? ( -
    -
    - before-image -
    -
    - after-image -
    -
    - ) : ( -
    - card-cover-image -
    - )} -
    -
    -
    -
    - -
    -
    - {card.title} -
    + {/* Community stats (Next: statsHeader Section with circle KeyFigures) */} +
    +
    +
    +
    +
    +
    + {fmt(totalSwipes)} + +
    +
    {t('total-swipes')}
    +
    +
    +
    + {fmt(totalContributors)} + +
    +
    {t('contributors')}
    +
    -
    -
    - {card.points.map((p) => ( -
    -
    - +
    +

    + {t('community-stats-section-heading')} +

    +
    + {t('community-stats-section-description')} + + {t('community-dashboard-link-label')} +
    -
    {p}
    -
    +
    +
    +
    +
    + + {/* Project-type explainer cards (static, SSR-only) */} +
    +
    +
    +

    + {t('type-section-heading')} +

    +
    {t('type-section-description')}
    +
    +
    + {typeCards.map((card) => ( +
    + {'beforeAfter' in card && card.beforeAfter ? ( +
    +
    + before-image +
    +
    + after-image +
    +
    + ) : ( +
    + card-cover-image +
    + )} +
    +
    +
    +
    + +
    +
    + {card.title} +
    +
    +
    +
    + {card.points.map((p) => ( +
    +
    + +
    +
    {p}
    +
    + ))} +
    +
    +
    ))} -
    -
    - ))} -
    -
    -
    +
    +
    - {/* The ONE interactive island: filters + search + sort + pagination + + {/* The ONE interactive island: filters + search + sort + pagination + card list + map share state. client:load so filters + initial list are in the SSR'd HTML; the leaflet map is client-guarded inside. Renders the explore + download sections with the same recovered CSS-Module classes as the old Next page (it imports this page's styles.module.css). */} - + - {/* License + contact (static) */} -
    -
    -
    -

    - {t('license-section-heading')} -

    -
    {t('license-section-description')}
    -
    -
    -
    -
    -
    -
    -

    - {t('contact-section-heading')} -

    -
    {t('contact-section-description')}
    -
    - -
    -
    + {/* License + contact (static) */} +
    +
    +
    +

    + {t('license-section-heading')} +

    +
    {t('license-section-description')}
    +
    +
    +
    +
    +
    +
    +

    + {t('contact-section-heading')} +

    +
    {t('contact-section-description')}
    +
    + +
    +
    diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index 2b7dba02..199b6d59 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -27,183 +27,183 @@ import imageStyles from 'components/ImageWrapper.module.css'; // → the whole site (this page included) rebuilds anyway, so tracking // translations here would be redundant. export const getStaticPaths = (async () => - selectPaths('get-involved', LOCALES.map((locale) => ({ - key: `${locale}/get-involved`, - params: { locale }, - propsData: { page: 'get-involved', locale }, - })))) satisfies GetStaticPaths; + selectPaths('get-involved', LOCALES.map((locale) => ({ + key: `${locale}/get-involved`, + params: { locale }, + propsData: { page: 'get-involved', locale }, + })))) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'get-involved'); const title = String(t('get-involved-tab-head')); --- - {/* Hero */} -
    -
    -
    -
    -

    - {t('hero-title')} -

    -
    {t('hero-description')}
    -
    -
    -
    - {t('get-involved-banner')} -
    -
    -
    -
    -
    -
    - - {/* Contribute now */} -
    -
    -
    -

    - {t('contribute-now')} -

    -
    {t('contribute-now-description')}
    -
    -
    - -
    - {t('use-web-app-label')} - | - {t('download-apk-label')} + {/* Hero */} +
    +
    +
    +
    +

    + {t('hero-title')} +

    +
    {t('hero-description')}
    +
    +
    +
    + {t('get-involved-banner')} +
    +
    +
    -
    +
    -
    - {/* Individual */} -
    -
    -
    -
    -

    {t('individual-heading')}

    -
    - {t('individual-heading-image')} -
    -
    -
    -
    -
    {t('possess-language-skills')}
    -
    {t('possess-language-skills-description')}
    -
    - {t('contribute-on-transifex')} + {/* Contribute now */} +
    +
    +
    +

    + {t('contribute-now')} +

    +
    {t('contribute-now-description')}
    -
    -
    -
    {t('possess-technical-skills')}
    -
    {t('possess-techincal-skills-description')}
    -
    -
    -
    -
    +
    - {/* Group */} -
    -
    -
    -
    -
    -
    {t('want-to-host-mapswipe-events')}
    -
    {t('want-to-host-mapswipe-events-description')}
    - -
    -
    -
    {t('engage-your-csr')}
    -
    {t('engage-your-csr-description')}
    -
    - {t('register-your-interest')} + {/* Individual */} +
    +
    +
    +
    +

    {t('individual-heading')}

    +
    + {t('individual-heading-image')} +
    +
    +
    +
    +
    {t('possess-language-skills')}
    +
    {t('possess-language-skills-description')}
    + +
    +
    +
    {t('possess-technical-skills')}
    +
    {t('possess-techincal-skills-description')}
    + +
    +
    -
    -
    -

    {t('group-heading')}

    -
    - {t('group-heading-image')} -
    -
    -
    -
    -
    +
    - {/* Organizational */} -
    -
    -
    -
    -

    {t('organization-heading')}

    -
    - {t('organization-logo')} -
    -
    -
    -
    {t('humanitarian-or-nonprofit')}
    -
    {t('humanitarian-or-nonprofit-description')}
    - + {/* Group */} +
    +
    +
    +
    +
    +
    {t('want-to-host-mapswipe-events')}
    +
    {t('want-to-host-mapswipe-events-description')}
    + +
    +
    +
    {t('engage-your-csr')}
    +
    {t('engage-your-csr-description')}
    + +
    +
    +
    +

    {t('group-heading')}

    +
    + {t('group-heading-image')} +
    +
    +
    -
    -
    -
    +
    - {/* Donate */} -
    -
    -
    -
    -
    {t('interested-in-supporting')}
    -
    -
    -

    {t('interested-in-supporting-description-1')}

    - {t('download-financial-report')} + {/* Organizational */} +
    +
    +
    +
    +

    {t('organization-heading')}

    +
    + {t('organization-logo')} +
    +
    +
    +
    {t('humanitarian-or-nonprofit')}
    +
    {t('humanitarian-or-nonprofit-description')}
    + +
    -
    -
    -
    -

    {t('donate-heading')}

    -
    - {t('donation-logo')} -
    +
    + + {/* Donate */} +
    +
    +
    +
    +
    {t('interested-in-supporting')}
    +
    +
    +

    {t('interested-in-supporting-description-1')}

    + {t('download-financial-report')} +
    +
    + +
    +
    +

    {t('donate-heading')}

    +
    + {t('donation-logo')} +
    +
    +
    -
    -
    -
    +
    - {/* Contact */} -
    -
    -
    -

    - {t('contact-section-heading')} -

    -
    {t('contact-section-description')}
    -
    - -
    -
    + {/* Contact */} +
    +
    +
    +

    + {t('contact-section-heading')} +

    +
    {t('contact-section-description')}
    +
    + +
    +
    diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index 23076821..4bf12ad9 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -36,25 +36,25 @@ import imageStyles from 'components/ImageWrapper.module.css'; // by astro:assets), NOT the whole resolved image() metadata object. The same // propsData object is shared across all 6 locale candidates so it hashes once. export const getStaticPaths = (async () => { - const stats = getCommunityStats(); - const entries = await getCollection('blogs'); - const featured = entries - .filter((e) => e.data.featured) - .map((e) => ({ - slug: e.id, - title: e.data.title ?? e.id, - publishedDate: e.data.publishedDate?.getTime() ?? null, - description: e.data.description ?? null, - coverImage: e.data.coverImage?.src ?? null, - })) - .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)) - .slice(0, 3); - const propsData = { stats, featured }; - return selectPaths('home', LOCALES.map((locale) => ({ - key: `${locale}`, - params: { locale }, - propsData, - }))); + const stats = getCommunityStats(); + const entries = await getCollection('blogs'); + const featured = entries + .filter((e) => e.data.featured) + .map((e) => ({ + slug: e.id, + title: e.data.title ?? e.id, + publishedDate: e.data.publishedDate?.getTime() ?? null, + description: e.data.description ?? null, + coverImage: e.data.coverImage?.src ?? null, + })) + .sort((a, b) => (b.publishedDate ?? 0) - (a.publishedDate ?? 0)) + .slice(0, 3); + const propsData = { stats, featured }; + return selectPaths('home', LOCALES.map((locale) => ({ + key: `${locale}`, + params: { locale }, + propsData, + }))); }) satisfies GetStaticPaths; const { locale } = Astro.params; @@ -64,294 +64,294 @@ const t = await getT(locale!, 'home'); // compact ("214M"), contributors grouped ("132,105"). Reproduce exactly. const { totalContributors, totalSwipes } = getCommunityStats(); const swipesFmt = totalSwipes == null - ? '-' - : new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(totalSwipes); + ? '-' + : new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(totalSwipes); const contributorsFmt = totalContributors == null - ? '-' - : new Intl.NumberFormat('en-US').format(totalContributors); + ? '-' + : new Intl.NumberFormat('en-US').format(totalContributors); // Featured blogs: top 3 `featured` from the blogs collection, sorted DESC by // publishedDate (parity with Next's compareDate(..,-1) + filter + slice(0,3)). const entries = await getCollection('blogs'); const featuredBlogs = entries - .filter((e) => e.data.featured) - .map((e) => ({ - slug: e.id, - title: e.data.title ?? e.id, - publishedDate: e.data.publishedDate, - description: e.data.description, - coverImage: e.data.coverImage, - })) - .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)) - .slice(0, 3); + .filter((e) => e.data.featured) + .map((e) => ({ + slug: e.id, + title: e.data.title ?? e.id, + publishedDate: e.data.publishedDate, + description: e.data.description, + coverImage: e.data.coverImage, + })) + .sort((a, b) => (b.publishedDate?.getTime() ?? 0) - (a.publishedDate?.getTime() ?? 0)) + .slice(0, 3); // i18next {{date, datetime}} => Intl.DateTimeFormat(lng) default options. const dateFmt = new Intl.DateTimeFormat(locale!); const fmtDate = (d?: Date) => (d ? dateFmt.format(d) : ''); const partners = [ - { altText: 'American Red Cross Logo', imageSrc: '/img/arc.svg', link: 'https://www.redcross.org/' }, - { altText: 'British Red Cross Logo', imageSrc: '/img/brc.svg', link: 'https://www.redcross.org.uk/' }, - { altText: 'Canadian Red Cross Logo', imageSrc: '/img/crc.svg', link: 'https://www.redcross.ca/' }, - { altText: 'HeiGIT logo', imageSrc: '/img/heigit.png', link: 'https://heigit.org/' }, - { altText: 'HOT logo', imageSrc: '/img/hot.png', link: 'https://www.hotosm.org/' }, - { altText: 'MSF logo', imageSrc: '/img/msf.png', link: 'https://msf.org.uk/' }, - { altText: 'Togglecorp logo', imageSrc: '/img/tc.png', link: 'https://togglecorp.com' }, + { altText: 'American Red Cross Logo', imageSrc: '/img/arc.svg', link: 'https://www.redcross.org/' }, + { altText: 'British Red Cross Logo', imageSrc: '/img/brc.svg', link: 'https://www.redcross.org.uk/' }, + { altText: 'Canadian Red Cross Logo', imageSrc: '/img/crc.svg', link: 'https://www.redcross.ca/' }, + { altText: 'HeiGIT logo', imageSrc: '/img/heigit.png', link: 'https://heigit.org/' }, + { altText: 'HOT logo', imageSrc: '/img/hot.png', link: 'https://www.hotosm.org/' }, + { altText: 'MSF logo', imageSrc: '/img/msf.png', link: 'https://msf.org.uk/' }, + { altText: 'Togglecorp logo', imageSrc: '/img/tc.png', link: 'https://togglecorp.com' }, ]; const missionTypes = [ - { type: 'FIND', coverImageUrl: '/img/find.svg', heading: t('type-find-title'), body: t('find-mission-type-description') }, - { type: 'COMPARE', beforeAfter: true, heading: t('type-compare-title'), body: t('compare-mission-type-description') }, - { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', heading: t('type-validate-title'), body: t('validate-mission-type-description') }, - { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', heading: t('type-completeness-title'), body: t('completeness-type-description') }, - { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', heading: t('type-validate-image-type'), body: t('validate-image-type-description') }, - { type: 'STREET', coverImageUrl: '/img/street_image.png', heading: t('type-street-type'), body: t('street-type-description') }, - { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', heading: t('type-locate-features-type'), body: t('locate-features-type-description') }, + { type: 'FIND', coverImageUrl: '/img/find.svg', heading: t('type-find-title'), body: t('find-mission-type-description') }, + { type: 'COMPARE', beforeAfter: true, heading: t('type-compare-title'), body: t('compare-mission-type-description') }, + { type: 'VALIDATE', coverImageUrl: '/img/validate.svg', heading: t('type-validate-title'), body: t('validate-mission-type-description') }, + { type: 'COMPLETENESS', coverImageUrl: '/img/completeness.png', heading: t('type-completeness-title'), body: t('completeness-type-description') }, + { type: 'VALIDATE_IMAGE', coverImageUrl: '/img/validate_image.png', heading: t('type-validate-image-type'), body: t('validate-image-type-description') }, + { type: 'STREET', coverImageUrl: '/img/street_image.png', heading: t('type-street-type'), body: t('street-type-description') }, + { type: 'LOCATE', coverImageUrl: '/img/locate_image.svg', heading: t('type-locate-features-type'), body: t('locate-features-type-description') }, ] as const; const title = String(t('home-tab-head')); --- - {/* Hero (Next: components/Hero with video rightContent) */} -
    -
    -
    -
    -

    - {t('hero-title')} -

    -
    {t('hero-description')}
    - -
    -
    - + {/* Hero (Next: components/Hero with video rightContent) */} +
    +
    +
    +
    +

    + {t('hero-title')} +

    +
    {t('hero-description')}
    + +
    +
    + +
    +
    -
    +
    -
    -
    - {/* Mobilizing volunteers + key figures */} -
    -
    -
    -

    - {t('mobilizing-volunteer')} -

    -
    -
    -
    -
    - {t('mobilize-volunteer')} -
    -
    -
    - {t('mapathon')} + {/* Mobilizing volunteers + key figures */} +
    +
    +
    +

    + {t('mobilizing-volunteer')} +

    -
    - {t('field-mapping')} +
    +
    +
    + {t('mobilize-volunteer')} +
    +
    +
    + {t('mapathon')} +
    +
    + {t('field-mapping')} +
    +
    +
    +
    +
    {t('mobilizing-volunteer-description-paragraph-1')}
    +
    {t('mobilizing-volunteer-description-paragraph-2')}
    +
    +
    +
    + {swipesFmt} + +
    +
    {t('total-swipes')}
    +
    +
    +
    + {contributorsFmt} + +
    +
    {t('total-contributors')}
    +
    +
    +
    -
    -
    -
    {t('mobilizing-volunteer-description-paragraph-1')}
    -
    {t('mobilizing-volunteer-description-paragraph-2')}
    -
    -
    -
    - {swipesFmt} - -
    -
    {t('total-swipes')}
    +
    + + {/* Mission types */} +
    +
    +
    +

    + {t('explore-mission-types')} +

    +
    {t('explore-mission-types-description')}
    -
    -
    - {contributorsFmt} - -
    -
    {t('total-contributors')}
    +
    + {missionTypes.map((m) => ( +
    + {'beforeAfter' in m ? ( +
    +
    + before-image +
    +
    + after-image +
    +
    + ) : ( +
    + card-cover-image +
    + )} +
    +
    +
    +
    + +
    +
    + {m.heading} +
    +
    +
    +
    {m.body}
    +
    +
    + ))}
    -
    -
    -
    -
    +
    - {/* Mission types */} -
    -
    -
    -

    - {t('explore-mission-types')} -

    -
    {t('explore-mission-types-description')}
    -
    -
    - {missionTypes.map((m) => ( - - ))} -
    -
    -
    +
    +
    - {/* Start mapswiping (download + get involved) */} -
    -
    -
    -

    - {t('start-mapswiping-title')} -

    -
    -
    -
    -
    {t('download-description')}
    -
    -
    - - {t('download-playstore')} - - - {t('download-apple-store')} - + {/* Recent news & updates (featured blogs) */} +
    +
    +
    +

    + {t('news-and-updates-title')} +

    -
    - {t('mapswipe-web-link')} - | - {t('download-apk-label')} +
    + {featuredBlogs.map((blog, index) => ( +
    + {blog.coverImage && ( +
    + +
    + )} +
    +
    +
    +
    + {blog.title} +
    +
    + {blog.publishedDate && ( +
    + + + {fmtDate(blog.publishedDate)} + +
    + )} +
    +
    +
    {blog.description}
    + + {t('read-more')} + +
    +
    +
    + ))} +
    -
    -
    -
    {t('get-involved-description')}
    - - {t('get-involved-link')} - -
    -
    -
    -
    +
    - {/* Recent news & updates (featured blogs) */} -
    -
    -
    -

    - {t('news-and-updates-title')} -

    -
    -
    - {featuredBlogs.map((blog, index) => ( - - ))} - -
    -
    -
    - - {/* Partners */} -
    -
    -
    -

    - {t('partners')} -

    -
    -
    - -
    - {t('missing-maps')} -
    -
    -
    {t('missing-map-description')}
    -
    - {partners.map((p) => ( - -
    - {p.altText} -
    -
    - ))} -
    -
    -
    -
    +
    diff --git a/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro index 796d3316..423d66eb 100644 --- a/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -31,11 +31,11 @@ import htmlOutputStyles from 'components/HtmlOutput.module.css'; // bumps codeHash → full rebuild, so tracking that content here would be // redundant. export const getStaticPaths = (async () => - selectPaths('privacy', LOCALES.map((locale) => ({ - key: `${locale}/privacy`, - params: { locale }, - propsData: { page: 'privacy', locale }, - })))) satisfies GetStaticPaths; + selectPaths('privacy', LOCALES.map((locale) => ({ + key: `${locale}/privacy`, + params: { locale }, + propsData: { page: 'privacy', locale }, + })))) satisfies GetStaticPaths; const { locale } = Astro.params; const t = await getT(locale!, 'privacy'); @@ -121,34 +121,34 @@ Our Privacy Notice may change from time to time, so please check this page occas `; const policyHtml = String( - await unified() - .use(remarkParse) - .use(remarkGfm) - .use(remarkRehype) - .use(rehypeStringify) - .process(policy.replace(/\\n/g, '\n')), + await unified() + .use(remarkParse) + .use(remarkGfm) + .use(remarkRehype) + .use(rehypeStringify) + .process(policy.replace(/\\n/g, '\n')), ); --- - {/* Hero (no right content -> centered) */} -
    -
    -
    -
    -

    - {t('privacy-hero-title')} -

    + {/* Hero (no right content -> centered) */} +
    +
    +
    +
    +

    + {t('privacy-hero-title')} +

    +
    +
    -
    +
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    +
    +
    +
    +
    +
    +
    diff --git a/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro index 4e88ce4f..c00af234 100644 --- a/src/pages/[locale]/projects/[id].astro +++ b/src/pages/[locale]/projects/[id].astro @@ -27,23 +27,23 @@ import imageStyles from 'components/ImageWrapper.module.css'; import htmlOutputStyles from 'components/HtmlOutput.module.css'; export const getStaticPaths = (async () => { - let projects = getAllProjects(); - const limit = Number(import.meta.env.SLICE_LIMIT ?? 0); - if (limit > 0) projects = projects.slice(0, limit); - // One candidate per (project, locale). The 6 locale variants of a project - // share the SAME `project` object reference as propsData, so selectPaths - // hashes each project's data exactly once and rebuilds all 6 (or none) - // together. Under the incremental orchestration, only projects whose data - // changed (or new/all-on-code-change) are returned; otherwise ALL are. - const candidates = projects.flatMap((project) => { - const id = String(project.firebaseId); - return LOCALES.map((locale) => ({ - key: `${locale}/projects/${id}`, - params: { locale, id }, - propsData: project, - })); - }); - return selectPaths('projects', candidates); + let projects = getAllProjects(); + const limit = Number(import.meta.env.SLICE_LIMIT ?? 0); + if (limit > 0) projects = projects.slice(0, limit); + // One candidate per (project, locale). The 6 locale variants of a project + // share the SAME `project` object reference as propsData, so selectPaths + // hashes each project's data exactly once and rebuilds all 6 (or none) + // together. Under the incremental orchestration, only projects whose data + // changed (or new/all-on-code-change) are returned; otherwise ALL are. + const candidates = projects.flatMap((project) => { + const id = String(project.firebaseId); + return LOCALES.map((locale) => ({ + key: `${locale}/projects/${id}`, + params: { locale, id }, + propsData: project, + })); + }); + return selectPaths('projects', candidates); }) satisfies GetStaticPaths; const { locale, id } = Astro.params; @@ -52,290 +52,290 @@ const project = getProjectByFirebaseId(id!)!; const t = await getT(locale!, 'project'); const { - name, - description, - projectType, - status, - region, - progress, - createdAt, - numberOfContributorUsers, - requestingOrganization, - image, - aoiGeometry, - firebaseId, + name, + description, + projectType, + status, + region, + progress, + createdAt, + numberOfContributorUsers, + requestingOrganization, + image, + aoiGeometry, + firebaseId, } = project; // Project type / status labels (ported mapping from the Next page). const projectTypeLabels: Record = { - FIND: t('type-find-title'), - VALIDATE: t('type-validate-title'), - COMPARE: t('type-compare-title'), - COMPLETENESS: t('type-completeness-title'), - VALIDATE_IMAGE: t('type-validate-image-title'), - STREET: t('type-streets-view-title'), - LOCATE: t('type-locate-title'), + FIND: t('type-find-title'), + VALIDATE: t('type-validate-title'), + COMPARE: t('type-compare-title'), + COMPLETENESS: t('type-completeness-title'), + VALIDATE_IMAGE: t('type-validate-image-title'), + STREET: t('type-streets-view-title'), + LOCATE: t('type-locate-title'), }; const statusLabels: Record = { - PUBLISHED: t('active'), - FINISHED: t('finished'), + PUBLISHED: t('active'), + FINISHED: t('finished'), }; const statusClass: Record = { - PUBLISHED: styles.active, - FINISHED: styles.finished, + PUBLISHED: styles.active, + FINISHED: styles.finished, }; const roundedTotalArea = Math.round(aoiGeometry?.totalArea ?? 0); const aoiDownload = resolveAoiDownload(project); const createdAtLabel = createdAt - ? new Date(createdAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }) - : undefined; + ? new Date(createdAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }) + : undefined; const title = String(t('project-tab-head', { projectTitle: name })); // Download-cards config: mirrors the Next page's set exactly (same keys/order). type CardDef = { asset?: UrlInfo; heading: string; description: string }; const cards: CardDef[] = [ - { asset: project.exportAggregatedResults, heading: t('aggregated-results-title'), description: t('aggregated-results-description') }, - { asset: project.exportAggregatedResultsWithGeometry, heading: t('aggregated-results-with-geometry-title'), description: t('aggregated-results-with-geometry-description') }, - { asset: project.exportGroups, heading: t('groups-title'), description: t('groups-description') }, - { asset: project.exportHistory, heading: t('history-title'), description: t('history-description') }, - { asset: project.exportResults, heading: t('results-title'), description: t('results-description') }, - { asset: project.exportTasks, heading: t('tasks-title'), description: t('tasks-description') }, - { asset: project.exportUsers, heading: 'Users', description: 'This dataset contains information on the individual contributions per user.' }, - { asset: project.exportHotTaskingManagerGeometries, heading: t('hot-tasking-manager-geometries-title'), description: t('hot-tasking-manager-geometries-description') }, - { asset: project.exportModerateToHighAgreementYesMaybeGeometries, heading: t('moderate-to-high-agreement-yes-maybe-geometries-title'), description: t('moderate-to-high-agreement-yes-maybe-geometries-description') }, + { asset: project.exportAggregatedResults, heading: t('aggregated-results-title'), description: t('aggregated-results-description') }, + { asset: project.exportAggregatedResultsWithGeometry, heading: t('aggregated-results-with-geometry-title'), description: t('aggregated-results-with-geometry-description') }, + { asset: project.exportGroups, heading: t('groups-title'), description: t('groups-description') }, + { asset: project.exportHistory, heading: t('history-title'), description: t('history-description') }, + { asset: project.exportResults, heading: t('results-title'), description: t('results-description') }, + { asset: project.exportTasks, heading: t('tasks-title'), description: t('tasks-description') }, + { asset: project.exportUsers, heading: 'Users', description: 'This dataset contains information on the individual contributions per user.' }, + { asset: project.exportHotTaskingManagerGeometries, heading: t('hot-tasking-manager-geometries-title'), description: t('hot-tasking-manager-geometries-description') }, + { asset: project.exportModerateToHighAgreementYesMaybeGeometries, heading: t('moderate-to-high-agreement-yes-maybe-geometries-title'), description: t('moderate-to-high-agreement-yes-maybe-geometries-description') }, ]; const downloadSizeText = (fileSize?: number) => { - const { size, unit } = getFileSizeProperties(fileSize ?? 0); - return t('download-size', { - size, - formatParams: { size: { style: 'unit', unit, maximumFractionDigits: 1 } }, - }); + const { size, unit } = getFileSizeProperties(fileSize ?? 0); + return t('download-size', { + size, + formatParams: { size: { style: 'unit', unit, maximumFractionDigits: 1 } }, + }); }; const historyUrl = project.exportHistory?.file?.url ?? undefined; const imageUrl = image?.file?.url ?? undefined; const lastFetched = project.exportHistory?.modifiedAt - ? t('data-last-fetched', { - date: new Date(project.exportHistory.modifiedAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }), + ? t('data-last-fetched', { + date: new Date(project.exportHistory.modifiedAt).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }), }) - : undefined; + : undefined; --- - {/* Hero: name + type/status/meta tags left, cover image right */} -
    -
    -
    -
    -

    - {name} -

    -
    -
    -
    - {projectType && ( - - - {projectTypeLabels[projectType] ?? projectType} - - )} - {status && ( - - - {statusLabels[status] ?? status} - - )} -
    -
    - {region && ( - - {region} - - )} - {requestingOrganization?.name && ( - - {requestingOrganization.name} - - )} - {createdAtLabel && ( - - - {createdAtLabel} - + {/* Hero: name + type/status/meta tags left, cover image right */} +
    +
    +
    +
    +

    + {name} +

    +
    +
    +
    + {projectType && ( + + + {projectTypeLabels[projectType] ?? projectType} + + )} + {status && ( + + + {statusLabels[status] ?? status} + + )} +
    +
    + {region && ( + + {region} + + )} + {requestingOrganization?.name && ( + + {requestingOrganization.name} + + )} + {createdAtLabel && ( + + + {createdAtLabel} + + )} +
    +
    +
    +
    + {imageUrl && ( +
    +
    + +
    +
    )} -
    -
    - {imageUrl && ( -
    -
    - -
    -
    - )} -
    +
    -
    -
    - {/* Overview: description + circle key figures */} -
    -
    -
    -
    -

    - {t('overview-section-title')} -

    -
    - {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} -
    -
    -
    -
    -
    -
    - {roundedTotalArea} - -
    -
    km2
    -
    -
    -
    - {numberOfContributorUsers ?? 0} - + {/* Overview: description + circle key figures */} +
    +
    +
    +
    +

    + {t('overview-section-title')} +

    +
    + {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} +
    +
    +
    +
    +
    +
    + {roundedTotalArea} + +
    +
    km2
    +
    +
    +
    + {numberOfContributorUsers ?? 0} + +
    +
    {t('project-contributors-text')}
    +
    +
    -
    {t('project-contributors-text')}
    -
    -
    -
    -
    +
    - {/* Stats: AOI map + progress bar + history chart */} -
    -
    -
    - {aoiDownload && ( -
    - -
    - )} -
    -
    -
    -
    {t('project-progress-label')}
    -
    {t('project-card-progress-text', { progress: progress * 100 })}
    -
    -
    -
    + {/* Stats: AOI map + progress bar + history chart */} +
    +
    +
    + {aoiDownload && ( +
    + +
    + )} +
    +
    +
    +
    {t('project-progress-label')}
    +
    {t('project-card-progress-text', { progress: progress * 100 })}
    +
    +
    +
    +
    +
    +
    + +
    +
    -
    -
    - -
    + {lastFetched && ( +
    {lastFetched}
    + )}
    -
    - {lastFetched && ( -
    {lastFetched}
    - )} -
    -
    +
    - {/* Downloads */} -
    -
    -
    -

    - {t('data-section-heading')} -

    -
    - {t('data-section-description')} -
    -
    -
    - {cards.map((card) => - card.asset ? ( -
    -
    -
    -
    -
    - {card.heading} -
    -
    -
    {card.description}
    -
    -
    -
    - {card.asset.mimetype} -
    {downloadSizeText(card.asset.fileSize)}
    -
    - {card.asset.file?.url && ( - - {t('download')} - - )} + {/* Downloads */} +
    +
    +
    +

    + {t('data-section-heading')} +

    +
    + {t('data-section-description')}
    -
    - ) : null, - )} - {aoiDownload && ( -
    -
    -
    -
    -
    - {t('area-of-interest-title')} -
    -
    -
    {t('area-of-interest-description')}
    -
    -
    -
    - {aoiDownload.mimetype} -
    {downloadSizeText(aoiDownload.fileSize)}
    -
    - - {t('download')} - -
    +
    + {cards.map((card) => + card.asset ? ( +
    +
    +
    +
    +
    + {card.heading} +
    +
    +
    {card.description}
    +
    +
    +
    + {card.asset.mimetype} +
    {downloadSizeText(card.asset.fileSize)}
    +
    + {card.asset.file?.url && ( + + {t('download')} + + )} +
    +
    +
    + ) : null, + )} + {aoiDownload && ( +
    +
    +
    +
    +
    + {t('area-of-interest-title')} +
    +
    +
    {t('area-of-interest-description')}
    +
    +
    +
    + {aoiDownload.mimetype} +
    {downloadSizeText(aoiDownload.fileSize)}
    +
    + + {t('download')} + +
    +
    +
    + )}
    -
    - )} -
    -
    -
    +
    +
    - {/* License */} -
    -
    -
    -

    - {t('license-section-heading')} -

    - {/* Next passed the license body as Section's `description` node, so the + {/* License */} +
    +
    +
    +

    + {t('license-section-heading')} +

    + {/* Next passed the license body as Section's `description` node, so the licenseDescription div nests inside the section description div. */} -
    -
    -

    {t('license-section-description-1')}

    -

    {t('license-section-description-2')}

    -
    +
    +
    +

    {t('license-section-description-1')}

    +

    {t('license-section-description-2')}

    +
    +
    +
    -
    -
    -
    +
    diff --git a/src/pages/data-explorer.json.ts b/src/pages/data-explorer.json.ts index 38a814e1..2d610ac1 100644 --- a/src/pages/data-explorer.json.ts +++ b/src/pages/data-explorer.json.ts @@ -18,25 +18,25 @@ import { getDataExplorerPayload } from 'lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; export const GET: APIRoute = async () => { - const payload = getDataExplorerPayload(); + const payload = getDataExplorerPayload(); - const uniqueUrls = [...new Set( - payload.projects.map((p) => p.image?.file?.url).filter((u): u is string => Boolean(u)), - )]; - const entries = await Promise.all( - uniqueUrls.map(async (url) => { - const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); - return [url, src] as const; - }), - ); - const imageMap = Object.fromEntries(entries); + const uniqueUrls = [...new Set( + payload.projects.map((p) => p.image?.file?.url).filter((u): u is string => Boolean(u)), + )]; + const entries = await Promise.all( + uniqueUrls.map(async (url) => { + const { src } = await resolveRemoteImage(url, { width: COVER_WIDTH }); + return [url, src] as const; + }), + ); + const imageMap = Object.fromEntries(entries); - return new Response( - JSON.stringify({ - miniProjects: payload.projects, - organizations: payload.organizations, - imageMap, - }), - { headers: { 'Content-Type': 'application/json' } }, - ); + return new Response( + JSON.stringify({ + miniProjects: payload.projects, + organizations: payload.organizations, + imageMap, + }), + { headers: { 'Content-Type': 'application/json' } }, + ); }; diff --git a/tests/e2e/islands.spec.ts b/tests/e2e/islands.spec.ts index a925cae0..149e17ff 100644 --- a/tests/e2e/islands.spec.ts +++ b/tests/e2e/islands.spec.ts @@ -10,61 +10,61 @@ const project = data.publicProjects.results[0]; const projectPath = `/en/projects/${project.firebaseId}/`; test('project page: map island mounts, chart island hydrates', async ({ page }) => { - const pageErrors: Error[] = []; - page.on('pageerror', (e) => pageErrors.push(e)); + const pageErrors: Error[] = []; + page.on('pageerror', (e) => pageErrors.push(e)); - const hydrationScript = page.waitForResponse( - (r) => r.url().includes('/_astro/dedup-') && r.ok(), - ); - await page.goto(projectPath); - await hydrationScript; + const hydrationScript = page.waitForResponse( + (r) => r.url().includes('/_astro/dedup-') && r.ok(), + ); + await page.goto(projectPath); + await hydrationScript; - // client:only island — the leaflet container exists ONLY after hydration - await expect(page.locator('.leaflet-container')).toBeVisible({ timeout: 15_000 }); + // client:only island — the leaflet container exists ONLY after hydration + await expect(page.locator('.leaflet-container')).toBeVisible({ timeout: 15_000 }); - // client:visible island — scroll it in, then it either draws the SVG chart - // or renders its empty-state text (its CSV fetch hits the live backend, so - // both outcomes prove React mounted and ran) - const chart = page.locator('astro-island[component-url*="ProjectHistoryChart"]'); - await chart.scrollIntoViewIfNeeded(); - await expect( - chart.locator('svg').or(chart.getByText('Not enough data points')), - ).toBeVisible({ timeout: 15_000 }); + // client:visible island — scroll it in, then it either draws the SVG chart + // or renders its empty-state text (its CSV fetch hits the live backend, so + // both outcomes prove React mounted and ran) + const chart = page.locator('astro-island[component-url*="ProjectHistoryChart"]'); + await chart.scrollIntoViewIfNeeded(); + await expect( + chart.locator('svg').or(chart.getByText('Not enough data points')), + ).toBeVisible({ timeout: 15_000 }); - expect(pageErrors, pageErrors.map(String).join('\n')).toHaveLength(0); + expect(pageErrors, pageErrors.map(String).join('\n')).toHaveLength(0); }); test('data explorer: SSR cards visible, search filters the list', async ({ page }) => { - await page.goto('/en/data/'); + await page.goto('/en/data/'); - // SSR'd initial cards are in the HTML before any JS - const cards = page.locator('article.de-card'); - await expect(cards.first()).toBeVisible(); + // SSR'd initial cards are in the HTML before any JS + const cards = page.locator('article.de-card'); + await expect(cards.first()).toBeVisible(); - // hydration + dataset fetch: search narrows the list to a known project - const search = page.getByPlaceholder(/search/i).first(); - await expect(search).toBeEnabled({ timeout: 15_000 }); - await search.fill(project.name.slice(0, 30)); - await expect(page.locator('article.de-card', { hasText: project.name.slice(0, 30) }).first()) - .toBeVisible({ timeout: 10_000 }); + // hydration + dataset fetch: search narrows the list to a known project + const search = page.getByPlaceholder(/search/i).first(); + await expect(search).toBeEnabled({ timeout: 15_000 }); + await search.fill(project.name.slice(0, 30)); + await expect(page.locator('article.de-card', { hasText: project.name.slice(0, 30) }).first()) + .toBeVisible({ timeout: 10_000 }); }); test('blog post: optimized images load', async ({ page }) => { - await page.goto('/en/blogs/'); - const firstPost = page.locator('a[href*="/blogs/"][href*="20"]').first(); - await firstPost.click(); - await page.waitForLoadState('load'); + await page.goto('/en/blogs/'); + const firstPost = page.locator('a[href*="/blogs/"][href*="20"]').first(); + await firstPost.click(); + await page.waitForLoadState('load'); - const imgs = page.locator('main img, article img'); - const count = await imgs.count(); - expect(count).toBeGreaterThan(0); - // every rendered image actually decoded (naturalWidth > 0 = the /_astro - // asset resolved — guards broken fingerprinted paths) - for (let i = 0; i < count; i++) { + const imgs = page.locator('main img, article img'); + const count = await imgs.count(); + expect(count).toBeGreaterThan(0); + // every rendered image actually decoded (naturalWidth > 0 = the /_astro + // asset resolved — guards broken fingerprinted paths) + for (let i = 0; i < count; i++) { // loading=lazy images never decode unless scrolled into view - await imgs.nth(i).scrollIntoViewIfNeeded(); - await expect - .poll(async () => imgs.nth(i).evaluate((el: HTMLImageElement) => el.naturalWidth)) - .toBeGreaterThan(0); - } + await imgs.nth(i).scrollIntoViewIfNeeded(); + await expect + .poll(async () => imgs.nth(i).evaluate((el: HTMLImageElement) => el.naturalWidth)) + .toBeGreaterThan(0); + } }); From 0208fdcf7e5282d8c8bdeda4755bffb9296ddc2a Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:10:05 +0545 Subject: [PATCH 35/52] docs: rebuild README on main's skeleton Minimal diff vs main: command/framework swaps, current env vars, updated translation + blog-image paths, and a short Build Internals appendix. Replaces the earlier full rewrite. --- README.md | 276 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 205 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 65d08d93..154d1336 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,217 @@ -# MapSwipe website +# Mapswipe Website -Static, SEO-driven, 6-locale site (~14,700 pages: 2,400+ projects × en/ne/hu/ -de/cs/pt + blogs + static pages), deployed to GitHub Pages. Astro 5 with React -islands — most pages ship zero JS. +Astro application for [Mapswipe community website](https://mapswipe.org). -## Setup +## Development -```sh -# Node 22+ (packages/* and scripts/fetchData.ts are .ts consumed via Node's type stripping) -pnpm install # single node_modules; packages/ are plain dirs imported by path +Get all the submodules -# Fetch site data (writes fullData/staticData.json — gitignored): -MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ \ -MAPSWIPE_REFERER_ENDPOINT=https://mapswipe.org/ \ -APP_ENVIRONMENT=PROD \ -pnpm fetch-data +```bash +git submodule update --init --recursive ``` -`fetch-data` is **incremental**: it scans `{id, modifiedAt, lastContributionDate}` -and refetches only changed projects, merging with the previous -`staticData.json` (which IS the cache — persist it in CI). `FORCE_FULL_FETCH=1` -forces a full refetch (~50 s; run weekly as a safety net). +Before you start, create `.env.local` file: -## Commands +```bash +touch .env.local +``` -| Command | What | -| --- | --- | -| `pnpm dev` | dev server | -| `pnpm build` | **full** static build → `dist/` (always renders every page) | -| `pnpm build:incremental` | render-skip build: only pages whose data changed, merged over the previous `dist/` (~5–6 s vs ~33 s warm). See the [package README](packages/astro-incremental-static/README.md) — correctness contract applies | -| `pnpm preview` | serve `dist/` locally | -| `pnpm lint` / `pnpm css-lint` | eslint (ts/tsx/astro) / stylelint | -| `pnpm typecheck` | `astro check` (0 errors expected) | -| `pnpm verify-dist` | post-build invariant checks (run after a full build) | -| `pnpm test:e2e` | Playwright island smoke tests against `astro preview` (needs a built `dist/`) | - -A full warm build ≈ 33 s / 1.6 GB RAM; cold (empty image cache) ≈ 90–105 s -because 2,375 remote project covers are fetched + optimized. `dist/` ≈ 430 MB -(GitHub Pages limit is 1 GB). - -## Caches & state (all gitignored; persist the first two in CI) - -| Path | What | Cold cost if lost | -| --- | --- | --- | -| `.image-cache/` | optimized remote covers + negative cache (`.miss`/`.slow` markers) | ~70 s refetch/re-encode | -| `fullData/staticData.json` | the site data AND the incremental-fetch cache | ~50 s full refetch | -| `.astro-incremental/` | manifest for `build:incremental` (`ASTRO_INCREMENTAL=1` runs only) | one full render | -| `node_modules/.astro/`, `.astro/` | Astro/Vite caches | a few seconds | +Set these environment variables: + +```env +APP_ENVIRONMENT=PROD # Use DEV if you are running your own server instance +MAPSWIPE_API_ENDPOINT=https://backend.mapswipe.org/ +MAPSWIPE_REFERER_ENDPOINT=https://mapswipe.org/ +``` + +### Running + +```bash +# Install dependencies +pnpm install + +# Generate typescript types from graphql schema +pnpm generate:type + +# Fetch latest data from MapSwipe database for projects +pnpm fetch-data:local + +# Run +pnpm dev +``` + +> [!NOTE] +> Requires node >= 22.18 (TypeScript files run under node's type stripping). + +Translation keys live directly in [locales/en](locales/en); add new keys +there (and their uses via `t('key')`) — no generation step. + +Before creating a pull request, all lint and type issues must be fixed. +To check for issues: + +```bash +pnpm lint +pnpm css-lint +pnpm typecheck +pnpm check-unused +pnpm test:e2e # needs a built dist/ (see Building) +``` + +### Building + +```bash +pnpm build # full static build -> dist/ +pnpm verify-dist # post-build invariant checks +``` + +For data-only refreshes there is also `pnpm build:incremental`, which +re-renders just the pages whose data changed and merges the rest from the +previous `dist/` (see packages/astro-incremental-static). -## Env knobs +### Staging Deployment -| Var | Effect | +The **staging environment** is used to test new changes before they are deployed to production. +You can view the live staging site here: +🔗 [https://website-stage.mapswipe.org/](https://website-stage.mapswipe.org/) + +### Steps to Deploy to Staging + +1. **Rebase your branch onto the staging branch:** + +```bash +git checkout deploy-stage +git rebase +git push +``` + +This rebases your feature branch onto the `stage` branch and pushes the updated staging branch. + +2. **Trigger the staging deployment:** + +The staging deployment is managed through this repository: +🔗 [https://github.com/mapswipe/stage-website/](https://github.com/mapswipe/stage-website/) + +You can manually trigger the deployment workflow here: +🔗 [Staging Workflow – stage.yml](https://github.com/mapswipe/stage-website/actions/workflows/stage.yml) + +> **Note:** The staging environment also auto-deploys every day at **01:00 UTC**. + +### Production Deployment + +Deployments will be triggered in 2 ways: + +1. Anything pushed to `deploy-prod` branch will trigger immediate deployment +to configured github io page. +2. Every day at UTC 00:01, deployment will be triggered with +latest data from MapSwipe database. + +## Edit Website Texts + +### Edit Source Strings +- Pull the latest changes from the `main` branch +- Checkout to a new branch +- Navigate to the source string files [here](https://github.com/mapswipe/website/tree/main/locales/en) +- Open appropriate file(s) and edit string(s) as per requirement +- Push the changes to the local branch +- Create a pull request to the main branch + +### Translate Strings +#### As Translator +- Go to Transifex project +- Click on the language you are looking to translate the source into +- Open the file to translate the string +- Translate individual string and save changes + +#### As Reviewer +- Open individual strings, make sure they are correct, and click the 'Review' button +- Continue translating and reviewing the strings until all the strings are translated and approved +- **_NOTE: Reviewers must have appropriate permission_** + +### Update The Website +- After all the strings are 100% translated in Transifex, a pull request will be sent to the main branch +- Each resource (file) will be committed in the same PR (if not merged) as soon as it is 100% translated +- Merging the pull request will trigger a latest build and the same will be deployed in production +- **IF LANGUAGE IS NOT PRESENT IN THE WEBSITE** +- Add the supported language as per the [supported languages](https://github.com/mapswipe/website#supported-languages) guide below + +## Supported Languages + +Supported languages are defined in two places that must agree: +[astro.config.mjs](astro.config.mjs) (`i18n.locales` — drives routing) and +[src/i18n/index.ts](src/i18n/index.ts) (`LOCALES` — drives translation +loading). To add a language, add its +[ISO_639-1](https://en.wikipedia.org/wiki/ISO_639-1) code to both, add the +language name to the switcher in +[src/components/Navbar.astro](src/components/Navbar.astro), and add its +translation files under `locales//`. + +## Adding 'News & Updates' or Blogs + +MapSwipe website supports 'News & Updates' or blogs in the form of markdown. +To add a new post, you can add a markdown file inside +[blogs](https://github.com/mapswipe/community-website/tree/main/blogs) folder. + +The name of the file will determine the url for that post. +For example: `this-is-a-blog.md` file will be routed to +`https://mapswipe.org/en/blogs/this-is-a-blog`. + +The markdown should follow the following template: + +### Post Template + +```md +--- +title: This is a blog +publishedDate: 2022-08-17 +author: John Doe +description: Lorem Ipsum +coverImage: ./images/example-image.png +featured: true +--- + +# Markdown Content + +Lorem Ipsum is simply dummy text of the printing and typesetting industry. +Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, +when an unknown printer took a galley of type and scrambled it to make a +type specimen book. It has survived not only five centuries, but also the leap into +electronic typesetting, remaining essentially unchanged. +It was popularised in the 1960s with the release of Letraset sheets containing +Lorem Ipsum passages, and more recently with desktop publishing software like +Aldus PageMaker including versions of Lorem Ipsum. +``` + +### Metadata + +- We are using YAML frontmatter to set markdown metadata in posts +- The metadata inside '---' must be filled and is required +- The metadata renders in the card view of the Home or the posts listing page + +#### Rules + +- `publishedDate` should be in `YYYY-MM-DD` format. Any other format is not supported. +- Post images (`coverImage` and in-body) should be added to the +[blogs/images](https://github.com/mapswipe/community-website/tree/main/blogs/images) +folder and referenced relatively (`./images/`), so they are optimized +at build time. +- The value for `featured` determines whether to highlight the posts on +News & Updates section of home page + +## Build Internals + +| Cache / state (gitignored) | What | Cold cost if lost | +| --- | --- | --- | +| `.image-cache/` | optimized remote project covers + negative cache | ~70 s refetch/re-encode | +| `fullData/staticData.json` | site data AND the incremental-fetch cache | ~50 s full refetch | +| `.astro-incremental/` | manifest for `pnpm build:incremental` | one full render | + +| Env knob | Effect | | --- | --- | -| `SLICE_LIMIT=N` | build only N projects — fast smoke builds / PR CI | -| `BAD_IMAGE_TEST=1` | inject a broken cover URL (tests the error-image path) | -| `MAPSWIPE_DATA_FILE=/path` | point the build at an alternate data file (perturbation tests) | -| `PREFETCH_CONCURRENCY=N` | image prefetch pool size (default 24) | +| `SLICE_LIMIT=N` | build only N projects (fast smoke builds) | | `FORCE_FULL_FETCH=1` | fetch-data: ignore the incremental cache | -| `ASTRO_INCREMENTAL=1` | internal — set by the incremental runner; never set manually | - -## Structure - -- `src/pages/[locale]/…` — routes (exact URL parity with the old Next site) -- `src/components/` — `.astro` (static) + `.tsx` (React islands: data explorer, - project map, history chart) -- `src/lib/` — app/domain logic (data slimming, chart math) + thin package config -- `src/i18n/` — i18next over the repo-root `locales/*.json` (verbatim; kept out - of `public/` so translations never ship in `dist/`) -- `packages/` — reusable build infrastructure ([index](packages/README.md)): - hydration-script dedup, fail-soft remote images (error-image policy), - incremental static builds -- Blogs: markdown in repo-root `blogs/` (Content Collections; images co-located - in `blogs/images/`, optimized natively by `astro:assets`) - -## Gotchas - -- One malformed remote cover **cannot** break the build: it renders - `/_img/image-error.svg` and warns (`[remote-images] …`). Policy per failure - class is configured in `src/lib/remoteImages.ts`. -- Translations are build-time only — nothing under `/locales/` ships in `dist/`. -- The sitemap is authoritative from `@astrojs/sitemap` on full builds; the - incremental runner regenerates it over the merged tree. +| `MAPSWIPE_DATA_FILE=/path` | build against an alternate data file | +| `PREFETCH_CONCURRENCY=N` | image prefetch pool size (default 24) | +| `BAD_IMAGE_TEST=1` | inject a broken cover URL (tests the error-image path) | + +A failed remote cover can never break the build: it renders +`/_img/image-error.svg` and warns (`[remote-images] ...`). From d1940fece91d8b2f8f67dbccd6a8f212bb10bd6a Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:18:51 +0545 Subject: [PATCH 36/52] perf(css): externalize all stylesheets Astro's inlineStylesheets:'auto' duplicated ~10 KB of identical CSS into every page (~150 MB across 14.6k pages). External bundles are fetched once and cached; dist 643 -> 487 MB. --- astro.config.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/astro.config.mjs b/astro.config.mjs index 57d726a1..3e51d4c3 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -24,7 +24,13 @@ export default defineConfig({ }, output: 'static', trailingSlash: 'always', - build: { format: 'directory' }, + build: { + format: 'directory', + // 'auto' inlines small stylesheets into EVERY page — ~10 KB of + // identical CSS duplicated across 14.6k pages (~150 MB of dist). + // External files are fetched once and cached. + inlineStylesheets: 'never', + }, // Root/locale-less redirect stubs (parity with the Next app's src/pages/*.tsx // Redirect stubs). Next did client-side language detection; for a static // export we redirect the locale-less path to the default-locale (en) variant. From 2a0838e7593a0d74d57f8b3e4ddbdaead5e1b590 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 08:25:51 +0545 Subject: [PATCH 37/52] perf(css): 4-char collision-checked module class names Content-hashed (stable across builds for the incremental merge), first char alphabetic, build fails on collision instead of silently merging styles. ~680 B/page. --- astro.config.mjs | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 3e51d4c3..a9b38f34 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,3 +1,5 @@ +import { createHash } from 'node:crypto'; + import { defineConfig } from 'astro/config'; import react from '@astrojs/react'; import sitemap from '@astrojs/sitemap'; @@ -10,15 +12,42 @@ import hydrationDedup from './packages/astro-hydration-dedup/src/index.ts'; const SITE = 'https://mapswipe.org'; +const CLASS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +const CLASS_ALNUM = `${CLASS_ALPHA}0123456789-_`; +const assignedClassNames = new Map(); +function shortClassName(name, filename) { + const rel = filename.includes('website-astro') || filename.startsWith(process.cwd()) + ? filename.slice(process.cwd().length) + : filename; + const digest = createHash('sha1').update(`${rel}:${name}`).digest(); + let out = CLASS_ALPHA[digest[0] % CLASS_ALPHA.length]; + for (let i = 1; i < 4; i += 1) { + out += CLASS_ALNUM[digest[i] % CLASS_ALNUM.length]; + } + const source = `${rel}:${name}`; + const existing = assignedClassNames.get(out); + if (existing && existing !== source) { + throw new Error(`css module class-name collision: '${out}' (${existing} vs ${source}) — widen the hash`); + } + assignedClassNames.set(out, source); + return out; +} + export default defineConfig({ site: SITE, vite: { css: { modules: { - // dev keeps readable names; prod ships short hashes — class - // attributes were ~22% of every page with the default pattern - generateScopedName: - process.env.NODE_ENV === 'production' ? '[hash:base64:6]' : '[local]_[hash:base64:4]', + // dev keeps readable names; prod ships 4-char names (class + // attributes were ~22% of every page with the default + // pattern). Content-hashed so names are stable across builds + // (the incremental merge relies on that); first char forced + // alphabetic (leading digits get CSS-escaped, which grows + // output); collisions fail the build instead of silently + // merging two components' styles. + generateScopedName: process.env.NODE_ENV === 'production' + ? shortClassName + : '[local]_[hash:base64:4]', }, }, }, From 9b80318cfc34327c79364447833c659af2065b5c Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 12:29:18 +0545 Subject: [PATCH 38/52] refactor: restore reusable presentational components Hero/Section/Card/CenteredCard/Heading/Tag/KeyFigure/ListItem/Button as .astro components (slots, zero JS); pages no longer hand-roll their markup. Output verified byte-equivalent across all 14,680 pages modulo CSS chunk order, attr order, and island prelude placement. --- src/components/Button.astro | 29 ++ src/components/Card.astro | 55 +++ src/components/CenteredCard.astro | 16 + src/components/Footer.astro | 11 +- src/components/Heading.astro | 26 ++ src/components/Hero.astro | 42 +++ src/components/KeyFigure.astro | 28 ++ src/components/ListItem.astro | 18 + src/components/Navbar.astro | 16 +- src/components/Section.astro | 47 +++ src/components/Tag.astro | 35 ++ src/pages/404.astro | 12 +- src/pages/[locale]/blogs/[slug]/index.astro | 87 +++-- src/pages/[locale]/blogs/index.astro | 90 ++--- src/pages/[locale]/data/index.astro | 208 ++++-------- src/pages/[locale]/get-involved/index.astro | 243 +++++-------- src/pages/[locale]/index.astro | 359 ++++++++------------ src/pages/[locale]/privacy/index.astro | 35 +- src/pages/[locale]/projects/[id].astro | 347 ++++++++----------- 19 files changed, 836 insertions(+), 868 deletions(-) create mode 100644 src/components/Button.astro create mode 100644 src/components/Card.astro create mode 100644 src/components/CenteredCard.astro create mode 100644 src/components/Heading.astro create mode 100644 src/components/Hero.astro create mode 100644 src/components/KeyFigure.astro create mode 100644 src/components/ListItem.astro create mode 100644 src/components/Section.astro create mode 100644 src/components/Tag.astro diff --git a/src/components/Button.astro b/src/components/Button.astro new file mode 100644 index 00000000..fee8b5f7 --- /dev/null +++ b/src/components/Button.astro @@ -0,0 +1,29 @@ +--- +// Button (port of the Next components/Button). Extra attributes (aria-*, id, +// event hooks added later, …) pass straight through to the element. +import type { HTMLAttributes } from 'astro/types'; +import styles from 'components/Button.module.css'; + +type Variant = 'transparent' | 'primary' | 'border' | 'icon'; + +interface Props extends Omit, 'type'> { + variant?: Variant; + class?: string; +} + +const { + variant = 'primary', + class: className, + ...rest +} = Astro.props; + +// NOTE: main's map styles 'primary' and leaves 'transparent' bare, but the +// primary class is empty in the module; the ported pages only use 'border'. +const variantMap: Record = { + transparent: undefined, + primary: styles.primary, + border: styles.border, + icon: styles.icon, +}; +--- + diff --git a/src/components/Card.astro b/src/components/Card.astro new file mode 100644 index 00000000..07841f69 --- /dev/null +++ b/src/components/Card.astro @@ -0,0 +1,55 @@ +--- +// Card (port of the Next components/Card): optional cover (`coverImageUrl` +// prop for the plain-image case, `cover` slot for custom media such as +// astro:assets or the before/after pair), header with optional +// icons + heading + actions, children container. `as` picks the root element +// (article in the semantic card lists, div elsewhere). +import styles from 'components/Card.module.css'; +import imageStyles from 'components/ImageWrapper.module.css'; +import Heading from 'components/Heading.astro'; + +interface Props { + as?: 'div' | 'article'; + heading?: string; + // string or a class:list-style array (falsy entries dropped) + class?: string | (string | false | null | undefined)[]; + coverImageUrl?: string; + coverWrapperClass?: string; + childrenContainerClass?: string; + borderless?: boolean; + coverImageOnSide?: boolean; +} + +const { + as: Element = 'div', + heading, + class: className, + coverImageUrl, + coverWrapperClass, + childrenContainerClass, + borderless = false, + coverImageOnSide = false, +} = Astro.props; + +const icons = Astro.slots.has('icons') ? await Astro.slots.render('icons') : ''; +const actions = Astro.slots.has('actions') ? await Astro.slots.render('actions') : ''; +const cover = Astro.slots.has('cover') ? await Astro.slots.render('cover') : ''; +--- + + {cover.trim() && } + {coverImageUrl && ( +
    + card-cover-image +
    + )} +
    +
    +
    + {icons.trim() &&
    } + {heading && {heading}} +
    + {actions.trim() &&
    } +
    +
    +
    + diff --git a/src/components/CenteredCard.astro b/src/components/CenteredCard.astro new file mode 100644 index 00000000..7a7658ce --- /dev/null +++ b/src/components/CenteredCard.astro @@ -0,0 +1,16 @@ +--- +// Centered call-to-action card (port of the Next components/CenteredCard). +import styles from 'components/CenteredCard.module.css'; + +interface Props { + heading?: string; + class?: string; +} + +const { heading, class: className } = Astro.props; +--- +
    +
    {heading}
    +
    +
    +
    diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 60979115..e117115b 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,10 +1,10 @@ --- import Icon from './Icon.astro'; +import Heading from './Heading.astro'; import { getT } from '../i18n'; // CSS Modules recovered from the Next app (components/Footer + -// components/Heading + components/Link). +// components/Link). import styles from './Footer.module.css'; -import headingStyles from './Heading.module.css'; import linkStyles from './Link.module.css'; // Ported from the Next app's components/Footer. Static; copyright year computed @@ -18,7 +18,6 @@ const { locale, class: className } = Astro.props; const t = await getT(locale, 'common'); const currentYear = new Date().getFullYear(); -const headingClass = [headingStyles.heading, headingStyles.small, styles.heading]; type IconName = 'logo-facebook' | 'logo-mastodon' | 'logo-instagram' | 'logo-github' | 'newspaper' | 'mail'; const socialLinks: { href: string; title: string; icon: IconName; rel?: string }[] = [ { href: 'https://www.facebook.com/TheMissingMaps', title: t('facebook'), icon: 'logo-facebook' }, @@ -32,11 +31,11 @@ const socialLinks: { href: string; title: string; icon: IconName; rel?: string }
    -
    {t('footer-about-us-title')}
    + {t('footer-about-us-title')}
    {t('footer-about-us-description')}
    -
    {t('footer-quick-links')}
    + {t('footer-quick-links')}
    {t('home-link')} {t('get-involved-link')} @@ -46,7 +45,7 @@ const socialLinks: { href: string; title: string; icon: IconName; rel?: string }
    -
    {t('footer-follow-us-title')}
    + {t('footer-follow-us-title')}
    {socialLinks.map((link) => ( = { + extraSmall: 'h6', + small: 'h5', + medium: 'h4', + large: 'h3', + extraLarge: 'h2', + superLarge: 'h1', +}; +const Element = elementMap[size]; +--- + diff --git a/src/components/Hero.astro b/src/components/Hero.astro new file mode 100644 index 00000000..7ba845c7 --- /dev/null +++ b/src/components/Hero.astro @@ -0,0 +1,42 @@ +--- +// Hero banner (port of the Next components/Hero): title + optional +// description/actions on the left, optional right-side media, angled +// background. Slots are rendered eagerly so conditionally-absent slot content +// drops its wrapper div too (parity with the Next component, which only +// emitted the wrappers when the prop was set). +import styles from 'components/Hero.module.css'; +import Heading from 'components/Heading.astro'; + +interface Props { + title: string; + class?: string; + mainContentClass?: string; + leftClass?: string; + withoutRightContent?: boolean; +} + +const { + title, + class: className, + mainContentClass, + leftClass, + withoutRightContent = false, +} = Astro.props; + +const description = Astro.slots.has('description') ? await Astro.slots.render('description') : ''; +const actions = Astro.slots.has('actions') ? await Astro.slots.render('actions') : ''; +const right = Astro.slots.has('right') ? await Astro.slots.render('right') : ''; +--- +
    +
    +
    +
    + {title} + {description.trim() &&
    } + {actions.trim() &&
    } +
    + {right.trim() &&
    } +
    +
    +
    +
    diff --git a/src/components/KeyFigure.astro b/src/components/KeyFigure.astro new file mode 100644 index 00000000..14e5c7a7 --- /dev/null +++ b/src/components/KeyFigure.astro @@ -0,0 +1,28 @@ +--- +// Key figure (port of the Next components/KeyFigure): big value + plus icon +// over a label (default slot). box (default) or circle variant. +import styles from 'components/KeyFigure.module.css'; +import Icon from 'components/Icon.astro'; + +interface Props { + value: string | number; + variant?: 'box' | 'circle'; + circleColor?: 'accent' | 'complement'; + // string or a class:list-style array (falsy entries dropped) + class?: string | (string | false | null | undefined)[]; +} + +const { + value, + variant = 'box', + circleColor = 'accent', + class: className, +} = Astro.props; +--- +
    +
    + {value} + +
    +
    +
    diff --git a/src/components/ListItem.astro b/src/components/ListItem.astro new file mode 100644 index 00000000..b5fb4019 --- /dev/null +++ b/src/components/ListItem.astro @@ -0,0 +1,18 @@ +--- +// List item with a leading icon (port of the Next components/ListItem); +// the icon slot defaults to the checkmark, like the Next component. +import styles from 'components/ListItem.module.css'; +import Icon from 'components/Icon.astro'; + +interface Props { + class?: string; +} + +const { class: className } = Astro.props; +--- +
    +
    + +
    +
    +
    diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 74669aa3..e23e2fe9 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -1,12 +1,12 @@ --- import Icon from './Icon.astro'; +import Button from './Button.astro'; import { getT, LOCALES } from '../i18n'; // CSS Modules recovered from the Next app (components/Navbar + -// components/Button + components/Link). The language menu is a pure CSS -// hover/focus-within dropdown (Next used a JS DropdownMenu + Popup portal and a -// mobile hamburger toggle; see the adaptation notes in Navbar.module.css). +// components/Link). The language menu is a pure CSS hover/focus-within +// dropdown (Next used a JS DropdownMenu + Popup portal and a mobile hamburger +// toggle; see the adaptation notes in Navbar.module.css). import styles from './Navbar.module.css'; -import buttonStyles from './Button.module.css'; import linkStyles from './Link.module.css'; // Ported from the Next app's components/Navbar. Static, zero-JS. `activePath` @@ -59,16 +59,12 @@ const localelessPath = activePath ? `${activePath}/` : '';
    diff --git a/src/components/Tag.astro b/src/components/Tag.astro new file mode 100644 index 00000000..69ca78b1 --- /dev/null +++ b/src/components/Tag.astro @@ -0,0 +1,35 @@ +--- +// Tag pill (port of the Next components/Tag). No default spacing: the pages +// this replaces only set a spacing class where the Next pages passed one. +import styles from 'components/Tag.module.css'; + +type Variant = 'primary' | 'transparent' | 'border' | 'icon'; +type Spacing = 'small' | 'medium' | 'large'; + +interface Props { + variant?: Variant; + spacing?: Spacing; + class?: string; + title?: string; +} + +const { + variant = 'primary', + spacing, + class: className, + title, +} = Astro.props; + +const variantMap: Record = { + primary: undefined, + transparent: styles.transparent, + border: styles.border, + icon: styles.icon, +}; +const spacingMap: Record = { + small: styles.small, + medium: styles.medium, + large: styles.large, +}; +--- + diff --git a/src/pages/404.astro b/src/pages/404.astro index a7bb780d..9c82eef9 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,11 +1,11 @@ --- import BaseLayout from 'layouts/BaseLayout.astro'; +import Heading from 'components/Heading.astro'; import { DEFAULT_LOCALE } from '../i18n'; // CSS Modules recovered from the Next app: the page module (pages/404/ -// styles.module.css, co-located here as 404.module.css) + Heading/Link/ -// ImageWrapper component modules. +// styles.module.css, co-located here as 404.module.css) + Link/ImageWrapper +// component modules. import styles from './404.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; @@ -23,10 +23,10 @@ import imageStyles from 'components/ImageWrapper.module.css';
    diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index 76e0d549..1ea4f4c4 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -4,16 +4,14 @@ import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from 'layouts/BlogLayout.astro'; import Icon from 'components/Icon.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import Tag from 'components/Tag.astro'; import { getT, LOCALES } from '../../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module + the component -// modules whose markup this page reproduces (Hero, Section, Tag, Heading, -// HtmlOutput, ImageWrapper). +// Page module + the ImageWrapper/HtmlOutput CSS Modules recovered from the +// Next app; the chrome comes from the shared Hero/Section/Tag components. import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; -import tagStyles from 'components/Tag.module.css'; -import headingStyles from 'components/Heading.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; import htmlOutputStyles from 'components/HtmlOutput.module.css'; @@ -77,48 +75,39 @@ const tabTitle = String(t('blog-tab-head', { blogTitle })); mainClass={styles.blog} > {/* Hero: title + date/author tags left, cover image right */} -
    -
    -
    -
    -

    - {blogTitle} -

    -
    -
    - {publishedDate && ( - - - {dateFmt.format(publishedDate)} - - )} - {author && ( - - {author} - - )} -
    -
    -
    -
    - {coverImage ? ( -
    - -
    - ) : ( -
    - )} -
    + + +
    + {publishedDate && ( + + + {dateFmt.format(publishedDate)} + + )} + {author && ( + + {author} + + )}
    -
    -
    -
    + + + {coverImage ? ( +
    + +
    + ) : ( +
    + )} + + -
    -
    -
    - -
    -
    -
    +
    + +
    diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index ab2dcedc..38dfabc1 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -4,17 +4,18 @@ import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from 'layouts/BlogLayout.astro'; import Icon from 'components/Icon.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import Card from 'components/Card.astro'; +import Tag from 'components/Tag.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module + the component -// modules whose markup this page reproduces (Hero, Section, Card, Tag, -// Heading, Link, ImageWrapper). +// Page module + the Link/ImageWrapper CSS Modules recovered from the Next +// app; the chrome comes from the shared Hero/Section/Card/Tag components. +// cardStyles is still imported for the custom cover slot (astro:assets +// can't go through Card's plain-img coverImageUrl prop). import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; import cardStyles from 'components/Card.module.css'; -import tagStyles from 'components/Tag.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; @@ -85,60 +86,29 @@ const title = String(t('blogs-tab-head')); --- {/* Hero (no right content -> centered, Next: ) */} -
    -
    -
    -
    -

    - {t('blogs-hero-title')} -

    -
    -
    -
    -
    -
    + {sections.map((section) => section.items.length > 0 && ( -
    -
    -
    -

    - {section.title} -

    -
    -
    - {section.items.map((blog) => ( -
    - {blog.coverImage && ( -
    - -
    - )} -
    -
    -
    -
    - {blog.title} -
    -
    -
    -
    - {blog.publishedDate && ( - - - {fmtDate(blog.publishedDate)} - - )} -
    {blog.description}
    - - {t('read-more')} - -
    -
    -
    - ))} -
    -
    -
    +
    + {section.items.map((blog) => ( + + {blog.coverImage && ( +
    + +
    + )} + {blog.publishedDate && ( + + + {fmtDate(blog.publishedDate)} + + )} +
    {blog.description}
    + + {t('read-more')} + +
    + ))} +
    ))}
    diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index ebcf97eb..07a182a1 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -3,23 +3,23 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from 'layouts/BaseLayout.astro'; import DataExplorer, { PAGE_SIZE } from 'components/DataExplorer.tsx'; import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; -import Icon from 'components/Icon.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import Card from 'components/Card.astro'; +import KeyFigure from 'components/KeyFigure.astro'; +import Heading from 'components/Heading.astro'; +import ListItem from 'components/ListItem.astro'; import { getDataExplorerPayload } from 'lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module (shared with the -// DataExplorer island) + the component modules whose markup this page -// reproduces (Hero, Section, Card, KeyFigure, Heading, Link, ListItem, -// ImageWrapper). +// Page module (shared with the DataExplorer island) + the Link/ImageWrapper +// CSS Modules recovered from the Next app; the chrome comes from the shared +// Hero/Section/Card/KeyFigure/Heading/ListItem components. cardStyles is +// still imported for the custom before/after cover slot. import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; import cardStyles from 'components/Card.module.css'; -import keyFigureStyles from 'components/KeyFigure.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; -import listItemStyles from 'components/ListItem.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; // One static page per locale: //data/ (parity with the Next Pages-Router @@ -101,113 +101,71 @@ const typeCards = [ --- {/* Hero */} -
    -
    -
    -
    -

    - {t('data-page-heading')} -

    -
    {t('data-page-description')}
    -
    -
    -
    - {t('data-banner-image')} -
    -
    + + {t('data-page-description')} + +
    + {t('data-banner-image')}
    -
    -
    -
    + + {/* Community stats (Next: statsHeader Section with circle KeyFigures) */} -
    -
    -
    -
    -
    -
    - {fmt(totalSwipes)} - -
    -
    {t('total-swipes')}
    -
    -
    -
    - {fmt(totalContributors)} - -
    -
    {t('contributors')}
    -
    -
    -
    -

    - {t('community-stats-section-heading')} -

    -
    - {t('community-stats-section-description')} - - {t('community-dashboard-link-label')} - -
    -
    +
    +
    + + {t('total-swipes')} + + + {t('contributors')} + +
    +
    + + {t('community-stats-section-heading')} + +
    + {t('community-stats-section-description')} + + {t('community-dashboard-link-label')} +
    -
    +
    {/* Project-type explainer cards (static, SSR-only) */} -
    -
    -
    -

    - {t('type-section-heading')} -

    -
    {t('type-section-description')}
    -
    -
    - {typeCards.map((card) => ( -
    - {'beforeAfter' in card && card.beforeAfter ? ( -
    -
    - before-image -
    -
    - after-image -
    -
    - ) : ( -
    - card-cover-image -
    - )} -
    -
    -
    -
    - -
    -
    - {card.title} -
    -
    -
    -
    - {card.points.map((p) => ( -
    -
    - -
    -
    {p}
    -
    - ))} -
    +
    + {t('type-section-description')} + {typeCards.map((card) => ( + + {'beforeAfter' in card && card.beforeAfter && ( +
    +
    + before-image
    -
    +
    + after-image +
    +
    + )} + + {card.points.map((p) => ( + {p} ))} -
    -
    -
    + + ))} + {/* The ONE interactive island: filters + search + sort + pagination + card list + map share state. client:load so filters + initial list @@ -231,29 +189,13 @@ const typeCards = [ /> {/* License + contact (static) */} -
    -
    -
    -

    - {t('license-section-heading')} -

    -
    {t('license-section-description')}
    -
    -
    -
    -
    -
    -
    -

    - {t('contact-section-heading')} -

    -
    {t('contact-section-description')}
    -
    - -
    -
    +
    + {t('license-section-description')} +
    +
    + {t('contact-section-description')} + + {t('contact-link-label')} + +
    diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index 199b6d59..d11bf743 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -1,16 +1,15 @@ --- import type { GetStaticPaths } from 'astro'; import BaseLayout from 'layouts/BaseLayout.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import CenteredCard from 'components/CenteredCard.astro'; +import Heading from 'components/Heading.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module + the component -// modules whose markup this page reproduces (Hero, Section, CenteredCard, -// Heading, Link, ImageWrapper). +// Page module + the Link/ImageWrapper CSS Modules recovered from the Next +// app; the chrome comes from the shared Hero/Section/CenteredCard components. import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; -import centeredCardStyles from 'components/CenteredCard.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; @@ -39,171 +38,111 @@ const title = String(t('get-involved-tab-head')); --- {/* Hero */} -
    -
    -
    -
    -

    - {t('hero-title')} -

    -
    {t('hero-description')}
    -
    -
    -
    - {t('get-involved-banner')} -
    -
    + + {t('hero-description')} + +
    + {t('get-involved-banner')}
    -
    -
    -
    + + {/* Contribute now */} -
    -
    -
    -

    - {t('contribute-now')} -

    -
    {t('contribute-now-description')}
    -
    - +
    + {t('contribute-now-description')} + -
    + +
    {/* Individual */} -
    -
    -
    -
    -

    {t('individual-heading')}

    -
    - {t('individual-heading-image')} -
    -
    -
    -
    -
    {t('possess-language-skills')}
    -
    {t('possess-language-skills-description')}
    - -
    -
    -
    {t('possess-technical-skills')}
    -
    {t('possess-techincal-skills-description')}
    - -
    -
    +
    +
    + {t('individual-heading')} +
    + {t('individual-heading-image')}
    -
    +
    + + {t('possess-language-skills-description')} + {t('contribute-on-transifex')} + + + {t('possess-techincal-skills-description')} + {t('contribute-on-github')} + +
    +
    {/* Group */} -
    -
    -
    -
    -
    -
    {t('want-to-host-mapswipe-events')}
    -
    {t('want-to-host-mapswipe-events-description')}
    - -
    -
    -
    {t('engage-your-csr')}
    -
    {t('engage-your-csr-description')}
    - -
    -
    -
    -

    {t('group-heading')}

    -
    - {t('group-heading-image')} -
    -
    +
    +
    + + {t('want-to-host-mapswipe-events-description')} + {t('download-toolkit')} + + + {t('engage-your-csr-description')} + {t('register-your-interest')} + +
    +
    + {t('group-heading')} +
    + {t('group-heading-image')}
    -
    +
    {/* Organizational */} -
    -
    -
    -
    -

    {t('organization-heading')}

    -
    - {t('organization-logo')} -
    -
    -
    -
    {t('humanitarian-or-nonprofit')}
    -
    {t('humanitarian-or-nonprofit-description')}
    - -
    +
    +
    + {t('organization-heading')} +
    + {t('organization-logo')}
    -
    + + {t('humanitarian-or-nonprofit-description')} + {t('tell-us-more')} + +
    {/* Donate */} -
    -
    -
    -
    -
    {t('interested-in-supporting')}
    -
    -
    -

    {t('interested-in-supporting-description-1')}

    - {t('download-financial-report')} -
    -
    - -
    -
    -

    {t('donate-heading')}

    -
    - {t('donation-logo')} -
    -
    +
    + +
    +

    {t('interested-in-supporting-description-1')}

    + {t('download-financial-report')} +
    + {t('donate-now')} +
    +
    + {t('donate-heading')} +
    + {t('donation-logo')}
    -
    +
    {/* Contact */} -
    -
    -
    -

    - {t('contact-section-heading')} -

    -
    {t('contact-section-description')}
    -
    - -
    -
    +
    + {t('contact-section-description')} + {t('contact-link-label')} +
    diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index 4bf12ad9..88b0320c 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -5,20 +5,21 @@ import { Image } from 'astro:assets'; import BaseLayout from 'layouts/BaseLayout.astro'; import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; import Icon from 'components/Icon.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import Card from 'components/Card.astro'; +import KeyFigure from 'components/KeyFigure.astro'; +import Tag from 'components/Tag.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from 'lib/data'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module + the component -// modules whose markup this page reproduces (Hero, Section, Card, KeyFigure, -// Heading, Link, Tag, ImageWrapper). +// Page module + the Link/ImageWrapper CSS Modules recovered from the Next +// app; the chrome comes from the shared Hero/Section/Card/KeyFigure/Tag +// components. cardStyles is still imported for the custom cover slots (the +// before/after pair and the astro:assets covers). import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; import cardStyles from 'components/Card.module.css'; -import keyFigureStyles from 'components/KeyFigure.module.css'; -import tagStyles from 'components/Tag.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; // Home page. One static, translated variant per locale — // — matching @@ -113,245 +114,157 @@ const title = String(t('home-tab-head')); --- {/* Hero (Next: components/Hero with video rightContent) */} -
    -
    -
    -
    -

    - {t('hero-title')} -

    -
    {t('hero-description')}
    - -
    -
    - -
    -
    -
    -
    -
    + + {t('hero-description')} + + + {t('download-app-label')} + + + {t('data-link')} + + + + + + {/* Mobilizing volunteers + key figures */} -
    -
    -
    -

    - {t('mobilizing-volunteer')} -

    +
    +
    +
    + {t('mobilize-volunteer')}
    -
    -
    -
    - {t('mobilize-volunteer')} -
    -
    -
    - {t('mapathon')} -
    -
    - {t('field-mapping')} -
    -
    +
    +
    + {t('mapathon')}
    -
    -
    {t('mobilizing-volunteer-description-paragraph-1')}
    -
    {t('mobilizing-volunteer-description-paragraph-2')}
    -
    -
    -
    - {swipesFmt} - -
    -
    {t('total-swipes')}
    -
    -
    -
    - {contributorsFmt} - -
    -
    {t('total-contributors')}
    -
    -
    +
    + {t('field-mapping')}
    -
    - - {/* Mission types */} -
    -
    -
    -

    - {t('explore-mission-types')} -

    -
    {t('explore-mission-types-description')}
    -
    -
    - {missionTypes.map((m) => ( -
    - {'beforeAfter' in m ? ( -
    -
    - before-image -
    -
    - after-image -
    -
    - ) : ( -
    - card-cover-image -
    - )} -
    -
    -
    -
    - -
    -
    - {m.heading} -
    -
    -
    -
    {m.body}
    -
    -
    - ))} +
    +
    {t('mobilizing-volunteer-description-paragraph-1')}
    +
    {t('mobilizing-volunteer-description-paragraph-2')}
    +
    + {t('total-swipes')} + {t('total-contributors')}
    -
    +
    - {/* Start mapswiping (download + get involved) */} -
    -
    -
    -

    - {t('start-mapswiping-title')} -

    -
    -
    -
    -
    {t('download-description')}
    -
    -
    - - {t('download-playstore')} - - - {t('download-apple-store')} - + {/* Mission types */} +
    + {t('explore-mission-types-description')} + {missionTypes.map((m) => ( + + {'beforeAfter' in m && ( + -
    + + {/* Start mapswiping (download + get involved) */} +
    + -
    +
    +
    {t('get-involved-description')}
    + + {t('get-involved-link')} + +
    +
    {/* Recent news & updates (featured blogs) */} -
    -
    -
    -

    - {t('news-and-updates-title')} -

    -
    -
    - {featuredBlogs.map((blog, index) => ( -
    - {blog.coverImage && ( -
    - -
    - )} -
    -
    -
    -
    - {blog.title} -
    -
    - {blog.publishedDate && ( -
    - - - {fmtDate(blog.publishedDate)} - -
    - )} -
    -
    -
    {blog.description}
    - - {t('read-more')} - -
    -
    -
    - ))} - -
    +
    + {featuredBlogs.map((blog, index) => ( + + {blog.coverImage && ( +
    + +
    + )} + {blog.publishedDate && ( + + + + {fmtDate(blog.publishedDate)} + + + )} +
    {blog.description}
    + + {t('read-more')} + +
    + ))} + -
    +
    {/* Partners */} -
    -
    -
    -

    - {t('partners')} -

    +
    + +
    + {t('missing-maps')}
    -
    - -
    - {t('missing-maps')} + +
    {t('missing-map-description')}
    +
    + {partners.map((p) => ( + +
    + {p.altText}
    -
    {t('missing-map-description')}
    -
    - {partners.map((p) => ( - -
    - {p.altText} -
    -
    - ))} -
    -
    + ))}
    -
    +
    diff --git a/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro index 423d66eb..6c02bf6a 100644 --- a/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -6,15 +6,13 @@ import remarkGfm from 'remark-gfm'; import remarkRehype from 'remark-rehype'; import rehypeStringify from 'rehype-stringify'; import BaseLayout from 'layouts/BaseLayout.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module + the component -// modules whose markup this page reproduces (Hero, Section, Heading, -// HtmlOutput). +// Page module + the HtmlOutput CSS Module recovered from the Next app; the +// chrome comes from the shared Hero/Section components. import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; -import headingStyles from 'components/Heading.module.css'; import htmlOutputStyles from 'components/HtmlOutput.module.css'; // Privacy page. The policy body is a fixed English markdown string (identical @@ -131,24 +129,9 @@ const policyHtml = String( --- {/* Hero (no right content -> centered) */} -
    -
    -
    -
    -

    - {t('privacy-hero-title')} -

    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + + +
    +
    +
    diff --git a/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro index c00af234..b8acbf5c 100644 --- a/src/pages/[locale]/projects/[id].astro +++ b/src/pages/[locale]/projects/[id].astro @@ -8,21 +8,21 @@ import ProjectHistoryChart from 'components/ProjectHistoryChart.tsx'; import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; import type { ProjectTypeKey } from 'components/ProjectTypeIcon.tsx'; import Icon from 'components/Icon.astro'; +import Hero from 'components/Hero.astro'; +import Section from 'components/Section.astro'; +import Card from 'components/Card.astro'; +import KeyFigure from 'components/KeyFigure.astro'; +import Tag from 'components/Tag.astro'; +import Heading from 'components/Heading.astro'; import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from 'lib/data'; import { getFileSizeProperties, resolveAoiDownload } from 'lib/common'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; -// CSS Modules recovered from the Next app: the page module (also imported by -// the ProjectHistoryChart island for the SVG classes) + the component modules -// whose markup this page reproduces. +// Page module (also imported by the ProjectHistoryChart island for the SVG +// classes) + the Link/ImageWrapper/HtmlOutput CSS Modules recovered from the +// Next app; the chrome comes from the shared components imported above. import styles from './styles.module.css'; -import heroStyles from 'components/Hero.module.css'; -import sectionStyles from 'components/Section.module.css'; -import cardStyles from 'components/Card.module.css'; -import tagStyles from 'components/Tag.module.css'; -import headingStyles from 'components/Heading.module.css'; import linkStyles from 'components/Link.module.css'; -import keyFigureStyles from 'components/KeyFigure.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; import htmlOutputStyles from 'components/HtmlOutput.module.css'; @@ -126,216 +126,157 @@ const lastFetched = project.exportHistory?.modifiedAt --- {/* Hero: name + type/status/meta tags left, cover image right */} -
    -
    -
    -
    -

    - {name} -

    -
    -
    -
    - {projectType && ( - - - {projectTypeLabels[projectType] ?? projectType} - - )} - {status && ( - - - {statusLabels[status] ?? status} - - )} -
    -
    - {region && ( - - {region} - - )} - {requestingOrganization?.name && ( - - {requestingOrganization.name} - - )} - {createdAtLabel && ( - - - {createdAtLabel} - - )} -
    -
    -
    + + +
    +
    + {projectType && ( + + + {projectTypeLabels[projectType] ?? projectType} + + )} + {status && ( + + + {statusLabels[status] ?? status} + + )} +
    +
    + {region && ( + + {region} + + )} + {requestingOrganization?.name && ( + + {requestingOrganization.name} + + )} + {createdAtLabel && ( + + + {createdAtLabel} + + )}
    - {imageUrl && ( -
    -
    - -
    -
    - )}
    -
    -
    -
    + + {imageUrl && ( + +
    + +
    +
    + )} + {/* Overview: description + circle key figures */} -
    -
    -
    -
    -

    - {t('overview-section-title')} -

    -
    - {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} -
    -
    -
    -
    -
    -
    - {roundedTotalArea} - -
    -
    km2
    -
    -
    -
    - {numberOfContributorUsers ?? 0} - -
    -
    {t('project-contributors-text')}
    -
    -
    +
    +
    + {t('overview-section-title')} +
    + {/* description is raw HTML/markdown in the source data (HtmlOutput in Next) */} +
    -
    +
    + + km2 + + + {t('project-contributors-text')} + +
    +
    {/* Stats: AOI map + progress bar + history chart */} -
    -
    -
    - {aoiDownload && ( -
    - -
    - )} -
    -
    -
    -
    {t('project-progress-label')}
    -
    {t('project-card-progress-text', { progress: progress * 100 })}
    -
    -
    -
    -
    -
    -
    - -
    +
    + {aoiDownload && ( +
    + +
    + )} +
    +
    +
    +
    {t('project-progress-label')}
    +
    {t('project-card-progress-text', { progress: progress * 100 })}
    +
    +
    +
    - {lastFetched && ( -
    {lastFetched}
    - )} +
    + +
    -
    + {lastFetched && {lastFetched}} +
    {/* Downloads */} -
    -
    -
    -

    - {t('data-section-heading')} -

    -
    - {t('data-section-description')} -
    -
    -
    - {cards.map((card) => - card.asset ? ( -
    -
    -
    -
    -
    - {card.heading} -
    -
    -
    {card.description}
    -
    -
    -
    - {card.asset.mimetype} -
    {downloadSizeText(card.asset.fileSize)}
    -
    - {card.asset.file?.url && ( - - {t('download')} - - )} -
    -
    -
    - ) : null, - )} - {aoiDownload && ( -
    -
    -
    -
    -
    - {t('area-of-interest-title')} -
    -
    -
    {t('area-of-interest-description')}
    -
    -
    -
    - {aoiDownload.mimetype} -
    {downloadSizeText(aoiDownload.fileSize)}
    -
    - - {t('download')} - -
    -
    +
    + {t('data-section-description')} + {cards.map((card) => + card.asset ? ( + + {card.description} +
    + {card.asset.mimetype} +
    {downloadSizeText(card.asset.fileSize)}
    - )} -
    -
    -
    + {card.asset.file?.url && ( + + {t('download')} + + )} + + ) : null, + )} + {aoiDownload && ( + + {t('area-of-interest-description')} +
    + {aoiDownload.mimetype} +
    {downloadSizeText(aoiDownload.fileSize)}
    +
    + + {t('download')} + +
    + )} + {/* License */} -
    -
    -
    -

    - {t('license-section-heading')} -

    - {/* Next passed the license body as Section's `description` node, so the +
    + {/* Next passed the license body as Section's `description` node, so the licenseDescription div nests inside the section description div. */} -
    -
    -

    {t('license-section-description-1')}

    -

    {t('license-section-description-2')}

    -
    -
    + +
    +

    {t('license-section-description-1')}

    +

    {t('license-section-description-2')}

    -
    -
    + + From 4f6f6989d39f1f68197c871920ad81a3e8c2caab Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 12:44:39 +0545 Subject: [PATCH 39/52] refactor: Link + ImageWrapper components 43 anchors and 21 wrapper divs move off raw CSS-module classes. Spread components drop the slot placement attr (Astro leaves it in props). Output byte-equivalent across all 14,680 pages. --- src/components/Button.astro | 3 + src/components/Card.astro | 6 +- src/components/Footer.astro | 24 +++---- src/components/ImageWrapper.astro | 29 ++++++++ src/components/Link.astro | 29 ++++++++ src/components/Navbar.astro | 35 ++++------ src/pages/404.astro | 15 ++--- src/pages/[locale]/blogs/[slug]/index.astro | 5 +- src/pages/[locale]/blogs/index.astro | 11 +-- src/pages/[locale]/data/index.astro | 24 +++---- src/pages/[locale]/get-involved/index.astro | 51 ++++++-------- src/pages/[locale]/index.astro | 75 +++++++++------------ src/pages/[locale]/projects/[id].astro | 20 +++--- 13 files changed, 173 insertions(+), 154 deletions(-) create mode 100644 src/components/ImageWrapper.astro create mode 100644 src/components/Link.astro diff --git a/src/components/Button.astro b/src/components/Button.astro index fee8b5f7..d844518f 100644 --- a/src/components/Button.astro +++ b/src/components/Button.astro @@ -16,6 +16,9 @@ const { class: className, ...rest } = Astro.props; +// `slot` on a component is placement metadata for the parent, but Astro also +// leaves it in props — it must not be spread onto the element. +delete rest.slot; // NOTE: main's map styles 'primary' and leaves 'transparent' bare, but the // primary class is empty in the module; the ported pages only use 'border'. diff --git a/src/components/Card.astro b/src/components/Card.astro index 07841f69..f032e188 100644 --- a/src/components/Card.astro +++ b/src/components/Card.astro @@ -5,8 +5,8 @@ // icons + heading + actions, children container. `as` picks the root element // (article in the semantic card lists, div elsewhere). import styles from 'components/Card.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; import Heading from 'components/Heading.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; interface Props { as?: 'div' | 'article'; @@ -38,9 +38,7 @@ const cover = Astro.slots.has('cover') ? await Astro.slots.render('cover') : ''; {cover.trim() && } {coverImageUrl && ( -
    - card-cover-image -
    + )}
    diff --git a/src/components/Footer.astro b/src/components/Footer.astro index e117115b..505584e2 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,11 +1,11 @@ --- import Icon from './Icon.astro'; import Heading from './Heading.astro'; +import Link from './Link.astro'; import { getT } from '../i18n'; // CSS Modules recovered from the Next app (components/Footer + // components/Link). import styles from './Footer.module.css'; -import linkStyles from './Link.module.css'; // Ported from the Next app's components/Footer. Static; copyright year computed // at build time (Next did `new Date().getFullYear()` at render — same result @@ -37,26 +37,26 @@ const socialLinks: { href: string; title: string; icon: IconName; rel?: string }
    {t('footer-quick-links')}
    - {t('home-link')} - {t('get-involved-link')} - {t('data-link')} - {t('blogs-link')} - {t('community-dashboard-link')} + {t('home-link')} + {t('get-involved-link')} + {t('data-link')} + {t('blogs-link')} + {t('community-dashboard-link')}
    {t('footer-follow-us-title')}
    {socialLinks.map((link) => ( - - + ))}
    @@ -66,12 +66,12 @@ const socialLinks: { href: string; title: string; icon: IconName; rel?: string }
    {t('copyright', { year: currentYear })}
    {t('uptime-pretext')} - + Uptime Robot - +
    - {t('privacy')} + {t('privacy')}
    diff --git a/src/components/ImageWrapper.astro b/src/components/ImageWrapper.astro new file mode 100644 index 00000000..766993de --- /dev/null +++ b/src/components/ImageWrapper.astro @@ -0,0 +1,29 @@ +--- +// ImageWrapper (port of the Next components/ImageWrapper): aspect-holding +// wrapper div + the image class. With `src` it renders a plain (extra +// attributes pass through); without it the default slot supplies the media — +// used for astro:assets /, which must be instantiated by +// the caller (give them class={imageStyles.image} from this module). +import type { HTMLAttributes } from 'astro/types'; +import styles from 'components/ImageWrapper.module.css'; + +interface Props extends Omit, 'class'> { + // string or a class:list-style array (falsy entries dropped) + class?: string | (string | false | null | undefined)[]; + imageClass?: string | (string | false | null | undefined)[]; + src?: string; +} + +const { + class: className, + imageClass, + src, + ...rest +} = Astro.props; +// `slot` on a component is placement metadata for the parent, but Astro also +// leaves it in props — it must not be spread onto the element. +delete rest.slot; +--- +
    + {src ? : } +
    diff --git a/src/components/Link.astro b/src/components/Link.astro new file mode 100644 index 00000000..1937f391 --- /dev/null +++ b/src/components/Link.astro @@ -0,0 +1,29 @@ +--- +// Link (port of the Next components/Link, minus next/link's client routing — +// static pages only need a styled anchor). Extra attributes (href, target, +// rel, title, download, …) pass straight through to the element. +import type { HTMLAttributes } from 'astro/types'; +import styles from 'components/Link.module.css'; + +type Variant = 'transparent' | 'button' | 'buttonTransparent' | 'icon' | 'underline'; + +interface Props extends Omit, 'class'> { + variant?: Variant; + // string or a class:list-style array (falsy entries dropped) + class?: string | (string | false | null | undefined)[]; +} + +const { variant = 'transparent', class: className, ...rest } = Astro.props; +// `slot` on a component is placement metadata for the parent, but Astro also +// leaves it in props — it must not be spread onto the element. +delete rest.slot; + +const variantMap: Record = { + transparent: undefined, + button: styles.button, + buttonTransparent: styles.buttonTransparent, + icon: styles.icon, + underline: styles.underline, +}; +--- + diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index e23e2fe9..d44c49e5 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -1,13 +1,13 @@ --- import Icon from './Icon.astro'; import Button from './Button.astro'; +import Link from './Link.astro'; import { getT, LOCALES } from '../i18n'; // CSS Modules recovered from the Next app (components/Navbar + // components/Link). The language menu is a pure CSS hover/focus-within // dropdown (Next used a JS DropdownMenu + Popup portal and a mobile hamburger // toggle; see the adaptation notes in Navbar.module.css). import styles from './Navbar.module.css'; -import linkStyles from './Link.module.css'; // Ported from the Next app's components/Navbar. Static, zero-JS. `activePath` // highlights the current route link, matching Next's router.pathname === @@ -37,25 +37,19 @@ const localelessPath = activePath ? `${activePath}/` : ''; ---
    - + {t('mapswipe-logo')} - +
    @@ -67,16 +61,13 @@ const localelessPath = activePath ? `${activePath}/` : '';
    diff --git a/src/pages/404.astro b/src/pages/404.astro index 9c82eef9..e3f35897 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,13 +1,12 @@ --- import BaseLayout from 'layouts/BaseLayout.astro'; import Heading from 'components/Heading.astro'; +import Link from 'components/Link.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { DEFAULT_LOCALE } from '../i18n'; -// CSS Modules recovered from the Next app: the page module (pages/404/ -// styles.module.css, co-located here as 404.module.css) + Link/ImageWrapper -// component modules. +// Page module recovered from the Next app (pages/404/styles.module.css, +// co-located here as 404.module.css); chrome via shared components. import styles from './404.module.css'; -import linkStyles from 'components/Link.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; // 404 page (Next: src/pages/404/index.tsx). Locale-less single page. The Next // version's copy was hardcoded English, so it stays English here. Rendered with @@ -28,12 +27,10 @@ import imageStyles from 'components/ImageWrapper.module.css'; This area has not been swiped yet!
    - Go back to home + Go back to home
    -
    - 404 Page -
    +
    diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index 1ea4f4c4..2a75a4de 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -7,6 +7,7 @@ import Icon from 'components/Icon.astro'; import Hero from 'components/Hero.astro'; import Section from 'components/Section.astro'; import Tag from 'components/Tag.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { getT, LOCALES } from '../../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the ImageWrapper/HtmlOutput CSS Modules recovered from the @@ -98,9 +99,9 @@ const tabTitle = String(t('blog-tab-head', { blogTitle })); {coverImage ? ( -
    + -
    + ) : (
    )} diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index 38dfabc1..7397d06a 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -8,6 +8,8 @@ import Hero from 'components/Hero.astro'; import Section from 'components/Section.astro'; import Card from 'components/Card.astro'; import Tag from 'components/Tag.astro'; +import Link from 'components/Link.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the Link/ImageWrapper CSS Modules recovered from the Next @@ -16,7 +18,6 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // can't go through Card's plain-img coverImageUrl prop). import styles from './styles.module.css'; import cardStyles from 'components/Card.module.css'; -import linkStyles from 'components/Link.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; // Blog LIST page. One variant per locale (blog content is single-language @@ -93,9 +94,9 @@ const title = String(t('blogs-tab-head')); {section.items.map((blog) => ( {blog.coverImage && ( -
    + -
    + )} {blog.publishedDate && ( @@ -104,9 +105,9 @@ const title = String(t('blogs-tab-head')); )}
    {blog.description}
    - + {t('read-more')} - +
    ))} diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index 07a182a1..d8880049 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -9,6 +9,8 @@ import Card from 'components/Card.astro'; import KeyFigure from 'components/KeyFigure.astro'; import Heading from 'components/Heading.astro'; import ListItem from 'components/ListItem.astro'; +import Link from 'components/Link.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { getDataExplorerPayload } from 'lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; @@ -19,8 +21,6 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // still imported for the custom before/after cover slot. import styles from './styles.module.css'; import cardStyles from 'components/Card.module.css'; -import linkStyles from 'components/Link.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; // One static page per locale: //data/ (parity with the Next Pages-Router // route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory @@ -104,9 +104,7 @@ const typeCards = [ {t('data-page-description')} -
    - {t('data-banner-image')} -
    +
    @@ -126,9 +124,9 @@ const typeCards = [
    {t('community-stats-section-description')} - + {t('community-dashboard-link-label')} - +
    @@ -151,12 +149,8 @@ const typeCards = [ > {'beforeAfter' in card && card.beforeAfter && (
    -
    - before-image -
    -
    - after-image -
    + +
    )} @@ -194,8 +188,8 @@ const typeCards = [
    {t('contact-section-description')} - + {t('contact-link-label')} - +
    diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index d11bf743..16211240 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -5,12 +5,13 @@ import Hero from 'components/Hero.astro'; import Section from 'components/Section.astro'; import CenteredCard from 'components/CenteredCard.astro'; import Heading from 'components/Heading.astro'; +import Link from 'components/Link.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the Link/ImageWrapper CSS Modules recovered from the Next // app; the chrome comes from the shared Hero/Section/CenteredCard components. import styles from './styles.module.css'; -import linkStyles from 'components/Link.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; // Get-involved page. One static, translated variant per locale — @@ -41,9 +42,7 @@ const title = String(t('get-involved-tab-head')); {t('hero-description')} -
    - {t('get-involved-banner')} -
    +
    @@ -55,17 +54,17 @@ const title = String(t('get-involved-tab-head')); > {t('contribute-now-description')}
    - {t('use-web-app-label')} + {t('use-web-app-label')} | - {t('download-apk-label')} + {t('download-apk-label')}
    @@ -73,18 +72,16 @@ const title = String(t('get-involved-tab-head'));
    {t('individual-heading')} -
    - {t('individual-heading-image')} -
    +
    {t('possess-language-skills-description')} - {t('contribute-on-transifex')} + {t('contribute-on-transifex')} {t('possess-techincal-skills-description')} - {t('contribute-on-github')} + {t('contribute-on-github')}
    @@ -94,18 +91,16 @@ const title = String(t('get-involved-tab-head'));
    {t('want-to-host-mapswipe-events-description')} - {t('download-toolkit')} + {t('download-toolkit')} {t('engage-your-csr-description')} - {t('register-your-interest')} + {t('register-your-interest')}
    {t('group-heading')} -
    - {t('group-heading-image')} -
    +
    @@ -113,13 +108,11 @@ const title = String(t('get-involved-tab-head'));
    {t('organization-heading')} -
    - {t('organization-logo')} -
    +
    {t('humanitarian-or-nonprofit-description')} - {t('tell-us-more')} + {t('tell-us-more')}
    @@ -128,21 +121,19 @@ const title = String(t('get-involved-tab-head'));

    {t('interested-in-supporting-description-1')}

    - {t('download-financial-report')} + {t('download-financial-report')}
    - {t('donate-now')} + {t('donate-now')}
    {t('donate-heading')} -
    - {t('donation-logo')} -
    +
    {/* Contact */}
    {t('contact-section-description')} - {t('contact-link-label')} + {t('contact-link-label')}
    diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index 88b0320c..80bb1b7c 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -10,6 +10,8 @@ import Section from 'components/Section.astro'; import Card from 'components/Card.astro'; import KeyFigure from 'components/KeyFigure.astro'; import Tag from 'components/Tag.astro'; +import Link from 'components/Link.astro'; +import ImageWrapper from 'components/ImageWrapper.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from 'lib/data'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; @@ -18,7 +20,6 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // components. cardStyles is still imported for the custom cover slots (the // before/after pair and the astro:assets covers). import styles from './styles.module.css'; -import linkStyles from 'components/Link.module.css'; import cardStyles from 'components/Card.module.css'; import imageStyles from 'components/ImageWrapper.module.css'; @@ -117,12 +118,12 @@ const title = String(t('home-tab-head')); {t('hero-description')} - + {t('download-app-label')} - - + + {t('data-link')} - + {imageUrl && ( -
    + -
    +
    )}
    @@ -243,9 +244,9 @@ const lastFetched = project.exportHistory?.modifiedAt
    {downloadSizeText(card.asset.fileSize)}
    {card.asset.file?.url && ( - + {t('download')} - + )} ) : null, @@ -257,13 +258,10 @@ const lastFetched = project.exportHistory?.modifiedAt {aoiDownload.mimetype}
    {downloadSizeText(aoiDownload.fileSize)}
    - + {t('download')} - + )} From 34f044af3c02de0ce5dad5916ebef9e1b99dc999 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 12:53:53 +0545 Subject: [PATCH 40/52] refactor: React twins of shared primitives for the islands Section/Card/Tag/Button/Link/Heading/ImageWrapper as .tsx twins of the .astro components (islands can't render .astro); DataExplorer and ProjectsMapIsland drop their hand-rolled markup. Shared cs() joiner in lib/cs. SSR output identical except class order inside one attribute. --- src/components/Button.astro | 2 - src/components/Button.tsx | 35 ++ src/components/Card.tsx | 88 ++++ src/components/DataExplorer.tsx | 591 +++++++++++++-------------- src/components/Heading.tsx | 41 ++ src/components/ImageWrapper.tsx | 32 ++ src/components/Link.tsx | 36 ++ src/components/ProjectsMapIsland.tsx | 14 +- src/components/Section.tsx | 56 +++ src/components/Tag.tsx | 49 +++ src/lib/cs.ts | 4 + 11 files changed, 624 insertions(+), 324 deletions(-) create mode 100644 src/components/Button.tsx create mode 100644 src/components/Card.tsx create mode 100644 src/components/Heading.tsx create mode 100644 src/components/ImageWrapper.tsx create mode 100644 src/components/Link.tsx create mode 100644 src/components/Section.tsx create mode 100644 src/components/Tag.tsx create mode 100644 src/lib/cs.ts diff --git a/src/components/Button.astro b/src/components/Button.astro index d844518f..a6edc857 100644 --- a/src/components/Button.astro +++ b/src/components/Button.astro @@ -20,8 +20,6 @@ const { // leaves it in props — it must not be spread onto the element. delete rest.slot; -// NOTE: main's map styles 'primary' and leaves 'transparent' bare, but the -// primary class is empty in the module; the ported pages only use 'border'. const variantMap: Record = { transparent: undefined, primary: styles.primary, diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 00000000..a6a08f71 --- /dev/null +++ b/src/components/Button.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import cs from 'lib/cs'; +import styles from './Button.module.css'; + +// React twin of Button.astro, for the islands (.astro components cannot +// render inside React trees; islands also need onClick). Keep the two in sync. + +type Variant = 'transparent' | 'primary' | 'border' | 'icon'; + +const variantMap: Record = { + transparent: undefined, + primary: styles.primary, + border: styles.border, + icon: styles.icon, +}; + +interface Props extends Omit, 'type'> { + variant?: Variant; +} + +function Button(props: Props) { + const { + variant = 'primary', + className, + children, + ...rest + } = props; + return ( + + ); +} + +export default Button; diff --git a/src/components/Card.tsx b/src/components/Card.tsx new file mode 100644 index 00000000..a5a4c055 --- /dev/null +++ b/src/components/Card.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import cs from 'lib/cs'; +import Heading from './Heading'; +import ImageWrapper from './ImageWrapper'; +import styles from './Card.module.css'; + +// React twin of Card.astro, for the islands (.astro components cannot render +// inside React trees). Keep the two in sync. Extras over the .astro twin, +// used only by the islands: headingFont, actionsClassName, coverAlt, footer +// (the Next Card's footer/footerContent block). + +interface Props { + as?: 'div' | 'article'; + className?: string; + heading?: React.ReactNode; + headingFont?: 'heading' | 'normal'; + icons?: React.ReactNode; + actions?: React.ReactNode; + actionsClassName?: string; + cover?: React.ReactNode; + coverImageUrl?: string; + coverAlt?: string; + coverWrapperClassName?: string; + childrenContainerClassName?: string; + footer?: React.ReactNode; + borderless?: boolean; + coverImageOnSide?: boolean; + children?: React.ReactNode; +} + +function Card(props: Props) { + const { + as: Element = 'div', + className, + heading, + headingFont, + icons, + actions, + actionsClassName, + cover, + coverImageUrl, + coverAlt, + coverWrapperClassName, + childrenContainerClassName, + footer, + borderless = false, + coverImageOnSide = false, + children, + } = props; + return ( + + {cover} + {coverImageUrl && ( + + )} +
    +
    +
    + {icons &&
    {icons}
    } + {heading && ( + + {heading} + + )} +
    + {actions &&
    {actions}
    } +
    +
    + {children} +
    + {footer && ( +
    +
    {footer}
    +
    + )} +
    +
    + ); +} + +export default Card; diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index 6c3eec45..fc55ba56 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -8,29 +8,24 @@ import React, { } from 'react'; import ProjectTypeIcon from './ProjectTypeIcon'; +import Section from './Section'; +import Card from './Card'; +import Tag from './Tag'; +import Button from './Button'; +import Link from './Link'; +import cs from 'lib/cs'; import type { MiniProject, Organization, ExportAsset } from 'lib/dataExplorer'; // CSS Modules recovered from the Next app. The island shares the data page's // module (same hashed classes as the .astro page that mounts it) plus the -// component modules its markup reproduces (Section, Card, Tag, Heading, Link, -// Button, MultiSelectInput, RadioInput, RawInput, SelectInput, ImageWrapper). +// form-control modules whose markup stays island-local (MultiSelectInput, +// RadioInput, RawInput, SelectInput); the chrome comes from the React twins +// of the shared components (Section, Card, Tag, Button, Link). import styles from 'pages/[locale]/data/styles.module.css'; -import sectionStyles from './Section.module.css'; -import cardStyles from './Card.module.css'; -import tagStyles from './Tag.module.css'; -import headingStyles from './Heading.module.css'; -import linkStyles from './Link.module.css'; -import buttonStyles from './Button.module.css'; import multiSelectStyles from './MultiSelectInput.module.css'; import radioStyles from './RadioInput.module.css'; import rawInputStyles from './RawInput.module.css'; import selectInputStyles from './SelectInput.module.css'; -import imageStyles from './ImageWrapper.module.css'; - -// Tiny className joiner (parity with @togglecorp/fujs _cs). -function cs(...parts: (string | false | null | undefined)[]): string { - return parts.filter(Boolean).join(' '); -} // Leaflet touches window at import time and cannot SSR. We lazy-load the map // module via a dynamic import() so its (leaflet) top-level code only runs in the @@ -355,335 +350,301 @@ export default function DataExplorer(props: Props) { return ( <> - {/* Explore: filters + map + list (Next: exploreSection Section) */} -
    -
    -
    -

    - {t('explore-section-heading')} -

    - {buildDate && ( -
    - {t('data-last-fetched', { date: new Date(Number(buildDate)) })} -
    - {t('explore-section-heading-description')} -
    - )} -
    - -
    -
    - {/* One disabled-able fieldset: while the shared dataset JSON is + {/* Explore: filters + map + list. The see-more button renders as the + Section's actions, as in Next. */} +
    + {t('data-last-fetched', { date: new Date(Number(buildDate)) })} +
    + {t('explore-section-heading-description')} + + )} + descriptionClassName={styles.lastFetchedDate} + contentClassName={styles.content} + actions={tableProjects.length !== visibleProjects.length && ( + + )} + > +
    + {/* One disabled-able fieldset: while the shared dataset JSON is loading, every filter control is disabled (native fieldset cascade) — they apply against the full dataset once it arrives. (Next used a plain div; see the fieldset adaptation note in styles.module.css.) */} -
    - {/* Project status (MultiSelectInput as toggle chips) */} -
    -
    {t('project-status')}
    -
    - {(['PUBLISHED', 'FINISHED'] as const).map((key) => ( - - ))} -
    -
    +
    + {/* Project status (MultiSelectInput as toggle chips) */} +
    +
    {t('project-status')}
    +
    + {(['PUBLISHED', 'FINISHED'] as const).map((key) => ( + + ))} +
    +
    - {/* Project type (MultiSelectInput as toggle chips) */} -
    -
    {t('project-type')}
    -
    - {PROJECT_TYPES.map((key) => ( - - ))} -
    -
    + {/* Project type (MultiSelectInput as toggle chips) */} +
    +
    {t('project-type')}
    +
    + {PROJECT_TYPES.map((key) => ( + + ))} +
    +
    + setSearchText(e.target.value)} + /> + setLocationSearchText(e.target.value)} + /> + +
    + +
    + +
    + {filtersApplied && ( + + )} + -
    - {/* Map is client-only: rendered after mount so SSR never touches +
    + {/* Map is client-only: rendered after mount so SSR never touches leaflet. Placeholder keeps layout stable pre-hydration. Also waits for the fetched dataset so it never draws just the 9-item initial slice and then re-jumps to the full set. */} - {mounted && !loading ? ( - - ) : ( - -
    - {/* Download section (global export assets) */} -
    -
    -
    -

    - {t('download-section-heading')} -

    -
    -
    - {globalExportAssets.map((asset) => { - const config = assetConfig[asset.type]; - if (!config) return null; - const { size, unit } = getFileSizeProperties(asset.fileSize); - const sizeStr = new Intl.NumberFormat(undefined, { - style: 'unit', unit, maximumFractionDigits: 1, - }).format(size); - return ( -
    -
    -
    -
    -
    - {config.heading} -
    -
    -
    {config.description}
    +
    + {tableProjects.map((project) => ( + + {/* `de-card` is a stable, hash-free hook kept for the e2e + tests (tests/e2e/islands.spec.ts selects article.de-card). */} + + {project.projectType && ( + + + {typeLabels[project.projectType] ?? project.projectType} + + )} + {project.status && ( + + + {statusLabels[project.status] ?? project.status} + + )} + + )} + childrenContainerClassName={styles.projectStats} + footer={( +
    +
    +
    -
    -
    -
    {config.fileLabel}
    -
    {sizeStr}
    -
    - - {t('download')} - +
    + {t('project-card-progress-text', { progress: project.progress * 100 })}
    + )} + > +
    + {project.region && ( + + {project.region} + + )} + {project.requestingOrganization && ( + + {project.requestingOrganization.name} + + )} +
    + {project.createdAt && ( + + {t('project-card-last-update', { date: project.createdAt })} + + )} + + {t('project-card-contributors-text', { contributors: project.numberOfContributorUsers ?? 0 })} + +
    - ); - })} -
    + + + ))}
    -
    +
    + + {/* Download section (global export assets) */} +
    + {globalExportAssets.map((asset) => { + const config = assetConfig[asset.type]; + if (!config) return null; + const { size, unit } = getFileSizeProperties(asset.fileSize); + const sizeStr = new Intl.NumberFormat(undefined, { + style: 'unit', unit, maximumFractionDigits: 1, + }).format(size); + return ( + +
    + {config.fileLabel} +
    {sizeStr}
    +
    + + {t('download')} + +
    + ); + })} +
    ); } diff --git a/src/components/Heading.tsx b/src/components/Heading.tsx new file mode 100644 index 00000000..db264497 --- /dev/null +++ b/src/components/Heading.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import cs from 'lib/cs'; +import styles from './Heading.module.css'; + +// React twin of Heading.astro, for the islands (.astro components cannot +// render inside React trees). Keep the two in sync. + +type Size = 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge' | 'superLarge'; + +const elementMap = { + extraSmall: 'h6', + small: 'h5', + medium: 'h4', + large: 'h3', + extraLarge: 'h2', + superLarge: 'h1', +} as const; + +interface Props { + size?: Size; + font?: 'heading' | 'normal'; + className?: string; + children?: React.ReactNode; +} + +function Heading(props: Props) { + const { + size = 'medium', + font = 'heading', + className, + children, + } = props; + const Element = elementMap[size]; + return ( + + {children} + + ); +} + +export default Heading; diff --git a/src/components/ImageWrapper.tsx b/src/components/ImageWrapper.tsx new file mode 100644 index 00000000..8753fe32 --- /dev/null +++ b/src/components/ImageWrapper.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import cs from 'lib/cs'; +import styles from './ImageWrapper.module.css'; + +// React twin of ImageWrapper.astro, for the islands (.astro components cannot +// render inside React trees). Keep the two in sync. With `src` it renders a +// plain ; without it, children supply the media. + +interface Props extends React.ImgHTMLAttributes { + className?: string; + imageClassName?: string; + children?: React.ReactNode; +} + +function ImageWrapper(props: Props) { + const { + className, + imageClassName, + src, + children, + ...rest + } = props; + return ( +
    + {src ? ( + + ) : children} +
    + ); +} + +export default ImageWrapper; diff --git a/src/components/Link.tsx b/src/components/Link.tsx new file mode 100644 index 00000000..37f7fb03 --- /dev/null +++ b/src/components/Link.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import cs from 'lib/cs'; +import styles from './Link.module.css'; + +// React twin of Link.astro, for the islands (.astro components cannot render +// inside React trees). Keep the two in sync. + +type Variant = 'transparent' | 'button' | 'buttonTransparent' | 'icon' | 'underline'; + +const variantMap: Record = { + transparent: undefined, + button: styles.button, + buttonTransparent: styles.buttonTransparent, + icon: styles.icon, + underline: styles.underline, +}; + +interface Props extends React.AnchorHTMLAttributes { + variant?: Variant; +} + +function Link(props: Props) { + const { + variant = 'transparent', + className, + children, + ...rest + } = props; + return ( + + {children} + + ); +} + +export default Link; diff --git a/src/components/ProjectsMapIsland.tsx b/src/components/ProjectsMapIsland.tsx index 5e0eca54..cec05b51 100644 --- a/src/components/ProjectsMapIsland.tsx +++ b/src/components/ProjectsMapIsland.tsx @@ -4,10 +4,10 @@ import { MapContainer, TileLayer, CircleMarker, Popup } from 'react-leaflet'; import 'leaflet/dist/leaflet.css'; import type { MiniProject } from 'lib/dataExplorer'; -// CSS Modules recovered from the Next app's ProjectsMap (popup card link) + -// Tag (popup tag pills). +import Tag from './Tag'; +// CSS Module recovered from the Next app's ProjectsMap (popup card link); +// the popup tag pills come from the shared Tag component. import styles from './ProjectsMap.module.css'; -import tagStyles from './Tag.module.css'; // Client-ONLY leaflet map for the data explorer. This module statically imports // leaflet/react-leaflet (which touch window at import time), so it must NEVER be @@ -79,14 +79,14 @@ export default function ProjectsMapIsland(props: Props) { {project.name}
    {project.projectType && ( - + {typeLabels[project.projectType] ?? project.projectType} - + )} {project.status && ( - + {statusLabels[project.status] ?? project.status} - + )}
    diff --git a/src/components/Section.tsx b/src/components/Section.tsx new file mode 100644 index 00000000..af54737c --- /dev/null +++ b/src/components/Section.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import cs from 'lib/cs'; +import Heading from './Heading'; +import styles from './Section.module.css'; + +// React twin of Section.astro, for the islands (.astro components cannot +// render inside React trees). Keep the two in sync. headingContainerClassName +// is an extra over the .astro twin, used only by the islands. + +interface Props { + id?: string; + className?: string; + containerClassName?: string; + headingContainerClassName?: string; + contentClassName?: string; + descriptionClassName?: string; + actionsClassName?: string; + title?: React.ReactNode; + description?: React.ReactNode; + actions?: React.ReactNode; + withAlternativeBackground?: boolean; + children?: React.ReactNode; +} + +function Section(props: Props) { + const { + id, + className, + containerClassName, + headingContainerClassName, + contentClassName, + descriptionClassName, + actionsClassName, + title, + description, + actions, + withAlternativeBackground = false, + children, + } = props; + return ( +
    +
    + {(title || description) && ( +
    + {title && {title}} + {description &&
    {description}
    } +
    + )} + {children &&
    {children}
    } + {actions &&
    {actions}
    } +
    +
    + ); +} + +export default Section; diff --git a/src/components/Tag.tsx b/src/components/Tag.tsx new file mode 100644 index 00000000..e28df244 --- /dev/null +++ b/src/components/Tag.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import cs from 'lib/cs'; +import styles from './Tag.module.css'; + +// React twin of Tag.astro, for the islands (.astro components cannot render +// inside React trees). Keep the two in sync. `as` picks the element: the Next +// Tag rendered a div (islands keep that); the .astro twin renders a span. + +type Variant = 'primary' | 'transparent' | 'border' | 'icon'; +type Spacing = 'small' | 'medium' | 'large'; + +const variantMap: Record = { + primary: undefined, + transparent: styles.transparent, + border: styles.border, + icon: styles.icon, +}; +const spacingMap: Record = { + small: styles.small, + medium: styles.medium, + large: styles.large, +}; + +interface Props { + as?: 'div' | 'span'; + variant?: Variant; + spacing?: Spacing; + className?: string; + title?: string; + children?: React.ReactNode; +} + +function Tag(props: Props) { + const { + as: Element = 'div', + variant = 'primary', + spacing, + className, + title, + children, + } = props; + return ( + + {children} + + ); +} + +export default Tag; diff --git a/src/lib/cs.ts b/src/lib/cs.ts new file mode 100644 index 00000000..5f1a8cf7 --- /dev/null +++ b/src/lib/cs.ts @@ -0,0 +1,4 @@ +// Tiny className joiner (parity with @togglecorp/fujs _cs). +export default function cs(...parts: (string | false | null | undefined)[]): string { + return parts.filter(Boolean).join(' '); +} From 3ada92f43b8728968ef98612ae754ac704ca2567 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 13:12:07 +0545 Subject: [PATCH 41/52] refactor: main's component directory convention MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Style-bearing components move to Name/{index.astro,index.tsx, styles.module.css}; no-CSS components stay flat. CLASS_MAP_OUT debug dump added (class hashes shift when a module moves — the map lets two builds be compared structurally; verified identical on all pages). --- astro.config.mjs | 11 +++++++++ .../{Button.astro => Button/index.astro} | 2 +- .../{Button.tsx => Button/index.tsx} | 2 +- .../styles.module.css} | 0 .../{Card.astro => Card/index.astro} | 6 ++--- src/components/{Card.tsx => Card/index.tsx} | 6 ++--- .../styles.module.css} | 0 .../index.astro} | 2 +- .../styles.module.css} | 0 src/components/DataExplorer.tsx | 8 +++---- .../{Footer.astro => Footer/index.astro} | 10 ++++---- .../styles.module.css} | 0 .../{Heading.astro => Heading/index.astro} | 2 +- .../{Heading.tsx => Heading/index.tsx} | 2 +- .../styles.module.css} | 0 .../{Hero.astro => Hero/index.astro} | 4 ++-- .../styles.module.css} | 0 .../styles.module.css} | 0 .../index.astro} | 2 +- .../index.tsx} | 2 +- .../styles.module.css} | 0 .../index.astro} | 2 +- .../styles.module.css} | 0 .../{Link.astro => Link/index.astro} | 2 +- src/components/{Link.tsx => Link/index.tsx} | 2 +- .../styles.module.css} | 0 .../{ListItem.astro => ListItem/index.astro} | 2 +- .../styles.module.css} | 0 .../styles.module.css} | 0 .../{Navbar.astro => Navbar/index.astro} | 10 ++++---- .../styles.module.css} | 0 .../styles.module.css} | 0 .../index.astro} | 2 +- .../index.tsx} | 2 +- .../styles.module.css} | 0 .../index.tsx} | 4 ++-- .../styles.module.css} | 0 .../styles.module.css} | 0 .../styles.module.css} | 0 .../{Section.astro => Section/index.astro} | 4 ++-- .../{Section.tsx => Section/index.tsx} | 4 ++-- .../styles.module.css} | 0 .../styles.module.css} | 0 src/components/{Tag.astro => Tag/index.astro} | 2 +- src/components/{Tag.tsx => Tag/index.tsx} | 2 +- .../{Tag.module.css => Tag/styles.module.css} | 0 src/layouts/BaseLayout.astro | 6 ++--- src/pages/404.astro | 6 ++--- src/pages/[locale]/blogs/[slug]/index.astro | 12 +++++----- src/pages/[locale]/blogs/index.astro | 16 ++++++------- src/pages/[locale]/data/index.astro | 20 ++++++++-------- src/pages/[locale]/get-involved/index.astro | 14 +++++------ src/pages/[locale]/index.astro | 20 ++++++++-------- src/pages/[locale]/privacy/index.astro | 6 ++--- src/pages/[locale]/projects/[id].astro | 24 +++++++++---------- 55 files changed, 116 insertions(+), 105 deletions(-) rename src/components/{Button.astro => Button/index.astro} (94%) rename src/components/{Button.tsx => Button/index.tsx} (95%) rename src/components/{Button.module.css => Button/styles.module.css} (100%) rename src/components/{Card.astro => Card/index.astro} (92%) rename src/components/{Card.tsx => Card/index.tsx} (95%) rename src/components/{Card.module.css => Card/styles.module.css} (100%) rename src/components/{CenteredCard.astro => CenteredCard/index.astro} (86%) rename src/components/{CenteredCard.module.css => CenteredCard/styles.module.css} (100%) rename src/components/{Footer.astro => Footer/index.astro} (94%) rename src/components/{Footer.module.css => Footer/styles.module.css} (100%) rename src/components/{Heading.astro => Heading/index.astro} (92%) rename src/components/{Heading.tsx => Heading/index.tsx} (95%) rename src/components/{Heading.module.css => Heading/styles.module.css} (100%) rename src/components/{Hero.astro => Hero/index.astro} (93%) rename src/components/{Hero.module.css => Hero/styles.module.css} (100%) rename src/components/{HtmlOutput.module.css => HtmlOutput/styles.module.css} (100%) rename src/components/{ImageWrapper.astro => ImageWrapper/index.astro} (94%) rename src/components/{ImageWrapper.tsx => ImageWrapper/index.tsx} (94%) rename src/components/{ImageWrapper.module.css => ImageWrapper/styles.module.css} (100%) rename src/components/{KeyFigure.astro => KeyFigure/index.astro} (93%) rename src/components/{KeyFigure.module.css => KeyFigure/styles.module.css} (100%) rename src/components/{Link.astro => Link/index.astro} (95%) rename src/components/{Link.tsx => Link/index.tsx} (95%) rename src/components/{Link.module.css => Link/styles.module.css} (100%) rename src/components/{ListItem.astro => ListItem/index.astro} (89%) rename src/components/{ListItem.module.css => ListItem/styles.module.css} (100%) rename src/components/{MultiSelectInput.module.css => MultiSelectInput/styles.module.css} (100%) rename src/components/{Navbar.astro => Navbar/index.astro} (93%) rename src/components/{Navbar.module.css => Navbar/styles.module.css} (100%) rename src/components/{Page.module.css => Page/styles.module.css} (100%) rename src/components/{ProjectTypeIcon.astro => ProjectTypeIcon/index.astro} (97%) rename src/components/{ProjectTypeIcon.tsx => ProjectTypeIcon/index.tsx} (99%) rename src/components/{ProjectTypeIcon.module.css => ProjectTypeIcon/styles.module.css} (100%) rename src/components/{ProjectsMapIsland.tsx => ProjectsMapIsland/index.tsx} (98%) rename src/components/{ProjectsMap.module.css => ProjectsMapIsland/styles.module.css} (100%) rename src/components/{RadioInput.module.css => RadioInput/styles.module.css} (100%) rename src/components/{RawInput.module.css => RawInput/styles.module.css} (100%) rename src/components/{Section.astro => Section/index.astro} (94%) rename src/components/{Section.tsx => Section/index.tsx} (96%) rename src/components/{Section.module.css => Section/styles.module.css} (100%) rename src/components/{SelectInput.module.css => SelectInput/styles.module.css} (100%) rename src/components/{Tag.astro => Tag/index.astro} (94%) rename src/components/{Tag.tsx => Tag/index.tsx} (96%) rename src/components/{Tag.module.css => Tag/styles.module.css} (100%) diff --git a/astro.config.mjs b/astro.config.mjs index a9b38f34..1ff37a0c 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,4 +1,5 @@ import { createHash } from 'node:crypto'; +import { writeFileSync } from 'node:fs'; import { defineConfig } from 'astro/config'; import react from '@astrojs/react'; @@ -15,6 +16,16 @@ const SITE = 'https://mapswipe.org'; const CLASS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; const CLASS_ALNUM = `${CLASS_ALPHA}0123456789-_`; const assignedClassNames = new Map(); +// Debug aid: CLASS_MAP_OUT= dumps {shortName -> source} after the build, +// so two builds' HTML can be compared structurally when class hashes shift +// (e.g. after moving a CSS module). +if (process.env.CLASS_MAP_OUT) { + process.on('exit', () => { + try { + writeFileSync(process.env.CLASS_MAP_OUT, JSON.stringify(Object.fromEntries(assignedClassNames))); + } catch { /* best-effort */ } + }); +} function shortClassName(name, filename) { const rel = filename.includes('website-astro') || filename.startsWith(process.cwd()) ? filename.slice(process.cwd().length) diff --git a/src/components/Button.astro b/src/components/Button/index.astro similarity index 94% rename from src/components/Button.astro rename to src/components/Button/index.astro index a6edc857..794a55b5 100644 --- a/src/components/Button.astro +++ b/src/components/Button/index.astro @@ -2,7 +2,7 @@ // Button (port of the Next components/Button). Extra attributes (aria-*, id, // event hooks added later, …) pass straight through to the element. import type { HTMLAttributes } from 'astro/types'; -import styles from 'components/Button.module.css'; +import styles from 'components/Button/styles.module.css'; type Variant = 'transparent' | 'primary' | 'border' | 'icon'; diff --git a/src/components/Button.tsx b/src/components/Button/index.tsx similarity index 95% rename from src/components/Button.tsx rename to src/components/Button/index.tsx index a6a08f71..511ab01d 100644 --- a/src/components/Button.tsx +++ b/src/components/Button/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import cs from 'lib/cs'; -import styles from './Button.module.css'; +import styles from './styles.module.css'; // React twin of Button.astro, for the islands (.astro components cannot // render inside React trees; islands also need onClick). Keep the two in sync. diff --git a/src/components/Button.module.css b/src/components/Button/styles.module.css similarity index 100% rename from src/components/Button.module.css rename to src/components/Button/styles.module.css diff --git a/src/components/Card.astro b/src/components/Card/index.astro similarity index 92% rename from src/components/Card.astro rename to src/components/Card/index.astro index f032e188..96adec18 100644 --- a/src/components/Card.astro +++ b/src/components/Card/index.astro @@ -4,9 +4,9 @@ // astro:assets or the before/after pair), header with optional // icons + heading + actions, children container. `as` picks the root element // (article in the semantic card lists, div elsewhere). -import styles from 'components/Card.module.css'; -import Heading from 'components/Heading.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import styles from 'components/Card/styles.module.css'; +import Heading from 'components/Heading/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; interface Props { as?: 'div' | 'article'; diff --git a/src/components/Card.tsx b/src/components/Card/index.tsx similarity index 95% rename from src/components/Card.tsx rename to src/components/Card/index.tsx index a5a4c055..4995d85f 100644 --- a/src/components/Card.tsx +++ b/src/components/Card/index.tsx @@ -1,8 +1,8 @@ import React from 'react'; import cs from 'lib/cs'; -import Heading from './Heading'; -import ImageWrapper from './ImageWrapper'; -import styles from './Card.module.css'; +import Heading from '../Heading'; +import ImageWrapper from '../ImageWrapper'; +import styles from './styles.module.css'; // React twin of Card.astro, for the islands (.astro components cannot render // inside React trees). Keep the two in sync. Extras over the .astro twin, diff --git a/src/components/Card.module.css b/src/components/Card/styles.module.css similarity index 100% rename from src/components/Card.module.css rename to src/components/Card/styles.module.css diff --git a/src/components/CenteredCard.astro b/src/components/CenteredCard/index.astro similarity index 86% rename from src/components/CenteredCard.astro rename to src/components/CenteredCard/index.astro index 7a7658ce..a788da88 100644 --- a/src/components/CenteredCard.astro +++ b/src/components/CenteredCard/index.astro @@ -1,6 +1,6 @@ --- // Centered call-to-action card (port of the Next components/CenteredCard). -import styles from 'components/CenteredCard.module.css'; +import styles from 'components/CenteredCard/styles.module.css'; interface Props { heading?: string; diff --git a/src/components/CenteredCard.module.css b/src/components/CenteredCard/styles.module.css similarity index 100% rename from src/components/CenteredCard.module.css rename to src/components/CenteredCard/styles.module.css diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index fc55ba56..54bea38c 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -22,10 +22,10 @@ import type { MiniProject, Organization, ExportAsset } from 'lib/dataExplorer'; // RadioInput, RawInput, SelectInput); the chrome comes from the React twins // of the shared components (Section, Card, Tag, Button, Link). import styles from 'pages/[locale]/data/styles.module.css'; -import multiSelectStyles from './MultiSelectInput.module.css'; -import radioStyles from './RadioInput.module.css'; -import rawInputStyles from './RawInput.module.css'; -import selectInputStyles from './SelectInput.module.css'; +import multiSelectStyles from './MultiSelectInput/styles.module.css'; +import radioStyles from './RadioInput/styles.module.css'; +import rawInputStyles from './RawInput/styles.module.css'; +import selectInputStyles from './SelectInput/styles.module.css'; // Leaflet touches window at import time and cannot SSR. We lazy-load the map // module via a dynamic import() so its (leaflet) top-level code only runs in the diff --git a/src/components/Footer.astro b/src/components/Footer/index.astro similarity index 94% rename from src/components/Footer.astro rename to src/components/Footer/index.astro index 505584e2..067bee6f 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer/index.astro @@ -1,11 +1,11 @@ --- -import Icon from './Icon.astro'; -import Heading from './Heading.astro'; -import Link from './Link.astro'; -import { getT } from '../i18n'; +import Icon from '../Icon.astro'; +import Heading from '../Heading/index.astro'; +import Link from '../Link/index.astro'; +import { getT } from '../../i18n'; // CSS Modules recovered from the Next app (components/Footer + // components/Link). -import styles from './Footer.module.css'; +import styles from './styles.module.css'; // Ported from the Next app's components/Footer. Static; copyright year computed // at build time (Next did `new Date().getFullYear()` at render — same result diff --git a/src/components/Footer.module.css b/src/components/Footer/styles.module.css similarity index 100% rename from src/components/Footer.module.css rename to src/components/Footer/styles.module.css diff --git a/src/components/Heading.astro b/src/components/Heading/index.astro similarity index 92% rename from src/components/Heading.astro rename to src/components/Heading/index.astro index 4738e66c..388297e9 100644 --- a/src/components/Heading.astro +++ b/src/components/Heading/index.astro @@ -1,7 +1,7 @@ --- // Heading (port of the Next components/Heading): `size` picks both the // element and the size class; font 'normal' opts out of the heading font. -import styles from 'components/Heading.module.css'; +import styles from 'components/Heading/styles.module.css'; type Size = 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge' | 'superLarge'; diff --git a/src/components/Heading.tsx b/src/components/Heading/index.tsx similarity index 95% rename from src/components/Heading.tsx rename to src/components/Heading/index.tsx index db264497..67e1af29 100644 --- a/src/components/Heading.tsx +++ b/src/components/Heading/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import cs from 'lib/cs'; -import styles from './Heading.module.css'; +import styles from './styles.module.css'; // React twin of Heading.astro, for the islands (.astro components cannot // render inside React trees). Keep the two in sync. diff --git a/src/components/Heading.module.css b/src/components/Heading/styles.module.css similarity index 100% rename from src/components/Heading.module.css rename to src/components/Heading/styles.module.css diff --git a/src/components/Hero.astro b/src/components/Hero/index.astro similarity index 93% rename from src/components/Hero.astro rename to src/components/Hero/index.astro index 7ba845c7..60c87676 100644 --- a/src/components/Hero.astro +++ b/src/components/Hero/index.astro @@ -4,8 +4,8 @@ // background. Slots are rendered eagerly so conditionally-absent slot content // drops its wrapper div too (parity with the Next component, which only // emitted the wrappers when the prop was set). -import styles from 'components/Hero.module.css'; -import Heading from 'components/Heading.astro'; +import styles from 'components/Hero/styles.module.css'; +import Heading from 'components/Heading/index.astro'; interface Props { title: string; diff --git a/src/components/Hero.module.css b/src/components/Hero/styles.module.css similarity index 100% rename from src/components/Hero.module.css rename to src/components/Hero/styles.module.css diff --git a/src/components/HtmlOutput.module.css b/src/components/HtmlOutput/styles.module.css similarity index 100% rename from src/components/HtmlOutput.module.css rename to src/components/HtmlOutput/styles.module.css diff --git a/src/components/ImageWrapper.astro b/src/components/ImageWrapper/index.astro similarity index 94% rename from src/components/ImageWrapper.astro rename to src/components/ImageWrapper/index.astro index 766993de..96a30c80 100644 --- a/src/components/ImageWrapper.astro +++ b/src/components/ImageWrapper/index.astro @@ -5,7 +5,7 @@ // used for astro:assets /, which must be instantiated by // the caller (give them class={imageStyles.image} from this module). import type { HTMLAttributes } from 'astro/types'; -import styles from 'components/ImageWrapper.module.css'; +import styles from 'components/ImageWrapper/styles.module.css'; interface Props extends Omit, 'class'> { // string or a class:list-style array (falsy entries dropped) diff --git a/src/components/ImageWrapper.tsx b/src/components/ImageWrapper/index.tsx similarity index 94% rename from src/components/ImageWrapper.tsx rename to src/components/ImageWrapper/index.tsx index 8753fe32..0cdd8970 100644 --- a/src/components/ImageWrapper.tsx +++ b/src/components/ImageWrapper/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import cs from 'lib/cs'; -import styles from './ImageWrapper.module.css'; +import styles from './styles.module.css'; // React twin of ImageWrapper.astro, for the islands (.astro components cannot // render inside React trees). Keep the two in sync. With `src` it renders a diff --git a/src/components/ImageWrapper.module.css b/src/components/ImageWrapper/styles.module.css similarity index 100% rename from src/components/ImageWrapper.module.css rename to src/components/ImageWrapper/styles.module.css diff --git a/src/components/KeyFigure.astro b/src/components/KeyFigure/index.astro similarity index 93% rename from src/components/KeyFigure.astro rename to src/components/KeyFigure/index.astro index 14e5c7a7..ca058dc2 100644 --- a/src/components/KeyFigure.astro +++ b/src/components/KeyFigure/index.astro @@ -1,7 +1,7 @@ --- // Key figure (port of the Next components/KeyFigure): big value + plus icon // over a label (default slot). box (default) or circle variant. -import styles from 'components/KeyFigure.module.css'; +import styles from 'components/KeyFigure/styles.module.css'; import Icon from 'components/Icon.astro'; interface Props { diff --git a/src/components/KeyFigure.module.css b/src/components/KeyFigure/styles.module.css similarity index 100% rename from src/components/KeyFigure.module.css rename to src/components/KeyFigure/styles.module.css diff --git a/src/components/Link.astro b/src/components/Link/index.astro similarity index 95% rename from src/components/Link.astro rename to src/components/Link/index.astro index 1937f391..d2a00f8d 100644 --- a/src/components/Link.astro +++ b/src/components/Link/index.astro @@ -3,7 +3,7 @@ // static pages only need a styled anchor). Extra attributes (href, target, // rel, title, download, …) pass straight through to the element. import type { HTMLAttributes } from 'astro/types'; -import styles from 'components/Link.module.css'; +import styles from 'components/Link/styles.module.css'; type Variant = 'transparent' | 'button' | 'buttonTransparent' | 'icon' | 'underline'; diff --git a/src/components/Link.tsx b/src/components/Link/index.tsx similarity index 95% rename from src/components/Link.tsx rename to src/components/Link/index.tsx index 37f7fb03..2fc91e19 100644 --- a/src/components/Link.tsx +++ b/src/components/Link/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import cs from 'lib/cs'; -import styles from './Link.module.css'; +import styles from './styles.module.css'; // React twin of Link.astro, for the islands (.astro components cannot render // inside React trees). Keep the two in sync. diff --git a/src/components/Link.module.css b/src/components/Link/styles.module.css similarity index 100% rename from src/components/Link.module.css rename to src/components/Link/styles.module.css diff --git a/src/components/ListItem.astro b/src/components/ListItem/index.astro similarity index 89% rename from src/components/ListItem.astro rename to src/components/ListItem/index.astro index b5fb4019..8ad7bc71 100644 --- a/src/components/ListItem.astro +++ b/src/components/ListItem/index.astro @@ -1,7 +1,7 @@ --- // List item with a leading icon (port of the Next components/ListItem); // the icon slot defaults to the checkmark, like the Next component. -import styles from 'components/ListItem.module.css'; +import styles from 'components/ListItem/styles.module.css'; import Icon from 'components/Icon.astro'; interface Props { diff --git a/src/components/ListItem.module.css b/src/components/ListItem/styles.module.css similarity index 100% rename from src/components/ListItem.module.css rename to src/components/ListItem/styles.module.css diff --git a/src/components/MultiSelectInput.module.css b/src/components/MultiSelectInput/styles.module.css similarity index 100% rename from src/components/MultiSelectInput.module.css rename to src/components/MultiSelectInput/styles.module.css diff --git a/src/components/Navbar.astro b/src/components/Navbar/index.astro similarity index 93% rename from src/components/Navbar.astro rename to src/components/Navbar/index.astro index d44c49e5..38c59188 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar/index.astro @@ -1,13 +1,13 @@ --- -import Icon from './Icon.astro'; -import Button from './Button.astro'; -import Link from './Link.astro'; -import { getT, LOCALES } from '../i18n'; +import Icon from '../Icon.astro'; +import Button from '../Button/index.astro'; +import Link from '../Link/index.astro'; +import { getT, LOCALES } from '../../i18n'; // CSS Modules recovered from the Next app (components/Navbar + // components/Link). The language menu is a pure CSS hover/focus-within // dropdown (Next used a JS DropdownMenu + Popup portal and a mobile hamburger // toggle; see the adaptation notes in Navbar.module.css). -import styles from './Navbar.module.css'; +import styles from './styles.module.css'; // Ported from the Next app's components/Navbar. Static, zero-JS. `activePath` // highlights the current route link, matching Next's router.pathname === diff --git a/src/components/Navbar.module.css b/src/components/Navbar/styles.module.css similarity index 100% rename from src/components/Navbar.module.css rename to src/components/Navbar/styles.module.css diff --git a/src/components/Page.module.css b/src/components/Page/styles.module.css similarity index 100% rename from src/components/Page.module.css rename to src/components/Page/styles.module.css diff --git a/src/components/ProjectTypeIcon.astro b/src/components/ProjectTypeIcon/index.astro similarity index 97% rename from src/components/ProjectTypeIcon.astro rename to src/components/ProjectTypeIcon/index.astro index 5b2783a6..6397b4cf 100644 --- a/src/components/ProjectTypeIcon.astro +++ b/src/components/ProjectTypeIcon/index.astro @@ -8,7 +8,7 @@ // types) and fill="currentColor" so CSS theming is preserved. // Sizing comes from the recovered CSS Module (Next: components/ProjectTypeIcon/ // styles.module.css) — .icon + small/medium/large modifiers. -import styles from './ProjectTypeIcon.module.css'; +import styles from './styles.module.css'; type ProjectTypeKey = | 'FIND' | 'VALIDATE' | 'VALIDATE_IMAGE' | 'COMPARE' | 'COMPLETENESS' | 'STREET' | 'LOCATE'; diff --git a/src/components/ProjectTypeIcon.tsx b/src/components/ProjectTypeIcon/index.tsx similarity index 99% rename from src/components/ProjectTypeIcon.tsx rename to src/components/ProjectTypeIcon/index.tsx index 3ebe0e42..b8599592 100644 --- a/src/components/ProjectTypeIcon.tsx +++ b/src/components/ProjectTypeIcon/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; // Sizing from the recovered CSS Module (Next: components/ProjectTypeIcon/ // styles.module.css) — .icon + small/medium/large modifiers. -import styles from './ProjectTypeIcon.module.css'; +import styles from './styles.module.css'; // Faithful port of the Next app's ProjectTypeIcon (SVG paths verbatim). Ships in // the DataExplorer island bundle. currentColor fill so CSS can theme it. diff --git a/src/components/ProjectTypeIcon.module.css b/src/components/ProjectTypeIcon/styles.module.css similarity index 100% rename from src/components/ProjectTypeIcon.module.css rename to src/components/ProjectTypeIcon/styles.module.css diff --git a/src/components/ProjectsMapIsland.tsx b/src/components/ProjectsMapIsland/index.tsx similarity index 98% rename from src/components/ProjectsMapIsland.tsx rename to src/components/ProjectsMapIsland/index.tsx index cec05b51..23f528e6 100644 --- a/src/components/ProjectsMapIsland.tsx +++ b/src/components/ProjectsMapIsland/index.tsx @@ -4,10 +4,10 @@ import { MapContainer, TileLayer, CircleMarker, Popup } from 'react-leaflet'; import 'leaflet/dist/leaflet.css'; import type { MiniProject } from 'lib/dataExplorer'; -import Tag from './Tag'; +import Tag from '../Tag'; // CSS Module recovered from the Next app's ProjectsMap (popup card link); // the popup tag pills come from the shared Tag component. -import styles from './ProjectsMap.module.css'; +import styles from './styles.module.css'; // Client-ONLY leaflet map for the data explorer. This module statically imports // leaflet/react-leaflet (which touch window at import time), so it must NEVER be diff --git a/src/components/ProjectsMap.module.css b/src/components/ProjectsMapIsland/styles.module.css similarity index 100% rename from src/components/ProjectsMap.module.css rename to src/components/ProjectsMapIsland/styles.module.css diff --git a/src/components/RadioInput.module.css b/src/components/RadioInput/styles.module.css similarity index 100% rename from src/components/RadioInput.module.css rename to src/components/RadioInput/styles.module.css diff --git a/src/components/RawInput.module.css b/src/components/RawInput/styles.module.css similarity index 100% rename from src/components/RawInput.module.css rename to src/components/RawInput/styles.module.css diff --git a/src/components/Section.astro b/src/components/Section/index.astro similarity index 94% rename from src/components/Section.astro rename to src/components/Section/index.astro index 051c8843..846f059b 100644 --- a/src/components/Section.astro +++ b/src/components/Section/index.astro @@ -2,8 +2,8 @@ // Section wrapper (port of the Next components/Section): container + optional // heading/description block, content wrapper, actions row. Slots are rendered // eagerly so absent content also drops its wrapper div. -import styles from 'components/Section.module.css'; -import Heading from 'components/Heading.astro'; +import styles from 'components/Section/styles.module.css'; +import Heading from 'components/Heading/index.astro'; interface Props { id?: string; diff --git a/src/components/Section.tsx b/src/components/Section/index.tsx similarity index 96% rename from src/components/Section.tsx rename to src/components/Section/index.tsx index af54737c..e4c05494 100644 --- a/src/components/Section.tsx +++ b/src/components/Section/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import cs from 'lib/cs'; -import Heading from './Heading'; -import styles from './Section.module.css'; +import Heading from '../Heading'; +import styles from './styles.module.css'; // React twin of Section.astro, for the islands (.astro components cannot // render inside React trees). Keep the two in sync. headingContainerClassName diff --git a/src/components/Section.module.css b/src/components/Section/styles.module.css similarity index 100% rename from src/components/Section.module.css rename to src/components/Section/styles.module.css diff --git a/src/components/SelectInput.module.css b/src/components/SelectInput/styles.module.css similarity index 100% rename from src/components/SelectInput.module.css rename to src/components/SelectInput/styles.module.css diff --git a/src/components/Tag.astro b/src/components/Tag/index.astro similarity index 94% rename from src/components/Tag.astro rename to src/components/Tag/index.astro index 69ca78b1..6a9993f2 100644 --- a/src/components/Tag.astro +++ b/src/components/Tag/index.astro @@ -1,7 +1,7 @@ --- // Tag pill (port of the Next components/Tag). No default spacing: the pages // this replaces only set a spacing class where the Next pages passed one. -import styles from 'components/Tag.module.css'; +import styles from 'components/Tag/styles.module.css'; type Variant = 'primary' | 'transparent' | 'border' | 'icon'; type Spacing = 'small' | 'medium' | 'large'; diff --git a/src/components/Tag.tsx b/src/components/Tag/index.tsx similarity index 96% rename from src/components/Tag.tsx rename to src/components/Tag/index.tsx index e28df244..022dd32d 100644 --- a/src/components/Tag.tsx +++ b/src/components/Tag/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import cs from 'lib/cs'; -import styles from './Tag.module.css'; +import styles from './styles.module.css'; // React twin of Tag.astro, for the islands (.astro components cannot render // inside React trees). Keep the two in sync. `as` picks the element: the Next diff --git a/src/components/Tag.module.css b/src/components/Tag/styles.module.css similarity index 100% rename from src/components/Tag.module.css rename to src/components/Tag/styles.module.css diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 4c0c87bf..368a057e 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -1,7 +1,7 @@ --- import OgMeta from 'components/OgMeta.astro'; -import Navbar from 'components/Navbar.astro'; -import Footer from 'components/Footer.astro'; +import Navbar from 'components/Navbar/index.astro'; +import Footer from 'components/Footer/index.astro'; import { LOCALES } from '../i18n'; // Design tokens + base element styles, restored from the Next app's // src/styles/{variables,globals}.css. Component/page styling lives in @@ -9,7 +9,7 @@ import { LOCALES } from '../i18n'; import 'styles/variables.css'; import 'styles/globals.css'; // Page shell (Next: components/Page/styles.module.css). -import pageStyles from 'components/Page.module.css'; +import pageStyles from 'components/Page/styles.module.css'; // Fonts: the Next app used next/font (Lato body + DM Sans headings, preloaded // woff2, display:swap). Astro has no next/font, so we import the equivalent diff --git a/src/pages/404.astro b/src/pages/404.astro index e3f35897..a39056f3 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,8 +1,8 @@ --- import BaseLayout from 'layouts/BaseLayout.astro'; -import Heading from 'components/Heading.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Heading from 'components/Heading/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { DEFAULT_LOCALE } from '../i18n'; // Page module recovered from the Next app (pages/404/styles.module.css, // co-located here as 404.module.css); chrome via shared components. diff --git a/src/pages/[locale]/blogs/[slug]/index.astro b/src/pages/[locale]/blogs/[slug]/index.astro index 2a75a4de..9e2fb1e4 100644 --- a/src/pages/[locale]/blogs/[slug]/index.astro +++ b/src/pages/[locale]/blogs/[slug]/index.astro @@ -4,17 +4,17 @@ import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from 'layouts/BlogLayout.astro'; import Icon from 'components/Icon.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import Tag from 'components/Tag.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import Tag from 'components/Tag/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getT, LOCALES } from '../../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the ImageWrapper/HtmlOutput CSS Modules recovered from the // Next app; the chrome comes from the shared Hero/Section/Tag components. import styles from './styles.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; -import htmlOutputStyles from 'components/HtmlOutput.module.css'; +import imageStyles from 'components/ImageWrapper/styles.module.css'; +import htmlOutputStyles from 'components/HtmlOutput/styles.module.css'; // Blog DETAIL page. getStaticPaths = 6 locales x N blogs, producing // //blogs// with exact URL parity to Next (slug == entry.id == diff --git a/src/pages/[locale]/blogs/index.astro b/src/pages/[locale]/blogs/index.astro index 7397d06a..53008c83 100644 --- a/src/pages/[locale]/blogs/index.astro +++ b/src/pages/[locale]/blogs/index.astro @@ -4,12 +4,12 @@ import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BlogLayout from 'layouts/BlogLayout.astro'; import Icon from 'components/Icon.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import Card from 'components/Card.astro'; -import Tag from 'components/Tag.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import Card from 'components/Card/index.astro'; +import Tag from 'components/Tag/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the Link/ImageWrapper CSS Modules recovered from the Next @@ -17,8 +17,8 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // cardStyles is still imported for the custom cover slot (astro:assets // can't go through Card's plain-img coverImageUrl prop). import styles from './styles.module.css'; -import cardStyles from 'components/Card.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; +import cardStyles from 'components/Card/styles.module.css'; +import imageStyles from 'components/ImageWrapper/styles.module.css'; // Blog LIST page. One variant per locale (blog content is single-language // English markdown; only the chrome is translated), producing //blogs/ diff --git a/src/pages/[locale]/data/index.astro b/src/pages/[locale]/data/index.astro index d8880049..8a7d0eec 100644 --- a/src/pages/[locale]/data/index.astro +++ b/src/pages/[locale]/data/index.astro @@ -2,15 +2,15 @@ import type { GetStaticPaths } from 'astro'; import BaseLayout from 'layouts/BaseLayout.astro'; import DataExplorer, { PAGE_SIZE } from 'components/DataExplorer.tsx'; -import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import Card from 'components/Card.astro'; -import KeyFigure from 'components/KeyFigure.astro'; -import Heading from 'components/Heading.astro'; -import ListItem from 'components/ListItem.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import ProjectTypeIcon from 'components/ProjectTypeIcon/index.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import Card from 'components/Card/index.astro'; +import KeyFigure from 'components/KeyFigure/index.astro'; +import Heading from 'components/Heading/index.astro'; +import ListItem from 'components/ListItem/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getDataExplorerPayload } from 'lib/dataExplorer'; import { resolveRemoteImage, COVER_WIDTH } from 'lib/remoteImages'; import { getDict, getT, LOCALES } from '../../../i18n'; @@ -20,7 +20,7 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Hero/Section/Card/KeyFigure/Heading/ListItem components. cardStyles is // still imported for the custom before/after cover slot. import styles from './styles.module.css'; -import cardStyles from 'components/Card.module.css'; +import cardStyles from 'components/Card/styles.module.css'; // One static page per locale: //data/ (parity with the Next Pages-Router // route src/pages/[locale]/data/index.tsx). trailingSlash:always + directory diff --git a/src/pages/[locale]/get-involved/index.astro b/src/pages/[locale]/get-involved/index.astro index 16211240..b672f48b 100644 --- a/src/pages/[locale]/get-involved/index.astro +++ b/src/pages/[locale]/get-involved/index.astro @@ -1,18 +1,18 @@ --- import type { GetStaticPaths } from 'astro'; import BaseLayout from 'layouts/BaseLayout.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import CenteredCard from 'components/CenteredCard.astro'; -import Heading from 'components/Heading.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import CenteredCard from 'components/CenteredCard/index.astro'; +import Heading from 'components/Heading/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the Link/ImageWrapper CSS Modules recovered from the Next // app; the chrome comes from the shared Hero/Section/CenteredCard components. import styles from './styles.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; +import imageStyles from 'components/ImageWrapper/styles.module.css'; // Get-involved page. One static, translated variant per locale — // //get-involved/ — faithful to the Next Pages-Router page. Uses shared diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index 80bb1b7c..b48171a1 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -3,15 +3,15 @@ import type { GetStaticPaths } from 'astro'; import { getCollection } from 'astro:content'; import { Image } from 'astro:assets'; import BaseLayout from 'layouts/BaseLayout.astro'; -import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; +import ProjectTypeIcon from 'components/ProjectTypeIcon/index.astro'; import Icon from 'components/Icon.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import Card from 'components/Card.astro'; -import KeyFigure from 'components/KeyFigure.astro'; -import Tag from 'components/Tag.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import Card from 'components/Card/index.astro'; +import KeyFigure from 'components/KeyFigure/index.astro'; +import Tag from 'components/Tag/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getT, LOCALES } from '../../i18n'; import { getCommunityStats } from 'lib/data'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; @@ -20,8 +20,8 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // components. cardStyles is still imported for the custom cover slots (the // before/after pair and the astro:assets covers). import styles from './styles.module.css'; -import cardStyles from 'components/Card.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; +import cardStyles from 'components/Card/styles.module.css'; +import imageStyles from 'components/ImageWrapper/styles.module.css'; // Home page. One static, translated variant per locale — // — matching // the Next Pages-Router src/pages/[locale]/index.tsx. Faithful port of Hero, diff --git a/src/pages/[locale]/privacy/index.astro b/src/pages/[locale]/privacy/index.astro index 6c02bf6a..c4c8eb48 100644 --- a/src/pages/[locale]/privacy/index.astro +++ b/src/pages/[locale]/privacy/index.astro @@ -6,14 +6,14 @@ import remarkGfm from 'remark-gfm'; import remarkRehype from 'remark-rehype'; import rehypeStringify from 'rehype-stringify'; import BaseLayout from 'layouts/BaseLayout.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; import { getT, LOCALES } from '../../../i18n'; import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // Page module + the HtmlOutput CSS Module recovered from the Next app; the // chrome comes from the shared Hero/Section components. import styles from './styles.module.css'; -import htmlOutputStyles from 'components/HtmlOutput.module.css'; +import htmlOutputStyles from 'components/HtmlOutput/styles.module.css'; // Privacy page. The policy body is a fixed English markdown string (identical // in every locale — same as the Next app, which hardcoded it); only the tab diff --git a/src/pages/[locale]/projects/[id].astro b/src/pages/[locale]/projects/[id].astro index 15b9096e..db8ebd3d 100644 --- a/src/pages/[locale]/projects/[id].astro +++ b/src/pages/[locale]/projects/[id].astro @@ -5,17 +5,17 @@ import RemoteImage from 'components/RemoteImage.astro'; import { COVER_WIDTH } from 'lib/remoteImages'; import MapIsland from 'components/MapIsland.tsx'; import ProjectHistoryChart from 'components/ProjectHistoryChart.tsx'; -import ProjectTypeIcon from 'components/ProjectTypeIcon.astro'; -import type { ProjectTypeKey } from 'components/ProjectTypeIcon.tsx'; +import ProjectTypeIcon from 'components/ProjectTypeIcon/index.astro'; +import type { ProjectTypeKey } from 'components/ProjectTypeIcon/index.tsx'; import Icon from 'components/Icon.astro'; -import Hero from 'components/Hero.astro'; -import Section from 'components/Section.astro'; -import Card from 'components/Card.astro'; -import KeyFigure from 'components/KeyFigure.astro'; -import Tag from 'components/Tag.astro'; -import Heading from 'components/Heading.astro'; -import Link from 'components/Link.astro'; -import ImageWrapper from 'components/ImageWrapper.astro'; +import Hero from 'components/Hero/index.astro'; +import Section from 'components/Section/index.astro'; +import Card from 'components/Card/index.astro'; +import KeyFigure from 'components/KeyFigure/index.astro'; +import Tag from 'components/Tag/index.astro'; +import Heading from 'components/Heading/index.astro'; +import Link from 'components/Link/index.astro'; +import ImageWrapper from 'components/ImageWrapper/index.astro'; import { getAllProjects, getProjectByFirebaseId, type UrlInfo } from 'lib/data'; import { getFileSizeProperties, resolveAoiDownload } from 'lib/common'; import { getT, LOCALES } from '../../../i18n'; @@ -24,8 +24,8 @@ import { selectPaths } from 'packages/astro-incremental-static/src/index.ts'; // classes) + the Link/ImageWrapper/HtmlOutput CSS Modules recovered from the // Next app; the chrome comes from the shared components imported above. import styles from './styles.module.css'; -import imageStyles from 'components/ImageWrapper.module.css'; -import htmlOutputStyles from 'components/HtmlOutput.module.css'; +import imageStyles from 'components/ImageWrapper/styles.module.css'; +import htmlOutputStyles from 'components/HtmlOutput/styles.module.css'; export const getStaticPaths = (async () => { let projects = getAllProjects(); From 2f3d04020ce0268597adfb00e49c45f04dd09ef4 Mon Sep 17 00:00:00 2001 From: tnagorra Date: Tue, 14 Jul 2026 13:32:50 +0545 Subject: [PATCH 42/52] style: one attribute per line on multi-attribute tags House rule (matches main's JSX style): 2+ attributes each get their own line, closing bracket tag-aligned; single attribute stays inline. Enforced for tsx via @stylistic jsx rules. Also drops the 'port of the Next component' comment phrasing (why/how comments only) and dedups the map placeholder in DataExplorer. Whitespace-only in the built HTML. --- eslint.config.mjs | 11 + src/components/Button/index.astro | 9 +- src/components/Button/index.tsx | 6 +- src/components/Card/index.astro | 26 ++- src/components/Card/index.tsx | 9 +- src/components/CenteredCard/index.astro | 1 - src/components/DataExplorer.tsx | 79 ++++++-- src/components/Footer/index.astro | 26 ++- src/components/Heading/index.astro | 4 +- src/components/Hero/index.astro | 34 +++- src/components/Icon.astro | 10 +- src/components/ImageWrapper/index.astro | 17 +- src/components/ImageWrapper/index.tsx | 6 +- src/components/KeyFigure/index.astro | 7 +- src/components/Link/index.astro | 11 +- src/components/Link/index.tsx | 5 +- src/components/ListItem/index.astro | 2 - src/components/Navbar/index.astro | 41 +++- src/components/OgMeta.astro | 47 ++++- src/components/ProjectHistoryChart.tsx | 45 ++++- src/components/ProjectTypeIcon/index.astro | 8 +- src/components/ProjectsMapIsland/index.tsx | 15 +- src/components/Section/index.astro | 32 ++- src/components/Section/index.tsx | 5 +- src/components/Tag/index.astro | 9 +- src/components/Tag/index.tsx | 9 +- src/layouts/BaseLayout.astro | 61 +++++- src/layouts/BlogLayout.astro | 8 +- src/layouts/ProjectLayout.astro | 7 +- src/pages/404.astro | 10 +- src/pages/[locale]/blogs/[slug]/index.astro | 19 +- src/pages/[locale]/blogs/index.astro | 48 ++++- src/pages/[locale]/data/index.astro | 70 ++++++- src/pages/[locale]/get-involved/index.astro | 198 +++++++++++++++--- src/pages/[locale]/index.astro | 212 +++++++++++++++++--- src/pages/[locale]/privacy/index.astro | 18 +- src/pages/[locale]/projects/[id].astro | 98 +++++++-- 37 files changed, 998 insertions(+), 225 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 24eb371e..1ec1507b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -33,4 +33,15 @@ export default tseslint.config( '@stylistic/indent': ['error', 4], }, }, + { + // house attribute style: 2+ attributes -> one per line, closing + // bracket tag-aligned; a single attribute stays on the tag line + files: ['**/*.tsx'], + plugins: { '@stylistic': stylistic }, + rules: { + '@stylistic/jsx-max-props-per-line': ['error', { maximum: 1 }], + '@stylistic/jsx-first-prop-new-line': ['error', 'multiline-multiprop'], + '@stylistic/jsx-closing-bracket-location': ['error', 'tag-aligned'], + }, + }, ); diff --git a/src/components/Button/index.astro b/src/components/Button/index.astro index 794a55b5..fd460cdf 100644 --- a/src/components/Button/index.astro +++ b/src/components/Button/index.astro @@ -1,6 +1,5 @@ --- -// Button (port of the Next components/Button). Extra attributes (aria-*, id, -// event hooks added later, …) pass straight through to the element. +// Extra attributes (aria-*, id, …) pass straight through to the element. import type { HTMLAttributes } from 'astro/types'; import styles from 'components/Button/styles.module.css'; @@ -27,4 +26,8 @@ const variantMap: Record = { icon: styles.icon, }; --- - + diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx index 511ab01d..44a88a0a 100644 --- a/src/components/Button/index.tsx +++ b/src/components/Button/index.tsx @@ -26,7 +26,11 @@ function Button(props: Props) { ...rest } = props; return ( - ); diff --git a/src/components/Card/index.astro b/src/components/Card/index.astro index 96adec18..24924bb6 100644 --- a/src/components/Card/index.astro +++ b/src/components/Card/index.astro @@ -1,9 +1,9 @@ --- -// Card (port of the Next components/Card): optional cover (`coverImageUrl` -// prop for the plain-image case, `cover` slot for custom media such as -// astro:assets or the before/after pair), header with optional -// icons + heading + actions, children container. `as` picks the root element -// (article in the semantic card lists, div elsewhere). +// The cover has two forms: `coverImageUrl` for the plain-image case, the +// `cover` slot for custom media (astro:assets , the before/after +// pair) — a slot can't take the plain case because astro:assets components +// must be instantiated by the caller. `as` picks the root element (article +// in the semantic card lists, div elsewhere). import styles from 'components/Card/styles.module.css'; import Heading from 'components/Heading/index.astro'; import ImageWrapper from 'components/ImageWrapper/index.astro'; @@ -38,13 +38,25 @@ const cover = Astro.slots.has('cover') ? await Astro.slots.render('cover') : ''; {cover.trim() && } {coverImageUrl && ( - + )}
    {icons.trim() &&
    } - {heading && {heading}} + {heading && ( + {heading} + )}
    {actions.trim() &&
    }
    diff --git a/src/components/Card/index.tsx b/src/components/Card/index.tsx index 4995d85f..158bca54 100644 --- a/src/components/Card/index.tsx +++ b/src/components/Card/index.tsx @@ -6,8 +6,7 @@ import styles from './styles.module.css'; // React twin of Card.astro, for the islands (.astro components cannot render // inside React trees). Keep the two in sync. Extras over the .astro twin, -// used only by the islands: headingFont, actionsClassName, coverAlt, footer -// (the Next Card's footer/footerContent block). +// used only by the islands: headingFont, actionsClassName, coverAlt, footer. interface Props { as?: 'div' | 'article'; @@ -65,7 +64,11 @@ function Card(props: Props) {
    {icons &&
    {icons}
    } {heading && ( - + {heading} )} diff --git a/src/components/CenteredCard/index.astro b/src/components/CenteredCard/index.astro index a788da88..ff3ed8ff 100644 --- a/src/components/CenteredCard/index.astro +++ b/src/components/CenteredCard/index.astro @@ -1,5 +1,4 @@ --- -// Centered call-to-action card (port of the Next components/CenteredCard). import styles from 'components/CenteredCard/styles.module.css'; interface Props { diff --git a/src/components/DataExplorer.tsx b/src/components/DataExplorer.tsx index 54bea38c..f03a42d6 100644 --- a/src/components/DataExplorer.tsx +++ b/src/components/DataExplorer.tsx @@ -348,6 +348,15 @@ export default function DataExplorer(props: Props) { }, }; + // Shared pre-hydration/pre-data stand-in: same element for the Suspense + // fallback and the not-yet-mounted branch, so layout never shifts. + const mapPlaceholder = ( +

    If you are not redirected within 3 seconds, click here to go to the appropriate page.

  • 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 dDI5r^l4G?pMPIxgsihGyw675ktF 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