From 9d8ae3d32a7ef46e9c08ddd07bd3a679e014062e Mon Sep 17 00:00:00 2001 From: syoul Date: Wed, 25 Feb 2026 18:11:40 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20projet=20stand-alone=20sans=20d?= =?UTF-8?q?=C3=A9pendance=20aoe=5Ftechnology=5Fradar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Intégration du code source du framework dans radar-app/ (vendoring) - Suppression de la dépendance npm aoe_technology_radar - Création de scripts build-radar.js et serve-radar.js pour remplacer le CLI techradar - Adaptation de tous les scripts et Docker pour utiliser radar-app/ au lieu de .techradar - Refactorisation complète de Dockerfile.business - Mise à jour de la documentation (architecture, déploiement, développement) - Mise à jour de .gitignore pour ignorer les artefacts de build de radar-app/ - Ajout de postcss dans les dépendances Docker pour le build Next.js Le projet est maintenant complètement indépendant du package externe. Co-authored-by: Cursor --- .gitignore | 7 + Dockerfile.business | 78 +- Readme.md | 2 +- docker/add_team_link.py | 2 +- docker/add_team_link.sh | 6 +- docker/patch_document.py | 2 +- docs/README.md | 4 +- docs/app/README.md | 4 +- docs/app/architecture.md | 30 +- docs/app/deploiement.md | 32 +- docs/app/developpement.md | 4 +- docs/app/guide-page-equipe.md | 14 +- docs/app/troubleshooting.md | 34 +- export/team.md | 609 + export/technologies-team.md | 445 + package.json | 6 +- radar-app/.eslintrc.json | 6 + radar-app/.github/workflows/main.yml | 27 + radar-app/.github/workflows/semanticore.yml | 22 + radar-app/.gitignore | 42 + radar-app/.husky/commit-msg | 1 + radar-app/.husky/pre-commit | 1 + radar-app/.npmignore | 8 + radar-app/.prettierignore | 3 + radar-app/.prettierrc | 11 + radar-app/LICENSE | 204 + radar-app/bin/techradar.js | 167 + radar-app/commitlint.config.js | 26 + radar-app/data/config.default.json | 147 + radar-app/data/config.json | 3 + .../docs/assets/screenshot-techradar.png | Bin 0 -> 289339 bytes radar-app/next.config.js | 16 + radar-app/package-lock.json | 10011 ++++++++++++++++ radar-app/package.json | 47 + radar-app/postcss.config.js | 17 + radar-app/public/favicon.ico | Bin 0 -> 15086 bytes radar-app/public/logo.svg | 1 + radar-app/renovate.json | 3 + radar-app/scripts/buildData.ts | 271 + radar-app/scripts/errorHandler.ts | 108 + radar-app/scripts/positioner.ts | 95 + radar-app/src/app/sitemap.ts | 40 + .../src/components/Badge/Badge.module.css | 50 + radar-app/src/components/Badge/Badge.tsx | 105 + .../src/components/Filter/Filter.module.css | 8 + radar-app/src/components/Filter/Filter.tsx | 25 + .../components/Filter/QueryFilter.module.css | 29 + .../src/components/Filter/QueryFilter.tsx | 39 + .../components/Filter/RingFilter.module.css | 8 + .../src/components/Filter/RingFilter.tsx | 43 + .../src/components/Footer/Footer.module.css | 54 + radar-app/src/components/Footer/Footer.tsx | 20 + .../ItemDetail/ItemDetail.module.css | 119 + .../src/components/ItemDetail/ItemDetail.tsx | 81 + .../components/ItemList/ItemList.module.css | 76 + .../src/components/ItemList/ItemList.tsx | 67 + .../src/components/Layout/Layout.module.css | 24 + radar-app/src/components/Layout/Layout.tsx | 39 + radar-app/src/components/Logo/Logo.module.css | 54 + radar-app/src/components/Logo/Logo.tsx | 22 + .../Navigation/Navigation.module.css | 20 + .../src/components/Navigation/Navigation.tsx | 37 + .../QuadrantLink/QuadrantLink.module.css | 20 + .../components/QuadrantLink/QuadrantLink.tsx | 26 + .../QuadrantList/QuadrantList.module.css | 38 + .../components/QuadrantList/QuadrantList.tsx | 35 + radar-app/src/components/Radar/Blip.tsx | 58 + .../src/components/Radar/Chart.module.css | 9 + radar-app/src/components/Radar/Chart.tsx | 163 + .../src/components/Radar/Label.module.css | 37 + radar-app/src/components/Radar/Label.tsx | 36 + .../src/components/Radar/Legend.module.css | 35 + radar-app/src/components/Radar/Legend.tsx | 36 + .../src/components/Radar/Radar.module.css | 74 + radar-app/src/components/Radar/Radar.tsx | 111 + .../components/RingList/RingList.module.css | 38 + .../src/components/RingList/RingList.tsx | 27 + .../SocialLinks/SocialLinks.module.css | 29 + .../components/SocialLinks/SocialLinks.tsx | 66 + radar-app/src/components/Tags/Tags.module.css | 43 + radar-app/src/components/Tags/Tags.tsx | 47 + radar-app/src/icons/attention.svg | 1 + radar-app/src/icons/back.svg | 1 + radar-app/src/icons/blip_changed.svg | 1 + radar-app/src/icons/blip_default.svg | 1 + radar-app/src/icons/blip_new.svg | 1 + radar-app/src/icons/close.svg | 1 + radar-app/src/icons/edit.svg | 6 + radar-app/src/icons/filter.svg | 1 + radar-app/src/icons/overview.svg | 1 + radar-app/src/icons/pie.svg | 1 + radar-app/src/icons/question.svg | 1 + radar-app/src/icons/search.svg | 1 + radar-app/src/icons/social-facebook.svg | 4 + radar-app/src/icons/social-github.svg | 4 + radar-app/src/icons/social-gitlab.svg | 7 + radar-app/src/icons/social-instagram.svg | 4 + radar-app/src/icons/social-linkedin.svg | 4 + radar-app/src/icons/social-x.svg | 4 + radar-app/src/icons/social-xing.svg | 4 + radar-app/src/icons/social-youtube.svg | 4 + radar-app/src/icons/tag.svg | 1 + radar-app/src/lib/config.ts | 31 + radar-app/src/lib/data.ts | 131 + radar-app/src/lib/format.ts | 23 + radar-app/src/lib/types.ts | 45 + radar-app/src/lib/utils.ts | 14 + radar-app/src/pages/404.tsx | 22 + .../src/pages/[quadrant]/[id].module.css | 24 + radar-app/src/pages/[quadrant]/[id].tsx | 75 + radar-app/src/pages/[quadrant]/index.tsx | 52 + radar-app/src/pages/_app.tsx | 37 + radar-app/src/pages/_document.tsx | 27 + .../src/pages/help-and-about-tech-radar.tsx | 20 + radar-app/src/pages/index.tsx | 85 + radar-app/src/pages/overview.tsx | 84 + radar-app/src/styles/_globals.css | 126 + radar-app/src/styles/_hljs.css | 96 + radar-app/src/styles/custom.css | 2 + radar-app/tsconfig.json | 27 + scripts/build-radar.js | 251 + scripts/create-team-page.sh | 2 +- scripts/patch-navigation.sh | 2 +- scripts/serve-radar.js | 53 + scripts/start-business.sh | 20 +- 125 files changed, 15583 insertions(+), 123 deletions(-) create mode 100644 export/team.md create mode 100644 export/technologies-team.md create mode 100644 radar-app/.eslintrc.json create mode 100644 radar-app/.github/workflows/main.yml create mode 100644 radar-app/.github/workflows/semanticore.yml create mode 100644 radar-app/.gitignore create mode 100755 radar-app/.husky/commit-msg create mode 100644 radar-app/.husky/pre-commit create mode 100644 radar-app/.npmignore create mode 100644 radar-app/.prettierignore create mode 100644 radar-app/.prettierrc create mode 100644 radar-app/LICENSE create mode 100644 radar-app/bin/techradar.js create mode 100644 radar-app/commitlint.config.js create mode 100644 radar-app/data/config.default.json create mode 100644 radar-app/data/config.json create mode 100644 radar-app/docs/assets/screenshot-techradar.png create mode 100644 radar-app/next.config.js create mode 100644 radar-app/package-lock.json create mode 100644 radar-app/package.json create mode 100644 radar-app/postcss.config.js create mode 100644 radar-app/public/favicon.ico create mode 100644 radar-app/public/logo.svg create mode 100644 radar-app/renovate.json create mode 100644 radar-app/scripts/buildData.ts create mode 100644 radar-app/scripts/errorHandler.ts create mode 100644 radar-app/scripts/positioner.ts create mode 100644 radar-app/src/app/sitemap.ts create mode 100644 radar-app/src/components/Badge/Badge.module.css create mode 100644 radar-app/src/components/Badge/Badge.tsx create mode 100644 radar-app/src/components/Filter/Filter.module.css create mode 100644 radar-app/src/components/Filter/Filter.tsx create mode 100644 radar-app/src/components/Filter/QueryFilter.module.css create mode 100644 radar-app/src/components/Filter/QueryFilter.tsx create mode 100644 radar-app/src/components/Filter/RingFilter.module.css create mode 100644 radar-app/src/components/Filter/RingFilter.tsx create mode 100644 radar-app/src/components/Footer/Footer.module.css create mode 100644 radar-app/src/components/Footer/Footer.tsx create mode 100644 radar-app/src/components/ItemDetail/ItemDetail.module.css create mode 100644 radar-app/src/components/ItemDetail/ItemDetail.tsx create mode 100644 radar-app/src/components/ItemList/ItemList.module.css create mode 100644 radar-app/src/components/ItemList/ItemList.tsx create mode 100644 radar-app/src/components/Layout/Layout.module.css create mode 100644 radar-app/src/components/Layout/Layout.tsx create mode 100644 radar-app/src/components/Logo/Logo.module.css create mode 100644 radar-app/src/components/Logo/Logo.tsx create mode 100644 radar-app/src/components/Navigation/Navigation.module.css create mode 100644 radar-app/src/components/Navigation/Navigation.tsx create mode 100644 radar-app/src/components/QuadrantLink/QuadrantLink.module.css create mode 100644 radar-app/src/components/QuadrantLink/QuadrantLink.tsx create mode 100644 radar-app/src/components/QuadrantList/QuadrantList.module.css create mode 100644 radar-app/src/components/QuadrantList/QuadrantList.tsx create mode 100644 radar-app/src/components/Radar/Blip.tsx create mode 100644 radar-app/src/components/Radar/Chart.module.css create mode 100644 radar-app/src/components/Radar/Chart.tsx create mode 100644 radar-app/src/components/Radar/Label.module.css create mode 100644 radar-app/src/components/Radar/Label.tsx create mode 100644 radar-app/src/components/Radar/Legend.module.css create mode 100644 radar-app/src/components/Radar/Legend.tsx create mode 100644 radar-app/src/components/Radar/Radar.module.css create mode 100644 radar-app/src/components/Radar/Radar.tsx create mode 100644 radar-app/src/components/RingList/RingList.module.css create mode 100644 radar-app/src/components/RingList/RingList.tsx create mode 100644 radar-app/src/components/SocialLinks/SocialLinks.module.css create mode 100644 radar-app/src/components/SocialLinks/SocialLinks.tsx create mode 100644 radar-app/src/components/Tags/Tags.module.css create mode 100644 radar-app/src/components/Tags/Tags.tsx create mode 100644 radar-app/src/icons/attention.svg create mode 100644 radar-app/src/icons/back.svg create mode 100644 radar-app/src/icons/blip_changed.svg create mode 100644 radar-app/src/icons/blip_default.svg create mode 100644 radar-app/src/icons/blip_new.svg create mode 100644 radar-app/src/icons/close.svg create mode 100644 radar-app/src/icons/edit.svg create mode 100644 radar-app/src/icons/filter.svg create mode 100644 radar-app/src/icons/overview.svg create mode 100644 radar-app/src/icons/pie.svg create mode 100644 radar-app/src/icons/question.svg create mode 100644 radar-app/src/icons/search.svg create mode 100644 radar-app/src/icons/social-facebook.svg create mode 100644 radar-app/src/icons/social-github.svg create mode 100644 radar-app/src/icons/social-gitlab.svg create mode 100644 radar-app/src/icons/social-instagram.svg create mode 100644 radar-app/src/icons/social-linkedin.svg create mode 100644 radar-app/src/icons/social-x.svg create mode 100644 radar-app/src/icons/social-xing.svg create mode 100644 radar-app/src/icons/social-youtube.svg create mode 100644 radar-app/src/icons/tag.svg create mode 100644 radar-app/src/lib/config.ts create mode 100644 radar-app/src/lib/data.ts create mode 100644 radar-app/src/lib/format.ts create mode 100644 radar-app/src/lib/types.ts create mode 100644 radar-app/src/lib/utils.ts create mode 100644 radar-app/src/pages/404.tsx create mode 100644 radar-app/src/pages/[quadrant]/[id].module.css create mode 100644 radar-app/src/pages/[quadrant]/[id].tsx create mode 100644 radar-app/src/pages/[quadrant]/index.tsx create mode 100644 radar-app/src/pages/_app.tsx create mode 100644 radar-app/src/pages/_document.tsx create mode 100644 radar-app/src/pages/help-and-about-tech-radar.tsx create mode 100644 radar-app/src/pages/index.tsx create mode 100644 radar-app/src/pages/overview.tsx create mode 100644 radar-app/src/styles/_globals.css create mode 100644 radar-app/src/styles/_hljs.css create mode 100644 radar-app/src/styles/custom.css create mode 100644 radar-app/tsconfig.json create mode 100755 scripts/build-radar.js create mode 100755 scripts/serve-radar.js diff --git a/.gitignore b/.gitignore index f42f46c..e3d3901 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,13 @@ src/rd.json radar.backup config.json.backup +# radar-app build artifacts (le code source doit être versionné) +radar-app/node_modules +radar-app/out +radar-app/build +radar-app/.next +radar-app/.turbo + # Fichiers temporaires générés par serve-business.sh radar/*.md !radar-business/**/*.md diff --git a/Dockerfile.business b/Dockerfile.business index 57506f3..1faa91b 100644 --- a/Dockerfile.business +++ b/Dockerfile.business @@ -29,30 +29,22 @@ ENV NODE_ENV=production # Installation des dépendances système RUN apk add --no-cache git python3 -# Copie des fichiers de dépendances +# Copie des fichiers de dépendances racine COPY package.json package-lock.json* ./ -# Installation des dépendances Node -RUN npm install --legacy-peer-deps --ignore-scripts cytoscape cytoscape-cose-bilkent echarts-for-react +# Installation des dépendances Node racine (pour scripts: generate-team-visualization-data, etc.) +RUN npm install --legacy-peer-deps --ignore-scripts -# Patch du package aoe_technology_radar pour inclure gray-matter dans les dépendances runtime -RUN node -e "const fs=require('fs');const pkgPath='./node_modules/aoe_technology_radar/package.json';const pkg=JSON.parse(fs.readFileSync(pkgPath,'utf8'));pkg.dependencies=pkg.dependencies||{};pkg.dependencies['gray-matter']='^4.0.3';pkg.dependencies['postcss']='^8.4.47';pkg.scripts=pkg.scripts||{};pkg.scripts.prepare='';fs.writeFileSync(pkgPath,JSON.stringify(pkg,null,2));" - -# Copie du reste du projet +# Copie du reste du projet (inclut radar-app/) COPY . . RUN chmod +x scripts/start-business.sh -# Préparer .techradar une fois pour toutes (évite les réinstallations au runtime) -# Le script techradar.js crée automatiquement .techradar lors de l'exécution -# Création manuelle de .techradar en copiant depuis node_modules -RUN mkdir -p .techradar && \ - cp -r node_modules/aoe_technology_radar/* .techradar/ -# Créer le fichier hash pour éviter la recréation (calculé séparément pour éviter les problèmes d'échappement) -RUN node -e "const crypto=require('crypto');const fs=require('fs');const hash=crypto.createHash('sha256').update(fs.readFileSync('package.json')).digest('hex');fs.writeFileSync('.techradar/hash',hash);" -RUN node -e "const fs=require('fs');const p='.techradar/package.json';if(!fs.existsSync(p)){console.error('.techradar/package.json not found');process.exit(1);}const pkg=JSON.parse(fs.readFileSync(p,'utf8'));pkg.scripts=pkg.scripts||{};pkg.scripts.prepare='';fs.writeFileSync(p,JSON.stringify(pkg,null,2));" -# Installer les dépendances dans .techradar (y compris devDependencies pour tsx nécessaire à build:data) -RUN cd .techradar && npm install --legacy-peer-deps --include=dev cytoscape cytoscape-cose-bilkent echarts-for-react -RUN cd .techradar && npm run build:icons +# Installer les dépendances dans radar-app (Next.js et dépendances du framework) +# Désactiver le script prepare (husky) pour éviter les erreurs +RUN cd radar-app && \ + node -e "const fs=require('fs');const p='package.json';const pkg=JSON.parse(fs.readFileSync(p,'utf8'));pkg.scripts=pkg.scripts||{};pkg.scripts.prepare='';fs.writeFileSync(p,JSON.stringify(pkg,null,2));" && \ + npm install --legacy-peer-deps --include=dev cytoscape cytoscape-cose-bilkent echarts-for-react postcss && \ + npm run build:icons # --- CONFIGURATION BUSINESS --- # Application de la logique Business (remplacement de la config et des données) @@ -70,40 +62,40 @@ RUN echo "🔄 Régénération des données de visualisation équipe..." && \ ls -la public/team-visualization-data.json && \ head -20 public/team-visualization-data.json -# Copier les fichiers nécessaires dans .techradar avant le build (comme le fait techradar.js) -RUN rm -rf .techradar/data/radar && \ - mkdir -p .techradar/data/radar/2025-01-15 && \ - cp -r radar-business/2025-01-15/* .techradar/data/radar/2025-01-15/ && \ - # Supprimer toute release de démo (2017-03-01, 2024-03-01, etc.) éventuellement recopiée depuis le package - find .techradar/data/radar -mindepth 1 -maxdepth 1 ! -name '2025-01-15' -exec rm -rf {} + && \ - cp radar-business/config-business.json .techradar/data/config.json && \ - rm -rf .techradar/public && mkdir -p .techradar/public && \ - cp -r public/* .techradar/public/ && \ - cp public/_team-content .techradar/public/_team-content 2>/dev/null || true && \ - cp public/team-visualization-data.json .techradar/public/team-visualization-data.json 2>/dev/null || true && \ - cp about.md .techradar/data/about.md 2>/dev/null || echo "about.md not found, skipping" && \ - cp custom.css .techradar/src/styles/custom.css 2>/dev/null || echo "custom.css not found, skipping" && \ +# Copier les fichiers nécessaires dans radar-app avant le build +RUN rm -rf radar-app/data/radar && \ + mkdir -p radar-app/data/radar/2025-01-15 && \ + cp -r radar-business/2025-01-15/* radar-app/data/radar/2025-01-15/ && \ + # Supprimer toute release de démo (2017-03-01, 2024-03-01, etc.) éventuellement présentes + find radar-app/data/radar -mindepth 1 -maxdepth 1 ! -name '2025-01-15' -exec rm -rf {} + && \ + cp radar-business/config-business.json radar-app/data/config.json && \ + rm -rf radar-app/public && mkdir -p radar-app/public && \ + cp -r public/* radar-app/public/ && \ + cp public/_team-content radar-app/public/_team-content 2>/dev/null || true && \ + cp public/team-visualization-data.json radar-app/public/team-visualization-data.json 2>/dev/null || true && \ + cp about.md radar-app/data/about.md 2>/dev/null || echo "about.md not found, skipping" && \ + cp custom.css radar-app/src/styles/custom.css 2>/dev/null || echo "custom.css not found, skipping" && \ echo "Fichiers public copiés" && \ - echo "📁 Vérification des fichiers team dans .techradar/public/:" && \ - ls -la .techradar/public/ | grep -E "(team\.html|team-visualization)" && echo "✅ Fichiers team trouvés" || (echo "⚠️ Fichiers team non trouvés dans .techradar/public/" && echo "📁 Contenu de public/ source:" && ls -la public/ | head -10) && \ + echo "📁 Vérification des fichiers team dans radar-app/public/:" && \ + ls -la radar-app/public/ | grep -E "(team\.html|team-visualization)" && echo "✅ Fichiers team trouvés" || (echo "⚠️ Fichiers team non trouvés dans radar-app/public/" && echo "📁 Contenu de public/ source:" && ls -la public/ | head -10) && \ echo "📁 Vérification que _team-content existe dans public/ source:" && \ test -f public/_team-content && echo "✅ public/_team-content existe" || echo "❌ public/_team-content n'existe pas" -# Diagnostic : compter les fichiers markdown copiés dans .techradar/data/radar -RUN echo "📊 Comptage des fichiers .md dans .techradar/data/radar" && \ - find .techradar/data/radar -name "*.md" | wc -l && \ - find .techradar/data/radar -name "*.md" | head -10 +# Diagnostic : compter les fichiers markdown copiés dans radar-app/data/radar +RUN echo "📊 Comptage des fichiers .md dans radar-app/data/radar" && \ + find radar-app/data/radar -name "*.md" | wc -l && \ + find radar-app/data/radar -name "*.md" | head -10 # Créer la page Next.js /team ET un fichier HTML statique /team/index.html # La page Next.js pour le routing, le HTML statique pour garantir l'affichage -RUN mkdir -p .techradar/src/pages -COPY docker/team-page.tsx .techradar/src/pages/team.tsx +RUN mkdir -p radar-app/src/pages +COPY docker/team-page.tsx radar-app/src/pages/team.tsx # Modifier _document.tsx pour charger team-block-script.js en premier (avant le rendu) COPY docker/patch_document.py /tmp/patch_document.py RUN python3 /tmp/patch_document.py && \ echo "📄 _document.tsx apres modification:" && \ - cat .techradar/src/pages/_document.tsx + cat radar-app/src/pages/_document.tsx # Script Python pour ajouter le lien Équipe dans Navigation.tsx (supprime TOUS les doublons) COPY docker/add_team_link.py /tmp/add_team_link.py @@ -124,7 +116,7 @@ RUN /tmp/add_team_link.sh # Builder l'application en mode production pour éviter Fast Refresh # Utiliser WORKDIR pour changer de répertoire de manière fiable -WORKDIR /app/.techradar +WORKDIR /app/radar-app RUN npm run build:data RUN npm run build # S'assurer que _team-content.html et team-visualization-data.json sont copiés dans out/ @@ -153,9 +145,9 @@ RUN if [ -d "out" ]; then \ if [ -d "public/team" ]; then \ mkdir -p out/team && \ cp -rv public/team/* out/team/ && echo "✅ /team/index.html copié dans out/team/"; \ - elif [ -d "/app/.techradar/public/team" ]; then \ + elif [ -d "/app/radar-app/public/team" ]; then \ mkdir -p out/team && \ - cp -rv /app/.techradar/public/team/* out/team/ && echo "✅ /team/index.html copié depuis /app/.techradar/public/team/"; \ + cp -rv /app/radar-app/public/team/* out/team/ && echo "✅ /team/index.html copié depuis /app/radar-app/public/team/"; \ fi && \ echo "🔍 VÉRIFICATION: _team-content dans out/:" && \ ls -la out/_team-content 2>/dev/null || echo "❌ _team-content absent de out/" && \ diff --git a/Readme.md b/Readme.md index d40f7e6..bef92e2 100644 --- a/Readme.md +++ b/Readme.md @@ -2,7 +2,7 @@ Ce dépôt contient le contenu du Technology Radar AJR, publié sous : https://www.coeurbox.syoul.fr -Le projet est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar). +Le projet est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar), dont le code source est vendu dans le répertoire `radar-app/`. ## Vue d'ensemble diff --git a/docker/add_team_link.py b/docker/add_team_link.py index e77a2b8..f7e5712 100644 --- a/docker/add_team_link.py +++ b/docker/add_team_link.py @@ -3,7 +3,7 @@ import sys import re import os -f = ".techradar/src/components/Navigation/Navigation.tsx" +f = "radar-app/src/components/Navigation/Navigation.tsx" try: # Vérifier que le fichier existe diff --git a/docker/add_team_link.sh b/docker/add_team_link.sh index 79817a9..c750947 100644 --- a/docker/add_team_link.sh +++ b/docker/add_team_link.sh @@ -3,14 +3,14 @@ set -e echo "🔧 Modification de Navigation.tsx pour le lien Équipe..." -NAV_FILE=".techradar/src/components/Navigation/Navigation.tsx" +NAV_FILE="radar-app/src/components/Navigation/Navigation.tsx" # Vérifier que le fichier existe if [ ! -f "$NAV_FILE" ]; then echo "❌ Fichier $NAV_FILE introuvable" echo "📁 Répertoire actuel: $(pwd)" - echo "📁 Contenu de .techradar/src/components/:" - ls -la .techradar/src/components/ 2>/dev/null || echo "Répertoire non trouvé" + echo "📁 Contenu de radar-app/src/components/:" + ls -la radar-app/src/components/ 2>/dev/null || echo "Répertoire non trouvé" exit 1 fi diff --git a/docker/patch_document.py b/docker/patch_document.py index 0eec752..a7c56e0 100644 --- a/docker/patch_document.py +++ b/docker/patch_document.py @@ -3,7 +3,7 @@ import sys -doc_path = ".techradar/src/pages/_document.tsx" +doc_path = "radar-app/src/pages/_document.tsx" try: with open(doc_path, "r") as f: diff --git a/docs/README.md b/docs/README.md index 6fb32e7..3108f80 100644 --- a/docs/README.md +++ b/docs/README.md @@ -31,7 +31,7 @@ Données métier et contenu utilisé par l'application pour générer le radar : ## Vue d'ensemble -Le Technology Radar AJR est une application web interactive qui présente les technologies, outils, méthodes et plateformes utilisées et évaluées par AJR. Il est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar). +Le Technology Radar AJR est une application web interactive qui présente les technologies, outils, méthodes et plateformes utilisées et évaluées par AJR. Il est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar), dont le code source est vendu dans le répertoire `radar-app/`. Le radar est organisé en quatre quadrants et quatre anneaux (rings) pour classifier chaque technologie selon son niveau d'adoption et sa catégorie. @@ -39,7 +39,7 @@ Le radar est organisé en quatre quadrants et quatre anneaux (rings) pour classi - **Radar en ligne** : https://www.coeurbox.syoul.fr - **Dépôt Git** : https://git.open.us.org/AJR/TechradarDev -- **Framework source** : https://github.com/AOEpeople/aoe_technology_radar +- **Framework source** : https://github.com/AOEpeople/aoe_technology_radar (code vendu dans `radar-app/`) ## Démarrage rapide diff --git a/docs/app/README.md b/docs/app/README.md index c1527cc..ae929fb 100644 --- a/docs/app/README.md +++ b/docs/app/README.md @@ -4,7 +4,7 @@ Bienvenue dans la documentation du projet AJR Technology Radar (CoeurBox). ## Vue d'ensemble -Le Technology Radar AJR est une application web interactive qui présente les technologies, outils, méthodes et plateformes utilisées et évaluées par AJR. Il est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar). +Le Technology Radar AJR est une application web interactive qui présente les technologies, outils, méthodes et plateformes utilisées et évaluées par AJR. Il est basé sur le framework [aoe_technology_radar](https://github.com/AOEpeople/aoe_technology_radar), dont le code source est vendu dans le répertoire `radar-app/`. Le radar est organisé en quatre quadrants et quatre anneaux (rings) pour classifier chaque technologie selon son niveau d'adoption et sa catégorie. @@ -38,7 +38,7 @@ Les données utilisées par l'application sont dans le dossier [`../data/`](../d - **Radar en ligne** : https://www.coeurbox.syoul.fr - **Radar Technologique Laplank** : http://laplank.techradar.syoul.fr:3006 - **Dépôt Git** : https://git.open.us.org/AJR/TechradarDev -- **Framework source** : https://github.com/AOEpeople/aoe_technology_radar +- **Framework source** : https://github.com/AOEpeople/aoe_technology_radar (code vendu dans `radar-app/`) ## Démarrage rapide diff --git a/docs/app/architecture.md b/docs/app/architecture.md index 29f96b6..29532f8 100644 --- a/docs/app/architecture.md +++ b/docs/app/architecture.md @@ -2,7 +2,7 @@ ## Vue d'ensemble -Le projet AJR Technology Radar est une application web statique construite avec le framework `aoe_technology_radar` (basé sur Next.js). L'application génère un site web interactif à partir de fichiers Markdown organisés par dates de release. +Le projet AJR Technology Radar est une application web statique construite avec le framework `aoe_technology_radar` (basé sur Next.js), dont le code source est vendu dans le répertoire `radar-app/`. L'application génère un site web interactif à partir de fichiers Markdown organisés par dates de release. ## Structure des répertoires @@ -42,7 +42,7 @@ TechradarDev/ │ ├── app/ # Documentation technique de l'application │ └── data/ # Données métier et contenu │ └── team/ # Profils individuels des membres de l'équipe -├── .techradar/ # Framework aoe_technology_radar (généré pendant le build) +├── radar-app/ # Framework aoe_technology_radar (code vendu dans le repo) │ ├── src/ # Code source Next.js du framework │ │ ├── pages/ # Pages Next.js (routes) │ │ │ └── team.tsx # Page /team générée par Dockerfile @@ -79,15 +79,17 @@ Le projet utilise le framework **aoe_technology_radar** qui est basé sur : ### Processus de build -1. **Installation des dépendances** : `npm install` installe `aoe_technology_radar` depuis GitHub -2. **Préparation du framework** : Copie de `node_modules/aoe_technology_radar` vers `.techradar/` -3. **Configuration** : Copie de `radar-business/config-business.json` vers `.techradar/data/config.json` -4. **Données** : Copie des blips depuis `radar-business/2025-01-15/` vers `.techradar/data/radar/2025-01-15/` -5. **Modifications personnalisées** : - - Création de `.techradar/src/pages/team.tsx` (page Next.js pour `/team`) - - Modification de `.techradar/src/components/Navigation/Navigation.tsx` (ajout du lien Équipe) -6. **Build Next.js** : `npm run build:data` puis `npm run build` génère les fichiers statiques -7. **Output** : Fichiers statiques dans `.techradar/out/` servis par un serveur statique +1. **Injection des données** : Le script `scripts/build-radar.js` copie : + - `radar-business/config-business.json` → `radar-app/data/config.json` + - `radar-business/2025-01-15/` → `radar-app/data/radar/2025-01-15/` + - `public/*` → `radar-app/public/` + - Génère `team-visualization-data.json` et le copie dans `radar-app/public/` +2. **Modifications personnalisées** : + - Création de `radar-app/src/pages/team.tsx` (page Next.js pour `/team`) + - Modification de `radar-app/src/components/Navigation/Navigation.tsx` (ajout du lien Équipe) + - Modification de `radar-app/src/pages/_document.tsx` (chargement du script team-block-script.js) +3. **Build Next.js** : `cd radar-app && npm run build:data && npm run build` génère les fichiers statiques +4. **Output** : Fichiers statiques dans `radar-app/out/` copiés vers `build/` à la racine ### Modifications personnalisées @@ -96,7 +98,7 @@ Le projet apporte plusieurs modifications au framework de base : #### 1. Page Equipe (`/team`) - **Script principal** : `public/team-block-script.js` (injection du contenu et visualisations) -- **Route Next.js** : `.techradar/src/pages/team.tsx` (page vide, le script remplace le contenu) +- **Route Next.js** : `radar-app/src/pages/team.tsx` (page vide, le script remplace le contenu) - **Chargement** : Le script est charge via `_document.tsx` avec `strategy="beforeInteractive"` - **Bibliotheques** : Cytoscape.js et ECharts charges depuis CDN - **Donnees** : `public/team-visualization-data.json` genere par `scripts/generate-team-visualization-data.js` @@ -104,7 +106,7 @@ Le projet apporte plusieurs modifications au framework de base : #### 2. Navigation modifiée -- **Fichier modifié** : `.techradar/src/components/Navigation/Navigation.tsx` +- **Fichier modifié** : `radar-app/src/components/Navigation/Navigation.tsx` - **Modification** : Ajout du lien "👥 Équipe" vers `/team` - **Méthode** : Script Python dans `Dockerfile.business` qui : - Supprime tous les liens Équipe existants (évite les doublons) @@ -160,7 +162,7 @@ Description de la technologie en Markdown. ## Dépendances principales -- **aoe_technology_radar** : Framework principal (dépendance GitHub) +- **radar-app/** : Framework principal (code vendu dans le repo, basé sur aoe_technology_radar) - **Node.js** : Runtime JavaScript (version 20+) - **npm** : Gestionnaire de paquets - **gray-matter** : Parsing YAML front matter diff --git a/docs/app/deploiement.md b/docs/app/deploiement.md index a14cf7a..d41392c 100644 --- a/docs/app/deploiement.md +++ b/docs/app/deploiement.md @@ -101,30 +101,32 @@ Le `Dockerfile.business` effectue les opérations suivantes : - Git et Python3 pour les scripts - Variables d'environnement pour désactiver Husky -2. **Préparation du framework** : - - Copie de `node_modules/aoe_technology_radar` vers `.techradar/` - - Patch du package pour inclure `gray-matter` et `postcss` +2. **Installation des dépendances** : + - Installation des dépendances racine (pour scripts: generate-team-visualization-data, etc.) + - Installation des dépendances dans `radar-app/` (Next.js et dépendances du framework) + - Désactivation du script `prepare` (husky) dans `radar-app/package.json` 3. **Configuration des données** : - - Purge des données de démo : `rm -rf .techradar/data/radar/*` - - Copie des blips business : `radar-business/2025-01-15/*` → `.techradar/data/radar/2025-01-15/` - - Copie de la config : `radar-business/config-business.json` → `.techradar/data/config.json` + - Purge des données de démo : `rm -rf radar-app/data/radar/*` + - Copie des blips business : `radar-business/2025-01-15/*` → `radar-app/data/radar/2025-01-15/` + - Copie de la config : `radar-business/config-business.json` → `radar-app/data/config.json` + - Copie des fichiers publics : `public/*` → `radar-app/public/` + - Génération et copie de `team-visualization-data.json` dans `radar-app/public/` 4. **Modifications personnalisees** : - - Creation de `.techradar/src/pages/team.tsx` (page Next.js vide pour `/team`) - - Modification de `.techradar/src/pages/_document.tsx` via script Python : + - Creation de `radar-app/src/pages/team.tsx` (page Next.js vide pour `/team`) + - Modification de `radar-app/src/pages/_document.tsx` via script Python : - Ajout du chargement de `team-block-script.js` avec `strategy="beforeInteractive"` - - Modification de `.techradar/src/components/Navigation/Navigation.tsx` via script Python : + - Modification de `radar-app/src/components/Navigation/Navigation.tsx` via script Python : - Suppression de tous les liens Equipe existants (evite les doublons) - Ajout d'un seul lien "Equipe" apres le lien "Vue d'ensemble" 5. **Build Next.js** : - - `npm run build:data` : Génère les données du radar - - `npm run build` : Build de l'application Next.js + - `cd radar-app && npm run build:data` : Génère les données du radar + - `cd radar-app && npm run build` : Build de l'application Next.js -6. **Copie des fichiers publics** : - - Copie de `public/team-block-script.js` et `public/team-visualization-data.json` vers `.techradar/public/` - - Les fichiers sont ensuite copies dans `out/` apres le build +6. **Post-build** : + - Copie des fichiers additionnels (`_team-content`, `team-visualization-data.json`, `team/`) depuis `radar-app/public/` vers `radar-app/out/` 7. **Demarrage** : - Execution de `scripts/start-business.sh` qui : @@ -138,7 +140,7 @@ Le `Dockerfile.business` effectue les opérations suivantes : Le script `docker/add_team_link.py` : -1. **Verifie l'existence du fichier** : `.techradar/src/components/Navigation/Navigation.tsx` +1. **Verifie l'existence du fichier** : `radar-app/src/components/Navigation/Navigation.tsx` 2. **Supprime tous les liens Equipe existants** : Evite les doublons meme si le script s'execute plusieurs fois 3. **Ajoute un seul lien Equipe** : Apres le lien "Vue d'ensemble" 4. **Verifie le resultat** : S'assure qu'il n'y a qu'un seul lien apres l'operation diff --git a/docs/app/developpement.md b/docs/app/developpement.md index 5ebcdaf..6e6e205 100644 --- a/docs/app/developpement.md +++ b/docs/app/developpement.md @@ -22,7 +22,7 @@ cd TechradarDev npm install ``` -Cette commande installe le framework `aoe_technology_radar` depuis GitHub. +Cette commande installe les dépendances racine (pour les scripts utilitaires). Le framework Next.js est déjà présent dans `radar-app/` (code vendu dans le repo). ## Développement local @@ -58,7 +58,7 @@ Pour générer les fichiers statiques : npm run build ``` -Les fichiers générés sont créés dans le répertoire `build/` (généré par le framework). +Les fichiers générés sont créés dans le répertoire `build/` (copiés depuis `radar-app/out/`). ## Structure des fichiers radar diff --git a/docs/app/guide-page-equipe.md b/docs/app/guide-page-equipe.md index 3d0d4b4..3242e31 100644 --- a/docs/app/guide-page-equipe.md +++ b/docs/app/guide-page-equipe.md @@ -21,10 +21,10 @@ Cette approche evite les conflits SSR tout en permettant des visualisations inte ### Fichiers impliques - **Script principal** : `public/team-block-script.js` (injection du contenu et visualisations) -- **Page Next.js** : `.techradar/src/pages/team.tsx` (page vide, le script remplace le contenu) +- **Page Next.js** : `radar-app/src/pages/team.tsx` (page vide, le script remplace le contenu) - **Donnees JSON** : `public/team-visualization-data.json` (genere par `scripts/generate-team-visualization-data.js`) -- **Navigation** : `.techradar/src/components/Navigation/Navigation.tsx` (modifiee par script Python) -- **Document modifie** : `.techradar/src/pages/_document.tsx` (modifie pour charger le script) +- **Navigation** : `radar-app/src/components/Navigation/Navigation.tsx` (modifiee par script Python) +- **Document modifie** : `radar-app/src/pages/_document.tsx` (modifie pour charger le script) ## Acces @@ -184,8 +184,8 @@ Description du membre de l'equipe. ### Dans le Dockerfile -1. **Copie des fichiers publics** : `public/team-block-script.js` et `public/team-visualization-data.json` vers `.techradar/public/` -2. **Creation de la page Next.js** : Genere `.techradar/src/pages/team.tsx` (page vide) +1. **Copie des fichiers publics** : `public/team-block-script.js` et `public/team-visualization-data.json` vers `radar-app/public/` +2. **Creation de la page Next.js** : Genere `radar-app/src/pages/team.tsx` (page vide) 3. **Modification de _document.tsx** : Ajoute le chargement de `team-block-script.js` avec `strategy="beforeInteractive"` 4. **Modification de Navigation** : Ajoute le lien "Equipe" dans `Navigation.tsx` via script Python 5. **Build Next.js** : Genere les fichiers statiques dans `out/` @@ -332,7 +332,7 @@ Parametres disponibles : **Solutions** : 1. Verifier les logs Docker lors du build -2. Verifier que le fichier `.techradar/src/components/Navigation/Navigation.tsx` existe +2. Verifier que le fichier `radar-app/src/components/Navigation/Navigation.tsx` existe 3. Rebuild avec `--no-cache` pour forcer l'execution du script ### La page `/team` affiche le radar au lieu des visualisations @@ -386,7 +386,7 @@ docker compose -f docker-compose.business.yml up -d ## Fichiers associes - **Script principal** : `public/team-block-script.js` (injection et visualisations) -- **Page Next.js** : `docker/team-page.tsx` (page vide copiee vers `.techradar/src/pages/team.tsx`) +- **Page Next.js** : `docker/team-page.tsx` (page vide copiee vers `radar-app/src/pages/team.tsx`) - **Donnees JSON** : `public/team-visualization-data.json` (genere) - **Script de generation** : `scripts/generate-team-visualization-data.js` - **Profils equipe** : `docs/data/team/*.md` (fichiers Markdown avec metadonnees YAML) diff --git a/docs/app/troubleshooting.md b/docs/app/troubleshooting.md index 47117c7..5bd5040 100644 --- a/docs/app/troubleshooting.md +++ b/docs/app/troubleshooting.md @@ -23,7 +23,7 @@ **Vérification** : ```bash # Dans le conteneur -grep -c 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx +grep -c 'href="/team"' radar-app/src/components/Navigation/Navigation.tsx # Doit retourner 1 (un seul lien) ``` @@ -38,14 +38,14 @@ grep -c 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx **Solutions** : 1. Vérifier les logs Docker lors du build pour voir si le script Python s'est exécuté -2. Vérifier que le fichier `.techradar/src/components/Navigation/Navigation.tsx` existe +2. Vérifier que le fichier `radar-app/src/components/Navigation/Navigation.tsx` existe 3. Vérifier que le script Python a bien trouvé l'emplacement pour insérer le lien 4. Rebuild avec `--no-cache` pour forcer l'exécution **Vérification** : ```bash # Dans le conteneur -grep 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx +grep 'href="/team"' radar-app/src/components/Navigation/Navigation.tsx # Doit retourner le lien ``` @@ -66,10 +66,10 @@ grep 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx 3. Vérifier dans les logs Docker que les données ont été copiées : ```bash # Dans le conteneur - find .techradar/data/radar -name "*.md" | wc -l + find radar-app/data/radar -name "*.md" | wc -l # Doit retourner ~38 fichiers ``` -4. Vérifier que `config-business.json` a été copié vers `.techradar/data/config.json` +4. Vérifier que `config-business.json` a été copié vers `radar-app/data/config.json` **Migration des rings** : ```bash @@ -110,8 +110,8 @@ find . -name "*.md" -exec sed -i 's/^ring: support$/ring: adopt/' {} \; **Verification** : ```bash # Dans le conteneur -ls -l .techradar/public/team-block-script.js -grep "team-block-script" .techradar/src/pages/_document.tsx +ls -l radar-app/public/team-block-script.js +grep "team-block-script" radar-app/src/pages/_document.tsx ``` #### Page `/team` retourne 404 @@ -123,14 +123,14 @@ grep "team-block-script" .techradar/src/pages/_document.tsx - Le serveur utilise `--single` qui redirige vers index.html **Solutions** : -1. Verifier que le Dockerfile a bien cree `.techradar/src/pages/team.tsx` +1. Verifier que le Dockerfile a bien cree `radar-app/src/pages/team.tsx` 2. Verifier que `scripts/start-business.sh` ne contient pas l'option `--single` 3. Verifier les logs du build Docker **Verification** : ```bash # Dans le conteneur -ls -l .techradar/src/pages/team.tsx +ls -l radar-app/src/pages/team.tsx ls -l out/team/index.html ``` @@ -244,20 +244,20 @@ Dans Portainer, cocher l'option "No cache" lors du rebuild de la stack. docker exec -it /bin/sh # Verifier les fichiers de la page equipe -ls -la .techradar/src/pages/team.tsx -ls -la .techradar/public/team-block-script.js +ls -la radar-app/src/pages/team.tsx +ls -la radar-app/public/team-block-script.js ls -la out/team-block-script.js ls -la out/team-visualization-data.json # Verifier les modifications -grep "team-block-script" .techradar/src/pages/_document.tsx -ls -la .techradar/src/components/Navigation/Navigation.tsx +grep "team-block-script" radar-app/src/pages/_document.tsx +ls -la radar-app/src/components/Navigation/Navigation.tsx # Compter les blips -find .techradar/data/radar -name "*.md" | wc -l +find radar-app/data/radar -name "*.md" | wc -l # Verifier la config -head -60 .techradar/data/config.json +head -60 radar-app/data/config.json ``` ### Vérifier les logs @@ -287,10 +287,10 @@ grep -h "^ring:" *.md | sort | uniq -c ```bash # Compter les liens Équipe -grep -c 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx +grep -c 'href="/team"' radar-app/src/components/Navigation/Navigation.tsx # Voir le contexte autour du lien -grep -A 3 -B 3 'href="/team"' .techradar/src/components/Navigation/Navigation.tsx +grep -A 3 -B 3 'href="/team"' radar-app/src/components/Navigation/Navigation.tsx ``` ## Obtenir de l'aide diff --git a/export/team.md b/export/team.md new file mode 100644 index 0000000..e77c80e --- /dev/null +++ b/export/team.md @@ -0,0 +1,609 @@ +# Profils de l'équipe + +Ce document contient tous les profils des membres de l'équipe fusionnés. + +--- + +## 1000i100 + +--- +name: "1000i100" +fullName: "1000i100" +role: "DevOps & Développeur Web" +availability: 50 +seniorityLevel: expert +yearsExperience: 10 +joinDate: "2018-01" +interests: ["Serverless", "CI/CD", "Docker", "Photographie", "CNV", "Modèles économiques"] +skills: + - name: "Serverless" + level: expert + years: 5 + lastUsed: "2024-12" + - name: "GitLab" + level: expert + years: 6 + lastUsed: "2024-12" + - name: "CI/CD" + level: expert + years: 6 + lastUsed: "2024-12" + - name: "Docker" + level: expert + years: 7 + lastUsed: "2024-12" + - name: "web" + level: expert + years: 10 + lastUsed: "2024-12" +softSkills: + - "Polyvalence" + - "Photographie" + - "Soutien psychologique" + - "CNV (Communication Non Violente)" +projects: + - "Outils serverless" + - "Pipeline GitLab CI/CD" +--- + +Développeur d'outils serverless, et plombier des pipeline Gitlab (CI/CD avec Docker). Enfin une monnaie mécaniquement redistributive ! Avec un soupçon de revenu de base, une bonne dose d'auto-gestion et une communauté adorable ! Informaticien couteau suisse à dominante développeur web, photographe à ses heures, soutien psy informel, amateur de CNV et de modèles économiques expérimental et éthique ! + +--- + +## aya + +--- +name: "aya" +fullName: "aya" +role: "Administrateur Système & Infrastructure Distribuée" +availability: 50 +seniorityLevel: expert +yearsExperience: 23 +joinDate: "2021-01" +interests: ["Logiciels libres", "Infrastructure distribuée", "Stockage distribué", "IPFS", "ThreeFold"] +skills: + - name: "Linux" + level: expert + years: 23 + lastUsed: "2024-12" + - name: "glusterfs" + level: intermediate + years: 5 + lastUsed: "2023-06" + - name: "cephfs" + level: intermediate + years: 4 + lastUsed: "2023-06" + - name: "ipfs" + level: intermediate + years: 3 + lastUsed: "2024-12" + - name: "infrastructure" + level: expert + years: 15 + lastUsed: "2024-12" + - name: "systèmes distribués" + level: expert + years: 10 + lastUsed: "2024-12" + - name: "ThreeFold" + level: intermediate + years: 3 + lastUsed: "2024-12" +softSkills: + - "Vulgarisation" + - "Autonomie" + - "Recherche" +projects: + - "Infrastructure d'hébergement distribué" +--- + +Je participe à la vulgarisation des logiciels libres depuis ma première installation de linux debian potato en 2001. + +J'ai découvert la monnaie libre à travers mes recherches concernant les systèmes de fichiers. Travaillant principalement sur des infrastructures d'hébergement distribué, j'ai utilisé différents systèmes de réplication de fichiers comme glusterfs, cephfs, pour en arriver à ipfs. C'est en cherchant une alternative à filecoin, la crypto proposée par ipfs pour mettre en commun son espace de stockage, que je découvre la monnaie libre, on est en 2021. + +Je rejoins Axiom-Team pour participer à la vulgarisation de la monnaie libre. + +--- + +## boris + +--- +name: "boris" +fullName: "boris" +role: "UX/UI Designer & Développeur Full Stack" +availability: 40 +seniorityLevel: intermediate +yearsExperience: 8 +joinDate: "2018-01" +interests: ["UX/UI", "LLM", "Langues étrangères", "Médecine traditionnelle chinoise", "Feng Shui", "Tao", "Musique"] +skills: + - name: "UX" + level: intermediate + years: 5 + lastUsed: "2024-12" + - name: "UI" + level: intermediate + years: 5 + lastUsed: "2024-12" + - name: "Figma" + level: intermediate + years: 4 + lastUsed: "2024-12" + - name: "LLM" + level: intermediate + years: 2 + lastUsed: "2024-12" + - name: "JavaScript" + level: intermediate + years: 6 + lastUsed: "2024-12" + - name: "TypeScript" + level: intermediate + years: 4 + lastUsed: "2024-12" + - name: "APIs" + level: intermediate + years: 5 + lastUsed: "2024-12" + - name: "Vis.js" + level: intermediate + years: 3 + lastUsed: "2024-11" +softSkills: + - "Polyvalence" + - "Créativité" + - "Curiosité" + - "Multiculturalisme" +projects: + - "UX/UI de Ğecko (Figma)" + - "App de médecine chinoise basée sur LLM" + - "Site monnaie-libre.fr" + - "Duniter | Accueil" + - "cesium.app" + - "Ğ1Quest (vue radar des annonces Ğchange)" + - "Ğrocéliande (skin Ğchange style Amazon)" + - "g1.business (routes commerciales)" + - "Ğ1Gate (flux de monnaie en treemap)" + - "H2G2 (guide du terraformeur terrien)" + - "Ğ1 KDE Notifier" + - "Simulateur RSA / Prime d'activité" + - "Cerveau externe (Vis.js pour impros rap)" + - "NoBS Troll-Emploi (moteur de recherche d'emploi)" +--- + +Il est assez dispersé, "jack of all trade, master of none". Ces derniers temps, il passe beaucoup de temps à faire de la génération de musiques rigolotes (ou autre) avec les LLM et Suno. Il aime les langues étrangères (l'anglais surtout), la médecine traditionnelle chinoise, le Feng Shui (le tao en général). Il est communiste. Il a bossé sur l'UX/UI de Ğecko (via Figma). Grâce à Cursor, il développe une app de médecine chinoise basée sur les LLM. Dans la Ğ1, il a essayé de contribuer à l'onboarding (il a refait le site monnaie-libre.fr, Duniter | Accueil, et fait le site cesium.app). Il a aussi fait des clients Ğchange : Ğ1Quest (une projection des annonces Ğchange, notamment en "vue radar"), Ğrocéliande (un genre de skin pour Ğchange calqué sur l'interface d'Amazon, et qui ne prend que les annonces avec "envoi possible" dans la description), g1.business (qui permet de repérer les "routes commerciale", de faire correspondre pour un produit l'offre d'un endroit et la demande à un endroit distant, et qui projette sur une carte les moyens de productions disponibles à la location en Ğ1). Il a aussi fait Ğ1Gate (qui permet de suivre les flux de monnaie en vue "treemap"), H2G2 "le guide du terraformeur terrien" (une vue à la recette MineCraft de choses qu'on peut produire "dans la vraie vie"), Ğ1 KDE Notifier (Un petit outil pour être notifié de mouvements sur un portefeuille Ğ1), un Simulateur RSA / Prime d'activité (Un simulateur RSA/prime d'activité plus très à jour au niveau des données, mais qui permet de se rendre compte à quel point le fonctionnement de la prime d'activité est complètement stupide, et incite à éviter de travailler de façon trop importante trop ponctuellement, si on ne veut pas risquer de perdre de l'argent en allant se casser le cul au boulot), Cerveau externe (Un truc fait avec Vis.js, pour projeter des mots, colorés suivant la rime, regroupés autour des consonnes, et liés s'ils appartiennent à un même thème. Dans l'idée de faire des impros de rap avec. Proto sans réelle interface utilisateur utilisable par les moldus. Faire F5 pour raffraîchir et ainsi avoir un autre graphe de mots.), NoBS Troll-Emploi (Un moteur de recherche d'emploi basé sur l'API Pôle-Emploi et qui permet d'avoir plus de filtres : mots-clefs à exclure, pas de tutoiement, pas de "digital", etc… Idéal pour les gens qui, certes, acceptent d'être exploités lorsqu'ils développent du logiciel, mais veulent diminuer au maximum la quantité de bullshit dans leur job). + +--- + +## elois + +--- +name: "elois" +fullName: "Eloïs" +role: "Développeur Blockchain" +availability: 25 +seniorityLevel: expert +yearsExperience: 5 +joinDate: "2019-01" +interests: ["Blockchain", "Rust", "Migration", "Cryptographie"] +skills: + - name: "Rust" + level: expert + years: 5 + lastUsed: "2024-12" + - name: "blockchain" + level: expert + years: 5 + lastUsed: "2024-12" + - name: "Substrate" + level: expert + years: 4 + lastUsed: "2024-12" + - name: "migration" + level: expert + years: 3 + lastUsed: "2024-11" +softSkills: + - "Autodidactie" + - "Recherche" + - "Architecture" +projects: + - "Rustification de Duniter v1" + - "Duniter v2S" +--- + +A appris les technologies blockchain en autodidact, travaillé sur la "rustification" (passage en Rust) de Duniter v1, puis bossé chez MoonPay. + +--- + +## fred + +--- +name: "fred" +fullName: "Fred" +role: "Développeur & Architecte Systèmes Décentralisés" +availability: 40 +seniorityLevel: expert +yearsExperience: 20 +joinDate: "2014-01" +interests: ["IPFS", "Secure ScuttleButt", "Nostr", "TiddlyWiki", "ThreeFold", "Systèmes décentralisés"] +skills: + - name: "IPFS" + level: expert + years: 6 + lastUsed: "2024-12" + - name: "Secure ScuttleButt" + level: expert + years: 5 + lastUsed: "2024-11" + - name: "Nostr" + level: expert + years: 3 + lastUsed: "2024-12" + - name: "TiddlyWiki" + level: expert + years: 8 + lastUsed: "2024-12" + - name: "développement" + level: expert + years: 20 + lastUsed: "2024-12" + - name: "ThreeFold" + level: intermediate + years: 2 + lastUsed: "2024-12" +softSkills: + - "Architecture" + - "Entrepreneuriat" + - "Innovation" +projects: + - "Astroport (système d'information combinant Ğ1, IPFS et Nostr)" + - "G1SMS (système de paiement par SMS en Ğ1)" + - "G1billet (paper wallet pour la Ğ1)" + - "Linkeo (entreprise)" +--- + +A monté une boite (Linkeo) qui a bouffé une partie du marché de PagesJaunes début/milieu des années 2000. Très intéressé (et sachant) sur IPFS, Secure ScuttleButt, Nostr et TiddlyWiki. Il développe Astroport, un système d'information qui combine la Ğ1, IPFS et Nostr. Par le passé, il a aussi créé G1SMS (système de paiement par SMS en Ğ1) et G1billet (paper wallet pour la Ğ1). + +--- + +## hugo + +--- +name: "hugo" +fullName: "Hugo Trentesaux" +role: "Financement & Gestion" +availability: 20 +seniorityLevel: intermediate +yearsExperience: 5 +joinDate: "2017-01" +interests: ["Financement", "Gestion", "Rédaction", "Administration"] +skills: + - name: "financement" + level: intermediate + years: 5 + lastUsed: "2024-12" + - name: "rédaction" + level: intermediate + years: 5 + lastUsed: "2024-12" + - name: "gestion" + level: intermediate + years: 5 + lastUsed: "2024-12" +softSkills: + - "Rédaction" + - "Administration" + - "Gestion de projet" +projects: + - "Dossier de financement Ğecko (ADEME)" +--- + +Je m'intéresse à la Ğ1 depuis 2017 et pense que l'association Axiom Team constitue une base juridique utile car nécessaire pour de nombreuses interactions avec le monde €. + +J'ai travaillé sur le dossier de financement de Ǧecko auprès de l'ADEME avec succès. À l'avenir, je compte participer au fonctionnement d'Axiom Team, et à la partie rédactionnelle des dossiers de financement. + +--- + +## manuTopik + +--- +name: "manuTopik" +fullName: "ManUtopiK" +role: "Développeur Web Full Stack" +availability: 40 +seniorityLevel: expert +yearsExperience: 12 +joinDate: "2014-01" +interests: ["Web", "Alternatives", "Monnaie libre", "Solarpunk", "Intelligence collective"] +skills: + - name: "VueJS" + level: expert + years: 8 + lastUsed: "2024-12" + - name: "Nuxt.js" + level: expert + years: 6 + lastUsed: "2024-11" + - name: "JavaScript" + level: expert + years: 12 + lastUsed: "2024-12" + - name: "TypeScript" + level: intermediate + years: 4 + lastUsed: "2024-12" + - name: "CMS" + level: expert + years: 5 + lastUsed: "2024-12" + - name: "web" + level: expert + years: 12 + lastUsed: "2024-12" +softSkills: + - "Communication" + - "Vulgarisation" + - "Créativité" +projects: + - "monnaie-libre.fr" + - "carte.monnaie-libre.fr" + - "Doc silkaj" + - "WotWizard-UI" + - "g1lib" + - "Duniter UI (nuxt - abandonné)" + - "Extension web g1Compagnon (en cours)" + - "Interface web pour g1Billet (en cours)" +--- + +Diplomé dans le domaine des énergies renouvelables, mon côté "web enthousiaste" m'a finalement amené à faire du développement web depuis + de 12 ans. + +Passionné par tout ce qui est "alternatif" et qui rend libre, j'ai découvert le concept de la monnaie libre en 2014. L'économie actuelle est à mes yeux le principal facteur du bordel que l'on a mis sur cette planète depuis des générations. J'espère en un monde un peu plus libre, auto gouverné en intelligence collective, et avec du #solarpunk comme horizon. Profitons des crises pour tout changer ! + +À fond sur VueJS ; il a créé un CMS basé sur VueJS. + +## Contributions + +- Développement et rédaction du site monnaie-libre.fr (Dépôt du site, de l'api) +- Développement de la carte.monnaie-libre.fr (Dépôt) +- Doc silkaj +- WotWizard-UI +- g1lib +- Duniter UI avec nuxt (Abandonné) + +## En cours + +- Extension web g1Compagnon +- Interface web pour g1Billet + +--- + +## poka + +--- +name: "poka" +fullName: "Poka" +role: "Développeur Full Stack & Administrateur Système" +availability: 50 +seniorityLevel: expert +yearsExperience: 8 +joinDate: "2016-01" +interests: ["Mobile", "Infrastructure", "Automatisation", "Blockchain"] +skills: + - name: "Flutter" + level: expert + years: 4 + lastUsed: "2024-12" + - name: "Dart" + level: expert + years: 4 + lastUsed: "2024-12" + - name: "Python" + level: intermediate + years: 5 + lastUsed: "2024-11" + - name: "bash" + level: expert + years: 8 + lastUsed: "2024-12" + - name: "ProxMox" + level: expert + years: 6 + lastUsed: "2024-12" + - name: "infrastructure" + level: expert + years: 8 + lastUsed: "2024-12" +softSkills: + - "Autonomie" + - "Pédagogie" + - "Maintenance système" +projects: + - "Ğecko" + - "Ğ1-stats" + - "jaklis" + - "py-g1-migrator" + - "Infrastructure Axiom-Team" +--- + +Je suis contributeur actif sur le projet Duniter depuis 2016 aux RML7 de Laval. + +Je code Ğecko en Flutter/Dart. Je maintiens aussi l'infra Axiom-Team, soit 2 serveurs ProxMox. + +J'ai aussi codé Ğ1-stats en bash. Et jaklis en python. J'ai aussi codé py-g1-migrator + +--- + +## syoul + +--- +name: "syoul" +fullName: "Syoul" +role: "Etudiant IPSSI - Alternance Admin Infrastructure Securisee chez AJR" +availability: 50 +seniorityLevel: beginner +yearsExperience: 1 +joinDate: "2024-06" +interests: ["Autohebergement", "Proxmox", "Docker", "Infrastructure", "Securite"] +skills: + - name: "Proxmox" + level: beginner + years: 3 + lastUsed: "2024-12" + - name: "Docker" + level: beginner + years: 1 + lastUsed: "2024-12" + - name: "Linux" + level: beginner + years: 1 + lastUsed: "2024-12" + - name: "autohebergement" + level: beginner + years: 3 + lastUsed: "2024-12" +softSkills: + - "Apprentissage" + - "Curiosite" + - "Autonomie" +projects: + - "Autohebergement personnel (Proxmox + Docker)" + - "Alternance AJR - Administration Infrastructure" +--- + +Etudiant a l'IPSSI depuis 6 mois, en alternance Administrateur Infrastructure Securisee chez AJR. + +Gere son infrastructure personnelle avec Proxmox et Docker pour l'autohebergement de services. + +--- + +## tuxmain + +--- +name: "tuxmain" +fullName: "tuxmain" +role: "Étudiant Math & Cryptographie" +availability: 20 +seniorityLevel: beginner +yearsExperience: 3 +joinDate: "2022-01" +interests: ["Mathématiques", "Cryptographie", "Chiffrage", "Électronique", "Minetest"] +skills: + - name: "cryptographie" + level: intermediate + years: 3 + lastUsed: "2024-12" + - name: "chiffrage" + level: intermediate + years: 3 + lastUsed: "2024-12" + - name: "math" + level: expert + years: 5 + lastUsed: "2024-12" + - name: "électronique" + level: beginner + years: 2 + lastUsed: "2024-11" +softSkills: + - "Recherche" + - "Analyse" + - "Bidouille" +projects: + - "Administration serveur Minetest" + - "Bidouille électronique" +--- + +Étudiant en math. Bien compétent sur la cryptographie, le chiffrage, les conversions de clef d'une base en une autre. Administrateur de serveur Minetest. Il bidouille aussi de l'électronique. + +--- + +## vivien + +--- +name: "vivien" +fullName: "Vivien" +role: "Développeur" +availability: 40 +seniorityLevel: beginner +yearsExperience: 2 +joinDate: "2023-01" +interests: ["Cesium", "Godot", "Jeux", "Cartes Magic"] +skills: + - name: "Cesium" + level: beginner + years: 2 + lastUsed: "2024-12" + - name: "Godot" + level: beginner + years: 2 + lastUsed: "2024-11" +softSkills: + - "Apprentissage" + - "Curiosité" +projects: + - "Contribution à Cesium" + - "Développement en Godot" +--- + +Se forme pour contribuer à certains logiciels de la Ğ1 (Cesium). Développe aussi en Godot. Passionné de jeux (cartes Magic notamment). + +--- + +## yvv + +--- +name: "yvv" +fullName: "Yvv" +role: "Gestion & Mobilisation" +availability: 70 +seniorityLevel: senior +yearsExperience: 10 +joinDate: "2015-01" +interests: ["Gestion", "Mobilisation", "Économie du don", "Wiki", "Médiathèque"] +skills: + - name: "gestion" + level: expert + years: 10 + lastUsed: "2024-12" + - name: "médiathèque" + level: intermediate + years: 3 + lastUsed: "2024-11" + - name: "wiki" + level: intermediate + years: 5 + lastUsed: "2024-12" +softSkills: + - "Gestion" + - "Organisation" + - "Mobilisation" + - "Communication" +projects: + - "Tuyauterie autogestion des dons (UNL)" + - "WishBounty v2" + - "FAQs version wiki" + - "Médiathèque (nocodb)" + - "Librodrome" + - "Conserverie éphémère mobile" +--- + +Vieux bouc dans le CA, je tire ma révérence en tant que secrétaire. Focus sur ce qui m'intéresse le plus, nouvelle forme de mobilisation. + +## Pour mission UNL + +- Aboutir la tuyauterie autogestion des dons. +- L'élargir pour une v2 sur … un goût de paradis, le WishBounty. + +## Pour mission fédération - services aux monnaie-libristes + +- Bosser sur une FAQs version wiki, si un mediawiki ou autre voit le jour. +- Bosser sur une médiathèque, si un nocodb ou autre voit le jour. + +## Pour ML + +- Diffuser mon bouquin "une économie du don - enfin concevable" et m'en servir de support pour mener des ateliers éco et "passer la seconde". +- Lancer un événement structurant, le Librodrome. +- Lancer une expérience de production collective monnaie-libriste, probablement une conserverie éphémère mobile. + diff --git a/export/technologies-team.md b/export/technologies-team.md new file mode 100644 index 0000000..fa5fd61 --- /dev/null +++ b/export/technologies-team.md @@ -0,0 +1,445 @@ +# Technologies et Compétences - Écosystème Duniter/Ğ1 + +Ce document liste les technologies et compétences identifiées dans l'écosystème Duniter/Ğ1 basé sur l'analyse de https://git.duniter.org/ + +## Technologies de Développement + +### Langages de Programmation + +#### Rust +- **Utilisation** : Développement du nœud Duniter v2S (basé sur Substrate) +- **Projets** : + - `Duniter v2S` : Nœud blockchain principal + - `Ğcli-v2s` : Interface en ligne de commande Rust + - `homebrew-duniter-gcli` : Package Homebrew pour Ğcli +- **Compétences requises** : Rust avancé, développement blockchain, Substrate framework + +#### Python +- **Utilisation** : Clients en ligne de commande et outils +- **Projets** : + - `silkaj` : Client CLI Python pour la monnaie Ğ1 + - `Tikka` : Client riche pour la monnaie Ğ1 +- **Compétences requises** : Python, développement CLI, APIs REST + +#### JavaScript/TypeScript +- **Utilisation** : Clients web, extensions navigateur, sites web +- **Projets** : + - `Ğ1Companion` : Extension web pour navigateurs + - Clients web divers +- **Compétences requises** : JavaScript/TypeScript, développement d'extensions navigateur, Web APIs + +### Frameworks et Bibliothèques + +#### Substrate Framework +- **Utilisation** : Framework blockchain pour Duniter v2S +- **Description** : Framework Rust pour construire des blockchains personnalisées +- **Compétences requises** : Blockchain, Rust, Substrate, consensus algorithms + +#### Nuxt.js +- **Utilisation** : Framework Vue.js pour sites web +- **Projets** : + - `monnaie-libre-fr` : Site web avec Nuxt + nuxt-content +- **Compétences requises** : Vue.js, Nuxt.js, SSR, JAMstack + +#### NetlifyCMS +- **Utilisation** : CMS headless basé sur Git +- **Projets** : + - `monnaie-libre-fr` : CMS pour le site web +- **Compétences requises** : Git-based CMS, JAMstack, workflows Git + +#### WordUp CMS +- **Utilisation** : CMS pour sites web +- **Projets** : + - `axiom-team-fr` : Site de production avec WordUp +- **Compétences requises** : CMS management, intégration d'APIs + +### Outils et Bibliothèques Spécialisées + +#### Squid (Indexer) +- **Utilisation** : Indexation de données blockchain +- **Projets** : + - `duniter-squid` : Indexer basé sur Squid pour Duniter v2S +- **Compétences requises** : Indexation de données, GraphQL, blockchain data processing + +#### g1-papi +- **Utilisation** : Bibliothèque API pour Ğ1 +- **Type** : Bibliothèque partagée +- **Compétences requises** : API design, développement de bibliothèques + +### Clients et Interfaces + +#### Clients CLI (Command Line Interface) +- **Rust CLI** : `Ğcli-v2s` - Interface avancée pour utilisateurs experts +- **Python CLI** : `silkaj`, `Tikka` - Clients en ligne de commande +- **Compétences requises** : Développement CLI, UX en ligne de commande, parsing d'arguments + +#### Extensions Navigateur +- **Ğ1Companion** : Extension web pour navigateurs +- **Compétences requises** : Web Extensions API, Chrome/Firefox extensions, JavaScript + +#### Clients Graphiques +- **Ğecko** : Client avec interface graphique +- **Cesium-grp/cesium2s** : Client Cesium pour Duniter v2s +- **Compétences requises** : Développement d'interfaces graphiques, frameworks UI + +### Intégrations et APIs + +#### Intégrations Externes +- **HelloAsso** : Intégration pour dons +- **Paheko** : Intégration comptable +- **ĞWishBounty** : Application pour automatiser les flux de dons +- **Compétences requises** : Intégration d'APIs tierces, webhooks, synchronisation de données + +#### APIs Internes +- **api-axiom-team-fr** : API pour le site Axiom +- **Compétences requises** : REST APIs, GraphQL, documentation d'API + +## Technologies d'Authentification et d'Identité + +### Authentification et Autorisation + +#### Microsoft Entra (concurrents) +- **Utilisation** : Solution d'identité et d'accès cloud de Microsoft +- **Description** : Plateforme d'identité en tant que service (IDaaS) qui fournit l'authentification unique (SSO), la gestion des identités et l'accès conditionnel. Alternative aux solutions d'authentification traditionnelles. +- **Compétences requises** : Gestion d'identité cloud, SSO, intégration d'identité, sécurité des accès + +#### AUTHZ et AUTHN +- **Utilisation** : Concepts fondamentaux de sécurité +- **Description** : + - **AUTHN (Authentication)** : Vérification de l'identité d'un utilisateur (qui êtes-vous ?) + - **AUTHZ (Authorization)** : Vérification des permissions d'accès (que pouvez-vous faire ?) +- **Compétences requises** : Principes de sécurité, gestion des identités, contrôle d'accès, modèles de permissions + +#### Better Auth +- **Utilisation** : Bibliothèque d'authentification moderne +- **Description** : Solution d'authentification open-source offrant une API simple et flexible pour gérer l'authentification dans les applications web. Supporte OAuth, email/password, et autres méthodes d'authentification. +- **Compétences requises** : Développement web, authentification, OAuth, sécurité des applications + +### Identité Décentralisée + +#### DID et UCAN +- **Utilisation** : Identifiants décentralisés et système d'autorisation +- **Description** : + - **DID (Decentralized Identifiers)** : Identifiants uniques décentralisés qui permettent aux utilisateurs de contrôler leur identité sans dépendre d'une autorité centrale + - **UCAN (User Controlled Authorization Networks)** : Système d'autorisation basé sur des capacités (capabilities) où les utilisateurs contrôlent leurs propres permissions +- **Compétences requises** : Identité décentralisée, Web3, cryptographie, systèmes d'autorisation basés sur les capacités + +#### VC (Verifiable Credentials) +- **Utilisation** : Credentials vérifiables pour l'identité numérique +- **Description** : Standard W3C pour les credentials numériques qui peuvent être vérifiés cryptographiquement. Permet de créer des identités numériques portables et vérifiables sans dépendre d'une autorité centrale. +- **Compétences requises** : Standards W3C, identité numérique, cryptographie, vérification de credentials, blockchain (optionnel) + +### Protocoles d'Authentification + +#### OpenID Connect +- **Utilisation** : Protocole d'authentification et d'autorisation +- **Description** : Couche d'identité construite sur OAuth 2.0 qui permet aux clients de vérifier l'identité d'un utilisateur basée sur l'authentification effectuée par un serveur d'autorisation. Standard de l'industrie pour l'authentification fédérée. +- **Compétences requises** : OAuth 2.0, protocoles d'authentification, intégration SSO, sécurité web + +#### SPIFFE +- **Utilisation** : Identité sécurisée pour les workloads en production +- **Description** : SPIFFE (Secure Production Identity Framework For Everyone) fournit un cadre pour identifier et authentifier les workloads dans des environnements hétérogènes et distribués. Utilise des identités basées sur des certificats X.509 ou JWT. +- **Compétences requises** : Sécurité des microservices, identité des workloads, mTLS, infrastructure distribuée, Kubernetes, service mesh + +## Technologies d'Infrastructure Décentralisée + +### ThreeFold + +#### Zero OS +- **Utilisation** : Système d'exploitation autonome pour infrastructure décentralisée +- **Description** : Système d'exploitation efficace et sécurisé qui s'exécute directement sur le matériel, permettant un cloud autonome +- **Compétences requises** : Administration système bare metal, cloud décentralisé, Zero OS + +#### ThreeFold Grid +- **Utilisation** : Infrastructure Internet décentralisée globale +- **Description** : Plateforme opérationnelle d'infrastructure Internet décentralisée déployée localement, scalable globalement, possédée et alimentée par les utilisateurs +- **Compétences requises** : Infrastructure décentralisée, cloud computing, réseaux distribués + +#### 3Node +- **Utilisation** : Nœuds physiques de l'infrastructure ThreeFold +- **Description** : Serveurs informatiques dédiés à 100% au réseau, fournissant capacité de calcul, stockage et réseau +- **Compétences requises** : Administration de serveurs, déploiement de nœuds, maintenance hardware + +#### ThreeFold Compute +- **Utilisation** : Capacité de calcul bare metal +- **Description** : Peut exécuter toute charge de travail Web2, Web3 ou IA à la périphérie d'Internet, avec plus de scalabilité et de fiabilité +- **Compétences requises** : Virtualisation, conteneurisation, Kubernetes, edge computing + +#### ThreeFold Data Storage +- **Utilisation** : Système de stockage de données inviolable +- **Description** : Les données ne peuvent pas être compromises et restent toujours privées, possédées par vous. Système scalable jusqu'au niveau planétaire, au moins 10x plus efficace et plusieurs ordres de grandeur plus sécurisé et fiable +- **Compétences requises** : Stockage distribué, réplication de données, sécurité des données + +#### ThreeFold Network (Mycelium) +- **Utilisation** : Réseau overlay chiffré de bout en bout +- **Description** : Réseau toujours à la recherche du chemin le plus court possible entre les participants. Adresse Internet logique liée de manière sécurisée à une clé privée. Scalabilité illimitée et optimisations de performance +- **Compétences requises** : Réseaux overlay, chiffrement de bout en bout, routage réseau + +#### ThreeFold Blockchain +- **Utilisation** : Blockchain pour la vérification et l'enregistrement de la capacité +- **Description** : Vérifie, enregistre et sécurise la capacité des nœuds sur la blockchain ThreeFold +- **Compétences requises** : Blockchain, consensus, cryptographie + +#### ThreeFold Cloud +- **Utilisation** : Cloud open-source décentralisé +- **Description** : Déploiement de machines virtuelles, conteneurs, clusters Kubernetes, web gateways et plus sur un cloud open source décentralisé best-effort +- **Compétences requises** : Cloud computing, Kubernetes, déploiement d'applications, administration système + +#### AIBox +- **Utilisation** : Solution de calcul IA auto-hébergée alimentée par ThreeFold +- **Description** : Solution de calcul IA dédiée fonctionnant sur l'infrastructure ThreeFold +- **Compétences requises** : Intelligence artificielle, machine learning, infrastructure IA + +#### 3Phone +- **Utilisation** : Appareils sécurisés de la famille 3Phone +- **Description** : Premiers appareils sécurisés conçus pour fonctionner de manière transparente avec le ThreeFold Grid +- **Compétences requises** : Développement mobile, sécurité des appareils, intégration réseau + +#### 3Router +- **Utilisation** : Routeurs intelligents pour connexions optimisées +- **Description** : Routeurs intelligents garantissant des connexions de chemin le plus court entre nœuds et téléphones avec chiffrement de bout en bout +- **Compétences requises** : Routage réseau, optimisation de réseau, sécurité réseau + +## Technologies d'Infrastructure et Déploiement + +### Conteneurisation +- **Docker** : Conteneurisation des applications +- **Compétences requises** : Docker, Docker Compose, orchestration de conteneurs + +### Déploiement Web +- **Netlify** : Déploiement JAMstack (mentionné pour monnaie-libre-fr) +- **Compétences requises** : CI/CD, déploiement continu, Netlify + +### Gestion de Code Source +- **Git** : Système de contrôle de version +- **Forge Git** : git.duniter.org (forge Git auto-hébergée) +- **Compétences requises** : Git avancé, workflows Git, gestion de forge + +### Package Management +- **Homebrew** : Gestion de paquets pour macOS +- **npm/yarn** : Gestion de paquets JavaScript +- **pip/poetry** : Gestion de paquets Python +- **Cargo** : Gestion de paquets Rust +- **Compétences requises** : Gestion de dépendances, gestion de versions, publication de paquets + +## Compétences d'Administration Système + +### Administration Linux/Unix +- **Systèmes d'exploitation** : Linux (Debian, Ubuntu, etc.) +- **Compétences requises** : + - Administration système Linux + - Gestion des utilisateurs et permissions + - Configuration réseau + - Monitoring système + - Gestion des logs + - Sécurisation des serveurs + +### Administration Blockchain +- **Gestion de nœuds** : Administration de nœuds Duniter +- **Compétences requises** : + - Configuration de nœuds blockchain + - Gestion de la synchronisation + - Monitoring de la blockchain + - Gestion des clés cryptographiques + - Maintenance des nœuds + +### Bases de Données +- **PostgreSQL** : Base de données relationnelle utilisée dans les projets +- **Compétences requises** : + - Administration PostgreSQL + - Optimisation de requêtes + - Sauvegarde et restauration + - Réplication + - Performance tuning + - SQL avancé + +### Réseau et Sécurité +- **Réseau** : + - Configuration de pare-feu + - Gestion des ports et services + - Load balancing + - CDN configuration + - DNS, DHCP, VPN, SD-WAN + - Configuration réseau avancée +- **Sécurité** : + - SSL/TLS configuration + - Gestion des certificats + - Sécurisation des APIs + - Protection contre les attaques + - Audit de sécurité + - Chiffrement des communications et données + - Surveillance et détection d'intrusions + - Prévention des cyberattaques + +### Monitoring et Observabilité +- **Monitoring** : + - Monitoring des applications + - Monitoring des nœuds blockchain + - Alerting + - Métriques et dashboards +- **Logs** : + - Centralisation des logs + - Analyse de logs + - Rotation des logs + +### CI/CD et Automatisation +- **Intégration Continue** : + - Configuration de pipelines CI/CD + - Tests automatisés + - Build automatisé + - Déploiement automatisé +- **Outils** : + - GitHub Actions, GitLab CI, Drone CI + - Scripts d'automatisation + - Configuration de workflows + +### Automatisation et Scripting +- **Scripts** : + - Bash scripting avancé + - Python scripting pour automatisation + - Automatisation de tâches d'administration + - Scripts de déploiement + - Automatisation des environnements pour cohérence +- **Compétences requises** : Scripting, automatisation, amélioration de la cohérence des environnements + +### Infrastructure Cloud/On-Premise +- **Cloud** : + - Déploiement sur cloud (si applicable) + - Gestion de ressources cloud + - Auto-scaling + - Cloud décentralisé (ThreeFold Grid) +- **On-Premise** : + - Gestion de serveurs physiques + - Virtualisation (VMware, Hyper-V, KVM) + - Gestion de l'infrastructure + - Provisioning de serveurs + - Infrastructure décentralisée (3Nodes) + +### Gestion de Configuration +- **Configuration Management** : + - Ansible, Puppet, Chef + - Infrastructure as Code + - Configuration de serveurs +- **Versioning** : + - Versioning de la configuration + - Gestion des environnements (dev, staging, prod) + +### Sauvegarde et Récupération +- **Sauvegarde** : + - Stratégies de sauvegarde + - Sauvegarde des bases de données + - Sauvegarde de la configuration + - Sauvegarde de la blockchain +- **Récupération** : + - Plans de reprise après sinistre + - Tests de restauration + - RTO/RPO + +## Compétences DevOps + +### Container Orchestration +- **Kubernetes** : Orchestration de conteneurs (mentionné comme compétence requise) +- **Docker Swarm** : Alternative à Kubernetes +- **Compétences requises** : Orchestration, scaling, service mesh, gestion de clusters + +### Infrastructure as Code +- **Terraform** : Provisioning d'infrastructure +- **CloudFormation** : Si AWS +- **Compétences requises** : IaC, provisioning automatisé + +### Secrets Management +- **Gestion des secrets** : Vault, AWS Secrets Manager +- **Compétences requises** : Sécurité des secrets, rotation + +## Compétences Spécialisées Blockchain + +### Cryptographie +- **Cryptographie appliquée** : + - Signatures cryptographiques + - Hashing + - Clés publiques/privées + - Certificats +- **Compétences requises** : Cryptographie, sécurité + +### Consensus et Réseau +- **Protocoles de consensus** : Compréhension des mécanismes de consensus +- **Réseau P2P** : Gestion de réseaux pair-à-pair +- **Compétences requises** : Blockchain, réseaux distribués + +## Résumé des Compétences par Catégorie + +### Développement +- Rust (avancé) +- Python +- JavaScript/TypeScript +- Vue.js / Nuxt.js +- Substrate Framework +- Développement CLI +- Extensions navigateur +- APIs REST/GraphQL + +### Blockchain +- Développement blockchain +- Substrate +- Consensus algorithms +- Cryptographie +- Réseaux P2P + +### Web +- Frameworks web modernes +- JAMstack +- CMS headless +- Intégrations d'APIs + +### Infrastructure +- Administration Linux +- Docker/Conteneurisation +- CI/CD +- Monitoring +- Sécurité +- Bases de données +- Réseau +- Infrastructure décentralisée (ThreeFold Grid) +- Edge computing +- Cloud décentralisé +- Zero OS +- Stockage distribué + +### DevOps +- Automatisation +- Infrastructure as Code +- Gestion de configuration +- Orchestration + +## Compétences Transversales + +### Communication et Collaboration +- Travail en équipe avec développeurs et parties prenantes +- Communication efficace +- Documentation technique +- Partage de connaissances + +### Veille Technologique +- Suivi des évolutions technologiques +- Meilleures pratiques du secteur +- Évaluation de nouvelles technologies +- Adaptation aux changements + +## Notes + +Cette liste est basée sur l'analyse des projets visibles sur https://git.duniter.org/ et les informations disponibles sur l'écosystème Duniter/Ğ1. Certaines technologies peuvent être utilisées mais non explicitement mentionnées dans les descriptions de projets. + +### Sources +- https://git.duniter.org/ - Dépôt principal des projets Duniter +- https://www.threefold.io/ - Infrastructure Internet décentralisée ThreeFold +- Documentation technique des projets individuels +- Analyse des technologies blockchain et monnaies libres +- Analyse des infrastructures décentralisées + +### Pour une analyse complète, il serait recommandé de : +1. Examiner le code source des projets principaux +2. Analyser les fichiers de configuration (package.json, Cargo.toml, requirements.txt, Dockerfile) +3. Examiner les fichiers de déploiement (docker-compose.yml, scripts CI/CD) +4. Consulter la documentation technique de chaque projet +5. Analyser les dépendances et bibliothèques utilisées + diff --git a/package.json b/package.json index 0fc9f5b..c6340a3 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,14 @@ "main": "index.js", "license": "MIT", "scripts": { - "build": "techradar build", - "serve": "techradar serve", + "build": "node scripts/build-radar.js", + "serve": "node scripts/serve-radar.js build", + "serve-dev": "node scripts/serve-radar.js dev", "serve-business": "./scripts/serve-business.sh", "extract-tech": "node scripts/extract-technologies.js", "analyze-business": "node scripts/analyze-business-metrics.js" }, "dependencies": { - "aoe_technology_radar": "github:AOEpeople/aoe_technology_radar#main", "glob": "^10.3.10", "gray-matter": "^4.0.3" }, diff --git a/radar-app/.eslintrc.json b/radar-app/.eslintrc.json new file mode 100644 index 0000000..f0f3abe --- /dev/null +++ b/radar-app/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "next/core-web-vitals", + "rules": { + "@next/next/no-img-element": "off" + } +} diff --git a/radar-app/.github/workflows/main.yml b/radar-app/.github/workflows/main.yml new file mode 100644 index 0000000..8314244 --- /dev/null +++ b/radar-app/.github/workflows/main.yml @@ -0,0 +1,27 @@ +name: Test AOE Technology Radar + +on: + pull_request: + push: + branches: + - main +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - uses: actions/setup-node@v4 + with: + node-version: "lts/*" + - uses: actions/cache@v4 + with: + path: | + ~/.npm + **/node_modules + key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm + - run: npm ci + - run: npm run build:data + - run: npm run build + - run: if [ -n "$(git status --porcelain)" ]; then echo 'workspace is dirty after rebuilding' ; git status ; git diff ; exit 1 ; fi diff --git a/radar-app/.github/workflows/semanticore.yml b/radar-app/.github/workflows/semanticore.yml new file mode 100644 index 0000000..5d316ec --- /dev/null +++ b/radar-app/.github/workflows/semanticore.yml @@ -0,0 +1,22 @@ +name: Semanticore + +on: + push: + branches: + - main +jobs: + semanticore: + runs-on: ubuntu-latest + name: Semanticore + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: 1.* + - name: Semanticore + run: go run github.com/aoepeople/semanticore@v0 -npm-update-version package.json + env: + SEMANTICORE_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/radar-app/.gitignore b/radar-app/.gitignore new file mode 100644 index 0000000..3581005 --- /dev/null +++ b/radar-app/.gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ +/techradar/ + +# generated +/src/components/Icons/ + +/data/about.json +/data/data.json + +# misc +.DS_Store +.idea/ +*.pem +*.tgz + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/radar-app/.husky/commit-msg b/radar-app/.husky/commit-msg new file mode 100755 index 0000000..36158d9 --- /dev/null +++ b/radar-app/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install commitlint --edit "$1" \ No newline at end of file diff --git a/radar-app/.husky/pre-commit b/radar-app/.husky/pre-commit new file mode 100644 index 0000000..2312dc5 --- /dev/null +++ b/radar-app/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/radar-app/.npmignore b/radar-app/.npmignore new file mode 100644 index 0000000..267045c --- /dev/null +++ b/radar-app/.npmignore @@ -0,0 +1,8 @@ +*.tgz +.idea +.github + /.next/ + /out/ + /techradar/ +/data/about.json +/data/data.json diff --git a/radar-app/.prettierignore b/radar-app/.prettierignore new file mode 100644 index 0000000..47d6922 --- /dev/null +++ b/radar-app/.prettierignore @@ -0,0 +1,3 @@ +node_modules +out +CHANGELOG.md \ No newline at end of file diff --git a/radar-app/.prettierrc b/radar-app/.prettierrc new file mode 100644 index 0000000..d2b62a3 --- /dev/null +++ b/radar-app/.prettierrc @@ -0,0 +1,11 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "trailingComma": "all", + "singleQuote": false, + "semi": true, + "importOrder": ["^[./]", "^@(.*)$"], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true, + "plugins": ["@trivago/prettier-plugin-sort-imports"] +} diff --git a/radar-app/LICENSE b/radar-app/LICENSE new file mode 100644 index 0000000..9c0e840 --- /dev/null +++ b/radar-app/LICENSE @@ -0,0 +1,204 @@ +The license applies to the generator code and not the articles in the "radar" folder. (Read also the README.md in this folder) + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/radar-app/bin/techradar.js b/radar-app/bin/techradar.js new file mode 100644 index 0000000..c381f53 --- /dev/null +++ b/radar-app/bin/techradar.js @@ -0,0 +1,167 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const { execSync } = require("child_process"); +const crypto = require("crypto"); + +const CWD = process.cwd(); +const BUILDER_DIR = path.join(CWD, ".techradar"); +const SOURCE_DIR = path.join(CWD, "node_modules", "aoe_technology_radar"); +const HASH_FILE = path.join(BUILDER_DIR, "hash"); + +const PARAMETER = process.argv[2]; // "build" or "serve" +const FLAGS = process.argv.slice(3).join(" "); + +function info(message) { + console.log(`\x1b[32m${message}\x1b[0m`); +} + +function warn(message) { + console.log(`\x1b[33mWarning: ${message}\x1b[0m`); +} + +function error(message) { + console.error(`Error: ${message}`); + process.exit(1); +} + +function bootstrap() { + if (!fs.existsSync(path.join(CWD, "radar"))) { + warn( + "Could not find radar directory. Created a bootstrap radar directory in your current working directory. Feel free to customize it.", + ); + fs.cpSync(path.join(SOURCE_DIR, "data", "radar"), path.join(CWD, "radar"), { + recursive: true, + }); + } + + if (!fs.existsSync(path.join(CWD, "public"))) { + warn( + "Could not find public directory. Created a public radar directory in your current working directory.", + ); + fs.cpSync(path.join(SOURCE_DIR, "public"), path.join(CWD, "public"), { + recursive: true, + }); + } + + if (!fs.existsSync(path.join(CWD, "config.json"))) { + warn( + "Could not find a config.json. Created a bootstrap config.json in your current working directory. Customize it to your needs.", + ); + fs.copyFileSync( + path.join(SOURCE_DIR, "data", "config.default.json"), + path.join(CWD, "config.json"), + ); + } + + if (!fs.existsSync(path.join(CWD, "about.md"))) { + warn( + "Could not find a about.md. Created a bootstrap about.md in your current working directory. Customize it to your needs.", + ); + fs.copyFileSync( + path.join(SOURCE_DIR, "data", "about.md"), + path.join(CWD, "about.md"), + ); + } + + if (!fs.existsSync(path.join(CWD, "custom.css"))) { + warn("Created a bootstrap custom.css in your current working directory."); + fs.copyFileSync( + path.join(SOURCE_DIR, "src", "styles", "custom.css"), + path.join(CWD, "custom.css"), + ); + } +} + +// Calculate current hash of package.json +function calculateHash(file) { + const fileBuffer = fs.readFileSync(file); + const hashSum = crypto.createHash("sha256"); + hashSum.update(fileBuffer); + return hashSum.digest("hex"); +} + +const CURRENT_HASH = calculateHash(path.join(CWD, "package.json")); + +// Check if builder dir needs to be recreated +let RECREATE_DIR = false; +if ( + !fs.existsSync(BUILDER_DIR) || + !fs.existsSync(HASH_FILE) || + fs.readFileSync(HASH_FILE, "utf8") !== CURRENT_HASH +) { + RECREATE_DIR = true; +} + +if (RECREATE_DIR) { + // Remove existing builder dir if it exists + if (fs.existsSync(BUILDER_DIR)) { + fs.rmSync(BUILDER_DIR, { recursive: true }); + } + + // Copy source dir to builder dir + try { + fs.cpSync(SOURCE_DIR, BUILDER_DIR, { recursive: true }); + fs.writeFileSync(HASH_FILE, CURRENT_HASH); + } catch (e) { + error(`Could not copy ${SOURCE_DIR} to ${BUILDER_DIR}`); + } + + try { + process.chdir(BUILDER_DIR); + info("Installing npm packages"); + execSync("npm install", { stdio: "inherit" }); + } catch (e) { + error("Could not install npm packages"); + } +} + +bootstrap(); + +try { + if (fs.existsSync(path.join(BUILDER_DIR, "data", "radar"))) { + fs.rmSync(path.join(BUILDER_DIR, "data", "radar"), { recursive: true }); + } + fs.cpSync(path.join(CWD, "radar"), path.join(BUILDER_DIR, "data", "radar"), { + recursive: true, + }); + fs.cpSync(path.join(CWD, "public"), path.join(BUILDER_DIR, "public"), { + recursive: true, + }); + fs.copyFileSync( + path.join(CWD, "about.md"), + path.join(BUILDER_DIR, "data", "about.md"), + ); + fs.copyFileSync( + path.join(CWD, "custom.css"), + path.join(BUILDER_DIR, "src", "styles", "custom.css"), + ); + fs.copyFileSync( + path.join(CWD, "config.json"), + path.join(BUILDER_DIR, "data", "config.json"), + ); + process.chdir(BUILDER_DIR); +} catch (e) { + error(e.message); +} + +info("Building data"); +execSync(`npm run build:data -- ${FLAGS}`, { + stdio: "inherit", +}); + +if (PARAMETER === "serve") { + info("Starting techradar"); + execSync("npm run dev", { stdio: "inherit" }); +} + +if (PARAMETER === "build") { + info("Building techradar"); + execSync("npm run build", { stdio: "inherit" }); + if (fs.existsSync(path.join(CWD, "build"))) { + fs.rmSync(path.join(CWD, "build"), { recursive: true }); + } + info(`Copying techradar to ${path.join(CWD, "build")}`); + fs.renameSync(path.join(BUILDER_DIR, "out"), path.join(CWD, "build")); +} diff --git a/radar-app/commitlint.config.js b/radar-app/commitlint.config.js new file mode 100644 index 0000000..a4654bb --- /dev/null +++ b/radar-app/commitlint.config.js @@ -0,0 +1,26 @@ +module.exports = { + extends: ["@commitlint/config-conventional"], + rules: { + "type-enum": [ + 2, + "always", + [ + "feat", + "sec", + "fix", + "bug", + "test", + "refactor", + "rework", + "ops", + "ci", + "cd", + "build", + "doc", + "perf", + "chore", + "update", + ], + ], + }, +}; diff --git a/radar-app/data/config.default.json b/radar-app/data/config.default.json new file mode 100644 index 0000000..5443b9c --- /dev/null +++ b/radar-app/data/config.default.json @@ -0,0 +1,147 @@ +{ + "basePath": "/techradar", + "baseUrl": "", + "editUrl": "https://github.dev/AOEpeople/techradar/blob/main/radar/{release}/{id}.md", + "logoFile": "logo.svg", + "jsFile": "", + "toggles": { + "showSearch": false, + "showChart": true, + "showTagFilter": true, + "showQuadrantList": true, + "showEmptyRings": false + }, + "sections": ["radar", "tags", "list"], + "colors": { + "foreground": "#fcf2e6", + "background": "#113521", + "highlight": "#d4a373", + "content": "#fff", + "text": "#575757", + "link": "#bc6c25", + "border": "rgba(255, 255, 255, 0.1)", + "tag": "rgba(255, 255, 255, 0.1)" + }, + "quadrants": [ + { + "id": "languages-and-frameworks", + "title": "Languages & Frameworks", + "description": "A selection of programming languages, alongside essential frameworks for building a variety of custom software.", + "color": "#a3b18a" + }, + { + "id": "methods-and-patterns", + "title": "Methods & Patterns", + "description": "Key software development methods and design patterns, covering everything from continuous integration and testing to architecture.", + "color": "#588157" + }, + { + "id": "platforms-and-operations", + "title": "Platforms & Operations", + "description": "Technologies and tools for software and infrastructure operations, including platforms and services for managing and scaling applications.", + "color": "#3f633e" + }, + { + "id": "tools", + "title": "Tools", + "description": "A range of software tools, from simple productivity enhancers to comprehensive project solutions, catering to various project needs.", + "color": "#40713f" + } + ], + "rings": [ + { + "id": "adopt", + "title": "Adopt", + "description": "", + "color": "#588157", + "radius": 0.5, + "strokeWidth": 5 + }, + { + "id": "trial", + "title": "Trial", + "description": "", + "color": "#457b9d", + "radius": 0.69, + "strokeWidth": 3 + }, + { + "id": "assess", + "title": "Assess", + "description": "", + "color": "#bc6c25", + "radius": 0.85, + "strokeWidth": 2 + }, + { + "id": "hold", + "title": "Hold", + "description": "", + "color": "#d62828", + "radius": 1, + "strokeWidth": 0.75 + } + ], + "flags": { + "new": { + "color": "#f1235a", + "title": "New", + "titleShort": "N", + "description": "New in this version" + }, + "changed": { + "color": "#40a7d1", + "title": "Changed", + "titleShort": "C", + "description": "Recently changed" + }, + "default": { + "description": "Unchanged" + } + }, + "chart": { + "size": 800, + "blipSize": 12 + }, + "social": [ + { + "href": "https://twitter.com/aoepeople", + "icon": "x" + }, + { + "href": "https://www.linkedin.com/company/aoe", + "icon": "linkedIn" + }, + { + "href": "https://www.xing.com/company/aoe", + "icon": "xing" + }, + { + "href": "https://github.com/aoepeople", + "icon": "github" + } + ], + "imprint": "https://www.aoe.com/en/imprint.html", + "labels": { + "title": "Technology Radar", + "imprint": "Legal Information", + "quadrant": "Quadrant", + "quadrantOverview": "Quadrant Overview", + "zoomIn": "Zoom in", + "filterByTag": "Filter by Tag", + "footer": "The technology radar is a project by AOE GmbH. Feel free to build your own radar based on the open source project.", + "notUpdated": "This item was not updated in last three versions of the Radar. Should it have appeared in one of the more recent editions, there is a good chance it remains pertinent. However, if the item dates back further, its relevance may have diminished and our current evaluation could vary. Regrettably, our capacity to consistently revisit items from past Radar editions is limited.", + "notFound": "404 - Page not found", + "pageAbout": "How to use AOE Technology Radar?", + "pageOverview": "Technologies Overview", + "pageSearch": "Search", + "searchPlaceholder": "What are you looking for?", + "metaDescription": "" + }, + "fuzzySearch": { + "threshold": 0.4, + "distance": 600, + "ignoreLocation": false, + "includeScore": true + } +} diff --git a/radar-app/data/config.json b/radar-app/data/config.json new file mode 100644 index 0000000..29f00c2 --- /dev/null +++ b/radar-app/data/config.json @@ -0,0 +1,3 @@ +{ + "basePath": "/techradar" +} diff --git a/radar-app/docs/assets/screenshot-techradar.png b/radar-app/docs/assets/screenshot-techradar.png new file mode 100644 index 0000000000000000000000000000000000000000..c46e0ea5fe5b4b56b28d275a99e6f0d95710f8d2 GIT binary patch literal 289339 zcmaI6Q;;Z4u(mt4XN_&!wr$(CXV%!ZZQHhO+qP%^_3eES=jP-^cU4wL|uom1ZYXUW*(?>xD}+JLS+33G;z9u9TKR zjL*LXWXChA#^LZP;&QR>tX*nB{^(M?oI<=CL*_V$N zZ5v21ou9e?WJsl7Z$r$_J@vNv~;wjsZmQ|KT6PP=52n z44zg2kxuqo0d#RVlVBWkVic!;NGAt4Z49DO@wY@@0`Y@s6TufS(FJo6*qDKtM~HW9|32Ko!;V>fv|dFu1^b3&0rP+jqYd+yB46)sK!{n7 z_ixFeEtJJ{UivKIZ2Gpk=iX9$cIc}uUz6GNjLat7&4!2Zu79G~gBF!WFgukervFy9 z*vl<@7h2d0HdmYbAtj;{imE=acpO1Kq19)+Pi1S(u7k6$su5%$J8*42OeK<>u9S$Z z5=JEHW?Z#RLDNfH1fDC($$I{N_+ET_k<)9fK5 z;lyEY0%NHJ=I@8;5q0bbi;p3-ycvrJknHpGBeOY;UWQ~NAEYI<#5+P(Ov+cm-dxrV z)`nMM;wk6;mr#C)b0AP4>3Te}R15A3N)A@0dK{cE&)rxd!Y>_Z?ruclI=APq1i82) z%%e1|^xxleq0cAXIqp=1!JflV*6U5cEQmlh6Tbj{aJsEJpfU$$p8relzZX5&Oc7{4 z3Xw+1c*m#?%EjaP^TdZvyJpYCgPIq@THNmeSE|9IYIjg<)*Rbf`$q#5RP7KS*}kk zoJ|~tR5rwnz>)}*@Fb&beGrmRMhcu+tM?Ex#@CBZm}n|mO9x-}yBYQRT==0MR)TU16!n9hyyjqKZe=;%ZtD)E!^(0(Q44bx$NET;!G`;3b&XlYyKg6->d;P&;jLX3! z%IPZjIg+);kf?y!{#D9{TCFY2%cIC_9=zJ~dkUYqp*7Ep)*`Tm3QQ}I?K23>kDMUW z)ns_d+)`xzTeHz3ny^4szuKX9PByJpENEfw_B4$=pXwS(P9&LBHk5njNB5vD_Phbg zrCI6P#9MbyX5tY!D4rCuAag(`vy~$_Iz9k5(Xw&!k=Ml0g|A)txc$N28=>2AtuO-c zGpBeycnmZe)y*S|8^c_beLa#%v`_CEKn@JZA}*3FV->VPiM1LR6D8suKpxmCDCcG? zb5CybdbD;5x^N0w=avQ&6wRU&`jU{-8iE@{yf0;?wJyCPe+DRk9FO z2f*zC=tGyXyT)0=U?KN+sUA4zivLX6>K^f2@Sq7UoE?P#ip2IT@pFErceLAV%%QRp%++$L4ZAa;?Gb!#W(g~C)&wb&fd?2YPI$edL-hW~;_tWH;tMOHiEua)OQAEUuD$eTNJKB5 zg-2OOkmJJGR6J{X7N?xUiha|~_P0#PIsQ&NB%we~>?Y=M7$ReZ z1F+8|%1XlTMV5*@d&KbUGZVUn}Jy{v2teR}N?#M+w%8Y&k*8 zG6Vflg;o!So_6*ITp&xGps-qn%1UksE>+ampsk86zGiH6v zjI}R4E>sy@8OH*V-l~}NK!Ct5k`2*ePVU%paGLah2SloL&cV7xAd^saJ9#vBq{nH9 znr&Oo)c#lpDa6NV^caLi1OX$tCpKjWbRWUu@L)jkc^l#KAd@=UQesZmO3z4Wr7)Vt zfKs#kufbGk8+vPkrsajib-wzuXX9!{hh(l-JEYT+!LZxlouYEFPuM#wo*(LJdVgN< z^%Ln(rUjCcBTx~kFSRfY$zlP*)$gbt7^J?y?n13omf1tii1$?tUP#&0R=aNA*7OzU z0=Q7BP$~rfs%K)?iRWXxLf^sD>bGp!S+8~dJ&WEiJRHp2$W8cwbq5n&EJH>u`1=-g z)YNlbPgDp_Aw(0+1;v`DsVrXe=fN^(yYuki6HOj|s~|h47@%B^_2*1+7g+{2lFhCR zVQEWwXRGb$qEC)1SEG2w35v@!&sf(@&1C%S?QFlWyBoOE$S!)hnHfS>K4?K7Jp?3* zSQlLM%EM!I)|FQV2}mFSUSItSbqOM4tQ?}gCr}On;T6ZzVAAd{WNm?#0*W~##vM7_ zZ(r!y&_D&KPPfA37PWE!3_6%S8Yd=(Ji!Ps76FWwN$~3|pWFS^J71PwR|!x^e=9xK zHUSK}Jj>Kz0#YN>WFO_}b43_%Gl7%E^ulQe*O37hCt`Jr%n-nU=h8YD6I7TxCZ8OBj?Mu;R7!lwY2JB5@$47ynkKJxu%6uz2|t6g86 z$0MR5g4gc+WGpi#p?LWG$wvIBudv9k0&&F_MC8K?*k*hrFb3OWc*_a2Wm>T# zWOJ~6F|#NsN07 z+c*Jve){;NEijygg-nGzuU@r}Z!Nb~uj#(p@MhP?9a&zMw>~%TJ~OYc+nbwnrHGZ7 zniILxyHAf#Ux(L?b3^)fsPBtdsSxm$_-0PI-&Dr$_uQ?J_TqG7_`mgODY*tGwvaXw zqs!X;?r0=}wORybdB!KFejROM?mL}4HHO6`)txx=Npc#}%2NG(gP8CJ9naQ5^pW+c zut4+`csWQfNBu5w$YWE4bBN1BFF|wg2OF8N+%yU}%)xmTFoo=Fu?b~wxcb;4FKujG ztn3TdhvzRR%Y#Kz>;V0&N-8{R&>%)3uvzBFBs|B8ia%%O;5pZqt`eE=8$>G$QuYt! zVUbq}(c+N4-fjy#1FwSzM8IgsP2;~2jDpxdIbK$>?3=f{7MFRJud#+kwGp^@e5bWW zHR54E6jSt)j*%92uJEoMyexO0mmam~dK}p{FostrfZ*hznypYMY)^Hn^-H3|SXz@* zmr^Lrt%Y=c)Z7sT6Q~)MFCl&$%!nUwY{0b*=q*=x<{k1LsCYpvM-JpmF|uK>+(rBP zO^ceD5)o#TJ=5CS=Aq zKTnfNEL1jMX0ytK8dSxNu+uRmqP=2@ZKE;U(kU!$In+|XL)0nyHdc4nxVCsas^w(m%8R>^0MEz9 zhkpD`<;RxqbE-`(LCB`}t3Vz~;T6i`6)POsN&Vys)&qFa;9={DJ;Rgk-ZPd7HmEYKf^ePyFz>YxelK z=qWo92_Ts2swO6WXS{r{m4+6%v{tJn3p5#Rx20rrwt{Y&`iEEYOz}enh);x7T9%*V zS*tRtr7o*&>nkJM8!OnSV}}wg$UN2IE5d++Xc1pWnySU~=9hpYxT( z=-_p7v6Y*Z+U;3}$WJ%r6t`Cw*cE-wOe-L&XejTme?{j^+O*n586V-@-c*;u?6t)y z>GsB~RSJ&TU6u`in_BFgxGE}WIOr^js3P8^HI-Sdj^@nF z8k!>fvj4L2@!;lQTUZh~*zDS0Th6`-|0a^XejNg(+*e;*+6kWSWZ~*IIt->CP(QWh z1*~mVQ+20yc6wT#zo!){5#jM>bhC1-&FfT}Rw~*5FqcfuPDs&|cg*eT^%|r$$wk@y z+K;XcA-IA&6aY3tGnJBlKwboB)wFjv6ttx2i5TXVl4K}|x_POoJr{Q{Lb%MO?0kO} z)F(6ZaQIykyPt1%SSdNhjFgTxSnqWxYshQsI@S~J(vBgzVb*6Dcvo>9*@t!YJiMu+ zB{IXOopcIde4!t`mM4@?YN~LUlZ`EW(~t)akdMMMr>A!Yckdm2(>-?bvm>soF@NsS zmLvkY|COPi=4r!nAcX9d`w9o55BdV#M;za~Paj|D$7T2Oqi(W)esP17i^_)@(_L<2 z%c-r!XaB)5sgqf?*JFK)@_{r-nNZZA+@%b&@8|7kzhCM5QvnY~$-|Z)X%Tv2S9R_FWkX zh@dy(?P^*fB7ugVth9D%Npi!f@2<48kw}eGj4Y(;%lf=*0Tc=9&DGQrL7fPEJ>+YK zX28hUTi?42%Y#syT0Be`2Ucn-Dl;9oEGAmoM({N8gnM=P?TsG2xAlg10R}! zKRr}|pN42+AfB(X^V}_k|s@fl3eo55g9|PAf3zMMTCPb^6 zO+`6Lk_H*Hv>1#*2E7n5@fd&-2N-FD~tEjG&XH|TQt$g38{hD9ZG=mFHkJSYvT zLyMtVT0_W0MvMr`y4T}a1fi#n>(sP=X1`}9KW89fA*TOk#h>=)ny@K=%KXg&TD&d) z!Q9=vw*Uqf&ql-Od7sIGd8H^u@9eY2J>f*Z#B$5UA^*48Ed*- z1|k9GCzwfjSMc000=W7rm%PxTl#OM6R6wSLXx*XY%~(PNuz(#X*)0lQI0k2B<7n3x z>|iJ-jKKE?!Gjt*KP+x9Xuiu}Yb}{JRmgS?mu_VZ_dZ-U15E(Y5XRZ6jQ!G0 z>b8DSYEqWVjRF2)b`gA44mI~l4n|b|Xq^C1ucB>+^&vF18(4rd3tYiO`@I zdt_=(=Ev|iaHb@7wcU-eZBP-DfN7=%Re0-H`Fa3TJlzR^DX>~+xx5Tjr%!^o0OA1Y z5x-b_c>7kg)+&hW+^Nn zo}O|GWe+SM1-Xg8jeNw9`|?){koEi?2giqk+E(9!nUwi8blK!xMp_2+^jF`p6~I8X zG;y89bl*(#@e9I*(7~h`mc%Fv3OvAXz*K{PcPT5|wIEam05Fz6h;p%HPq(C7L|m^^ z_LyCwD!E(*r`y^04xG^%b->RTX(=wC(i;_`ragmHJOwA7Z`~pM(5YQ3Np}`lm>H-b45y*mo3WZr zP+ZsyU`JUAplTuNz`QO|$u-{UwYoTA)@0S@5gl#9r#7E%{x9#+{p<|(R z+`XyDc>(;v<@kbp5vyh10EGRbV*eoZCXl~>Qw_!Dz4e{Oni3Ykcl&tEj+x+1Yl_Z| z98cP0e@~k<7tiU(DOlcCwYW7CB>FywKZLk6Rdo!pOhLZ`c_OM}<4M9dhyyWt18s`v zZwY7;FwmSVKX%p|?E7~4++ZCOfvynviu3vq(=s8N8JARS+XvdR?mTZEe1SzrV=H>U z+Qkl=5C@kAQDv0laJjg@yr^4SN}K3F7SMs91jO(c5cANXa3TZI58Z;h)fC)}i4|o@ z;Go-1PVm8P-VQD6q98A?&YBV#4dn1;`7;_I>;FFOJ8L^G%|^yHV?XVG@e>*6%7DWd zn4?tDM9$s}6^jrO)A45WD8y~7Xl!q3B&MPK+V20D9^$aOIIhH##o8t(o#OB&x7~f+ z0Lo!KjIOeyF{+N0B49IbPA|oo8pfS`zlc-iNh{|W__fBo*^W<{Pp;_`B?SeJNaT}R zC5gm{rG3Mb4+;{nY6H{GQVeFgy>^5sf6YUD6 z0ivkY*?$%L16n~CQ)Z0`qNC+i9mv_6OrBKw2o*ab5KQS|VbXx30z9tUl7>*A-I;AX7Psujcgef z^I&|COiW5U(&C9xl@o!9B`zrpoY`h#B&-0K5xnYFk>;qAiyvyW(dj)w;i9;Aw@0)f z2wdx+t07V=BTdg0z)9O#sMsLsl|~s@j5|KuufG$50$>1qN#cN*rs*LYEjZBKMLdwN znppken!9Bb$`Qr$sL@OwBkuTdp=P`DKzz$4saR`<49e<;0WY~M0!0#g(uFB3L*j)HX-@;DnjCC#DM{!VvQS$$?8F&aV=pCt|Nm2#-2iT=Db#xz1|cR#w- zo_D7E+*1#pUEo{;&zp0AGj&b*Lkiq+rLx6KRzmHs`5A)}l=if8biOgm!df}q1ZPdG zG^90|tMkKQJCCemfNJO?%T7dzJqFCK{nUaW-vz5CX$k5`DytxgNXs}5+CoZahYlV1 zieZo$;OJ)F~?*? z!*#TUCC!$S1Fck9hKQ6Y&+w-!MB(hiEkPq0Ix& z1CD9jRQ)|HmBZunA^tT=?{Q)xrNY={l=#N-QUm()>@w1;6EjvnN$b@%8KL37jnjuh zEl>zHq%RzeIRqULkRQ$uQn1Efk6U(MwnStO!13qLT}@L)QTd3nO?WjchLur)I&%nS zr9yvE_z2AS?e$+W+C&ZQ&Od9tD?e7*Q$+LQ1C z!ciVhp>7&TxX;b`38{KGF)7~EakyIS)1t(*WLw$Yb+DY4{ZUOnB`#=}trUma*y+I# zqBJraPtKEKF!=!m{#_iI5mqv2<4BJl4;C+JgE>!C2-&EZsmaj(ZI4$Pp9Qz>1g1|B z_au+$;HC-T)DhMo!hv zM**X-OEcJP^JRZGtEAwcpts=^7HKI3wb|Cy6WNa^hd zaU!g~QW$-Xjw7ieQbk1N`vAf`J$&Xh7Ic6ULEy{+17GNMcbXHV^yD?1r^-U=JQH>S z7~sJ@u3kGj}@Hg}sml5_Yi7^Ugd50;h?U5KZBiD=()^PyW8$Uk?a{CU&bk z!L_|*^r%31#j;RMg!)LGI&FHE^@lp*HcSM@Z^{ALc&Vx5Gef<$rMlz8hQS4Rk}o*U z62@Ss1GAFR=kSKUmym!^EL6V84|l9o*=H8K z1*E<3LZ~=kb|h>hTjr5N55Ij_SYlbBF+4Dmg4!r*2OWkuk|BNwD8gp)Jx9vQT6XUz zeTQSp1%#(cdT1gqBwzhF$YqC7;B}nSRahI^A#vyZjJ_Ltz~y<=IOV^e_Rnz&!?wG9 z{8>OZq%V<&L3Z(cWp6|D+KTDb8@RsX4M!f?NqogKLMA}n`~Ca3&v$S6^g-+ejGPjO zUZXwNBQI}9h;1JBkg&PDJG5Qi*A?Bc6#||VH5A+eIjTOF(X6y$LonsyGiPDO)}}~k zJ6$f9nJ=z8A+gdMqnkv+lLbyo%$_5EI%kx%B(QES1WntrhniZN*GGj(MkKtR5qeL6 zfZ&^#JqCiR+*b0^VZOex zF1Wk3UJlvf1RfsNyWAS7s^wSP)4&`-(vi|?H-@QQ(U51H;^AD_zPQLw#?1QcA-l<| zm6+cYJwqdp!jpnumw8I*=zL$ z>huo!aPa!sVrL?!j2Zbq)ql4K8;LK7gQT*T#b03(i`8%Q{XXYaL(~#oeH`Ar^0EVF z?-6#s+*+~Ujr6$f2jUc z>Z3>i9|<_p`~2bC8z`qM^`bOxr$W2CX?SRsAO49UFSEUs{nQ3Q6vASHvpR3?kQ9&W zoqj2B5_1Wn>-~UA*y!eBKx0$+%7BL8Zt_zaudel<+DHaPjE@Y+LA`+*{c#6Xc1~dR#-XUwxuR`az?tC?h$N)Dsa0kVO;d(NwnVFT8?ZdMqv2}FfPig zuDum~-J2i$wf#VdehO|UCSvrKGa>Cw5?$klFq#|I=!+AIeYp!~c65S!$h?Cr2q_pu zDlE;O(C+aBO(7r*7?4u?0f(eKkJpsP00ite1&W&mV*2-At~!&g-fgY99ii+_D6bs7 zoLp}X8tb4)@1_#A^9%V{HXaxD+-Z^)O>uK1{xgVWn&yx2iaOxh3@p9?X>yy=11pY(Qhx@BiwAm~_KmJp3 zAh3Hg9sWHtIg_WFdJ9PE+S2ZA1S1g$<}`~|RcFPyGA@PI?}Nhqdk20KUQ64L)pmFf zuaPee;Uk_h_;YPIoKGy`T|iE%DJBJ>1*FE-zc$h?cRAPIxGvwOPMe;S^od5@4XCW zqP{PG(YXiX)}=)|9?gY}W}T~mjl!arCggSO-c8~*pa=k5nUv*M#IX<>O>2(V>87eu zLxOVk?_p@cri)ekliou~nuRxQ!{}i+#L+pE7TnUk64~7J_jQ-ojECJ*#d-u{yb*I#^XmhMTm#_^Cc{c znDEG$hw*_UkAXTYn54@d>SjheF6Jg7fp}}{+XxtmTeVYna_t81B+)mfmnJHF$BHfV z4hlL=gXZowcEs*js$?d|)Zln+>EI$Ep|gDPpw?b_c^FA^Btu0N=>djZ3ARtg@p;do zrT8jSv@Hc}JfJ}NztX&w!S3oV;&h!KV4R-t=QFCo5ewRP`F)O71t90X#y!qBd~T?t zc*=G*U5L*iOm5hJ$tyI)XhAUjs|ac9VH$L;I%7u6>axeeyCATjJ|FDZzI%ABwU=76 zTj_efd>^Wq2{AJhr%0?Sq#!dx>W;e<`-1D~i2u}R^>0E@krotfoqD+4a@oa4#6gqc zasmF2ofa}$sw*-7@h(-}smM@Fh|>xKd-yzL@I1#7+c}XW92w;&duZ*1b7i9%$O#XS z0p;I|)XIzc+8Qw?w%tI_7M{mI% zU_|L^4OXq8rxo8#%y(7}aW&bTx;m6~&H}qx;c6Q$j(%eKq?jja78h$VWOTe~Rq?t+ zW?bqgC@{W}!FY}TNQ4^fwVM+L9fF&5B9xJ=)+WI13iLlVBW40HG#UqAJe#|%U~4;w z`9Pu@jA_z{Lq^*`Ib$i_UP(qzLYy=m{WH%sVT}RZs)7_& z*&>;?Lq0By%0&qgL?=vD;O(FqB)ay**Tv~7*9a#%gJskK8hUV6#<+TxPAQ@)lt zH@j{n@wiH7+=6^Q%Q#}aY~7lRX2QGK$I572Qg(D6va2KwHJZ1DFPe?z#P!cY!-Vrn zywIi6v)(-5v!V~VlEz|jc_f-N008wOxe-!02Neq;+3Bq3-_F+~2gf$G4iW9i2d*y< zsjee)h`72xC6aV5L|nb+iAeP%j9Z_v#`?)P+XbTEJ$9|-Nzx*qsXzh>7HrE^u~3vQ z4obhDW6w~ThkyWeQH9cVF`SxLsk9v4Cuygxbj`J7GqWWvFp`pAq09v1!p7vZvg)3y zVI&EtZjOu1o2%WToz905#6>)ImqKtqf&c(vj5iCm8`(^=rU#6w+xL=kDKA>rTG#yp zh3D%;o3FP^6s_yy@zcxU<>wbu!;8?fIiArkKZ6G~fnHBLGlCh||3J(D^2Q@@zi89p z6jwHfi-&d*o$;^Um-ENb_DVEEtk0nYb&EJA$$t>&WPvn2lbYE~1PP}63oeiS<4^YL z?M{YJJm&T1EZ*#HSKIU5%|9M);W%nYcq?dUcoz%+KoiF#fN7bsJ+Ajl?7YK-2in5; z^{vfgy2(c0P)Li{g0{Gb#?DGE<@X=QNvcrNEZV3#K0ke9JcdL@4UCfz9%ki&_W2de zM~n^tFvmP$KSJ;iK>ZI#Mfi_G4f~HtCI635{U0#(|M4sQi~Rrkh5xat00l7rF8{ax zZ8&E8krh_N0K0dtYs14~D=uy+#we3tGn73%dYcxejvl|hfu0C;qHhQci3mC>EIe9n zPBMD}?NHqmLi~Deq+0pAIG6fzW1{_3Jsc18|Emb#zkvV0ivH*M|5bEC*;Jt5l+1A8 zKt|D}&E=Rur8Oqe;#im-z8W*?(OW&XuLT0o_O37@%}ujK0scL4b<_S)Jr^I=$3u|3-gM|MdAWnAx>k%h!`+=JWm~W3v;seL?8uk$Ref zZIXMbMzX8i@Ju~%LA2-U0#rqerm(LrQ2f8)DK)2F9Tr2fPP%0oJ-V@2((y6jN z<+iiDHo)Ie2GV1Ztp8>)ulKf+?<&JhUU?O5lrB=dwzKYvcG_gUxKY0dBBDSTTq`U? zSY&YteKxm_I2AwkbY=fnlRCK zXC|F(%I7uP>qcYy(c|=Qu=O44rbyZ7R{_Hax)IC-OmKcfgYd>@>@@{B?bvktJ>}$N zcedJ-{YF7LHPNweBX;~5Mu${c%xTgWGS)B0JfTpBK!MOq7MCPlsux{gTA3v~=C|5z z*#X3~f}IyH`PkIttatq8t}S<$FBQ|}Xyq!M@Tgt9v_1X@$aS=@C=)+MffO7G*}|uf z=1*Lh%lyOpYdjIL2-V=&thX;u-NnJoaJk-J!()>|^XX3`E2Nsn*r$!0;?o{==hw?+ zf2z_3VlYmjL{ZRs|5dHRj9D@HRijDSVDav2^^_2FJWHc+Skq}Nuiwl(oXcGW`js5! z$>*Q@zHLOOr7URxd-Jz^g(5!5HWG7F(SYATA}c&x9WSrni0%Db$WigIu))61zitiVl07NkGlC5aPeocFFgtJbL+(;Y{s4@6XNcayqYg22|!87=A;^jq(su z5v05(r=-bJtg~=?a`vX5R^C44*;tXF?SC zhX20JgD{hYkVmVp{w|I$Rkvj<=7$|+zvnz@3fZWeXpK=<=bahPrsu_v6IjOiw$y_!jTr_~A*Vg`3-c@I_TGt-H5{2eX zx`qjFM@6(aEY^b`wvMX+$k9l#&I85-zK9V;$B1GisP7k!<(~|&XajA1V%Bze5QLTl z&~o1$9{+PN%oux9QMTy8yNx2)}r@5K~BE#bW1|n4R~2$bz5=!si~}i8Lb<+q7rcb znOSvg@T%q2L4jTcD^9|QSS&{ZhoxNq?!{p^qTx&Z3<2()(BV=)sh`;zA%gtML_g&t zc>vuX*;=*7M56_f&kI1IzRE+?i1-yAJdeIrdoAtHap*=B$?9v_erL^w9YOERy#?s21<6tGU>{ z2qPSRA;l)WoBG)UL9@#kW~Iaon54!zx&Gv@r&AIZc$#AY8$m71REL`GSRT<|MHxi2_!_%ASd)V?EZ!H(E8rdg5w-^4o2iVMlW{QYZyM&>dGb#xDA}Ln@2_`f1Psc@P*vbWj1nGfu?;xWLfNoXe%jJ%Nc~ z6#$`5N5mP!v{QqBD*{p??IbJ7nBJCWd%z~{tH%YW2&s%Xh9HP z6gtJLlu8}QOW0^~)pK=en?Y$qG!|t54092X<`Zy+LMz)++(W+J$~6(e9+2qLmAgKs zk6Ju!#J7IZxp&OU>cibJrRjw?Jk=)T0ucrHTvYNNU7}6K{Sc8oK zmAmq_J0=`Z9+IZmpiLVqFYQ}NQ`XO1Q-EMt*yHj@yG?l}Khrw68Z`G16sz}E0P4`n z=FL6ZB~%Q!Yl+B6RVKw^kpPW6+OELdZMLt2`RWUCYc*M4Sq`WFPDC7=U=tht^#@NB^Pa~*u^9I$%ku0~&x z*wPNeVDWSO#8jdShwkyj-r82>E+$A#FOq^s3+)sk6$u5^D2aO- z<-MsSQ1%X$lz)OxCdrtC&$)-vTp+goRF0g5%%p;11?-J8ws{;isd5}VW-MfLp557+ z5=1+^vUCMg&t+oeV@>S5`7u!NsY4@&m7{jE(Rtl>Ut4z5f<|sMtdI=V7jN5R6qCz! zeuQ~!tWb&PsZE(9Isr{GbXVL9zB&0gsKW655TMA}Ncu0NIvg^5L%%k;Nk&v?iy7k_Akz&iZYJH^!nf#T)C@L2_#piOx!di`O1x8!?tbHq;PxYonF$ zb1!46D7m!7m-%~p9zs;cGO7lt4%lj2Tsy`^tj8j^&H|U)h)&&P+|bT_1$&7F@X62g z-+2L8tKQjhKHOz^w`%Zy{R%Y4Lu@sL1RV73b1L)Jf>U(B1vww^k(i^5#^o@RNe5C7 zc)T9nOeGl!>S0hxHWA0qYU&pAUxtt5P0eA>c!C&J<)|DfBvqk~Ttx_?46$z)^IN34 zudgbnDhBdWoWd2#R!VsA`@^fwmi}BIBQ>U!A$`vyaZEJ1u_P(dEPqoXcEBe+Y#V5Z ziDec&S-6z1TmWL`fN67T!4oC)i>Z|ULlJcC)MnFRf-RdsDH7}Z4j#`&rpar4ECB)8scL3Y^#@q9A#I;05!6QS?PfgPlf zTDbc0>1PVSiEuGMCJ$5jCkG;E15Aw1ge)-sr=RkX4?UK{m(z40KS93<^ekv1Tx^hn z%7TPb4gseBdKaPCeCV^q*^uzy4dWb*^wPRi$LS6v+ocSmB|{63Dd#^C(f0 z2r!UnSZGWwr0^YKqwxCt0ztxTU`dW$JJUUo`Af~3+nr-RCMz-yGqc&LoNjfq-<3z+ zTQ1D$awc$noO~0UBnu$2YIQOKK?_#5HlNGYr$UO12%zak?{rDd7bdifWv4r*eXML| zT-I;(iDas+%7%)xNHil{K{$u>J(B2ggP5H}ABDOdytPKf?7`);m~g#;?wuBgMVlmnTEoWJSnT_!JI0}qM72Fq$f01%C+C8q^?1&o;L}oipJLfw6V$ zW4FJL)TACxr{2@`D7r*A5Re@3&7HZ#IRjNcJDu*I6AqAgvAx;szmfx61;FzbmnCQF zm@DPTLi`mnbcxLhf4S76i0r7Gd4#1EYo2$xD~Q=&+Q)yX1dxgDXYx;?58^SjM#oDlll#Gjq-%T=an`}y;hWhJ~>pW_hQHI{ao(~+Z0w1 zTKE=Bl-0}Yq4Rikl{83;7W8=_g9?aZ+^9IRJ!Z6b()go;d`)rns;QKn%Zh(wFbtYS z#S4dFhZ$3B%}MVaWV-o~P$7R+{;u`Ic)^)GDGxzQIx%7N=lDEK?T4t_U_ud@MTa6C zK@Qnz4r>Id2}dY8-7hfg_X`>UQj2e8_B9EVZi)FeL{@e*P5C^9mPl$>x@aA+N1nxs z3ewAn#83Y_JwZ#oDsI}TXaM>btu;@s*nU{6Es)Br?`D{RI{J;TY$}-NX}-+|3>17- zfv+ye;Q&#zwZ#osmMXy?sejD?muE^1lAt$U~QSR zd-wik3m_Hx`T&51z$!X@dcC1&TDr$LCVo9C66W+=FBshuCYS@xpeH3^MOT9gNmzLy zCFhivI`2oP^A*eYfyOYoi`U*olr0+ZDbs<6znqyd6}ChV@dj#uz?Qkpcj^PdAL}3? z0u3~UYnC5@ftTDQT~opb1JmAOoLpLmX=AvuakLa7X9gy|j)q2s$>i`@4`6IXI%S}$ z>NM6Nxa-rE#vKV5k^XQI3GoP58+kq@yu#vr za?|?T#Xl8BOcbC*V-pSSbZbF5^!-=E+gT^c1Da$o(=5)saLHDkFF!ob$OHfkhdYZL zp3CPXFHh~ZG&g2U55D*sHAB(}6Vgb4_MRNnBkJrQHN`kJ86{XW2*T$66tmUgEC3j?)&cDmcjmBLG&mZM#cC@NTn$kf zo!4g^#@6k7O?e+9N|pE@@P)ZG=OP8C*t1eY1eRKLBr@c7GW+x=gH0V}Uy2xl zoTJN?QRTrtC~t906FRByW@n%vyF60F35)28Voe_sIKDlaAf$+F28d-3QlJ*m5v~P` zdkg`dY=9O5*B@{u1y7y1j#2pBV{!qZ02C+AyNNuI0)6Rie{ycri!eS?khI+&N5;$b z=>GtoKw-b%Sa7)b-CYZ=e;eM|)|gNfC_}rkV;kO~hhEtDc|&=tgH#Iz}t zr<9gan$nb}pv;>>8Qz-2HY`~~*zX=b&AZQLOxQ(iCE1dlrMNWrp1EglIDjE?cm?>7 zvw7K2Rh?U^I=5hV*LO6nQ&*;*SsR9B-MuVp5(pc$Q6}}kPHs&a4(A?7`%dmm{yu>{ zTU+~X4_^&+kVzU!$<-G#j?4X9cWvNOUv68YMHv8S(!wdyH+6B&O&(V0EE-qgt;o+J zWGK0C;Y4#gW2yqm^ZD1B82&FaWGQCH%zh4K2nG zF3EL7UY?Ade_w0CVGXNT#>&z`f!=JB(AYb0Ol!f^rCV~^p8UTuHQGa+Q<;BHUL^)( z-uyQZBtqNjrL3eZo~_#O@jobI(N<`uLlwmMuUBVgUgznw7b?%Y!+$_eLAM5FG({Rs zq0>k=96zrvuYwvu@QBoFc63a*$372X^G1W2H)Aj+7@RBC?pA0mH+Rk>)`P@C3J*Iv zVHa=#0fv#H&&IfAii9#H2cttLyK&i8HCaghWBcJ^!5@Q*rS$MJkR@&Hl=(9}i9HeF z61p1HMj8D+om$$xcWL_^zA}FBh(5CA1>&(CXnkjwcx&**$f=9z0CPStjJerLCS0Op zE<<}Uc{-UVa!zfOA-IOzg3}qrh@@)*WZ8Qnmd^b!IKUa$`YRZv1%#-Im{nd0_KDyo7E5B<>Q<~BglzB5KLuxcN z_3?p9DD!}ATl3seD(ecCUJhr@9^#XPGSO_VP=c7}Ofoi(5Sl@K!+z#sMMe6P;UB-=|~B~a#W4a!8Vie!0TQX;QoBiTB&|g z7iFpnnf$;2?^mD=8TLq0W*`PS5f5(P$guHpa2_+r zJ7mP5;9=dp9jSWq!I(k1R&CFoJFJn8)#N9W!_nJ>1nkbPHXalGJc5UJadl%t;ZH6BLitiirsA4u^yvL^IjtE1cV1YhcZ(7&$`WV65(ZmN1EbnKA$?Z zPcYPNYHRcglwsJQpbwcIOeXOkPcJ%bU?A?!tiDa&EOi!U-o9e%yepAP zFhI!?%b!7i%%~A$bPU5#ba=~ zbakMM5<( zFSuuXfHR&IB0dDLNOU5e1xdhFt$LYQxLCXv%Am>+FPl2qZFPh%9^pqRk)(M?%^HFY z2ws7!Rxa=%WHx$Sf1zz-5}+{ma2>qB*kZVjj*Su5-xnW@euF(|cIY6|td!q1r72Bm z3d+1OuMEr)6}wn=)RvYOxK8jAY7Va{eqsL#;{&_t4obbrcHO&I&~oTwU%YxXgFcRr zdFfJX(f0fQL>W@G88c<^G|BXu!->ArM$=Oxx>RbOim5=ur;o0SGA)Gn$gx5KsVt&r z8}{Kw0!Jse?s5JQqns{nn{)1~8PxLyN?|L)gGTvu9NhUftfF z-L)t~jXQdFd@=#Q&f`51#B_A63`vdVf-sP%2JKryIT_}FSn?VuBXbo9OQv_T`oY02 zSTAJqk=L@ zQ<~BglzDR~)8PG9`n@`_X-eDT6aGorm+)EKvebRs<&ASSi9ZblM?Y6t17N_7>*v?5 zT7H&rkH{z`bUTf9XFDgr^j|=kRw}Y}N^zWUl;u?vJ>IZ6cI(bBM7c#uY0kX$?}nY( zL7zvN4vo-Jk|lYGv}(@WeXm;#yrHQolaqsb`#SR=-XVUnH--M($2UJ;w{kb! z@GQ5oB!_3IL7BI8t=dtc_@UWqURAw4U4MD;v8$l6tXbzK?68`$D_da|754i(u9 zbz%h$9jAvx^qivHtR<@!Pn{EVn{ZO4y0S2fe)5|b<458Zhx#!~mwD^g^>Hgt;#Hz* zFpnmyGH(f!0Y33Mk1L-RBz*VvgehZ=p4dxj7GoqU(hhLPair^Opp0l|(d#R@WhoN} z0pN*Y!!~!d!~m;JbQ&M%tU0j~)L__|ucn7%H<{{jV9g{dxWElv`Er2v7!?<1tZgm^NjI4eUE{ zFU&d!NC3^!Fz!pD*WY?erYk&ylcu1F{X*DayGc_eRG>0T%ER zD1&R5p6c8jL=n^-={R0eAmjA5UqaLew`0?D|hhOaz;2n*XkAR<@5V}pO1 zwv6Ot#0h{yfquP{LiR>?$fdWbunRG=aM2pqv=L!gR;DX_qT z6ZM<)m)?v`@Ccx>bhYGOKncnX5h!sygO4spBY{ygCqLe@Vl19qf92wdTHDeRoi<1 zytPqE$#(SVd-T+i%Cfv_Sg9z!bnTbmut2s|UfCnp`=1jt`_8=^XdW`hWIepIBrX~j z5#DWV;9z>=>iH6NKG&bSe6C7QRo|=)C_{p`+!-`~qN<*XL~B0NcBgJr88rfBR2`e{ z*}p^X+>yMQ7cR=LC~_O^elFuQE|Z!UP8S?KeYEEgd-Npi5vsPTwO_}|XAw-{H3H4; zM5Jij)A-xeZ`Fm_HOQsDe(UnYdBG$?H?eA`$2$SK>M<^r z6O%WUl$Dm`KOkV#cbo@2H)`6*+bm=C49hldTa&bRdvVc|5_K{58Xb$)VufY1Hi;?Q z#iBUUaq9E|-uY1QB$MkiMrGaxPBM3~K6Cz54eL}MOHWnUr2w_Z`=t507C;^~h zUq|^^AMKBT0Ym88814ErfP9~v)X143165RzlZ-N85M1Iv=Kt6`m!77AD2`JEm3Mg+ zXn}HRdqGlm-kRYYE53Sp(H9p=eFb-t}lJwzfa*Aj?dmb+xhb90r@&KFGQ*!cmk|U&IjK< z-J(O*gn5DUsBM$Il4M3T-Y%UPTNhn)(V@&g7t(wA|I#`-sH8kf%1io%(Qhr@z#t|R z!~)jS?wRP)_9~T5!pq~811&@{1ci0TjzGA`*9L!gYJFyHcY|!-){q0uDQ8<_$VNZi zNf(_X?Ge#GgQ6@9Y6?4yJ}Zby+H}SSqz`-&F_KD7!T6e^t|atgs~cWO;moC-HScT! z_sT3M3IAY#nK_#8DxT{Kq{5{t;x1|?Fn4ohb$30!I$h;%2N+2rZW`7PSq*AaN5}?W zbZjLPm>(-MP$u}11ZP|whs%kYb%d0_9NzPhgYRG|aL%W;Xum;iJZ^bgf;MH$gUFdm ze;BcDumiZJq^RJ4(ht0bu)(8DiceD?#B04EHAj^cxx!@aKk=k-@DMAu%PrRS~p2!DG zkk~*TNe?L7LUx)L8Vdd zJWD0~mr^P9)gqIonlOy;N2#sxb^U%DD(Y&$RM6wFV7{~)K|(ZSYsU;v3cD9>6W#!w z+GS>RUtK5{$6&gQwHD0mQ*kAyJYRZF4m=u{cHdwNx%uB8$ zF*XdO4XY{u4Y*s@WUEGVl$oggFKMoc zOkm7dSmHba$e=B0vsERPaQUi{M`{i2t)#FpO_cH#C_o`(<9n>5Qqmz!Dq#w zMfxCH(L>{U(4@VjkRRXKwHiG}mLND^G%P)5A9ki(^ z4&d-D+NWu2v5%yA)d!8ut4-1tL8LSlQQEq?=-?oNqfl^gC{8K}f{VpTaB&iJad9l& zoCU#2a1eYAVsVHkF^C7L$VJp9%M0)Uj+W$hW~Fu8Id zYL4Kfx|i|H?{9nS<=Rh^{hez2ky&Fbl z?GgY;82~`a002lC001ci07w}C04W0iAY}jmqznKcWdH!A3;=+X0RWIP0DzPM0FW{O z08$13kTL)OQU(A($^ZaJ82~`a0PM7XHkb$oYS~yN(>I;!Ehl?|(s*}iyl01Gc+@+c zj8)PD)ogzy(?8P|YfCq8D@|d+U@aT|c4*cn15yU~3xlmp360WKOzfE&i*h5;WH8*3 z8|f^>L!I~OHgiuJNK%CrRltc> z^&goUBN2xb{Y?}_lp)Gc6txGGfGhw?O3s2T=u0)XZtvz>m5OiLaijU~sB_WlUk?Tg zKe!Es_u=?)6g`c3n9=BA$P4d6ymoTgYoDJS{%?EpmK`^(X+sK(?XDvF+Wu)x8k&`{ zbuh7&siXaIwV9{CSFg?M`rP9uo~p4^{q0nzKjp}lLSt{B3&-+SqXf#Nbp{=lCZs_e zb7$Qq-%u1$hN7rX8@m<4ssr~vOHhlng%kHa+wBAS)N*Erzs@?{tA3bBW%3+NUm{2a zI`MCU&P5kbIZbL4PY%reo?h%I*vepk0|~LKCAF}uuTI_;E<&h}{I^NGV zCG2cgHDN_5;9N5ZHxxybp(yGj_th#w7%2vqZ@4GItquGEi?q&;`wJgTVPtuZqQ^0| zDgMI8Dg{{4BNwlIua{tyrDRo;LUI=0uw2bSE%-cR?yOlw4uwsg%Lj4O6)_+Thz}c% zxZx&GomY0vtv87%io#TFT4+_|Qshp77UVL(l&iG_t0IXgOuW44n=dBz|3CXp_6a8; z(}ct(8r{jt$(l2Bm?@dge5}3k*04*Ac;T(+MTskiY<&80@{x89E|CBR!>;(K{Pe0O zpi_VEHa$PxF^KcUN1W!m4**fRO1(JeBKZX1hVTYp(#n)dr6{9Pss8HRMfd}DAr7HP z)LoCJ-(HfeEPpJa7DVX6Ce-43lj@re071v@UhRZd7#5PFuu0X4xW%A`k?~tIJL^(oEEEpO-mH=oB{fg5j7 zTe_v!t;D!WEOg+WLUZ6NEt%%rEa(|NnLbfKA!Pc{?AmN%gDCOdn^pU;tGHmuTWluD&2qq-aM+>i7M z`%aFZ#WDRtRJT-)XwD5)*&Yy+R_r?0>is%K10c8N1!mJT? zvakyUqi`oj24h)dup6vcUa=q&WKhM9!_DTFF~`{R-eORY*}mWn$Han+l&Ih#J8v6t z%t#DFDN4xZVXsJwab@8&)_s5mtU-h~l&F%EYQ)KLjJDUP{?$jyql+Sjcg?X|44ow( z_x*n~MVSEc2n%rgHvX6lqf5Hh(>#or5NTPBia^bEWakWM1$MRNf$cP|H z>4ISS>;$`|zoWTI0^#{P!XUU(SQwWK9b!!l9?V!3#(|0GIJK216rkeC*V`X6sU@w0 zT%cpl{Nw#O3B_G_zB5g$$ilodDcYFLai|%k>{*q#BQY`~8mqQ|;-FfDIUqWA8ad5j z%w3G9RSby;J7OSo#E6KE4E{eAtGO1xSQ^Bpa|}5UoiMBI2G&Ev4ehqUu4|MpK9!=h zCU7mXHA~Q3j31986y|^f&Aa92DNN`KVnUw{6Z)7C2Zch3fudCaaX2b5q9_FvexM#} z{AaKx!~;4qdGrvR^S`i0%Jr2B^vB{1I2NZexwlQYG(lR|Rj_qyOkMH%{M_WM%~8Zh z#t(888DNbQfCg91^JB0Er~wPZCeR@;i{9W2hya&iu8$Z*Z9>h9qZo)`QJXp3l&Fk2 z%$s=F!Yy=Z(PWXGrCKJ|-+MtQlk&xN3WDWawHQ7p2yw#|ddDqZ6dgpIEo=f8;;#Wo zVJ_h+ve42&kJc7yG0Y**GRMMvg2i%r5_Pgx9_jD4!awlKa5VJUgAKS^5l>qYoYJJ+ z3)cc(tV_@w+LzQ-u_Y)jK&4Yu7pCRzj)#W{W|}%7KJg)oS4Vn81v-W)xjrJ|Z6CHS z22T`MCE+MVpme%*F+?G>@{vfi3hcsA5GcYBcbo^$DqT|*TjI@FlAc*G9}qteq1>IR zA9*_99^reUs7w@(l2Y}JFIeIQYtR9t(WMIpgC<`bV!T3Rq!?tdYnW5{55YLQ6|=jn zA~x7k1!ADEa}0k2TXn*gQ6NT?xsw|s3Z*Pm*tTMD8iOPaWcC+TSeyow1&i|GaJN`L zP#LDZW}UtWmAn|0DcliDwG%2(^N#wt2*nytJFZ&Fgg!4J&qo3*&|{6eV2K-((bUKh z9s#!$YZNiTidYS>WHZ81K5+9hiH?gN`t1cnfGsL6v=$dbG5;$rnJN?B{ zfKYz11Xu%Hb`0~jP)mtI01E?3IC{7-^AQ7jU?QHk2nNA8wG|X>8K9w9!{|R-k}kg~ zFrlmryvNc@sE7_49UFQ+{`^{3qnWGC#g>{cccu}k1$I~MSWARtZ2Z~I{N03WmVGQ| z;_Z0f(}5E;CB%j_T&w-V_~_v9U{29qb1_d58$9{;rGJ8!2rT*sI~uOn5<-rgIdb-L z`N^u{$#>sQOpV^`YIKkECocTW-)w*R`rFI{Tg{w#CRDRTE$NHYrOjm-p)1tezlx1Z zU5fM!StL4Fkd~ei0ndX;LFVurUTCiF?rR%;H9RtU&sr_%zH{yQ_{h-X+m}@r36^E&5<=Q$3keiGqL`s$+qL4)#51a4*`X>AM z-h#@4@4kD)7udio#pjADE}ibb-(fAVeLFRpU6ccZ!&c@>2MCl`uO8#3fYywS4P_nJ zQhW6*2BrS;{PLr>2d={f=VRh0sUo2&WQGcnf_byitqVuv3m6PaNRb&)Sl>n8w=1&r za}vyfz8Gd)sA7z=u$dKBMA~1XCR(Z}Sbfg&k*WMIg=IDnx{ggG^}+r8qOo z-q121(lE4Z*eP6z3Ka4*;510pc*Y0fw^{l+p*}VL0o12jfPhHN28KEZAKv2YL*Kzu zhc30AKUj7E#05cbV{Vo#)DyAp-h*yJNMqZD-n;EGSEnETHkGk2^Tw?!sk_nu+tWY& z$WaLKj*XeestPc(XP^zbo7QJ<@z*#%kHhWgZ2@xgoq4F6xGnb`c+kyJ2nOzVcJ*H; z0@H|}3((pT;&HKfy(-$5I9P7m788{c%Dgsvicwtx*2uJ;wlkiLCmqSEKfix@r0VFt z0 zRGD3vbN^vC?w83>8K(Ee&v9bnS;X(-2_eO23!84%SJt22ux}G?`IBdNLRUw^9LFk; z!m$urPu7-Ry;+Z$74@esw$_x@mbUfXym+myuDKdXypEpc{EEY!JuSq=3KRY~@w}=4S@?DY>G_khR5WF}%a??m2}8+E%1 zc27_LD>^eNCNpVz`lqT(XNa3M(yDidIy3ff-cy+Ur}wX#x*ASY7cu5?MO$m5u_mo)t);)2X_-tq(DV;XHX(WW^1g3pfq6Uoz2E%a?+yP3 zD=;={;WoZ5<&a~aqXuKIz_0?N9sEoNS8+&*VT{A$bSUF-AHc!r{Fj)9LqqWlElf+ro%b~Pt?8b1L>JdqD)itZ=8L~&+A7x_oBPe{q?M9>B#(@zkR z6iHE8Zdz^%$@h;UF4R{qTIsSqD={%+OYV^@Z9C&lyEm0r6;oMhTfRIyaqrfux~j}W zG9)0d1?APn()4(Y!?ngG@88*c^RoP8aYkNpcCid^!9EH4fzCB**0YIm1kYsJldd+$ z09PfQ2?`M|NMuBQ^CjzDfL#b(we{hSNgLhgIhopf@MqZ?0OBlgvm9phDUO_sWIB@A zk|FKvxP@~Eg4wWh1007SH~0vwXZUhVLlVLcmE~gW?fo4eft9a)@1JjT5H8(`geu@* z88TGx=8(4bM)}F2U0K`mO7?@iQ5YzL8%+ph9^7vVlB~hmf@R7q$^gaWA{Jo^wkAxv z?oP|qlXb^``T504i5QFvpb43qFQ3|;y<^XT58qW9%G6z`42TtjgLMdWP0ZeoNa9FBV+hI&y3rYK zq#>z;L3Rg%@r)GtMtcIm2z-SQ_EOD9YUBfLnYJVDN4C(}oz21Mz-YX}Stnwn78n;y zf%V}J+QB;I(<_+5VT@TH$XIF{P6x(zc$C9qJB+x8Re|c8vfvK2!kYd+{)Vj@CPxPG zkRkv|3rv=ufMbAWEc^s!zE*lJruc|Q8BA3f($jntqnUuV)@w0Tq6Iy$uP76Q^val3 z^vzymV$|0Sb+z@U-n{CG*dDbuJ~WrYC8z7kQ}R>5E)-T2z4-p2dzkMCu-Cu6mRA*j zc=uZ1zXW*5S-dPVDH=N@HdwqRuVmlhii5~Cq$pTlRe9E=#^&=rVLo_Cb-uo0QNwTD(>QHHA!Np6bijU=jxghi=Ay757$AaTSaf~R$ zD|&YvXKc5bV&={vJoRgm5 zMa<-lrS8tbYL1*a;oa+=hn;P!Y*kD5G}7PTpJ%oOdg3y9>MpMH&kF6To40^ zE)WbxGxvFJp{~9$o~R=6eHI}5VjVgds&8Vz$`N-jG`n@Ef4YTjx)^C_!iFg@-GR)C z895!=XB&QazmR2Mh{Jg#kJCYj7{LuWvgsU-G8PAX;T8_ldSR^hHG4BG4mM>lG0@H6 z&(L!=MeWJL&l{q#D~?MuPl`3Jm|Qcotx3|;Kno)?fNSTNkelzQi+AJ z(Sefe>N7_xYf7SUw>*aE?R}486LJmIGe|ecHRH^t57Qdke((Cbw=caTS1n!ZHFnNq zg^1NClNsnK*%2oqpkBAo8f8M|nyD(-A~K~u@JE}@P^G$n2~Fjf&%b@v^DroOb@=9B zpt`P(+i4l8h_n3)XTC@XH3(AA^T+LcCjnyR7Zm^{Yv(t&Z2TSC?p%cw8iBgjP=^@i zm+s%3x`|LmB>zCVN3KyMD1*{IV&S#UPgaussPm35T`ISdM%;3TL9lP~mA%3|+C<{jdjS6lZlmYV{8F zMP><4TrZRV#opQVGz~^^ypXVD4shAJO~a6}mjZDi5Wo#KM&>4Oq7DdeN)Ul*WYI)G zBQe1kA;!cQjb5l-`^KYm$?z-BZ zUCvK!-UVy2E4P3fu!al@?)c8@#}5xHho9fGqT}xIH%iqH5_>C8roJAnG((dFYr4Ew zZgl_ov{hQo5Y+aarige`(e=H}?KjVlz8xRnh(tU<#+Tnem!CZVnlU&q4c1^lum)Q} zbn2ZR2Av@&FxWZ}#!!Wg+dz40F`r(#*;2J6Fa*{#5*b@)_gIZ(fHtK&-=A5VboHu| zb{bS5YsuBMC1`0~M8VOLO3B(BY0>mMS~N{mKk<|9PIRcz}1tFsZ)WrQ1qp zs$&pzECy>|Hap#HGU&&Q5f7$=t&KqXXCHEj)KSdq5o5-^u<2@+jJB&|PSwP76MZ^x zNk0KqPlbU;O)b0P<|I9(s|}9=WL*e|+KMH8MDj~)c+sM#>#o6=j!Vo?YBGv$71Q}h z<9`?5ME);>Oq)!h%%3tt<^+$}MB!M@ zz*MO}CrXD)KNa}JV53Y;9x4v>hxc};PhQRMmW%tlGvD8?t*+;Aag5z87YOLE3E-lG z7XS@#gIUo^e3X)D2TlxB8uIf zh|L0z#n&<9?4XfP6EpK{tkEdLxk3INjWSBtpqmwIqBQr0+(fM!f=$T<>64IL7@;@~ zOelBK$qv2{tfBl}b6>!pPB_-6-y4Tq84_hk$K2X3M034-Ggm9iJBBn`vcLFeP{+wVucZ%56O4xhroFapWu zN#i+~I;gfc&c%W+&0G%(nH;Y5D~dE-LWOE~0xAq`tz#k=0f@PFut&jvoSh6*=+W+? zg0(x9w-VcGg<;m%8c>~_6F%@UBX{xLC`LQ6m>+I%=N^!%VT6JtY5ZmGT*&*?)gqKB z`4~R*8BC7zzaL8Ca$fd~miN~WzP#@L=ygvInNUrV7kFY--op#cVYL_RO094(n%LEt z3qo`&W?aCwOth*H)QIFm%Q6ROFoN1bR8kwYG7$k*P^lH$3GF8;n>LH-s)NyW*L$+wayB=P7F`*my+YSm2sSl z*-Ih~bM4vvt$vH4NbDt%=dF=a$}{fd&6?(EXRk$xwGiyX+nzbHt(Uq@dlSNq`BA5Ne8p*wEn)yq^B^xdu;)`k zFyU9(* zVLecsNXSObjoqRO;TyFz6{#BCjbg=)j?(R?M5{&Z&|$*<$?*Y3hglK-=;XU%jP z#vT~94H!kQdlA2q=)On=?Yk6u4y_%RapTgkdIvBZ@}VL&MI8x3>KU2G%Cw~`Q+g39 z8bK8yS{#q8AWD}r6r(OjL_pRd)zqmD;;5%oE2H~RqEpdeJLo%&oZ?1M^=2A|RB+sh z-vwu#81S_EZkun(bHS63FSzAQ1N^3@(8_GMm2oTcFLYuEzFeu_UEF>8o4s>+Z7PVu zco))L43dD=Mb$1E;{(AyEP5C9v5Z2RHrS-N)s=|d)rG6zO2oaOOF?w!!vD_S<}mi6<`=TG0>an*QXmuF%OF(Av*<6E6q9X3mP_~Hq1BIL@%5YzAq6G-#5NLomW zTIkv+#q9DgxDZT%i;Y?jn$odmT+Fm+UaUwpHU!O7Er&9;M&@*gLCwJU`4}WK{!XwJ}F_1@3Uv=ccDn~#+*4e&vw<@F(C3LskM`$px3^z+i)LAa{r=OJ9j;pK zZke0WauVO+xupvbIa$4YjVVp4yHwvseZ}?}xR!<(z2U4v*mOu8b)cx2> zDY`zj1xB&;qoZJoF-p}kB5}eXXE>Z_8JUlDxw_83;pbqarVI*AFg+vVX~s??#ymj| z$Hv7Or-8=2SSO!59M^tZB-?RVMcwN@lSXqh@{z2)9>QpkC)?c#e8IP$t*j0zy3w$P zIN!chFH25S0{b|z6oRb|D;DO8W?5XLJN*rV^|OI8+}^HE^=f_Y%6Z13nbu;BcQ#k8 zJRgx|EpS43VMBO>{hiIdM`Xh|h+(s&L_&-pCYXtlg6V;v7Rl$q1kH9W114BP%H-<8 zD;9M64_J}WoC@BA7q~SlU)RR!I6o%yq=wWdI?zr5p(Bh%!$$M zcJX#nM~$RN8fLRT2crOQ`T{xCNjLLJh@Ej4?JZ~s%ChQr?Gs8ClFf=&gbzhnNmxZv%7*Yg8#g3H@W}p@ zdqVISN!UoX`WF!UTfW0n>(4GOvJAZUXU$D|rf<~1ljYv8X3^?D#NgPf&A^-Gf9uUc=L+q!-B5vz98BEF; z46C?}e0?vwk>A~a_Z&{l`)_Y|j|WJ}An*%CBE!GVi6OwfxulqaN#4e*L8Qb608L8g zt%X6|GKjN`Qtpc|CL~sTb>b>fil?zN>ESa&8Bl+0qKfFtA}*49gg-@ZiZt|T{7f-G zdj`ah)PNJ3`c4l($(4~$!&5_kqk%7CYH!62yI@#GR+yKDXJ?5K-0B{DSa(*drf z*%;c0lfk5n!LUM`2dZpu`>2l*Yh-(|{SoaXY*PxHm?kz%crgq~s9+>tG>a7JB}u-d zP-yZQe4%iW0mGy83ae0x3+}ZYauV@++@JLD3Fi$a%9q?HK<+rI2p$HcQ`4eyUXHJF z#PwWAYn{-up|V+M)%Z)G$oV%XHOtK)u#z=@@(>W@A!zHPFx9cPW1nNkGNZrfjQa05=i+ zMTauF=(0mSO2v(ph>QsiwgJS%Qr!qU0IbQT{a}PplhlkcG*iB+JBbbHrJ`9x+M*Ty z;$)+D#g3}!MGk6VLtE6sStwqCC=rP^f`Q1F=Z6Momo4(c1-UY|lBNW7k`saL0H6pA z%6SC?<%63oQ4WUm=dvhA#b853n-3*3p?J#cmW5VM*aFtDDQeKx(pHISXxVMjswo9t0a< zW06@3o(||*vTs?JN2?u^xC1~Wj0cGA5KCuxZ7?brJ?QMk5c4L#cr5{x5`$XCF@h+h z&x$<5m~+S^MLg0x1vf0H(l*twt(=(#!g`&w=-f0d4Q&-+G!)P!zn{Bu zXZHGE=QsXcxN&#s*1eVAHdpW5zx3egFY~v@BQvqYVghN)d*}O(&h^A+kH*f$yQhyF zo{U8%x;w|C2U8uvlVRUb2uV}G%BksaTf+_5y)1ZY`4m70R2_6ks!$o?)Kg)NIuzef zo)iT%(maD>rHOGFRYT3gE!Bnfx|#U>1JH z;u53Jrf~_@P|;e$RTYV9qSAo-LzU2Fhn$?#O!bIa)Rnj!S*qG<@r7Jphca&h$`~8> z?C)($El;)&M~zLNY@-dr+h(XUnGe`!t}ZOz{K?hj=j`RXFt1?uVyyG6FT`e|PU;KT+(F?=SzG6+KeLO)e zN`exjR8(sYKpbiyhKf2PN!12JYZ&FHty2Rrlw<@^#N;}eNEZrRXecg*_&J1Jz>WgE z^1jOg6ALLhQs3o0&@Ujl&Z+t2+fnh>$7LBByf}DlF#+@wn~ArlyP%tq?zT4K zf#E^a6aE_bP+-x4@+K9ec>-<()?mZZzll&56^$TP=IDbI3TsG9V{2X;QWId(2X9Su zqT#^WHMi~gv~ALdgURH7$=;cVMOp1}{IJ9(+W>;VfCvLJ4EsJHFf0QO46@F!!+?Nb zhzuZJmmmVfG}IfFVWzi2ajDcU)$QKyV`jH*dRwThTuQUdEEjT%tK{78`yOYeah_5C zx&QDu&zbl6z31J|Hs|-5-}$}g%mm8BRwcnNcnYt009_N39S2>5KG{7XV4A?iF526K zKV3RM50QC|Md+M?zjt)MpG*r`(j zYzJIB#@vP#bAgL}sQYJQ2UYCn@})C;akz<(Ej^0H~=da$4A&56_rc$;^lnc2QRMobOH#Vko}c`_&}KhRrZ{UkK^$1{k{4y6fss<)ZJL ztMAc*G|+WJO_(8}8TOH0JaLGqBDJJd2J(PqW$>l0Ew8Ksri{EkF#Ouu=U-lhrAE63 zTa^9vwJXZyE%}mKNkUn2SgsJb!%gBNvuta3hvkL_bA&)QP!SD)B#b~=2ElKG9Y3NW zR1=snCOW8uiEB~R;5>H`e^z?X?Cda53l>w1Q;0+h#DJchrMXy<4t!JEQv%SDcglb` zh)=9b#b65Ni*rq!jT~X13UGrPBBwwKEz0O{4BdsG>uW5$jXU>#0ZM=Jy;yAwBkK%8 z8CdCw0u3wcOsuC5H`=$gwSxW}!5p(G0OC?S1XE zD_*{489F_q+4lG`s(v3w%=afh1Fu+ya%tZSjR5P2(M&7Pq`(7*-e1<=K?vFQ^7A+o zbOIUuDmrJ{sX{B^67-+YHHbk4K|Mip;jE5T9k^uZ#X-U$rUH!);y9?y^Y%!X+e6Kr zi!^Ft<=W-M^&zSX5pZGelaHzX__;N?Xk{b1ahoVF^#9t_dRTa;gdnwD1CQX*&O*Nf zhd$_9y8=1o#Q0c;dmu?vS0a(PKc0)r(a%F2KmkF4YSn85qh8Ss5>E@}5)X4a$o>Fj z3tFC6;8&Rb|7i32BW#sP&U2^UGN!8@96|L3jRoU|9Dp7HI zSWbLK^}GIOf9I5h84tHvuIZmXfd~p@-#)9GvHNb3r+YV(a}*_!w} zWG^T}`S_-Vpm=Q}JX0#NL?!9bc?rUds8xeKNOnc5f|!!D%B;rDX0PO6GQ%{rY98_% zCr?EQpe|4&Q`Q(0!X@~}QV<8LKzen$iN7-(esyPy(GrZFW3TSpNi^s!HE_QW6K@z| z=qz^nPB7X)*@X)JdS)1QYk*z2kl9yJ1M4`2fw7PG!zF-N6PP+^%%Q{oBz#Alq^!-XEhOHc1f!lmcjM@Hr#|=Q zc@GRd4vqlIh;kFq>%yXA6T*e6@<{NPE9d7wTxJ`JF523bwX&pDNmKKZR<2!v%hzvO zO9(-ajefhdy`Gm6gsV7gzluMf=;SY+J*HAk1ZPHHI(HI(fT0)AjniZ!4NF%qW&iCD zi=`>c82J`<{WBtoC5g%%W^S-*7J9-9GWMAE-iL4B zE}e<%(rPJjAZNcjLSwF9`|)wM-J=ob*XKjHaPgFFi2Kl%^_u*?F!HP!&mJ{0C1>v? zJO{M5Vr60VvNAgB9aOJ@^#^sh^N>E_*iBco4jAAJJCs-YzfT~%{yC4#I7JP3c( zFs%+OC;%6LAh-e9M2~WSuf#4T9{ELb&6^*CYq#N5R;G z(y$8Rf{oNzqf0Zo{xsO7vW_Q>9>*BA)7$|uRPZrGGrA5m-fBUIwzYmUx*VhLI>XT! zY@!P;GVZ`aMG~f;!AKK^pAbJ~P^MwULbmrEM>iXumqZ9T@XkIJ^ZEUwkM@IXBo&h1 zu3w?O-`4HV#LA#eZmMoDN@vg8yD-26jJS36CwjtDTh>F52n&;cx$q;6`SPnzd_;l7 zj0|k-Q_;_ji>&3lox^ke`sk+`yGo@}VdQB^-C2yhtPdO6MV7K9pj zD9Uv7cOV`dM%d2>?~P(NwKA(^S(8fr**rWLS0rYicpl%$iE}_AXdgyX9RCk-HXYfs zRb$jiE6D(dscv1qb(2ZnnbSu`|F#Q)W*DKRy9K&$!=^Qw`@jCyZtDPN0M-MPxnGnq z=GhCR!c(V@?t61rNLtv~*uQX8AdTI!eItYyb`C9KZE?rHKI9O@oxFM$a&y;0dh{x5snp3QC*H*tW9MF~kFc>gM&vw)wBUu>)e~z$1au z7zqD9ykD3U`T3Ev0M{L-%`pV@C*$qW7)8XfB37U2w?;d=O*7V$} zEMsq*z~h}}Wq$ttOVzDwC%!&>^ve&w`Tm;(dFncFJ)q&2Z>B5{mrZJUOJ#ne976w4 zzr3l8d3tpYHLj@a}=hdtX;75tsFPfr6(lFMtx5UUC=C zTQ<-%w6kXiJ5=<{_U=aqTflb7m1%w%p(q5_t9J&hEGRl;0rywiR01?X7g-Dk5rRg( zGm=FaIPhwa1zSALwyuv||Nf(faOHN5bi-{! zLW;E1=+AuYCp+^4M$j7mmft{OG8VK(WqDLfKTUIiH$kbVJ&%V5LM;DScQcidv8>7{ zPaLdNwk>19W559AloL&G8k`w|)-Y1YGY~$woz~w-o{_0c$+3O((TUOAj&gdxTvgg| zyP6Z@zYMzlapwkSN-IyRg{kuyGkt!P&nIIVpFTQryufH+f6lH1^Y(3<6chI3VLghw z#&G>}6+aS;N{CEay%?}*$2u)b1Hk?I8xheHjvUDYkC`?$`ioe={N%X7?^{%!KfCYX z&R2Ch!DG}d^$=IQC;I$(-=3Y$^+n%qU|+j|olG@kDkD4?&Rz~P5~CZRKH$=2?eAQ4 zG%vq+kBNivfx;XHcu(>Rj0|pk@~HIWAuBrzs1La0WbuFj{in{K&VY59-&i`D->biM z?@kS=sM?xe2p&0kBp^Is&;IS;?=!!Nh>HN6EIp|0Xbkx6`o#hECTW{j-o0IG6Eu=N z_L9mxFO_*4E0$hon=y{7HmuIwzrF5y6-%8$+}Cbg31~m?9k?@8_uS9Nyd(UH94yF& zwP@K70;gwvYvE%DAgM|4bLq(A@I};_v0%pLoD3myY})o+K=em|?=x003|Rt9QZsf* zETHs6e#++wH?EukhtHX^A@f^6K~dh^lm){^+rFmP8M7D(P87naaS`?PLM3W2^%%B& z*Y}MNf5-9y;T2Ton&L(Ncyzm_q5jv#Ck;*^9*ZR*#68T5_w8WVefs>EO*t8-P8L9w z3kq}Ibu!~mtFpX^rR05N@hM-@a$LuGU9LLS`1Ia4>8amkd`+b0Qu#1H2Uf|+-B?m` zfCzm~?k4U#26ISOlOK!M;DGPWwVVsv=G-uxW^9lHSp6H?-3((N(MlZb(n>8;u; zJl(N7bJo(?dX8qV8>o|6|2y#*QKm$#b=YS?S|beAwBJ^UF)C`5p8Xq;Dyx%ZB}TQe zw=EK*r&@ziDnycfyGoTu&<-#kmAnu11s-Gc{*ciTUb9oCuE|`mB{v!AC1w3=#2BnF zNKn&)F&ukxua2MkbhH2OtGJsj;Fz#?X$YoH< z-Ws`=Nlcry++AfLTB{tB43s%dvo%=71i^yDv~36O++5#8FXWk?d>tg4%=|4S_e^i% ze-A42#n+1~PZyD6idh&fIRxSx?*7Uh-H71#d0KbdlFB@r%5ZosVTWQs zVOMHc8QiIZ9Y0#SB)(X2J$^hQ&{gOzx=v!P>7q~Zf&ni6aw7lW zj;!qU-)-B7U*rwlu5-U!aOpyYLWrw5Yv?k#9S$k|E-)2{!h_p2hEArZ%8!ba&`+lh zk%Gk?EU3(bx~pWwG;9pj`n~n0NiXR3jvqD&5ry}imlOvs`f*>pB8Sy*pkSAdg9+5< zmx>>uYaGffMK~cdRd9GW*d=t-<*Jh;qfQ*p-@k8r+Sas1sfnG2_PtV7!n^NSHds6p&Q)Fa;O+w|qceIo+)9mr-6kY^>x-e{6rQK~kp^=Zc^G;tfceBFxM zzg;C*Qd-c}jNjDl{`au=qC-Gj26~uBB#d(nb7c}doH6RMGe$*?k_vk-t~L zrC7IFVo}ZziL8*UqtKKHii${^4Jy;SiOTeBi^_;dQ(PIygXQr`i<%NrG!cYnaJ|QQ zgA7B@XXx)a*m}GJK4NH1V4}ZooUdcJi;FjUw?X=ICqIW@t+D3j>I#rZv!) z)>zD`D8TT)N;xTMGcAP~nz9{O^eQF@)|Q1CVG5>aBw02#6LpG$G6X8fjWmnTi%w-Y z)&G0qEXg9%aId1Qa75rpPKjB&(j7kXAojoCE*>iW4+)p`+cu1e2;dSxaPw9Ll}SxY z7D;@yH`OZ2i{S*p(V?tcdVC*CxfQ=#d-1=QPtQ%B!>}(_EhNT;Mu_F4q5{J|+@7}` z(OpEi8OB{p707oPtBC|o3k-=0kupTL#WjMnaZ4&g_Ta-XuaFrN2DlC70@2$-x4QZ~ z@uV*o?w6Pf7D-O*5|!D&TjPI_sLVQWzLZBhU3U23!JTB9R;*nH@40`wrsiT9u2bIV z=+Qk4pu!6c9x8LM_ELNOF5QM`FIc(s*Q@7Pbm4rNwyjY+{Vp%5OdGaeF0pQbt^tw3 zj=pxtdPEK%-uae>dZBa`xAAu-c?8gN9!wIkvEdGa1WF7<;mO1M&H>KC7`1lON^?JZ ziBc5UxL6lU;+}7~|E|5604qOx3tu~NOz1kA0&e|QZRcT&nF|c>88*fNP;&B+<`Avm zn9#*v&2t#%dG$&as$kcCJqikUu{1I<25;}H23@;ZyepA_$A->kk#qmdSx%ZcQSEg# z_2GKWUYUkE&PSNTU(r{`G0s~HcBSC;XO4iKgWU$X4+lVHBp&^!>X#E7sbVKAPECZ$ z6iFMR<6yk^&@RA~xNuG5zF()WnlN(`e<7LK>j_q0EPKmb^HNnQI4fI`U(3qb0ABP} zg54;ahySbR4_DL15ZOi?vJ4<6CGHqDW~TxCrUsI2y;5^|Y-Es@vG&bt=Lp(`c&PPi z|Kf`={b0bjdOat5d=ek3>trm6F9`2PwQ(p02x5BizLoLPm?h{O<*OUA{AxTiowtXL*jcERoRe(@e9-3CYN)JtE3DAQ9vOI$#1*OA7&BQb8I^r+1?H5(1les38 zLdf2|tosA-VsEj2s{!UD;v3}e7zBWcfvCEKf`Kee(UprZHEPOa62u0*v z=%(NG?ljDw_D$yHZ$hC~f zA9dA~vv8jYm07X=OCq1IT%bK%_m1QxI9pLn=}`LtJ=xW=?f0`Kv7EFSPxT43$z$?| z1gk2Kys52@3epu9Fvl6CZ6w6U4`0&QZRZ-(B&&t(etPE)a!k^{4h&HV?SmezN9iL3*_c5 zgTuCZd^96$Z~iucxwP{y?9-38>{tir?`r-J!|uYjic8#glHcPe4LrfYgwU6}H|w7| zT`Er(xAX!BMuvqZ3nE~$HxWFfwg-R(o%NY5yl#az-u02%$=FMt(mE_e+SSs|JAM&<*~bKlyY#<{q+LU@E+%V(cWaZGdb0zHbTjlEiTN>0@H|@^AOvt^YC-R<9TQ z*OavRIt(Vx3E|StHJ&SdYiEq=LhE62Q#DVFZgX#`;s*y*mnO*qjB+ALnY$1pz?|0=#0qh6UR&Qy<)jD?L`(R-C5w??5%zax#2iWKI)>PKp6+7hA^vhBKFR9F5w~j_V2Dw{Obd4TE(el{n(2$vv`Tm$!ar&a!5p$-X@3GW$l+`d_I{;S& zPS*aB!BFGZbvq+@B_zlBjP+Z(QsF^Cz2G40F*~7<=DQy~)@SX8RN=EBw?)O;$S|KdDG5{NMRR>p>(v1PCLk&-X>AH~6Lm7} zBPM`R)JH%~G~Yn!`D|Hy%%WJ{#V)`pJYj}~pJN9DbumRAo?JdEuhY?_4~JmKLGO?$ z<0HN6Xv&5|r`*Pk;#0YgAMG0I=|633KL-JNnH?Twh7gjn23c79%+O>K8134a~o zFT*mXz$#R7?5pj)gmKBLDR5T|IUO1mo7_pR%Cw!Pzc8~NDa z6*_|>)7=?Te(jH7Sd8fIDMy2BM@HV-I^D_0auPH{Yp+JBV}T`rMx0F(Rjq^cB?V9yrqJ;NMBC+rn0k7Owm_4s(-zP%?76)Y=`PQQ1Q zKZY=o-On6g<-};gNP-;3XC^dsuRzD5!yRPuSnWIO}^_4bN1$fI;0fZQKndI@YbCWjh-*({i5te!w@LG30 zO3L?yJP_op@!1Ki?c8hbiUmA^X2TnvKKb6lq-{rbfzJYW*|DK=UHzz;lXDv$*nRv! zd(Vcb#PM0Rb9W!#-?6hhYQ`9XB35s0KY02`d(S4KIY|O`B& ziao1&Yb(#rKja;|HnaDw@7Xja#}^Ir-UI0#lrcqEnH7;;e3YVni^iCSE~PFMi}P^4 z40@no0YjinR75?bH>2~@KPgyx?cF#2{r$gCTCjG^P&9gR0SY5N7lw@hz!s;nk)z|D zBsdGwq2VbL{uzMP-(S1(h5*&7HMPSM#}HBu-4G*@Xm;@uKY>*68ga-?F$n2>o#kMX z3jUSB;1bc9IS-`^7jPCqrW^(yR(-XM!KN3da!Ii4$*hx+hk5?On%)0fmgQb{n)Y0$(S9wxIi|HVEske0r8h-p3AiJP>Sdp*_evmelsC|W>IU|BWJtu5H%laA_x1C zbKNyt>-h5oa5$khS{H>jgovpog)}HkHSF~MCHd^}WOsv;z%+2p0m~$whGFhH2~Jdv z5knIZ(*)s*Ml)J58E6Lin@lu=Xv!H2tdUf0hfI${vYD6_vB21+c=jJwp#zpg_7PdD zS^Z=wjwwoIi9mr-jMvDj4w;IS2w(t*!p_Pet*pJQx2(Fv3=Hf?^VO;@r=$g#NLl9t zyGBBkP_4=`&eAQ{kp+K}+Celfk=0(N!7vm~lu9^yi{$R;gUjYnhk*;S%g9~0JI_V1 zrY!hSq_SxSbw7(ao2+cL!la7MX2P_FgHXyM(}3 zacCw_&a5ria-^%atBxuJ6g6ahw-Lq|#u!VYwICQ*>%uM(L5$S~BZ}td4V6%hS%r&} z9ZkS816FQ%@YJhMUH;^`*WWu%1%Ufk6vF_7?~L_`d%56?kzq8`3S3+WMk5tkQNl{L ztv@OF(vcTM_C2}WN|A3Vnp%l)~#d=QZfb)5T_66)*bz=;204i zd0Tte;%}Ne3ZcY=vRB4)5yR6eqp)Tg$-wM%y{$CCx}V9Uo; z1Ln|}#^9t;J%U%z18sN)VF{oSB{gK(Z8K-vWC|9=2?|CrvbCMcP0Bn&o;FXK7l;L} zB2)-)<1ILzcu?l%B}R-KAn2*X0H*{=VWa`yM5d+{J}9s!c8KXCqO+z*<_^|WuXyR* zQQeww5FAO1+N-zzv^!&Qe&h&W2f;+nQMx5d3}TOo5yb>CLXV5_fKZspg^88xtDio% z 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

7GVMKaH&a@iyj-_ve->!p&(EdVRdH6^HdqCm~ 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℞b;(t>rGiC;#+W!MYBGR{hvQ;*$ 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.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/cli": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.0.tgz", + "integrity": "sha512-t/fCrLVu+Ru01h0DtlgHZXbHV2Y8gKocTR5elDOqIRUzQd0/6hpt2VIWOj9b3NDo7y4/gfxeR2zRtXq/qO6iUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^19.8.0", + "@commitlint/lint": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/read": "^19.8.0", + "@commitlint/types": "^19.8.0", + "tinyexec": "^0.3.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.0.tgz", + "integrity": "sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.0.tgz", + "integrity": "sha512-+r5ZvD/0hQC3w5VOHJhGcCooiAVdynFlCe2d6I9dU+PvXdV3O+fU4vipVg+6hyLbQUuCH82mz3HnT/cBQTYYuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.0.tgz", + "integrity": "sha512-kNiNU4/bhEQ/wutI1tp1pVW1mQ0QbAjfPRo5v8SaxoVV+ARhkB8Wjg3BSseNYECPzWWfg/WDqQGIfV1RaBFQZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.0.tgz", + "integrity": "sha512-fuLeI+EZ9x2v/+TXKAjplBJWI9CNrHnyi5nvUQGQt4WRkww/d95oVRsc9ajpt4xFrFmqMZkd/xBQHZDvALIY7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.0.tgz", + "integrity": "sha512-EOpA8IERpQstxwp/WGnDArA7S+wlZDeTeKi98WMOvaDLKbjptuHWdOYYr790iO7kTCif/z971PKPI2PkWMfOxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.0.tgz", + "integrity": "sha512-L2Jv9yUg/I+jF3zikOV0rdiHUul9X3a/oU5HIXhAJLE2+TXTnEBfqYP9G5yMw/Yb40SnR764g4fyDK6WR2xtpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.0.tgz", + "integrity": "sha512-+/NZKyWKSf39FeNpqhfMebmaLa1P90i1Nrb1SrA7oSU5GNN/lksA4z6+ZTnsft01YfhRZSYMbgGsARXvkr/VLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^19.8.0", + "@commitlint/parse": "^19.8.0", + "@commitlint/rules": "^19.8.0", + "@commitlint/types": "^19.8.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.0.tgz", + "integrity": "sha512-4rvmm3ff81Sfb+mcWT5WKlyOa+Hd33WSbirTVUer0wjS1Hv/Hzr07Uv1ULIV9DkimZKNyOwXn593c+h8lsDQPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.0", + "@commitlint/execute-rule": "^19.8.0", + "@commitlint/resolve-extends": "^19.8.0", + "@commitlint/types": "^19.8.0", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/message": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.0.tgz", + "integrity": "sha512-qs/5Vi9bYjf+ZV40bvdCyBn5DvbuelhR6qewLE8Bh476F7KnNyLfdM/ETJ4cp96WgeeHo6tesA2TMXS0sh5X4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.0.tgz", + "integrity": "sha512-YNIKAc4EXvNeAvyeEnzgvm1VyAe0/b3Wax7pjJSwXuhqIQ1/t2hD3OYRXb6D5/GffIvaX82RbjD+nWtMZCLL7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.0.tgz", + "integrity": "sha512-6ywxOGYajcxK1y1MfzrOnwsXO6nnErna88gRWEl3qqOOP8MDu/DTeRkGLXBFIZuRZ7mm5yyxU5BmeUvMpNte5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^19.8.0", + "@commitlint/types": "^19.8.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^0.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.0.tgz", + "integrity": "sha512-CLanRQwuG2LPfFVvrkTrBR/L/DMy3+ETsgBqW1OvRxmzp/bbVJW0Xw23LnnExgYcsaFtos967lul1CsbsnJlzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.0", + "@commitlint/types": "^19.8.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.0.tgz", + "integrity": "sha512-IZ5IE90h6DSWNuNK/cwjABLAKdy8tP8OgGVGbXe1noBEX5hSsu00uRlLu6JuruiXjWJz2dZc+YSw3H0UZyl/mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^19.8.0", + "@commitlint/message": "^19.8.0", + "@commitlint/to-lines": "^19.8.0", + "@commitlint/types": "^19.8.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.0.tgz", + "integrity": "sha512-3CKLUw41Cur8VMjh16y8LcsOaKbmQjAKCWlXx6B0vOUREplp6em9uIVhI8Cv934qiwkbi2+uv+mVZPnXJi1o9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.0.tgz", + "integrity": "sha512-Rphgoc/omYZisoNkcfaBRPQr4myZEHhLPx2/vTXNLjiCw4RgfPR1wEgUpJ9OOmDCiv5ZyIExhprNLhteqH4FuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.0.tgz", + "integrity": "sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", + "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", + "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz", + "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz", + "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", + "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz", + "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz", + "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz", + "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz", + "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", + "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", + "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", + "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", + "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz", + "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", + "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz", + "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", + "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz", + "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz", + "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz", + "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz", + "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", + "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz", + "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.0.tgz", + "integrity": "sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", + "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.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" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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-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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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-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" + ], + "dev": true, + "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" + ], + "dev": true, + "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.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz", + "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.3.1", + "@emnapi/runtime": "^1.3.1", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", + "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.4.tgz", + "integrity": "sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", + "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", + "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", + "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", + "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", + "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", + "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", + "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", + "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "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/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz", + "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "javascript-natural-sort": "^0.7.1", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">18.12" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x", + "prettier-plugin-svelte": "3.x", + "svelte": "4.x || 5.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "svelte": { + "optional": true + } + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "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/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/react": { + "version": "19.0.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", + "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", + "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz", + "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/type-utils": "8.28.0", + "@typescript-eslint/utils": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "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.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz", + "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "debug": "^4.3.4" + }, + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz", + "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.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/type-utils": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz", + "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/utils": "8.28.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz", + "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==", + "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.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz", + "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "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 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz", + "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz", + "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.3.tgz", + "integrity": "sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.3.tgz", + "integrity": "sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.3.tgz", + "integrity": "sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.3.tgz", + "integrity": "sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.3.tgz", + "integrity": "sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.3.tgz", + "integrity": "sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.3.tgz", + "integrity": "sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.3.tgz", + "integrity": "sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.3.tgz", + "integrity": "sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.3.tgz", + "integrity": "sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.3.tgz", + "integrity": "sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.3.tgz", + "integrity": "sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.3.tgz", + "integrity": "sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.3.tgz", + "integrity": "sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "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": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "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": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "dev": true, + "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/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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/cliui/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/cliui/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/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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/cliui/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/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "optional": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "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/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.4.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "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/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", + "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/cssdb": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.4.tgz", + "integrity": "sha512-3KSCVkjZJe/QxicVXnbyYSY26WsFc1YoMY7jep1ZKWMEVc7jEm6V2Xq2r+MX8WKQIuB7ofGbnr5iVI+aZpoSzg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "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==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "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.128", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz", + "integrity": "sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "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/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "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==", + "dev": true, + "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/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.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", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.4.tgz", + "integrity": "sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.2.4", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.0.tgz", + "integrity": "sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.12", + "unrs-resolver": "^1.3.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "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/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "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/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/eslint/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/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "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/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.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "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.4" + }, + "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.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "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.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "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==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "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-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "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-fresh/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/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "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": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "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/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "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": "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/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": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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/lint-staged": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.0.tgz", + "integrity": "sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/marked": { + "version": "15.0.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", + "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/marked-highlight": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/marked-highlight/-/marked-highlight-2.2.1.tgz", + "integrity": "sha512-SiCIeEiQbs9TxGwle9/OwbOejHCZsohQRaNTY2u8euEXYt2rYUFoiImUirThU3Gd/o6Q1gHGtH9qloHlbJpNIA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "marked": ">=4 <16" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "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/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/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "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/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/next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", + "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/env": "15.2.4", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.2.4", + "@next/swc-darwin-x64": "15.2.4", + "@next/swc-linux-arm64-gnu": "15.2.4", + "@next/swc-linux-arm64-musl": "15.2.4", + "@next/swc-linux-x64-gnu": "15.2.4", + "@next/swc-linux-x64-musl": "15.2.4", + "@next/swc-win32-arm64-msvc": "15.2.4", + "@next/swc-win32-x64-msvc": "15.2.4", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "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", + "peer": true, + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz", + "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-media": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", + "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", + "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", + "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", + "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", + "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-logical": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nested": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-7.0.2.tgz", + "integrity": "sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz", + "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^5.0.1", + "@csstools/postcss-color-function": "^4.0.8", + "@csstools/postcss-color-mix-function": "^3.0.8", + "@csstools/postcss-content-alt-text": "^2.0.4", + "@csstools/postcss-exponential-functions": "^2.0.7", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.8", + "@csstools/postcss-gradients-interpolation-method": "^5.0.8", + "@csstools/postcss-hwb-function": "^4.0.8", + "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.3", + "@csstools/postcss-media-minmax": "^2.0.7", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.8", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-random-function": "^1.0.3", + "@csstools/postcss-relative-color-syntax": "^3.0.8", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.2", + "@csstools/postcss-stepped-value-functions": "^4.0.7", + "@csstools/postcss-text-decoration-shorthand": "^4.0.2", + "@csstools/postcss-trigonometric-functions": "^4.0.7", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.19", + "browserslist": "^4.24.4", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.2", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.2.3", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.8", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.5", + "postcss-custom-properties": "^14.0.4", + "postcss-custom-selectors": "^8.0.4", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.0", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.8", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.1", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "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/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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/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/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "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/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "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/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/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "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==", + "dev": true, + "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/string-width/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "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/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unrs-resolver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz", + "integrity": "sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.3.3", + "@unrs/resolver-binding-darwin-x64": "1.3.3", + "@unrs/resolver-binding-freebsd-x64": "1.3.3", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.3.3", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.3.3", + "@unrs/resolver-binding-linux-arm64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-arm64-musl": "1.3.3", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-s390x-gnu": "1.3.3", + "@unrs/resolver-binding-linux-x64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-x64-musl": "1.3.3", + "@unrs/resolver-binding-wasm32-wasi": "1.3.3", + "@unrs/resolver-binding-win32-arm64-msvc": "1.3.3", + "@unrs/resolver-binding-win32-ia32-msvc": "1.3.3", + "@unrs/resolver-binding-win32-x64-msvc": "1.3.3" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "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/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/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-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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/yargs/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/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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/yargs/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/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/radar-app/package.json b/radar-app/package.json new file mode 100644 index 0000000..3acdfed --- /dev/null +++ b/radar-app/package.json @@ -0,0 +1,47 @@ +{ + "name": "aoe_technology_radar", + "version": "4.7.0-rc.1", + "bin": { + "techradar": "bin/techradar.js" + }, + "scripts": { + "dev": "next dev", + "build:icons": "npx @svgr/cli --typescript --no-dimensions --no-prettier --out-dir src/components/Icons -- src/icons", + "build:data": "tsx scripts/buildData.ts", + "build": "next build", + "start": "next start", + "lint": "next lint", + "fix": "prettier . --write", + "prepare": "husky", + "postinstall": "npm run build:icons" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.0", + "@commitlint/config-conventional": "^19.8.0", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", + "@types/node": "^22", + "@types/react": "^19", + "@types/react-dom": "^19", + "clsx": "^2.1.1", + "eslint": "^9.23.0", + "eslint-config-next": "15.2.4", + "fuse.js": "^7.1.0", + "gray-matter": "^4.0.3", + "highlight.js": "^11.11.1", + "husky": "^9.1.7", + "lint-staged": "^15.5.0", + "marked": "^15.0.7", + "marked-highlight": "^2.2.1", + "next": "15.2.4", + "postcss-nested": "^7.0.2", + "postcss-preset-env": "^10.1.5", + "prettier": "^3.5.3", + "react": "^19", + "react-dom": "^19", + "tsx": "^4.19.3", + "typescript": "^5" + }, + "lint-staged": { + "**/*": "prettier --write --ignore-unknown" + } +} diff --git a/radar-app/postcss.config.js b/radar-app/postcss.config.js new file mode 100644 index 0000000..b80f460 --- /dev/null +++ b/radar-app/postcss.config.js @@ -0,0 +1,17 @@ +module.exports = { + plugins: [ + "postcss-nested", + [ + "postcss-preset-env", + { + autoprefixer: { + flexbox: "no-2009", + }, + stage: 3, + features: { + "custom-properties": false, + }, + }, + ], + ], +}; diff --git a/radar-app/public/favicon.ico b/radar-app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e989b26456b05fc94815e6467c8771d9d1d5168 GIT binary patch literal 15086 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 \ No newline at end of file diff --git a/radar-app/renovate.json b/radar-app/renovate.json new file mode 100644 index 0000000..297b7b5 --- /dev/null +++ b/radar-app/renovate.json @@ -0,0 +1,3 @@ +{ + "extends": ["config:base", ":semanticCommitTypeAll(chore)"] +} diff --git a/radar-app/scripts/buildData.ts b/radar-app/scripts/buildData.ts new file mode 100644 index 0000000..2fe49b2 --- /dev/null +++ b/radar-app/scripts/buildData.ts @@ -0,0 +1,271 @@ +import fs from "fs"; +import matter from "gray-matter"; +import hljs from "highlight.js"; +import { Marked } from "marked"; +import { markedHighlight } from "marked-highlight"; +import path from "path"; + +import nextConfig from "../next.config.js"; +import config from "../src/lib/config"; +import ErrorHandler, { ErrorType, TextColor } from "./errorHandler.js"; +import Positioner from "./positioner"; + +import { Flag, Item } from "@/lib/types"; + +const { + rings, + chart: { size }, +} = config; + +const ringIds = rings.map((r) => r.id); +const quadrants = config.quadrants.map((q, i) => ({ ...q, position: i + 1 })); +const quadrantIds = quadrants.map((q) => q.id); +const tags = (config as { tags?: string[] }).tags || []; +const positioner = new Positioner(size, quadrants, rings); +const errorHandler = new ErrorHandler(quadrants, rings); + +const marked = new Marked( + markedHighlight({ + langPrefix: "hljs language-", + highlight(code, lang, info) { + const language = hljs.getLanguage(lang) ? lang : "plaintext"; + return hljs.highlight(code, { language }).value; + }, + }), +); + +function dataPath(...paths: string[]): string { + return path.resolve("data", ...paths); +} + +function convertToHtml(markdown: string): string { + // replace deprecated internal links with .html extension + markdown = markdown.replace(/(]\(\/[^)]+)\.html/g, "$1/"); + + if (nextConfig.basePath) { + markdown = markdown.replace(/]\(\//g, `](${nextConfig.basePath}/`); + } + + let html = marked.parse(markdown.trim()) as string; + html = html.replace( + /a href="http/g, + 'a target="_blank" rel="noopener noreferrer" href="http', + ); + return html; +} + +function readMarkdownFile(filePath: string) { + const id = path.basename(filePath, ".md"); + const fileContent = fs.readFileSync(filePath, "utf8"); + + try { + const { data, content } = matter(fileContent); + const body = convertToHtml(content); + return { id, data, body }; + } catch (error) { + console.error(`Failed parsing ${filePath}: ${error}`); + process.exit(1); + } +} + +// Function to recursively read Markdown files and parse them +async function parseDirectory(dirPath: string): Promise { + const items: Record = {}; + + async function readDir(dirPath: string) { + const entries = fs.readdirSync(dirPath, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dirPath, entry.name); + if (entry.isDirectory()) { + await readDir(fullPath); + } else if (entry.isFile() && entry.name.endsWith(".md")) { + const releaseDate = path.basename(path.dirname(fullPath)); + const { id, data, body } = readMarkdownFile(fullPath); + + if (!items[id]) { + items[id] = { + id, + release: releaseDate, + title: data.title || id, + ring: data.ring, + quadrant: data.quadrant, + body, + featured: data.featured !== false, + flag: Flag.Default, + tags: data.tags || [], + revisions: [], + position: [0, 0], + }; + } else { + items[id].release = releaseDate; + items[id].body = body || items[id].body; + items[id].title = data.title || items[id].title; + items[id].ring = data.ring || items[id].ring; + items[id].quadrant = data.quadrant || items[id].quadrant; + items[id].tags = data.tags || items[id].tags; + items[id].featured = + typeof data.featured === "boolean" + ? data.featured + : items[id].featured; + } + + items[id].revisions!.push({ + release: releaseDate, + ring: data.ring, + body, + }); + } + } + } + + await readDir(dirPath); + return Object.values(items).sort((a, b) => a.title.localeCompare(b.title)); +} + +function getUniqueReleases(items: Item[]): string[] { + const releases = new Set(); + for (const item of items) { + for (const revision of item.revisions || []) { + releases.add(revision.release); + } + } + return Array.from(releases).sort(); +} + +function getUniqueTags(items: Item[]): string[] { + const tags = new Set(); + for (const item of items) { + for (const tag of item.tags || []) { + tags.add(tag); + } + } + return Array.from(tags).sort(); +} + +function getFlag(item: Item, allReleases: string[]): Flag { + // return default flag if this is the first edition of the radar + if (allReleases.length === 1) { + return Flag.Default; + } + + const latestRelease = allReleases[allReleases.length - 1]; + const revisions = item.revisions || []; + const isInLatestRelease = + revisions.length > 0 && + revisions[revisions.length - 1].release === latestRelease; + + if (revisions.length == 1 && isInLatestRelease) { + return Flag.New; + } else if (revisions.length > 1 && isInLatestRelease) { + return Flag.Changed; + } + + return Flag.Default; +} + +function postProcessItems(items: Item[]): { + releases: string[]; + tags: string[]; + items: Item[]; +} { + const filteredItems = items.filter((item) => { + // check if the items' quadrant and ring are valid + if (!item.quadrant || !item.ring) { + errorHandler.processBuildErrors(ErrorType.NoQuadrant, item.id); + return false; + } + + if (!quadrantIds.includes(item.quadrant)) { + errorHandler.processBuildErrors( + ErrorType.InvalidQuadrant, + item.id, + item.quadrant, + ); + return false; + } + + if (!ringIds.includes(item.ring)) { + errorHandler.processBuildErrors( + ErrorType.InvalidRing, + item.id, + item.ring, + ); + return false; + } + + // check if config has a key `tags` and if it is an array + if (Array.isArray(tags) && tags.length) { + // if tags are specified, only keep items that have at least one of the tags + return item.tags?.some((tag) => tags.includes(tag)); + } + + return true; + }); + + errorHandler.checkForBuildErrors(); + + const releases = getUniqueReleases(filteredItems); + const uniqueTags = getUniqueTags(filteredItems); + const processedItems = filteredItems.map((item) => { + const processedItem = { + ...item, + position: positioner.getNextPosition(item.quadrant, item.ring), + flag: getFlag(item, releases), + // only keep revision which ring or body is different + revisions: item.revisions + ?.filter((revision, index, revisions) => { + const { ring, body } = revision; + return ( + ring !== item.ring || + (body != "" && + body != item.body && + body !== revisions[index - 1]?.body) + ); + }) + .reverse(), + }; + + // unset revisions if there are none + if (!processedItem.revisions?.length) { + delete processedItem.revisions; + } + + // unset tags if there are none + if (!processedItem.tags?.length) { + delete processedItem.tags; + } + + return processedItem; + }); + + return { releases, tags: uniqueTags, items: processedItems }; +} + +async function main() { + // Parse the data and write radar data to JSON file + const items = await parseDirectory(dataPath("radar")); + const data = postProcessItems(items); + + if (data.items.length === 0) { + errorHandler.processBuildErrors(ErrorType.NoRadarItems); + } + + errorHandler.checkForBuildErrors(true); + + const json = JSON.stringify(data, null, 2); + fs.writeFileSync(dataPath("data.json"), json); + + // write about data to JSON file + const about = readMarkdownFile(dataPath("about.md")); + fs.writeFileSync(dataPath("about.json"), JSON.stringify(about, null, 2)); + console.log( + "ℹ️ Data written to data/data.json and data/about.json\n\n" + + errorHandler.colorizeBackground( + " Build was successfull ", + TextColor.Green, + ), + ); +} + +main(); diff --git a/radar-app/scripts/errorHandler.ts b/radar-app/scripts/errorHandler.ts new file mode 100644 index 0000000..e2db03b --- /dev/null +++ b/radar-app/scripts/errorHandler.ts @@ -0,0 +1,108 @@ +import { Quadrant, Ring } from "@/lib/types"; + +export enum ErrorType { + NoQuadrant = "Item {0} has no quadrant or ring", + InvalidQuadrant = "Item {0} has invalid quadrant {1}\n\tvalid quadrants are: {2}", + InvalidRing = "Item {0} has invalid ring {1}\n\tvalid rings are: {2}", + NoRadarItems = "No valid radar items found. Please check the markdown files in the `radar` directory.", +} + +export enum TextColor { + Default = 0, + Black, + Red = 31, + Green = 32, + Yellow = 33, + Blue = 34, + Mangenta = 35, + Cyan = 36, + White = 37, +} + +export default class ErrorHandler { + private buildErrors: string[] = []; + private quadrants: Quadrant[]; + private rings: Ring[]; + private isStrict: boolean; + private supportsColor: boolean; + + constructor(quadrants: Quadrant[], rings: Ring[]) { + this.isStrict = process.argv.slice(2).includes("--strict"); + this.supportsColor = process.stdout.isTTY && process.env.TERM !== "dumb"; + this.quadrants = quadrants; + this.rings = rings; + console.log(`ℹ️ Build is${this.isStrict ? "" : " not"} in strict mode\n`); + } + + public processBuildErrors(errorType: ErrorType, ...args: string[]) { + const errorHint = this.getErrorHint(errorType); + const errorMsg = this.formatString( + errorType.toString(), + errorHint ? [...args, errorHint] : args, + ); + this.buildErrors.push(errorMsg); + } + + public checkForBuildErrors(exitOnErr: boolean = false) { + if (this.buildErrors.length > 0) { + console.warn( + this.colorizeBackground( + `There ${this.buildErrors.length > 1 ? "are" : "is"} ${this.buildErrors.length} error${this.buildErrors.length > 1 ? "s" : ""} in your data build`, + TextColor.Red, + ) + + "\n\n" + + this.buildErrors + .map((error, index) => `${index + 1}. ${error}`) + .join("\n") + + "\n", + ); + + if (this.isStrict || exitOnErr) { + process.exit(1); + } + + this.buildErrors = []; + } + } + + private getErrorHint(errorType: ErrorType) { + switch (errorType) { + case ErrorType.InvalidQuadrant: + return this.quadrants.map((quadrant) => quadrant.id).join(", "); + case ErrorType.InvalidRing: + return this.rings.map((ring) => ring.id).join(", "); + default: + break; + } + } + + public colorizeBackground(str: string, backgroundColor: TextColor) { + if (this.supportsColor) { + return `\x1b[${backgroundColor + 10}m${str}\x1b[${TextColor.Default}m`; + } + + return str; + } + + private formatString(msg: string, inserts: string[]) { + return inserts.reduce( + (acc, cur, index) => + acc.replaceAll( + `{${index}}`, + this.colorizeString( + cur, + index === 2 ? TextColor.Green : TextColor.Red, + ), + ), + msg, + ); + } + + private colorizeString(str: string, textColor: TextColor) { + if (this.supportsColor) { + return `\x1b[${textColor}m${str}\x1b[${TextColor.Default}m`; + } + + return str; + } +} diff --git a/radar-app/scripts/positioner.ts b/radar-app/scripts/positioner.ts new file mode 100644 index 0000000..63e0bf8 --- /dev/null +++ b/radar-app/scripts/positioner.ts @@ -0,0 +1,95 @@ +import { Quadrant, Ring } from "@/lib/types"; + +type Position = [x: number, y: number]; +type RingDimension = [innerRadius: number, outerRadius: number]; + +// Corresponding to positions 1, 2, 3, and 4 respectively +const startAngles = [270, 0, 180, 90]; + +export default class Positioner { + private readonly centerRadius: number; + private readonly minDistance: number = 20; + private readonly paddingRing: number = 15; + private readonly paddingAngle: number = 10; + private positions: Record = {}; + private ringDimensions: Record = {}; + private quadrantAngles: Record = {}; + + constructor(size: number, quadrants: Quadrant[], rings: Ring[]) { + this.centerRadius = size / 2; + + quadrants.forEach((quadrant) => { + this.quadrantAngles[quadrant.id] = startAngles[quadrant.position - 1]; + }); + + rings.forEach((ring, index) => { + const innerRadius = + (rings[index - 1]?.radius ?? 0) * this.centerRadius + this.paddingRing; + const outerRadius = + (ring.radius ?? 1) * this.centerRadius - this.paddingRing; + this.ringDimensions[ring.id] = [innerRadius, outerRadius]; + }); + } + + static getDistance(a: Position, b: Position): number { + const [x1, y1] = a; + const [x2, y2] = b; + return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2); + } + + private isOverlapping(position: Position, positions: Position[]): boolean { + return positions.some( + (p) => Positioner.getDistance(position, p) < this.minDistance, + ); + } + + private getXYPosition( + quadrantId: string, + ringId: string, + radiusFraction: number, + angleFraction: number, + ): Position { + const [innerRadius, outerRadius] = this.ringDimensions[ringId]; + const ringWidth = outerRadius - innerRadius; + const absoluteRadius = innerRadius + radiusFraction * ringWidth; + + const startAngle = this.quadrantAngles[quadrantId] + this.paddingAngle; + const endAngle = startAngle + 90 - 2 * this.paddingAngle; + const absoluteAngle = startAngle + (endAngle - startAngle) * angleFraction; + const angleInRadians = ((absoluteAngle - 90) * Math.PI) / 180; + + return [ + Math.round(this.centerRadius + absoluteRadius * Math.cos(angleInRadians)), + Math.round(this.centerRadius + absoluteRadius * Math.sin(angleInRadians)), + ]; + } + + public getNextPosition(quadrantId: string, ringId: string): Position { + this.positions[quadrantId] ??= []; + + let tries = 0; + let position: Position; + + do { + position = this.getXYPosition( + quadrantId, + ringId, + Math.sqrt(Math.random()), + Math.random(), + ); + tries++; + } while ( + this.isOverlapping(position, this.positions[quadrantId]) && + tries < 150 + ); + + if (tries >= 150) { + console.warn( + `Could not find a non-overlapping position for ${quadrantId} in ring ${ringId}`, + ); + } + + this.positions[quadrantId].push(position); + return position; + } +} diff --git a/radar-app/src/app/sitemap.ts b/radar-app/src/app/sitemap.ts new file mode 100644 index 0000000..83303f8 --- /dev/null +++ b/radar-app/src/app/sitemap.ts @@ -0,0 +1,40 @@ +import { MetadataRoute } from "next"; + +import { getAbsoluteUrl, getItems, getQuadrants } from "@/lib/data"; + +export const dynamic = "force-static"; +export const revalidate = 60; + +export default function sitemap(): MetadataRoute.Sitemap { + const quadrants = getQuadrants().map((quadrant) => ({ + url: getAbsoluteUrl(`/${quadrant.id}/`), + lastModified: new Date(), + priority: 0.8, + })); + + const items = getItems().map((item) => ({ + url: getAbsoluteUrl(`/${item.quadrant}/${item.id}/`), + lastModified: new Date(), + priority: 0.5, + })); + + return [ + { + url: getAbsoluteUrl(), + lastModified: new Date(), + priority: 1, + }, + { + url: getAbsoluteUrl("/overview/"), + lastModified: new Date(), + priority: 0.9, + }, + { + url: getAbsoluteUrl("/help-and-about-tech-radar/"), + lastModified: new Date(), + priority: 0.9, + }, + ...quadrants, + ...items, + ]; +} diff --git a/radar-app/src/components/Badge/Badge.module.css b/radar-app/src/components/Badge/Badge.module.css new file mode 100644 index 0000000..b02cc5f --- /dev/null +++ b/radar-app/src/components/Badge/Badge.module.css @@ -0,0 +1,50 @@ +.badge { + position: relative; + display: inline-block; + vertical-align: middle; + padding: 6px 15px; + text-transform: uppercase; + border: 1px solid transparent; + border-radius: 13px; + font-size: 12px; + line-height: 1; + overflow: hidden; + text-decoration: none; +} + +.size-small { + padding: 4px 8px; + font-size: 9px; +} + +.size-large { + padding: 7px 20px; + font-size: 14px; + border-radius: 15px; +} + +.colored { + color: var(--foreground); + background-color: var(--badge); +} + +.selectable { + cursor: pointer; + + &:not(.selected) { + color: var(--foreground); + border: 1px solid var(--foreground); + background: transparent; + } + + &:not(.colored) { + color: var(--foreground); + border: 1px solid var(--foreground); + background: transparent; + + &.selected { + color: var(--background); + background: var(--foreground); + } + } +} diff --git a/radar-app/src/components/Badge/Badge.tsx b/radar-app/src/components/Badge/Badge.tsx new file mode 100644 index 0000000..cec8057 --- /dev/null +++ b/radar-app/src/components/Badge/Badge.tsx @@ -0,0 +1,105 @@ +import { + CSSProperties, + ComponentPropsWithoutRef, + ReactNode, + useMemo, +} from "react"; + +import styles from "./Badge.module.css"; + +import { getFlag, getRing } from "@/lib/data"; +import { formatRelease } from "@/lib/format"; +import { Flag } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +interface BadgeProps extends ComponentPropsWithoutRef<"span"> { + children?: ReactNode; + color?: string; + selectable?: boolean; + selected?: boolean; + size?: "small" | "medium" | "large"; +} + +export function Badge({ + children, + color, + size = "medium", + selectable, + selected, + ...props +}: BadgeProps) { + const style = useMemo( + () => (color ? ({ "--badge": color } as CSSProperties) : undefined), + [color], + ); + + const Component = props.onClick ? "button" : "span"; + + return ( + + {children} + + ); +} + +interface RingBadgeProps extends Omit { + ring: string; + release?: string; +} + +export function RingBadge({ + ring: ringName, + release, + ...props +}: RingBadgeProps) { + const ring = getRing(ringName); + if (!ring) return null; + + const label = release + ? `${ring.title} | ${formatRelease(release)}` + : ring.title; + + return ( + + {label} + + ); +} + +// Type guard to check if flag has the required attributes +function hasRequiredFlagAttributes(flag: any): flag is { + color: string; + title: string; + titleShort: string; +} { + return "color" in flag && "title" in flag && "titleShort" in flag; +} + +interface FlagBadgeProps + extends Omit { + flag: Flag; + short?: boolean; +} + +export function FlagBadge({ flag: flagName, short, ...props }: FlagBadgeProps) { + if (flagName === Flag.Default) return null; + const flag = getFlag(flagName); + if (!flag || !hasRequiredFlagAttributes(flag)) return null; + + return ( + + {short ? flag.titleShort : flag.title} + + ); +} diff --git a/radar-app/src/components/Filter/Filter.module.css b/radar-app/src/components/Filter/Filter.module.css new file mode 100644 index 0000000..b95a1b4 --- /dev/null +++ b/radar-app/src/components/Filter/Filter.module.css @@ -0,0 +1,8 @@ +.filter { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + margin-bottom: 20px; + gap: 20px; +} diff --git a/radar-app/src/components/Filter/Filter.tsx b/radar-app/src/components/Filter/Filter.tsx new file mode 100644 index 0000000..25550c1 --- /dev/null +++ b/radar-app/src/components/Filter/Filter.tsx @@ -0,0 +1,25 @@ +import styles from "./Filter.module.css"; + +import { QueryFilter } from "@/components/Filter/QueryFilter"; +import { RingFilter } from "@/components/Filter/RingFilter"; + +interface FilterProps { + query?: string; + onQueryChange: (query: string) => void; + ring?: string; + onRingChange: (ring: string) => void; +} + +export function Filter({ + query, + onQueryChange, + ring, + onRingChange, +}: FilterProps) { + return ( +

+ ); +} diff --git a/radar-app/src/components/Filter/QueryFilter.module.css b/radar-app/src/components/Filter/QueryFilter.module.css new file mode 100644 index 0000000..457ebcb --- /dev/null +++ b/radar-app/src/components/Filter/QueryFilter.module.css @@ -0,0 +1,29 @@ +.filter { + flex: 1 1 100%; + position: relative; +} + +.input { + padding-right: 50px; +} + +.button { + position: absolute; + top: 50%; + right: 16px; + width: 20px; + height: 20px; + margin: -10px 0 0; + background: transparent; + border: none; +} + +.icon { + fill: var(--highlight); +} + +@media (min-width: 768px) { + .filter { + flex: 1 1 auto; + } +} diff --git a/radar-app/src/components/Filter/QueryFilter.tsx b/radar-app/src/components/Filter/QueryFilter.tsx new file mode 100644 index 0000000..d493dbe --- /dev/null +++ b/radar-app/src/components/Filter/QueryFilter.tsx @@ -0,0 +1,39 @@ +import { ChangeEvent, useEffect, useState } from "react"; + +import Search from "../Icons/Search"; +import styles from "./QueryFilter.module.css"; + +import { getLabel } from "@/lib/data"; + +interface QueryFilterProps { + value?: string; + onChange: (value: string) => void; +} + +export function QueryFilter({ value, onChange }: QueryFilterProps) { + const [val, setVal] = useState(value); + const _onChange = (e: ChangeEvent) => { + setVal(e.target.value); + onChange(e.target.value); + }; + + useEffect(() => { + setVal(value); + }, [value]); + + return ( +
+ + +
+ ); +} diff --git a/radar-app/src/components/Filter/RingFilter.module.css b/radar-app/src/components/Filter/RingFilter.module.css new file mode 100644 index 0000000..004c2f6 --- /dev/null +++ b/radar-app/src/components/Filter/RingFilter.module.css @@ -0,0 +1,8 @@ +.filter { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: 20px; +} diff --git a/radar-app/src/components/Filter/RingFilter.tsx b/radar-app/src/components/Filter/RingFilter.tsx new file mode 100644 index 0000000..b7b41ed --- /dev/null +++ b/radar-app/src/components/Filter/RingFilter.tsx @@ -0,0 +1,43 @@ +import styles from "./RingFilter.module.css"; + +import { Badge, RingBadge } from "@/components/Badge/Badge"; +import { getRings } from "@/lib/data"; +import { cn } from "@/lib/utils"; + +interface RingFilterProps { + value?: string; + onChange: (value: string) => void; + className?: string; +} + +export function RingFilter({ value, onChange, className }: RingFilterProps) { + const rings = getRings(); + + return ( +
    +
  • + { + onChange(""); + }} + > + All + +
  • + {rings.map((ring) => ( +
  • + onChange(ring.id)} + /> +
  • + ))} +
+ ); +} diff --git a/radar-app/src/components/Footer/Footer.module.css b/radar-app/src/components/Footer/Footer.module.css new file mode 100644 index 0000000..5facaae --- /dev/null +++ b/radar-app/src/components/Footer/Footer.module.css @@ -0,0 +1,54 @@ +.branding { + padding: 20px 0; + border-top: 1px solid var(--border); +} + +.logo { + display: block; + margin: 0 auto 20px; + width: 150px; +} + +.description { + font-size: 12px; + margin: 0 0 30px; +} + +.imprint { + opacity: 0.7; + display: block; + font-size: 12px; + text-decoration: underline; + text-align: center; + + &:hover { + opacity: 1; + } +} + +@media (min-width: 768px) { + .branding { + display: flex; + justify-content: center; + align-items: center; + } + + .logo { + margin: 0; + } + + .description { + margin: 0 50px 0; + } + + .imprint { + text-align: right; + } +} + +@media (min-width: 768px) and (max-width: 1023px) { + .socialLinks { + flex-wrap: wrap; + min-width: 150px; + } +} diff --git a/radar-app/src/components/Footer/Footer.tsx b/radar-app/src/components/Footer/Footer.tsx new file mode 100644 index 0000000..7350d26 --- /dev/null +++ b/radar-app/src/components/Footer/Footer.tsx @@ -0,0 +1,20 @@ +import styles from "./Footer.module.css"; + +import { SocialLinks } from "@/components/SocialLinks/SocialLinks"; +import { getAppName, getImprintUrl, getLabel, getLogoUrl } from "@/lib/data"; + +export function Footer() { + const logoUrl = getLogoUrl(); + return ( +
+ ); +} diff --git a/radar-app/src/components/ItemDetail/ItemDetail.module.css b/radar-app/src/components/ItemDetail/ItemDetail.module.css new file mode 100644 index 0000000..ae639ba --- /dev/null +++ b/radar-app/src/components/ItemDetail/ItemDetail.module.css @@ -0,0 +1,119 @@ +.header { + display: flex; + flex-wrap: wrap; + align-items: center; + margin: 0 0 20px; +} + +.title { + margin: 0 30px 0 0; +} + +.editLink { + position: absolute; + top: 10px; + right: 10px; + display: block; + width: 20px; + height: 20px; + opacity: 0; + transition: opacity 0.2s; +} + +.revision { + padding: 30px 0 15px 35px; + margin-left: 20px; + border-left: 1px solid var(--border); + + &:hover { + .editLink { + opacity: 1; + } + } +} + +.release { + display: block; + text-align: center; + text-transform: uppercase; + font-size: 12px; + line-height: 1.2; + width: 50px; + height: 50px; + padding: 10px 0; + border-radius: 50%; + border: 1px solid var(--border); + background: var(--background); + float: left; + margin: -15px 0 0 -60px; +} + +.notMaintainedIcon { + fill: currentColor; + width: 24px; + height: 24px; + margin: 8px auto; +} + +.ring { + float: left; + margin: -45px 0 0 0; +} + +.content { + position: relative; + background: var(--content); + color: var(--text); + border-radius: 6px; + padding: 30px 15px; +} + +.content a { + color: var(--link); + text-decoration: underline; + &:hover { + text-decoration: none; + } +} + +@media (min-width: 768px) { + .revision { + padding: 30px 0 15px 50px; + margin-left: 38px; + } + + .release { + font-size: 18px; + width: 75px; + height: 75px; + padding: 15px 0; + margin: -15px 0 0 -90px; + } + + .ring { + margin-left: -15px; + } + + .content { + padding: 30px; + } +} + +/* special styles for revisions without content */ +.revision.noContent { + .content { + background: none; + } + + .ring { + margin-top: -20px; + } +} + +.revision.hint { + .content { + font-size: 14px; + background: var(--border); + color: var(--foreground); + } +} diff --git a/radar-app/src/components/ItemDetail/ItemDetail.tsx b/radar-app/src/components/ItemDetail/ItemDetail.tsx new file mode 100644 index 0000000..a2dcaff --- /dev/null +++ b/radar-app/src/components/ItemDetail/ItemDetail.tsx @@ -0,0 +1,81 @@ +import styles from "./ItemDetail.module.css"; + +import { RingBadge } from "@/components/Badge/Badge"; +import { Attention, Edit } from "@/components/Icons"; +import { Tag } from "@/components/Tags/Tags"; +import { getEditUrl, getLabel, getReleases } from "@/lib/data"; +import { Item } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +const latestReleases = getReleases().slice(-3); + +function isNotMaintained(release: string) { + return !latestReleases.includes(release); +} + +interface ItemProps { + item: Item; +} + +export function ItemDetail({ item }: ItemProps) { + const notMaintainedText = getLabel("notUpdated"); + return ( + <> +
+

{item.title}

+ {item.tags?.map((tag) => )} +
+
+ {notMaintainedText && isNotMaintained(item.release) && ( +
+ + + +
{notMaintainedText}
+
+ )} + + {item.revisions?.map((revision, index) => ( + + ))} +
+ + ); +} + +interface RevisionProps { + id: string; + release: string; + ring: string; + body?: string; +} + +function Revision({ id, release, ring, body }: RevisionProps) { + const date = new Date(release); + const editLink = getEditUrl({ id, release }); + const formattedDate = date.toLocaleDateString("en-US", { + month: "short", + year: "numeric", + }); + return ( +
+ +
+ + {body ?
: null} + {editLink && ( + + + + )} +
+
+ ); +} diff --git a/radar-app/src/components/ItemList/ItemList.module.css b/radar-app/src/components/ItemList/ItemList.module.css new file mode 100644 index 0000000..5a78e54 --- /dev/null +++ b/radar-app/src/components/ItemList/ItemList.module.css @@ -0,0 +1,76 @@ +.list { + list-style: none; + margin: 0; + padding: 0; +} + +.item { + + .item { + border-top: 1px solid var(--border); + } +} + +.flag { + display: inline; + flex: 0 0 auto; + align-self: baseline; + margin-left: 8px; +} + +.ring { + flex: 0 0 auto; + margin-left: 16px; + align-self: baseline; +} + +.quadrant { + font-size: 14px; + opacity: 0.7; +} + +.info { + flex-basis: 100%; +} + +.link { + display: block; + padding: 10px; + border-radius: 6px; + + &.isFadedOut { + opacity: 0.65; + } + + &:hover, + &.isActive { + background: var(--foreground); + color: var(--background); + opacity: 1; + } +} + +.isSmall { + font-size: 14px; + + .link { + padding: 8px; + } +} + +.isLarge { + .link { + display: flex; + flex-wrap: wrap; + } + + .quadrant { + margin-left: auto; + } + + @media (min-width: 768px) { + .info { + flex-basis: auto; + margin-left: auto; + } + } +} diff --git a/radar-app/src/components/ItemList/ItemList.tsx b/radar-app/src/components/ItemList/ItemList.tsx new file mode 100644 index 0000000..9efb8d2 --- /dev/null +++ b/radar-app/src/components/ItemList/ItemList.tsx @@ -0,0 +1,67 @@ +import Link from "next/link"; + +import styles from "./ItemList.module.css"; + +import { FlagBadge, RingBadge } from "@/components/Badge/Badge"; +import { getQuadrant } from "@/lib/data"; +import { Item } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +export interface ItemListProps { + items: Item[]; + activeId?: string; + size?: "small" | "default" | "large"; + hideRing?: boolean; + className?: string; +} + +export function ItemList({ + items, + activeId, + size = "default", + hideRing = false, + className, +}: ItemListProps) { + return ( +
    + {items.map((item) => ( +
  • + + {item.title} + + + {size === "large" && ( +
    + + {getQuadrant(item.quadrant)?.title} + + {!hideRing && ( + + )} +
    + )} + +
  • + ))} +
+ ); +} diff --git a/radar-app/src/components/Layout/Layout.module.css b/radar-app/src/components/Layout/Layout.module.css new file mode 100644 index 0000000..dd3cf18 --- /dev/null +++ b/radar-app/src/components/Layout/Layout.module.css @@ -0,0 +1,24 @@ +.layout { + min-height: 100vh; +} + +.container { + max-width: var(--max-width); + margin: 0 auto; + padding: 20px; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; +} + +.layout.default { + .content { + max-width: var(--max-width); + min-height: calc(100vh - 250px); + margin: 0 auto; + padding: 20px; + } +} diff --git a/radar-app/src/components/Layout/Layout.tsx b/radar-app/src/components/Layout/Layout.tsx new file mode 100644 index 0000000..8c1528b --- /dev/null +++ b/radar-app/src/components/Layout/Layout.tsx @@ -0,0 +1,39 @@ +import { Roboto } from "next/font/google"; +import { FC, ReactNode } from "react"; + +import styles from "./Layout.module.css"; + +import { Footer } from "@/components/Footer/Footer"; +import { Logo } from "@/components/Logo/Logo"; +import { Navigation } from "@/components/Navigation/Navigation"; +import { cn } from "@/lib/utils"; + +const font = Roboto({ weight: ["400", "700"], subsets: ["latin"] }); + +export type LayoutClass = "default" | "full"; + +interface LayoutProps { + children: ReactNode; + layoutClass?: LayoutClass; +} + +export const Layout: FC = ({ + children, + layoutClass = "default", +}) => { + return ( +
+
+ + +
+
{children}
+
+
+
+
+ ); +}; diff --git a/radar-app/src/components/Logo/Logo.module.css b/radar-app/src/components/Logo/Logo.module.css new file mode 100644 index 0000000..807fd33 --- /dev/null +++ b/radar-app/src/components/Logo/Logo.module.css @@ -0,0 +1,54 @@ +.logo { + position: relative; + display: flex; + justify-content: flex-start; + align-items: center; + min-height: 60px; + gap: 16px; + transition: padding-left 200ms ease-in-out; + + &:before { + content: ""; + display: block; + position: absolute; + left: 0; + width: 22px; + height: 22px; + background: url("../../icons/back.svg") no-repeat 50% 50%; + opacity: 0; + transition: opacity 200ms ease-in-out; + } +} + +.src { + width: 150px; + transition: width 200ms ease-in-out; +} + +.subline { + position: relative; + top: -2px; + font-size: 18px; + opacity: 0; + transition: opacity 200ms ease-in-out; + + @media (max-width: 1024px) { + display: none; + } +} + +.logo.small { + .subline { + opacity: 0.8; + } + .src { + width: 75px; + } + + &:hover { + padding-left: 30px; + &:before { + opacity: 1; + } + } +} diff --git a/radar-app/src/components/Logo/Logo.tsx b/radar-app/src/components/Logo/Logo.tsx new file mode 100644 index 0000000..bc23536 --- /dev/null +++ b/radar-app/src/components/Logo/Logo.tsx @@ -0,0 +1,22 @@ +"use client"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +import styles from "./Logo.module.css"; + +import { getAppName, getLogoUrl } from "@/lib/data"; +import { cn } from "@/lib/utils"; + +export function Logo() { + const pathname = usePathname(); + const appName = getAppName(); + const logoUrl = getLogoUrl(); + + return ( + + {appName} + {appName} + + ); +} diff --git a/radar-app/src/components/Navigation/Navigation.module.css b/radar-app/src/components/Navigation/Navigation.module.css new file mode 100644 index 0000000..f9c051d --- /dev/null +++ b/radar-app/src/components/Navigation/Navigation.module.css @@ -0,0 +1,20 @@ +.list { + list-style: none; + display: flex; + gap: 16px; + font-size: 14px; +} + +.icon { + display: inline-block; + vertical-align: middle; + width: 22px; + margin: 0 6px 0 0; + fill: var(--highlight); +} + +@media (max-width: 900px) { + .label { + display: none; + } +} diff --git a/radar-app/src/components/Navigation/Navigation.tsx b/radar-app/src/components/Navigation/Navigation.tsx new file mode 100644 index 0000000..ee6a5d6 --- /dev/null +++ b/radar-app/src/components/Navigation/Navigation.tsx @@ -0,0 +1,37 @@ +import Link from "next/link"; + +import styles from "./Navigation.module.css"; + +import IconOverview from "@/components/Icons/Overview"; +import IconQuestion from "@/components/Icons/Question"; +import IconSearch from "@/components/Icons/Search"; +import { getLabel, getToggle } from "@/lib/data"; + +export function Navigation() { + return ( + + ); +} diff --git a/radar-app/src/components/QuadrantLink/QuadrantLink.module.css b/radar-app/src/components/QuadrantLink/QuadrantLink.module.css new file mode 100644 index 0000000..6c58f0c --- /dev/null +++ b/radar-app/src/components/QuadrantLink/QuadrantLink.module.css @@ -0,0 +1,20 @@ +.link { + text-transform: uppercase; + font-size: 12px; + white-space: nowrap; +} + +.icon { + fill: var(--highlight); + display: inline-block; + vertical-align: middle; + margin: -2px 6px 0 0; + width: 16px; + height: 16px; +} + +.link:hover { + .label { + text-decoration: underline; + } +} diff --git a/radar-app/src/components/QuadrantLink/QuadrantLink.tsx b/radar-app/src/components/QuadrantLink/QuadrantLink.tsx new file mode 100644 index 0000000..078d611 --- /dev/null +++ b/radar-app/src/components/QuadrantLink/QuadrantLink.tsx @@ -0,0 +1,26 @@ +import Link from "next/link"; + +import styles from "./QuadrantLink.module.css"; + +import Pie from "@/components/Icons/Pie"; +import { getLabel } from "@/lib/data"; +import { Quadrant } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +interface QuadrantLinkProps { + quadrant: Quadrant; + label?: string; + className?: string; +} +export function QuadrantLink({ + quadrant, + label = getLabel("zoomIn"), + className, +}: QuadrantLinkProps) { + return ( + + + {label} + + ); +} diff --git a/radar-app/src/components/QuadrantList/QuadrantList.module.css b/radar-app/src/components/QuadrantList/QuadrantList.module.css new file mode 100644 index 0000000..9a86d8d --- /dev/null +++ b/radar-app/src/components/QuadrantList/QuadrantList.module.css @@ -0,0 +1,38 @@ +.quadrants { + --cols: 1; + --gap: 60px; + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: var(--gap); +} + +.quadrant { + margin-bottom: 20px; + flex: 1 0 + calc(100% / var(--cols) - var(--gap) / var(--cols) * (var(--cols) - 1)); +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 0; + margin-bottom: 20px; + border-bottom: 1px solid var(--border); +} + +.title { + margin: 0; +} + +.link { +} + +@media (min-width: 1220px) { + .quadrants { + --cols: 2; + } +} diff --git a/radar-app/src/components/QuadrantList/QuadrantList.tsx b/radar-app/src/components/QuadrantList/QuadrantList.tsx new file mode 100644 index 0000000..aa5ab98 --- /dev/null +++ b/radar-app/src/components/QuadrantList/QuadrantList.tsx @@ -0,0 +1,35 @@ +import Link from "next/link"; + +import styles from "./QuadrantList.module.css"; + +import { QuadrantLink } from "@/components/QuadrantLink/QuadrantLink"; +import { RingList } from "@/components/RingList/RingList"; +import { getQuadrant, groupItemsByQuadrant } from "@/lib/data"; +import { Item } from "@/lib/types"; + +interface RingListProps { + items: Item[]; +} + +export function QuadrantList({ items }: RingListProps) { + const quadrants = groupItemsByQuadrant(items); + return ( +
    + {Object.entries(quadrants).map(([quadrantId, items]) => { + const quadrant = getQuadrant(quadrantId); + if (!quadrant) return null; + return ( +
  • +
    +

    + {quadrant.title} +

    + +
    + +
  • + ); + })} +
+ ); +} diff --git a/radar-app/src/components/Radar/Blip.tsx b/radar-app/src/components/Radar/Blip.tsx new file mode 100644 index 0000000..9cb99cf --- /dev/null +++ b/radar-app/src/components/Radar/Blip.tsx @@ -0,0 +1,58 @@ +import React from "react"; + +import { getChartConfig } from "@/lib/data"; +import { Flag } from "@/lib/types"; + +const { blipSize } = getChartConfig(); +const halfBlipSize = blipSize / 2; + +interface BlipProps { + color: string; + x: number; + y: number; +} + +export function Blip({ flag, color, x, y }: BlipProps & { flag: Flag }) { + switch (flag) { + case Flag.New: + return ; + case Flag.Changed: + return ; + default: + return ; + } +} + +function BlipNew({ x, y, color }: BlipProps) { + x = Math.round(x - halfBlipSize); + y = Math.round(y - halfBlipSize); + return ( + + ); +} + +function BlipChanged({ x, y, color }: BlipProps) { + x = Math.round(x - halfBlipSize); + y = Math.round(y - halfBlipSize); + return ( + + ); +} + +function BlipDefault({ x, y, color }: BlipProps) { + return ; +} diff --git a/radar-app/src/components/Radar/Chart.module.css b/radar-app/src/components/Radar/Chart.module.css new file mode 100644 index 0000000..65438d6 --- /dev/null +++ b/radar-app/src/components/Radar/Chart.module.css @@ -0,0 +1,9 @@ +.ringLabels { + text-transform: uppercase; +} + +@media (max-width: 767px) { + .ringLabels { + display: none; + } +} diff --git a/radar-app/src/components/Radar/Chart.tsx b/radar-app/src/components/Radar/Chart.tsx new file mode 100644 index 0000000..ebdfeb9 --- /dev/null +++ b/radar-app/src/components/Radar/Chart.tsx @@ -0,0 +1,163 @@ +import Link from "next/link"; +import React, { FC, Fragment, memo } from "react"; + +import styles from "./Chart.module.css"; + +import { Blip } from "@/components/Radar/Blip"; +import { Item, Quadrant, Ring } from "@/lib/types"; + +export interface ChartProps { + size?: number; + quadrants: Quadrant[]; + rings: Ring[]; + items: Item[]; + className?: string; +} + +const _Chart: FC = ({ + size = 800, + quadrants = [], + rings = [], + items = [], + className, +}) => { + const viewBoxSize = size; + const center = size / 2; + const startAngles = [270, 0, 180, 90]; // Corresponding to positions 1, 2, 3, and 4 respectively + + // Helper function to convert polar coordinates to cartesian + const polarToCartesian = ( + radius: number, + angleInDegrees: number, + ): { x: number; y: number } => { + const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0; + return { + x: Math.round(center + radius * Math.cos(angleInRadians)), + y: Math.round(center + radius * Math.sin(angleInRadians)), + }; + }; + + // Function to generate the path for a ring segment + const describeArc = (radiusPercentage: number, position: number): string => { + // Define the start and end angles based on the quadrant position + const startAngle = startAngles[position - 1]; + const endAngle = startAngle + 90; + + const radius = radiusPercentage * center; // Convert percentage to actual radius + const start = polarToCartesian(radius, endAngle); + const end = polarToCartesian(radius, startAngle); + + // prettier-ignore + return [ + "M", start.x, start.y, + "A", radius, radius, 0, 0, 0, end.x, end.y, + ].join(" "); + }; + + const renderGlow = (position: number, color: string) => { + const gradientId = `glow-${position}`; + + const cx = position === 1 || position === 3 ? 1 : 0; + const cy = position === 1 || position === 2 ? 1 : 0; + + const x = position === 1 || position === 3 ? 0 : center; + const y = position === 1 || position === 2 ? 0 : center; + return ( + <> + + + + + + + + + ); + }; + + // Function to place items inside their rings and quadrants + const renderItem = (item: Item) => { + const ring = rings.find((r) => r.id === item.ring); + const quadrant = quadrants.find((q) => q.id === item.quadrant); + if (!ring || !quadrant) return null; // If no ring or quadrant, don't render item + const [x, y] = item.position; + + return ( + + + + ); + }; + + const renderRingLabels = () => { + return rings.map((ring, index) => { + const outerRadius = ring.radius || 1; + const innerRadius = rings[index - 1]?.radius || 0; + const position = ((outerRadius + innerRadius) / 2) * center; + + return ( + + + {ring.title} + + + {ring.title} + + + ); + }); + }; + + return ( + + {quadrants.map((quadrant) => ( + + {renderGlow(quadrant.position, quadrant.color)} + {rings.map((ring) => ( + + ))} + + ))} + {items.map((item) => renderItem(item))} + {renderRingLabels()} + + ); +}; + +export const Chart = memo(_Chart); diff --git a/radar-app/src/components/Radar/Label.module.css b/radar-app/src/components/Radar/Label.module.css new file mode 100644 index 0000000..539d11e --- /dev/null +++ b/radar-app/src/components/Radar/Label.module.css @@ -0,0 +1,37 @@ +.label { + width: 240px; + min-height: 210px; + position: absolute; + top: 0; + left: 0; +} + +.header { + display: flex; + justify-content: space-between; + padding: 10px 0; + margin: 0 0 15px; + border-bottom: 2px solid var(--quadrant-color); + text-transform: uppercase; + font-size: 12px; +} + +.title { + margin: 0 0 10px; +} + +.description { + font-size: 14px; +} + +.position-2, +.position-4 { + left: auto; + right: 0; +} + +.position-3, +.position-4 { + top: auto; + bottom: 0; +} diff --git a/radar-app/src/components/Radar/Label.tsx b/radar-app/src/components/Radar/Label.tsx new file mode 100644 index 0000000..29b0b87 --- /dev/null +++ b/radar-app/src/components/Radar/Label.tsx @@ -0,0 +1,36 @@ +import Link from "next/link"; +import { CSSProperties, useMemo } from "react"; + +import styles from "./Label.module.css"; + +import { QuadrantLink } from "@/components/QuadrantLink/QuadrantLink"; +import { getLabel } from "@/lib/data"; +import { Quadrant } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +interface LabelProps { + quadrant: Quadrant; +} + +export function Label({ quadrant }: LabelProps) { + const style = useMemo( + () => ({ "--quadrant-color": quadrant.color }) as CSSProperties, + [quadrant.color], + ); + + return ( +
+
+ + {getLabel("quadrant")} {quadrant.position} + + +
+

{quadrant.title}

+

{quadrant.description}

+
+ ); +} diff --git a/radar-app/src/components/Radar/Legend.module.css b/radar-app/src/components/Radar/Legend.module.css new file mode 100644 index 0000000..e6e0e0a --- /dev/null +++ b/radar-app/src/components/Radar/Legend.module.css @@ -0,0 +1,35 @@ +.legend { + list-style: none; + padding: 0; + margin: 0; + font-size: 14px; + display: none; +} + +.icon { + display: inline-block; + vertical-align: middle; + width: 16px; + height: 16px; + margin: -2px 8px 0 0; +} + +@media (min-width: 768px) { + .legend { + display: block; + position: absolute; + left: 50%; + bottom: 50px; + transform: translateX(-50%); + } +} + +@media (min-width: 1200px) { + .legend { + bottom: auto; + left: auto; + right: 0; + top: 50%; + transform: translateY(-50%); + } +} diff --git a/radar-app/src/components/Radar/Legend.tsx b/radar-app/src/components/Radar/Legend.tsx new file mode 100644 index 0000000..e3f4e69 --- /dev/null +++ b/radar-app/src/components/Radar/Legend.tsx @@ -0,0 +1,36 @@ +import { ComponentPropsWithoutRef } from "react"; + +import styles from "./Legend.module.css"; + +import BlipChanged from "@/components/Icons/BlipChanged"; +import BlipDefault from "@/components/Icons/BlipDefault"; +import BlipNew from "@/components/Icons/BlipNew"; +import { getFlags } from "@/lib/data"; +import { Flag } from "@/lib/types"; + +function Icon({ + flag, + ...props +}: { flag: Flag } & ComponentPropsWithoutRef<"svg">) { + switch (flag) { + case Flag.New: + return ; + case Flag.Changed: + return ; + case Flag.Default: + return ; + } +} + +export function Legend() { + return ( +
    + {Object.entries(getFlags()).map(([key, flag]) => ( +
  • + + {flag.description} +
  • + ))} +
+ ); +} diff --git a/radar-app/src/components/Radar/Radar.module.css b/radar-app/src/components/Radar/Radar.module.css new file mode 100644 index 0000000..672cd7f --- /dev/null +++ b/radar-app/src/components/Radar/Radar.module.css @@ -0,0 +1,74 @@ +.radar { + padding: 0 15px 30px; + position: relative; + transition: padding 200ms ease-in-out; +} + +.chart { + display: block; + max-width: 100%; + height: auto; + margin: 0 auto; + fill: currentColor; +} + +.tooltip { + background-color: var(--tooltip, var(--background)); + color: var(--foreground); + font-size: 14px; + padding: 4px 8px; + height: fit-content; + width: fit-content; + border-radius: 6px; + position: absolute; + text-align: center; + opacity: 0; + transform: translate(-50%, -90%) scale(0.7); + transform-origin: 50% 100%; + transition: + all 100ms ease-in-out, + left 0ms, + top 0ms; + box-shadow: + 0 4px 14px 0 rgba(0, 0, 0, 0.2), + 0 0 0 1px rgba(0, 0, 0, 0.05); + pointer-events: none; + z-index: 1; + + &:before { + content: ""; + display: block; + position: absolute; + z-index: 2; + bottom: -1px; + left: 50%; + margin-left: -8px; + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid var(--tooltip, var(--background)); + transition: bottom 100ms ease-in-out; + } + + &.isShown { + opacity: 1; + transform: translate(-50%, -130%) scale(1); + + &:before { + bottom: -7px; + } + } +} + +@media (max-width: 767px) { + .labels { + display: none; + } +} + +@media (min-width: 768px) and (max-width: 1200px) { + .radar { + padding: 150px 15px; + } +} diff --git a/radar-app/src/components/Radar/Radar.tsx b/radar-app/src/components/Radar/Radar.tsx new file mode 100644 index 0000000..091d953 --- /dev/null +++ b/radar-app/src/components/Radar/Radar.tsx @@ -0,0 +1,111 @@ +import React, { + CSSProperties, + FC, + MouseEvent, + useMemo, + useRef, + useState, +} from "react"; + +import styles from "./Radar.module.css"; + +import { Chart } from "@/components/Radar/Chart"; +import { Label } from "@/components/Radar/Label"; +import { Legend } from "@/components/Radar/Legend"; +import { Item, Quadrant, Ring } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +export interface RadarProps { + size?: number; + quadrants: Quadrant[]; + rings: Ring[]; + items: Item[]; +} + +export const Radar: FC = ({ + size = 800, + quadrants = [], + rings = [], + items = [], +}) => { + const radarRef = useRef(null); + const [tooltip, setTooltip] = useState({ + show: false, + text: "", + color: "", + x: 0, + y: 0, + }); + + const tooltipStyle = useMemo( + () => + ({ + left: tooltip.x, + top: tooltip.y, + ...(tooltip.color ? { "--tooltip": tooltip.color } : undefined), + }) as CSSProperties, + [tooltip], + ); + + const handleMouseMove = (e: MouseEvent) => { + const link = + e.target instanceof Element && e.target.closest("a[data-tooltip]"); + if (link) { + const text = link.getAttribute("data-tooltip") || ""; + const color = link.getAttribute("data-tooltip-color") || ""; + const linkRect = link.getBoundingClientRect(); + const radarRect = radarRef.current!.getBoundingClientRect(); + + // Adjusting tooltip position to be relative to the radar container + const x = linkRect.left - radarRect.left + linkRect.width / 2; + const y = linkRect.top - radarRect.top; + + setTooltip({ + text, + color, + show: !!text, + x, + y, + }); + } else { + if (tooltip.show) { + setTooltip({ ...tooltip, show: false }); + } + } + }; + + const handleMouseLeave = () => { + setTooltip({ ...tooltip, show: false }); + }; + + return ( +
+ +
+ {quadrants.map((quadrant) => ( +
+ + + {tooltip.text} + +
+ ); +}; + +export default Radar; diff --git a/radar-app/src/components/RingList/RingList.module.css b/radar-app/src/components/RingList/RingList.module.css new file mode 100644 index 0000000..a79bd7a --- /dev/null +++ b/radar-app/src/components/RingList/RingList.module.css @@ -0,0 +1,38 @@ +.rings { + --cols: 1; + --gap: 30px; + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: var(--gap); +} + +.ring { + margin-bottom: 20px; + flex: 1 0 + calc(100% / var(--cols) - var(--gap) / var(--cols) * (var(--cols) - 1)); +} + +.badge { + margin-bottom: 20px; +} + +@media (min-width: 480px) { + .rings { + --cols: 2; + } +} + +@media (min-width: 768px) { + .rings.isSmall { + --cols: 4; + } +} + +@media (min-width: 1024px) { + .rings { + --cols: 4; + } +} diff --git a/radar-app/src/components/RingList/RingList.tsx b/radar-app/src/components/RingList/RingList.tsx new file mode 100644 index 0000000..26c54ad --- /dev/null +++ b/radar-app/src/components/RingList/RingList.tsx @@ -0,0 +1,27 @@ +import styles from "./RingList.module.css"; + +import { RingBadge } from "@/components/Badge/Badge"; +import { ItemList, ItemListProps } from "@/components/ItemList/ItemList"; +import { groupItemsByRing } from "@/lib/data"; +import { Item } from "@/lib/types"; +import { cn } from "@/lib/utils"; + +interface RingListProps { + items: Item[]; + size?: ItemListProps["size"]; +} +export function RingList({ items, size }: RingListProps) { + const rings = groupItemsByRing(items); + return ( +
    + {Object.entries(rings).map(([ring, items]) => { + return ( +
  • + + +
  • + ); + })} +
+ ); +} diff --git a/radar-app/src/components/SocialLinks/SocialLinks.module.css b/radar-app/src/components/SocialLinks/SocialLinks.module.css new file mode 100644 index 0000000..4609d19 --- /dev/null +++ b/radar-app/src/components/SocialLinks/SocialLinks.module.css @@ -0,0 +1,29 @@ +.links { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + list-style: none; + padding: 0; +} + +.icon { + fill: var(--background); + width: 16px; + height: 16px; +} + +.link { + display: block; + border: 1px solid var(--border); + background: var(--foreground); + padding: 6px; + border-radius: 50%; + + &:hover { + background: var(--background); + .icon { + fill: var(--foreground); + } + } +} diff --git a/radar-app/src/components/SocialLinks/SocialLinks.tsx b/radar-app/src/components/SocialLinks/SocialLinks.tsx new file mode 100644 index 0000000..11a2c40 --- /dev/null +++ b/radar-app/src/components/SocialLinks/SocialLinks.tsx @@ -0,0 +1,66 @@ +import styles from "./SocialLinks.module.css"; + +import { + SocialFacebook, + SocialGithub, + SocialGitlab, + SocialInstagram, + SocialLinkedin, + SocialX, + SocialXing, + SocialYoutube, +} from "@/components/Icons"; +import { getSocialLinks } from "@/lib/data"; +import { cn } from "@/lib/utils"; + +interface SocialLinksProps { + className?: string; +} + +function getIcon(name: string) { + switch (name.toLowerCase()) { + case "facebook": + return SocialFacebook; + case "github": + return SocialGithub; + case "gitlab": + return SocialGitlab; + case "instagram": + return SocialInstagram; + case "linkedin": + return SocialLinkedin; + case "x": + return SocialX; + case "xing": + return SocialXing; + case "youtube": + return SocialYoutube; + default: + return null; + } +} + +export function SocialLinks({ className }: SocialLinksProps) { + const links = getSocialLinks(); + return ( +
    + {links.map((link, i) => { + const Icon = getIcon(link.icon); + return ( + Icon && ( +
  • + + + +
  • + ) + ); + })} +
+ ); +} diff --git a/radar-app/src/components/Tags/Tags.module.css b/radar-app/src/components/Tags/Tags.module.css new file mode 100644 index 0000000..e8101f6 --- /dev/null +++ b/radar-app/src/components/Tags/Tags.module.css @@ -0,0 +1,43 @@ +.icon { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; + margin: -2px 6px 0 -5px; +} + +.tag { + position: relative; + display: inline-block; + vertical-align: middle; + padding: 6px 15px 5px; + margin: 6px; + text-transform: uppercase; + border: 1px solid var(--tag); + border-radius: 13px; + background: var(--tag); + font-size: 14px; + line-height: 1; + overflow: hidden; + text-decoration: none; + transition: all 150ms ease-in-out; + + &:hover, + &:focus, + &.active { + background: var(--foreground); + color: var(--background); + } + + &.active { + .icon { + transform: scale(0.8); + } + } +} + +.tags { + text-align: center; + margin: 0 auto 60px; + max-width: 600px; +} diff --git a/radar-app/src/components/Tags/Tags.tsx b/radar-app/src/components/Tags/Tags.tsx new file mode 100644 index 0000000..6c6a4d4 --- /dev/null +++ b/radar-app/src/components/Tags/Tags.tsx @@ -0,0 +1,47 @@ +import Link, { LinkProps } from "next/link"; +import { ComponentPropsWithoutRef } from "react"; + +import styles from "./Tags.module.css"; + +import IconRemove from "@/components/Icons/Close"; +import IconTag from "@/components/Icons/Tag"; +import { getLabel } from "@/lib/data"; +import { cn } from "@/lib/utils"; + +type TagProps = { + tag: string; + isActive?: boolean; +} & Omit & + ComponentPropsWithoutRef<"a">; + +export function Tag({ tag, isActive, className, ...props }: TagProps) { + const Icon = isActive ? IconRemove : IconTag; + return ( + + + {tag} + + ); +} + +interface TagsProps { + tags: string[]; + activeTag?: string; + className?: string; +} + +export function Tags({ tags, activeTag, className }: TagsProps) { + const label = getLabel("filterByTag"); + return ( +
+ {!!label &&

{label}

} + {tags.map((tag) => ( + + ))} +
+ ); +} diff --git a/radar-app/src/icons/attention.svg b/radar-app/src/icons/attention.svg new file mode 100644 index 0000000..866126f --- /dev/null +++ b/radar-app/src/icons/attention.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/back.svg b/radar-app/src/icons/back.svg new file mode 100644 index 0000000..92edf16 --- /dev/null +++ b/radar-app/src/icons/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/blip_changed.svg b/radar-app/src/icons/blip_changed.svg new file mode 100644 index 0000000..7839539 --- /dev/null +++ b/radar-app/src/icons/blip_changed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/blip_default.svg b/radar-app/src/icons/blip_default.svg new file mode 100644 index 0000000..139b5ea --- /dev/null +++ b/radar-app/src/icons/blip_default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/blip_new.svg b/radar-app/src/icons/blip_new.svg new file mode 100644 index 0000000..f58190b --- /dev/null +++ b/radar-app/src/icons/blip_new.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/close.svg b/radar-app/src/icons/close.svg new file mode 100644 index 0000000..2399c11 --- /dev/null +++ b/radar-app/src/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/edit.svg b/radar-app/src/icons/edit.svg new file mode 100644 index 0000000..099999a --- /dev/null +++ b/radar-app/src/icons/edit.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/radar-app/src/icons/filter.svg b/radar-app/src/icons/filter.svg new file mode 100644 index 0000000..e13c941 --- /dev/null +++ b/radar-app/src/icons/filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/overview.svg b/radar-app/src/icons/overview.svg new file mode 100644 index 0000000..6e0c1bb --- /dev/null +++ b/radar-app/src/icons/overview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/pie.svg b/radar-app/src/icons/pie.svg new file mode 100644 index 0000000..2a83296 --- /dev/null +++ b/radar-app/src/icons/pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/question.svg b/radar-app/src/icons/question.svg new file mode 100644 index 0000000..5a6c229 --- /dev/null +++ b/radar-app/src/icons/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/search.svg b/radar-app/src/icons/search.svg new file mode 100644 index 0000000..36a909c --- /dev/null +++ b/radar-app/src/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/icons/social-facebook.svg b/radar-app/src/icons/social-facebook.svg new file mode 100644 index 0000000..03290a5 --- /dev/null +++ b/radar-app/src/icons/social-facebook.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-github.svg b/radar-app/src/icons/social-github.svg new file mode 100644 index 0000000..647872a --- /dev/null +++ b/radar-app/src/icons/social-github.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-gitlab.svg b/radar-app/src/icons/social-gitlab.svg new file mode 100644 index 0000000..cc26e9d --- /dev/null +++ b/radar-app/src/icons/social-gitlab.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-instagram.svg b/radar-app/src/icons/social-instagram.svg new file mode 100644 index 0000000..15091f3 --- /dev/null +++ b/radar-app/src/icons/social-instagram.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-linkedin.svg b/radar-app/src/icons/social-linkedin.svg new file mode 100644 index 0000000..ae735d1 --- /dev/null +++ b/radar-app/src/icons/social-linkedin.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-x.svg b/radar-app/src/icons/social-x.svg new file mode 100644 index 0000000..41112ef --- /dev/null +++ b/radar-app/src/icons/social-x.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-xing.svg b/radar-app/src/icons/social-xing.svg new file mode 100644 index 0000000..910f564 --- /dev/null +++ b/radar-app/src/icons/social-xing.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/social-youtube.svg b/radar-app/src/icons/social-youtube.svg new file mode 100644 index 0000000..2c3d559 --- /dev/null +++ b/radar-app/src/icons/social-youtube.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/radar-app/src/icons/tag.svg b/radar-app/src/icons/tag.svg new file mode 100644 index 0000000..1369650 --- /dev/null +++ b/radar-app/src/icons/tag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/radar-app/src/lib/config.ts b/radar-app/src/lib/config.ts new file mode 100644 index 0000000..fb7ffe4 --- /dev/null +++ b/radar-app/src/lib/config.ts @@ -0,0 +1,31 @@ +import defaultConfig from "../../data/config.default.json"; +import _userConfig from "../../data/config.json"; + +type DeepPartial = T extends object + ? { + [P in keyof T]?: DeepPartial; + } + : T; + +type Config = typeof defaultConfig; +type UserConfig = DeepPartial; + +const userConfig = _userConfig as UserConfig; +const config = { ...defaultConfig, ...userConfig } as Config; + +if (userConfig.colors) + config.colors = { ...defaultConfig.colors, ...userConfig.colors }; + +if (userConfig.labels) + config.labels = { ...defaultConfig.labels, ...userConfig.labels }; + +if (userConfig.toggles) + config.toggles = { ...defaultConfig.toggles, ...userConfig.toggles }; + +if (userConfig.fuzzySearch) + config.fuzzySearch = { + ...defaultConfig.fuzzySearch, + ...userConfig.fuzzySearch, + }; + +export default config; diff --git a/radar-app/src/lib/data.ts b/radar-app/src/lib/data.ts new file mode 100644 index 0000000..cc32fe8 --- /dev/null +++ b/radar-app/src/lib/data.ts @@ -0,0 +1,131 @@ +import data from "../../data/data.json"; +import config from "./config"; + +import { format } from "@/lib/format"; +import { Flag, Item, Quadrant, Ring } from "@/lib/types"; +import { assetUrl } from "@/lib/utils"; + +export function getLabel(key: keyof typeof config.labels) { + return config.labels[key] || ""; +} + +export function getToggle(key: keyof typeof config.toggles) { + return config.toggles[key] || false; +} + +export function getSections() { + return config.sections; +} + +export function getAppName() { + return getLabel("title"); +} + +export function getLogoUrl() { + return assetUrl(config.logoFile); +} + +export function getJsUrl(): string { + if (!config.jsFile) return ""; + return assetUrl(config.jsFile); +} + +export function getChartConfig() { + return config.chart; +} + +export function getColors() { + return config.colors; +} + +export function getFlags() { + return config.flags; +} + +export function getFlag(flag: Flag) { + return config.flags[flag]; +} + +export const getFuzzySearchConfig = () => { + return config.fuzzySearch; +}; + +export function getRings(): Ring[] { + return config.rings; +} + +export function getRing(id: string): Ring | undefined { + return getRings().find((r) => r.id === id); +} + +export function getReleases(): string[] { + return data.releases; +} + +export function getSocialLinks() { + return config.social; +} + +export function getTags(): string[] { + return data.tags; +} + +export function getEditUrl(props: { id: string; release: string }) { + if (!config.editUrl) return ""; + return format(config.editUrl, props); +} + +export function getQuadrants(): Quadrant[] { + return config.quadrants.map((q, i) => ({ ...q, position: i + 1 })); +} + +export function getQuadrant(id: string): Quadrant | undefined { + return getQuadrants().find((q) => q.id === id); +} + +export function getItems(quadrant?: string, featured?: boolean): Item[] { + return data.items.filter((item) => { + if (quadrant && item.quadrant !== quadrant) return false; + return !(featured && !item.featured); + }) as Item[]; +} + +export function getImprintUrl() { + return config.imprint; +} + +export function getAbsoluteUrl(path: string = "/") { + return `${config.baseUrl}${path}`; +} + +export function getItem(id: string): Item | undefined { + return data.items.find((item) => item.id === id) as Item; +} + +export const sortByFeaturedAndTitle = (a: Item, b: Item) => + Number(b.featured) - Number(a.featured) || a.title.localeCompare(b.title); + +export const groupItemsByRing = (items: Item[]) => { + const showEmptyRings = getToggle("showEmptyRings"); + return getRings().reduce( + (acc, ring) => { + const ringItems = items.filter((item) => item.ring === ring.id); + if (ringItems.length || showEmptyRings) acc[ring.id] = ringItems; + return acc; + }, + {} as { [ringId: string]: Item[] }, + ); +}; + +export const groupItemsByQuadrant = (items: Item[]) => { + return getQuadrants().reduce( + (acc, quadrant) => { + const quadrantItems = items.filter( + (item) => item.quadrant === quadrant.id, + ); + if (quadrantItems.length) acc[quadrant.id] = quadrantItems; + return acc; + }, + {} as { [quadrantId: string]: Item[] }, + ); +}; diff --git a/radar-app/src/lib/format.ts b/radar-app/src/lib/format.ts new file mode 100644 index 0000000..ceb3a1d --- /dev/null +++ b/radar-app/src/lib/format.ts @@ -0,0 +1,23 @@ +import { getAppName } from "@/lib/data"; + +// Replaces placeholders in a string with values from a context object +// e.g. format("Hello {name}.", {name: "World"}) => "Hello World." +export function format(text: string, context: Record): string { + return text.replace(/{(\w+)}/g, (match, key) => { + return context[key] || match; + }); +} + +// Format the title of the page +export function formatTitle(...title: string[]): string { + return [...title, getAppName()].join(" | "); +} + +// Formats a release (2024-02-14) to a date (February 2024) +export function formatRelease(release: string): string { + const date = new Date(release); + return date.toLocaleDateString("en-US", { + month: "long", + year: "numeric", + }); +} diff --git a/radar-app/src/lib/types.ts b/radar-app/src/lib/types.ts new file mode 100644 index 0000000..99be55a --- /dev/null +++ b/radar-app/src/lib/types.ts @@ -0,0 +1,45 @@ +export enum Flag { + New = "new", + Changed = "changed", + Default = "default", +} + +export type Release = string; + +export interface Revision { + release: Release; + ring: string; + body?: string; +} + +export interface Item { + id: string; + title: string; + info?: string; + body: string; + featured: boolean; + ring: string; + quadrant: string; + flag: Flag; + tags?: string[]; + release: Release; + revisions?: Revision[]; + position: [x: number, y: number]; +} + +export interface Ring { + id: string; + title: string; + description: string; + color: string; + radius?: number; + strokeWidth?: number; +} + +export interface Quadrant { + id: string; + title: string; + description: string; + color: string; + position: number; +} diff --git a/radar-app/src/lib/utils.ts b/radar-app/src/lib/utils.ts new file mode 100644 index 0000000..f5b1ec2 --- /dev/null +++ b/radar-app/src/lib/utils.ts @@ -0,0 +1,14 @@ +import { type ClassValue, clsx } from "clsx"; + +import config from "../../next.config.js"; + +export function cn(...inputs: ClassValue[]) { + return clsx(inputs); +} + +export function assetUrl(path: string) { + if (/^https?:/.test(path)) return path; + if (!config.basePath) return path; + if (!path.startsWith("/")) path = "/" + path; + return `${config.basePath}${path}`; +} diff --git a/radar-app/src/pages/404.tsx b/radar-app/src/pages/404.tsx new file mode 100644 index 0000000..f131255 --- /dev/null +++ b/radar-app/src/pages/404.tsx @@ -0,0 +1,22 @@ +import Head from "next/head"; +import Link from "next/link"; + +import Search from "@/components/Icons/Search"; +import { formatTitle } from "@/lib/format"; + +export default function Custom404() { + return ( + <> + + {formatTitle("404 - Page Not Found")} + +
+ +

404 - Page Not Found

+

+ Return to homepage +

+
+ + ); +} diff --git a/radar-app/src/pages/[quadrant]/[id].module.css b/radar-app/src/pages/[quadrant]/[id].module.css new file mode 100644 index 0000000..28bd52d --- /dev/null +++ b/radar-app/src/pages/[quadrant]/[id].module.css @@ -0,0 +1,24 @@ +.content { + margin-bottom: 60px; +} + +.ringAndQuadrant { + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: 20px; + border-bottom: 1px solid var(--border); +} + +@media (min-width: 1024px) { + .layout { + display: flex; + } + .sidebar { + width: 360px; + padding: 110px 0 0 60px; + } + .content { + flex: 1; + } +} diff --git a/radar-app/src/pages/[quadrant]/[id].tsx b/radar-app/src/pages/[quadrant]/[id].tsx new file mode 100644 index 0000000..3882919 --- /dev/null +++ b/radar-app/src/pages/[quadrant]/[id].tsx @@ -0,0 +1,75 @@ +import Head from "next/head"; +import { useRouter } from "next/router"; +import { useMemo } from "react"; + +import styles from "./[id].module.css"; + +import { RingBadge } from "@/components/Badge/Badge"; +import { ItemDetail } from "@/components/ItemDetail/ItemDetail"; +import { ItemList } from "@/components/ItemList/ItemList"; +import { QuadrantLink } from "@/components/QuadrantLink/QuadrantLink"; +import { + getItem, + getItems, + getLabel, + getQuadrant, + sortByFeaturedAndTitle, +} from "@/lib/data"; +import { formatTitle } from "@/lib/format"; +import { CustomPage } from "@/pages/_app"; + +const ItemPage: CustomPage = () => { + const { query } = useRouter(); + const quadrant = getQuadrant(query.quadrant as string); + const item = getItem(query.id as string); + + const relatedItems = useMemo(() => { + return getItems() + .filter((i) => i.quadrant === quadrant?.id && i.ring == item?.ring) + .sort(sortByFeaturedAndTitle); + }, [quadrant?.id, item?.ring]); + + if (!quadrant || !item) return null; + + return ( + <> + + {formatTitle(item.title, quadrant.title)} + + + +
+
+ +
+ +
+ + ); +}; + +export default ItemPage; + +export const getStaticPaths = async () => { + const items = getItems(); + const paths = items.map((item) => ({ + params: { quadrant: item.quadrant, id: item.id }, + })); + + return { paths, fallback: false }; +}; + +export const getStaticProps = async () => { + return { props: {} }; +}; diff --git a/radar-app/src/pages/[quadrant]/index.tsx b/radar-app/src/pages/[quadrant]/index.tsx new file mode 100644 index 0000000..4a0513c --- /dev/null +++ b/radar-app/src/pages/[quadrant]/index.tsx @@ -0,0 +1,52 @@ +import Head from "next/head"; +import { useRouter } from "next/router"; +import { useMemo } from "react"; + +import { RingList } from "@/components/RingList/RingList"; +import { + getItems, + getQuadrant, + getQuadrants, + sortByFeaturedAndTitle, +} from "@/lib/data"; +import { formatTitle } from "@/lib/format"; +import { CustomPage } from "@/pages/_app"; + +const QuadrantPage: CustomPage = () => { + const { query } = useRouter(); + const quadrant = getQuadrant(query.quadrant as string); + const items = useMemo( + () => quadrant?.id && getItems(quadrant.id).sort(sortByFeaturedAndTitle), + [quadrant?.id], + ); + if (!quadrant || !items) return null; + + return ( + <> + + {formatTitle(quadrant.title)} + + + +

{quadrant.title}

+

{quadrant.description}

+ + + + ); +}; + +export default QuadrantPage; + +export const getStaticPaths = async () => { + const quadrants = getQuadrants(); + const paths = quadrants.map((quadrant) => ({ + params: { quadrant: quadrant.id }, + })); + + return { paths, fallback: false }; +}; + +export const getStaticProps = async () => { + return { props: {} }; +}; diff --git a/radar-app/src/pages/_app.tsx b/radar-app/src/pages/_app.tsx new file mode 100644 index 0000000..eae6d75 --- /dev/null +++ b/radar-app/src/pages/_app.tsx @@ -0,0 +1,37 @@ +import { NextPage } from "next"; +import type { AppProps } from "next/app"; +import Head from "next/head"; +import Script from "next/script"; + +import { Layout, type LayoutClass } from "@/components/Layout/Layout"; +import { getJsUrl } from "@/lib/data"; +import { formatTitle } from "@/lib/format"; +import { assetUrl } from "@/lib/utils"; +import "@/styles/_globals.css"; +import "@/styles/_hljs.css"; +import "@/styles/custom.css"; + +export type CustomPage

= NextPage & { + layoutClass?: LayoutClass; +}; + +type CustomAppProps = AppProps & { + Component: CustomPage; +}; + +export default function App({ Component, pageProps, router }: CustomAppProps) { + const jsUrl = getJsUrl(); + return ( + <> + + {formatTitle()} + + + + + + {jsUrl &&