From e11158caaca4b6614caf8bd984260d7e0bb47d3a Mon Sep 17 00:00:00 2001 From: Geferson Lopes Date: Fri, 1 Aug 2025 12:16:41 -0300 Subject: [PATCH 1/7] feat: create project fork --- .gitignore | 5 - .husky/.gitattributes | 2 + .husky/pre-commit | 9 + README.md | 47 ----- front-end-challenge/.dockerignore | 32 +++ front-end-challenge/.env.example | 3 + front-end-challenge/.gitignore | 28 +++ front-end-challenge/.prettierrc.json | 7 + front-end-challenge/Dockerfile | 16 ++ front-end-challenge/Dockerfile.dev | 11 + front-end-challenge/README.md | 198 ++++++++++++++++++ front-end-challenge/cypress.config.ts | 20 ++ front-end-challenge/docker-compose.yml | 15 ++ front-end-challenge/eslint.config.js | 72 +++++++ front-end-challenge/index.html | 13 ++ front-end-challenge/jest.config.ts | 22 ++ front-end-challenge/jest.setup.ts | 1 + front-end-challenge/package.json | 88 ++++++++ .../public/assets/img/placeholder.png | Bin 0 -> 63743 bytes front-end-challenge/public/assets/profile.jpg | Bin 0 -> 167600 bytes front-end-challenge/public/icon.ico | Bin 0 -> 4258 bytes front-end-challenge/src/App.tsx | 16 ++ front-end-challenge/src/api/client.ts | 33 +++ .../AsyncFallback/AsyncFallback.test.tsx | 106 ++++++++++ .../__snapshots__/AsyncFallback.test.tsx.snap | 23 ++ .../components/layout/AsyncFallback/index.tsx | 34 +++ .../components/layout/AsyncFallback/types.ts | 8 + .../layout/CTAButton/CTAButton.test.tsx | 0 .../src/components/layout/CTAButton/index.tsx | 35 ++++ .../src/components/layout/CTAButton/types.ts | 5 + .../src/components/layout/CardItems/index.tsx | 96 +++++++++ .../FallbackContainer.test.tsx | 51 +++++ .../FallbackContainer.test.tsx.snap | 13 ++ .../layout/FallbackContainer/index.tsx | 21 ++ .../layout/FallbackContainer/types.ts | 4 + .../layout/LinkCard/LinkCard.test.tsx | 0 .../src/components/layout/LinkCard/index.tsx | 34 +++ .../src/components/layout/LinkCard/types.ts | 7 + .../src/components/layout/MainNews/index.tsx | 36 ++++ .../components/layout/ProfileCard/index.tsx | 67 ++++++ .../components/layout/Title/Title.test.tsx | 43 ++++ .../Title/__snapshots__/Title.test.tsx.snap | 11 + .../src/components/layout/Title/index.tsx | 18 ++ .../src/components/layout/Title/types.ts | 4 + .../src/components/ui/Button/Button.test.tsx | 51 +++++ .../Button/__snapshots__/Button.test.tsx.snap | 12 ++ .../src/components/ui/Button/index.tsx | 38 ++++ .../src/components/ui/Button/types.ts | 7 + .../src/components/ui/CheckBox/index.tsx | 33 +++ .../src/components/ui/Footer/Footer.test.tsx | 0 .../src/components/ui/Footer/index.tsx | 86 ++++++++ .../src/components/ui/Footer/types.ts | 7 + .../src/components/ui/Header/Header.test.tsx | 0 .../src/components/ui/Header/index.tsx | 136 ++++++++++++ .../src/components/ui/Header/types.ts | 7 + .../src/components/ui/Img/index.tsx | 40 ++++ .../src/components/ui/Input/index.tsx | 42 ++++ .../src/components/ui/Link/Link.test.tsx | 86 ++++++++ .../ui/Link/__snapshots__/Link.test.tsx.snap | 15 ++ .../src/components/ui/Link/index.tsx | 21 ++ .../src/components/ui/Link/types.ts | 5 + .../src/components/ui/List/List.test.tsx | 51 +++++ .../src/components/ui/List/animation.ts | 13 ++ .../src/components/ui/List/index.tsx | 40 ++++ .../src/components/ui/List/types.ts | 7 + .../src/components/ui/Radio/Radio.test.tsx | 89 ++++++++ .../Radio/__snapshots__/Radio.test.tsx.snap | 37 ++++ .../src/components/ui/Radio/index.tsx | 33 +++ .../src/components/ui/Radio/types.ts | 10 + .../ui/SearchInput/SearchInput.test.tsx | 81 +++++++ .../__snapshots__/SearchInput.test.tsx.snap | 11 + .../src/components/ui/SearchInput/index.tsx | 35 ++++ .../src/components/ui/SearchInput/types.ts | 7 + .../ui/SocialMidia/SocialMidia.test.tsx | 51 +++++ .../src/components/ui/SocialMidia/index.tsx | 35 ++++ .../src/components/ui/SocialMidia/types.ts | 7 + .../components/ui/Spinner/Spinner.test.tsx | 41 ++++ .../__snapshots__/Spinner.test.tsx.snap | 9 + .../src/components/ui/Spinner/index.tsx | 17 ++ .../src/components/ui/Spinner/types.ts | 3 + .../src/components/ui/Table/Table.test.tsx | 123 +++++++++++ .../src/components/ui/Table/index.tsx | 52 +++++ .../src/components/ui/Table/types.ts | 11 + .../src/components/ui/Td/Td.test.tsx | 92 ++++++++ .../ui/Td/__snapshots__/Td.test.tsx.snap | 19 ++ .../src/components/ui/Td/index.tsx | 20 ++ .../src/components/ui/Td/types.ts | 5 + .../src/components/ui/Th/Th.test.tsx | 81 +++++++ .../ui/Th/__snapshots__/Th.test.tsx.snap | 18 ++ .../src/components/ui/Th/index.tsx | 21 ++ .../src/components/ui/Th/types.ts | 5 + .../src/hooks/useInfinitePosts.ts | 46 ++++ front-end-challenge/src/hooks/usePost.ts | 31 +++ front-end-challenge/src/i18n/index.ts | 15 ++ .../src/i18n/locales/en/common.json | 3 + .../src/i18n/locales/pt/common.json | 3 + front-end-challenge/src/main.tsx | 16 ++ front-end-challenge/src/pages/HomePage.tsx | 66 ++++++ .../src/pages/NotFoundPage.tsx | 25 +++ front-end-challenge/src/pages/PostPage.tsx | 73 +++++++ .../src/providers/ReactQueryProvider.tsx | 28 +++ .../src/routes/index.routes.tsx | 20 ++ .../src/routes/layout.routes.tsx | 24 +++ front-end-challenge/src/styles/custom.css | 6 + front-end-challenge/src/styles/global.css | 23 ++ .../src/styles/postContent.css | 53 +++++ front-end-challenge/src/styles/scroll.css | 25 +++ front-end-challenge/src/types/Post.ts | 38 ++++ .../src/utils/const/socialLinks.ts | 11 + front-end-challenge/src/utils/data/footer.ts | 18 ++ .../src/utils/generics/RemoveStyle.ts | 8 + .../utils/generics/extractYoastDescription.ts | 6 + .../src/utils/generics/formatDate.ts | 59 ++++++ front-end-challenge/src/vite-env.d.ts | 1 + front-end-challenge/tsconfig.app.json | 30 +++ front-end-challenge/tsconfig.cypress.json | 10 + front-end-challenge/tsconfig.jest.json | 18 ++ front-end-challenge/tsconfig.json | 7 + front-end-challenge/tsconfig.node.json | 32 +++ front-end-challenge/vite.config.ts | 7 + 120 files changed, 3514 insertions(+), 52 deletions(-) delete mode 100644 .gitignore create mode 100644 .husky/.gitattributes create mode 100644 .husky/pre-commit delete mode 100644 README.md create mode 100644 front-end-challenge/.dockerignore create mode 100644 front-end-challenge/.env.example create mode 100644 front-end-challenge/.gitignore create mode 100644 front-end-challenge/.prettierrc.json create mode 100644 front-end-challenge/Dockerfile create mode 100644 front-end-challenge/Dockerfile.dev create mode 100644 front-end-challenge/README.md create mode 100644 front-end-challenge/cypress.config.ts create mode 100644 front-end-challenge/docker-compose.yml create mode 100644 front-end-challenge/eslint.config.js create mode 100644 front-end-challenge/index.html create mode 100644 front-end-challenge/jest.config.ts create mode 100644 front-end-challenge/jest.setup.ts create mode 100644 front-end-challenge/package.json create mode 100644 front-end-challenge/public/assets/img/placeholder.png create mode 100644 front-end-challenge/public/assets/profile.jpg create mode 100644 front-end-challenge/public/icon.ico create mode 100644 front-end-challenge/src/App.tsx create mode 100644 front-end-challenge/src/api/client.ts create mode 100644 front-end-challenge/src/components/layout/AsyncFallback/AsyncFallback.test.tsx create mode 100644 front-end-challenge/src/components/layout/AsyncFallback/__snapshots__/AsyncFallback.test.tsx.snap create mode 100644 front-end-challenge/src/components/layout/AsyncFallback/index.tsx create mode 100644 front-end-challenge/src/components/layout/AsyncFallback/types.ts create mode 100644 front-end-challenge/src/components/layout/CTAButton/CTAButton.test.tsx create mode 100644 front-end-challenge/src/components/layout/CTAButton/index.tsx create mode 100644 front-end-challenge/src/components/layout/CTAButton/types.ts create mode 100644 front-end-challenge/src/components/layout/CardItems/index.tsx create mode 100644 front-end-challenge/src/components/layout/FallbackContainer/FallbackContainer.test.tsx create mode 100644 front-end-challenge/src/components/layout/FallbackContainer/__snapshots__/FallbackContainer.test.tsx.snap create mode 100644 front-end-challenge/src/components/layout/FallbackContainer/index.tsx create mode 100644 front-end-challenge/src/components/layout/FallbackContainer/types.ts create mode 100644 front-end-challenge/src/components/layout/LinkCard/LinkCard.test.tsx create mode 100644 front-end-challenge/src/components/layout/LinkCard/index.tsx create mode 100644 front-end-challenge/src/components/layout/LinkCard/types.ts create mode 100644 front-end-challenge/src/components/layout/MainNews/index.tsx create mode 100644 front-end-challenge/src/components/layout/ProfileCard/index.tsx create mode 100644 front-end-challenge/src/components/layout/Title/Title.test.tsx create mode 100644 front-end-challenge/src/components/layout/Title/__snapshots__/Title.test.tsx.snap create mode 100644 front-end-challenge/src/components/layout/Title/index.tsx create mode 100644 front-end-challenge/src/components/layout/Title/types.ts create mode 100644 front-end-challenge/src/components/ui/Button/Button.test.tsx create mode 100644 front-end-challenge/src/components/ui/Button/__snapshots__/Button.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Button/index.tsx create mode 100644 front-end-challenge/src/components/ui/Button/types.ts create mode 100644 front-end-challenge/src/components/ui/CheckBox/index.tsx create mode 100644 front-end-challenge/src/components/ui/Footer/Footer.test.tsx create mode 100644 front-end-challenge/src/components/ui/Footer/index.tsx create mode 100644 front-end-challenge/src/components/ui/Footer/types.ts create mode 100644 front-end-challenge/src/components/ui/Header/Header.test.tsx create mode 100644 front-end-challenge/src/components/ui/Header/index.tsx create mode 100644 front-end-challenge/src/components/ui/Header/types.ts create mode 100644 front-end-challenge/src/components/ui/Img/index.tsx create mode 100644 front-end-challenge/src/components/ui/Input/index.tsx create mode 100644 front-end-challenge/src/components/ui/Link/Link.test.tsx create mode 100644 front-end-challenge/src/components/ui/Link/__snapshots__/Link.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Link/index.tsx create mode 100644 front-end-challenge/src/components/ui/Link/types.ts create mode 100644 front-end-challenge/src/components/ui/List/List.test.tsx create mode 100644 front-end-challenge/src/components/ui/List/animation.ts create mode 100644 front-end-challenge/src/components/ui/List/index.tsx create mode 100644 front-end-challenge/src/components/ui/List/types.ts create mode 100644 front-end-challenge/src/components/ui/Radio/Radio.test.tsx create mode 100644 front-end-challenge/src/components/ui/Radio/__snapshots__/Radio.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Radio/index.tsx create mode 100644 front-end-challenge/src/components/ui/Radio/types.ts create mode 100644 front-end-challenge/src/components/ui/SearchInput/SearchInput.test.tsx create mode 100644 front-end-challenge/src/components/ui/SearchInput/__snapshots__/SearchInput.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/SearchInput/index.tsx create mode 100644 front-end-challenge/src/components/ui/SearchInput/types.ts create mode 100644 front-end-challenge/src/components/ui/SocialMidia/SocialMidia.test.tsx create mode 100644 front-end-challenge/src/components/ui/SocialMidia/index.tsx create mode 100644 front-end-challenge/src/components/ui/SocialMidia/types.ts create mode 100644 front-end-challenge/src/components/ui/Spinner/Spinner.test.tsx create mode 100644 front-end-challenge/src/components/ui/Spinner/__snapshots__/Spinner.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Spinner/index.tsx create mode 100644 front-end-challenge/src/components/ui/Spinner/types.ts create mode 100644 front-end-challenge/src/components/ui/Table/Table.test.tsx create mode 100644 front-end-challenge/src/components/ui/Table/index.tsx create mode 100644 front-end-challenge/src/components/ui/Table/types.ts create mode 100644 front-end-challenge/src/components/ui/Td/Td.test.tsx create mode 100644 front-end-challenge/src/components/ui/Td/__snapshots__/Td.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Td/index.tsx create mode 100644 front-end-challenge/src/components/ui/Td/types.ts create mode 100644 front-end-challenge/src/components/ui/Th/Th.test.tsx create mode 100644 front-end-challenge/src/components/ui/Th/__snapshots__/Th.test.tsx.snap create mode 100644 front-end-challenge/src/components/ui/Th/index.tsx create mode 100644 front-end-challenge/src/components/ui/Th/types.ts create mode 100644 front-end-challenge/src/hooks/useInfinitePosts.ts create mode 100644 front-end-challenge/src/hooks/usePost.ts create mode 100644 front-end-challenge/src/i18n/index.ts create mode 100644 front-end-challenge/src/i18n/locales/en/common.json create mode 100644 front-end-challenge/src/i18n/locales/pt/common.json create mode 100644 front-end-challenge/src/main.tsx create mode 100644 front-end-challenge/src/pages/HomePage.tsx create mode 100644 front-end-challenge/src/pages/NotFoundPage.tsx create mode 100644 front-end-challenge/src/pages/PostPage.tsx create mode 100644 front-end-challenge/src/providers/ReactQueryProvider.tsx create mode 100644 front-end-challenge/src/routes/index.routes.tsx create mode 100644 front-end-challenge/src/routes/layout.routes.tsx create mode 100644 front-end-challenge/src/styles/custom.css create mode 100644 front-end-challenge/src/styles/global.css create mode 100644 front-end-challenge/src/styles/postContent.css create mode 100644 front-end-challenge/src/styles/scroll.css create mode 100644 front-end-challenge/src/types/Post.ts create mode 100644 front-end-challenge/src/utils/const/socialLinks.ts create mode 100644 front-end-challenge/src/utils/data/footer.ts create mode 100644 front-end-challenge/src/utils/generics/RemoveStyle.ts create mode 100644 front-end-challenge/src/utils/generics/extractYoastDescription.ts create mode 100644 front-end-challenge/src/utils/generics/formatDate.ts create mode 100644 front-end-challenge/src/vite-env.d.ts create mode 100644 front-end-challenge/tsconfig.app.json create mode 100644 front-end-challenge/tsconfig.cypress.json create mode 100644 front-end-challenge/tsconfig.jest.json create mode 100644 front-end-challenge/tsconfig.json create mode 100644 front-end-challenge/tsconfig.node.json create mode 100644 front-end-challenge/vite.config.ts diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 5765e8a8..00000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Dependency directories -node_modules/ - -# Next.js build output -.next diff --git a/.husky/.gitattributes b/.husky/.gitattributes new file mode 100644 index 00000000..6bcf0439 --- /dev/null +++ b/.husky/.gitattributes @@ -0,0 +1,2 @@ +# .gitattributes +.husky/* text eol=lf diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..a5cd0394 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +cd client + +npm run lint -- --fix +npm run lint +npm run build +# npm run test diff --git a/README.md b/README.md deleted file mode 100644 index c5efab24..00000000 --- a/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Desafio - Front-end Developer -Este desafio tem como objetivo te avaliar como desenvolvedor Front-end: JavaScript, HTML, CSS e lógica de programação. - -## O Desafio -Queremos montar uma versão do blog da Apiki apenas para Devs, e queremos que essa seja uma solução headless, esta nova versão terá as seguintes páginas: - -- Página inicial: Listará as últimas postagens do blog com a categoria **Desenvolvimento**; -- Interna: Exibirá o conteúdo da postagem; - - -## Requesitos -- Utilizar os dados da API do nosso blog: https://blog.apiki.com/wp-json/wp/v2/; - -## Diferencial -- Utilizar alguma metodologia para a organização de seu CSS (BEMCSS, OOCSS, SMACSS... o que preferir :D); -- Escolha uma lib para criação de interfaces de usuário (React ou Angular); - -### Página inicial -Para montar esta página você precisará consumir do seguinte endpoint: `https://blog.apiki.com/wp-json/wp/v2/posts?_embed&categories=518`, ele já te retornará as últimas 10 postagens cadastradas, cada item do array deve representar uma card contendo: - -- Imagem destacada: Você encontrará um atributo chamado `_embedded`, dentro deste atributo você encontrará o `wp:featuredmedia`; -- Título; -- Link para a postagem: O link deverá conter o atributo `slug`; - -Ao final da listagem deve haver um botão nomeado **Carregar mais...**, Quando o usuário clicar neste botão você deverá fazer uma nova requisição para o mesmo endpoint informando o parâmetro `page`, este parâmetro deve receber o número da próxima página, exemplo: `https://blog.apiki.com/wp-json/wp/v2/posts?_embed&categories=518&page=2`. Você deve estar se perguntando, "como sei se haverá uma próxima página?", isso é simples, no **Header** de resposta desta requisição virá 2 atributos necessários para essa façanha `X-WP-Total` que diz a quantidade total de postagens que essa categoria possui, e o parâmetro `X-WP-TotalPages` que te informará qual o total de páginas de postagens que essa categoria possui. - -### Interna -Para montar esta página você precisará consumir do seguinte endpoint: `https://blog.apiki.com/wp-json/wp/v2/posts?_embed&slug=wordpress-escolha-site-pequenas-empresas`, lembre-se de substituir o `slug` dado como exemplo pelo slug definido no **Link para a postagem** da **Página inicial**, o layout deve conter os seguintes elementos: - -- Imagem destacada; -- Título; -- Conteúdo; - -Seja criativo, construa um layout pensando no usuário final, e sinta-se a vontade para incrementar o layout com outros atributos disponíveis no JSON retornado. - -## Critérios de avaliação - -- Organização do código; -- Responsividade; -- Reaproveitamento de código; -- SEO; - -## Como submeter seu projeto - -1. Efetue o fork deste repositório e crie um branch com o seu nome e sobrenome. (exemplo: fulano-dasilva); -1. Após finalizar o desafio, crie um Pull Request; -1. Aguarde algum contribuidor realizar o code review; diff --git a/front-end-challenge/.dockerignore b/front-end-challenge/.dockerignore new file mode 100644 index 00000000..729511ac --- /dev/null +++ b/front-end-challenge/.dockerignore @@ -0,0 +1,32 @@ +node_modules + +build +storybook-static +coverage + +.git +.gitignore +.gitattributes +.github + +.vscode +.idea +*.suo +*.ntvs* +*.njsproj +*.sln + +.DS_Store +Thumbs.db + +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*.pem +*.key + +tests +__tests__ +cypress diff --git a/front-end-challenge/.env.example b/front-end-challenge/.env.example new file mode 100644 index 00000000..0f8c5312 --- /dev/null +++ b/front-end-challenge/.env.example @@ -0,0 +1,3 @@ +VITE_BASE_URL_API_CLIENT= +VITE_CELLPHONE_NUMBER= +VITE_LINKEDIN_ACCOUNT= \ No newline at end of file diff --git a/front-end-challenge/.gitignore b/front-end-challenge/.gitignore new file mode 100644 index 00000000..8ed43d1f --- /dev/null +++ b/front-end-challenge/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env + +coverage/ \ No newline at end of file diff --git a/front-end-challenge/.prettierrc.json b/front-end-challenge/.prettierrc.json new file mode 100644 index 00000000..603bed85 --- /dev/null +++ b/front-end-challenge/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "semi": true, + "singleQuote": false, + "trailingComma": "all", + "tabWidth": 2, + "endOfLine": "lf" +} diff --git a/front-end-challenge/Dockerfile b/front-end-challenge/Dockerfile new file mode 100644 index 00000000..f13f38b0 --- /dev/null +++ b/front-end-challenge/Dockerfile @@ -0,0 +1,16 @@ +FROM node:20-alpine AS builder +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY .env.production ./ + +COPY . . + +RUN npm run build + +FROM nginx:stable-alpine +COPY --from=builder /app/dist /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/front-end-challenge/Dockerfile.dev b/front-end-challenge/Dockerfile.dev new file mode 100644 index 00000000..19ec8966 --- /dev/null +++ b/front-end-challenge/Dockerfile.dev @@ -0,0 +1,11 @@ +FROM node:20-alpine +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +ENV CHOKIDAR_USEPOLLING=true +EXPOSE 5173 + +CMD ["npm", "run", "dev"] diff --git a/front-end-challenge/README.md b/front-end-challenge/README.md new file mode 100644 index 00000000..a5e02c72 --- /dev/null +++ b/front-end-challenge/README.md @@ -0,0 +1,198 @@ +# XXXXXXXXXXX 🚀 + +> Aplicação React de XXXXXXX. + +[![CI](https://github.com/seu-usuario/control361/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/seu-usuario/control361/actions/workflows/ci-cd.yml) +[![Docker](https://img.shields.io/badge/docker-ready-blue)](#docker) +[![Deploy on Vercel](https://vercel.com/button)](https://vercel.com/) + +--- + +## 📋 Sumário + +- [XXXXXXXXXXX 🚀](#xxxxxxxxxxx-) + - [📋 Sumário](#-sumário) + - [🧐 Sobre](#-sobre) + - [✨ Funcionalidades](#-funcionalidades) + - [🛠️ Pré-requisitos](#️-pré-requisitos) + - [⚡ Instalação](#-instalação) + - [🔑 Variáveis de Ambiente](#-variáveis-de-ambiente) + - [🧑‍💻 Desenvolvimento Local](#-desenvolvimento-local) + - [🐳 Uso com Docker](#-uso-com-docker) + - [Dockerfile.dev (desenv)](#dockerfiledev-desenv) + - [Docker Compose](#docker-compose) + - [💻 CI/CD](#-cicd) + - [🚀 Deploy no Vercel](#-deploy-no-vercel) + - [🗂️ Estrutura de Pastas](#️-estrutura-de-pastas) + +--- + +## 🧐 Sobre + +Este repositório contém a aplicação **Control361**, desenvolvida em React + TypeScript, gerenciador global de estado com Zustand, formulários com React Hook Form + Zod e exibição de marcadores no mapa via Google Maps API. + +--- + +## ✨ Funcionalidades + +- Filtro por status (rastreados / outros). +- Busca por placa ou frota. +- Mapas interativos com pins e infowindows. +- Estado global via Zustand. +- Validação de formulários com Zod. + +--- + +## 🛠️ Pré-requisitos + +- **Node.js** >= 18 +- **npm** >= 8 +- **Docker** (para ambiente conteinerizado) +- **Docker Compose** (opcional para dev local) +- **Conta no Vercel** (para deploy) + +--- + +## ⚡ Instalação + +1. Clone o repositório: + ```bash + git clone https://github.com/GefersonLopes/control361 + cd control361 + ``` +2. Instale as dependências: + ```bash + npm ci + ``` +3. Crie um arquivo `.env` na raiz, copiando de `.env.example`: + ```bash + cp .env.example .env + ``` +4. Ajuste as variáveis de ambiente conforme necessário. + +--- + +## 🔑 Variáveis de Ambiente + +As seguintes variáveis devem estar definidas no seu `.env`: + +```dotenv +VITE_GOOGLE_MAPS_API_KEY=... # Chave da Google Maps JavaScript API +VITE_API_CLIENT_KEY=... # Token de autenticação do client +VITE_BASE_URL_API_CLIENT=... # URL base da API backend +VITE_GOOGLE_MAPS_COORDINATES_URL="https://www.google.com/maps/search/?api=1&query=" +``` + +> Mantenha o `.env` fora do controle de versão! + +--- + +## 🧑‍💻 Desenvolvimento Local + +Execute em modo de desenvolvimento com Vite e hot-reload: + +```bash +npm run dev # serve http://localhost:5173/ +``` + +Ou via Docker Compose: + +```bash +docker compose up --build +#Após build, acesse http://localhost:5173 +``` + +--- + +## 🐳 Uso com Docker + +### Dockerfile.dev (desenv) + +- **EXPOSE** 5173 +- Comando: `CMD ["npm", "run", "dev"]` + +### Docker Compose + +```yaml +services: + frontend: + build: + context: . + dockerfile: Dockerfile.dev + volumes: + - ./:/app + - /app/node_modules + ports: + - "5173:5173" + environment: + - VITE_GOOGLE_MAPS_API_KEY=${VITE_GOOGLE_MAPS_API_KEY} + - VITE_API_CLIENT_KEY=${VITE_API_CLIENT_KEY} + - VITE_BASE_URL_API_CLIENT=${VITE_BASE_URL_API_CLIENT} + - VITE_GOOGLE_MAPS_COORDINATES_URL=${VITE_GOOGLE_MAPS_COORDINATES_URL} +``` + +Para rodar: + +```bash +docker compose up --build +``` + +--- + +## 💻 CI/CD + +Fluxo configurado via GitHub Actions: + +1. **CI** + - Checkout do código + - Setup Node.js + - Cache npm + - `npm ci`, `npm run lint`, `npm test`, `npm run build` + - Upload de artefato `build/` + +2. **Docker Build & Push** (on push em `main`) + - Download do build + - `docker build -f Dockerfile` → imagem tageada por commit SHA + `latest` + - Push no Docker Hub (opcional) + +3. **Deploy no Vercel** + - Ação `amondnet/vercel-action@v20` usando `vercel.json` e secrets: + - VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID + +Arquivo: `.github/workflows/ci-cd.yml` + +--- + +## 🚀 Deploy no Vercel + +O deploy utiliza Docker no Vercel, via `vercel.json`: + +```json +{ + "version": 2, + "builds": [{ "src": "Dockerfile", "use": "@vercel/docker" }], + "routes": [{ "src": "/(.*)", "dest": "/" }] +} +``` + +Defina as mesmas variáveis de ambiente no painel Vercel (Production & Preview). + +--- + +## 🗂️ Estrutura de Pastas + +``` +XXXXXXXXXXX/ +├── .env.example +├── Dockerfile +├── Dockerfile.dev +├── docker-compose.yml +├── package.json +├── public/ +└── src/ + ├── components/ + ├── hooks/ + ├── pages/ + ├── store/ + └── utils/ +``` diff --git a/front-end-challenge/cypress.config.ts b/front-end-challenge/cypress.config.ts new file mode 100644 index 00000000..ab889d5b --- /dev/null +++ b/front-end-challenge/cypress.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "cypress"; + +export default defineConfig({ + e2e: { + baseUrl: "http://localhost:5173", + specPattern: "cypress/e2e/**/*.cy.{js,jsx,ts,tsx}", + supportFile: "cypress/support/e2e.ts", + setupNodeEvents(_, config) { + return config; + }, + }, + component: { + devServer: { + framework: "react", + bundler: "vite", + }, + specPattern: "cypress/e2e/**/*.cy.{ts,tsx}", + supportFile: "cypress/support/e2e.ts", + }, +}); diff --git a/front-end-challenge/docker-compose.yml b/front-end-challenge/docker-compose.yml new file mode 100644 index 00000000..147fb98f --- /dev/null +++ b/front-end-challenge/docker-compose.yml @@ -0,0 +1,15 @@ +services: + frontend: + build: + context: . + dockerfile: Dockerfile.dev + volumes: + - ./:/app + - /app/node_modules + ports: + - "5173:5173" + environment: + - VITE_GOOGLE_MAPS_API_KEY=${VITE_GOOGLE_MAPS_API_KEY} + - VITE_API_CLIENT_KEY=${VITE_API_CLIENT_KEY} + - VITE_BASE_URL_API_CLIENT=${VITE_BASE_URL_API_CLIENT} + - VITE_GOOGLE_MAPS_COORDINATES_URL=${VITE_GOOGLE_MAPS_COORDINATES_URL} diff --git a/front-end-challenge/eslint.config.js b/front-end-challenge/eslint.config.js new file mode 100644 index 00000000..48565b08 --- /dev/null +++ b/front-end-challenge/eslint.config.js @@ -0,0 +1,72 @@ +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; +import prettierPlugin from "eslint-plugin-prettier"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; +import unusedImports from "eslint-plugin-unused-imports"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const compat = new FlatCompat({ baseDirectory: __dirname }); + +export default [ + ...tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + }, + ), + + ...compat.config({ + extends: ["plugin:@typescript-eslint/recommended", "prettier"], + }), + + { + plugins: { + prettier: prettierPlugin, + "simple-import-sort": simpleImportSort, + "unused-imports": unusedImports, + }, + rules: { + "prettier/prettier": ["error", {}, { usePrettierrc: true }], + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", + "unused-imports/no-unused-imports": "error", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + }, + }, + + { + files: ["**/*.{ts,tsx}"], + languageOptions: { + parserOptions: { + project: ["./tsconfig.app.json", "./tsconfig.node.json"], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/front-end-challenge/index.html b/front-end-challenge/index.html new file mode 100644 index 00000000..eb016cd9 --- /dev/null +++ b/front-end-challenge/index.html @@ -0,0 +1,13 @@ + + + + + + + Geferson Lopes + + +
+ + + diff --git a/front-end-challenge/jest.config.ts b/front-end-challenge/jest.config.ts new file mode 100644 index 00000000..5ac9b771 --- /dev/null +++ b/front-end-challenge/jest.config.ts @@ -0,0 +1,22 @@ +import type { Config } from "@jest/types"; + +const config: Config.InitialOptions = { + preset: "ts-jest", + testEnvironment: "jsdom", + roots: ["/src"], + moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json"], + transform: { + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: "tsconfig.jest.json", + }, + ], + }, + setupFilesAfterEnv: ["/jest.setup.ts"], + moduleNameMapper: { + "\\.(css|scss|png|jpg)$": "identity-obj-proxy", + }, +}; + +export default config; diff --git a/front-end-challenge/jest.setup.ts b/front-end-challenge/jest.setup.ts new file mode 100644 index 00000000..d0de870d --- /dev/null +++ b/front-end-challenge/jest.setup.ts @@ -0,0 +1 @@ +import "@testing-library/jest-dom"; diff --git a/front-end-challenge/package.json b/front-end-challenge/package.json new file mode 100644 index 00000000..588b0b2b --- /dev/null +++ b/front-end-challenge/package.json @@ -0,0 +1,88 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host 0.0.0.0", + "build": "tsc -b && vite build", + "lint": "eslint .", + "test": "jest --coverage", + "test:watch": "jest --watch", + "preview": "vite preview", + "prepare": "husky install ../.husky", + "cypress:open": "cross-env TS_NODE_PROJECT=tsconfig.cypress.json cypress open", + "cypress:run": "cross-env TS_NODE_PROJECT=tsconfig.cypress.json cypress run" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@hookform/resolvers": "^5.0.1", + "@mui/icons-material": "^7.1.0", + "@react-google-maps/api": "^2.20.6", + "@react-oauth/google": "^0.12.2", + "@tailwindcss/vite": "^4.1.5", + "@tanstack/react-query": "^5.75.7", + "@tanstack/react-query-devtools": "^5.75.7", + "@testing-library/user-event": "^14.6.1", + "@types/testing-library__user-event": "^4.1.1", + "axios": "^1.9.0", + "client": "file:", + "clsx": "^2.1.1", + "control361": "file:", + "date-fns": "^4.1.0", + "framer-motion": "^12.12.1", + "i18next": "^25.1.2", + "jwt-decode": "^4.0.0", + "lucide-react": "^0.535.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-hook-form": "^7.56.3", + "react-i18next": "^15.5.1", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0", + "react-router-dom": "^7.6.0", + "react-select": "^5.10.2", + "uuid": "^11.1.0", + "zod": "^3.24.4", + "zustand": "^5.0.4" + }, + "devDependencies": { + "@cypress/react": "^9.0.1", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.25.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.3.0", + "@types/jest": "^29.5.14", + "@types/leaflet": "^1.9.17", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@typescript-eslint/eslint-plugin": "^8.32.0", + "@typescript-eslint/parser": "^8.32.0", + "@vitejs/plugin-react": "^4.4.1", + "autoprefixer": "^10.4.21", + "cross-env": "^7.0.3", + "cypress": "^14.3.3", + "esbuild": "^0.25.4", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.3", + "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "eslint-plugin-simple-import-sort": "^12.1.1", + "eslint-plugin-unused-imports": "^4.1.4", + "globals": "^16.0.0", + "husky": "^9.1.7", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "postcss": "^8.5.3", + "prettier": "^3.5.3", + "tailwindcss": "^4.1.5", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.2", + "typescript": "~5.8.3", + "typescript-eslint": "^8.30.1", + "vite": "^6.3.5" + } +} diff --git a/front-end-challenge/public/assets/img/placeholder.png b/front-end-challenge/public/assets/img/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..4d377cde564eb879c8f6eb9a5bed9ec0eba187a0 GIT binary patch literal 63743 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 Ou|98ij&j!P_TK@fU9ph> literal 0 HcmV?d00001 diff --git a/front-end-challenge/public/assets/profile.jpg b/front-end-challenge/public/assets/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8122e9fd50d8c89b8f3a04b8fa0e176f87690dfe GIT binary patch literal 167600 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
  • ( z8_2e-+%`Bq&Jw~qy_V2 z6YUN*0QD8vVgCTLcfpkl4D&YFSAT8nr znV1egl3OkD2ZDiY8$EyAK8v_!6{HR6DTb`Ts>}$R@11f=5o)sc zqa5{;zKeiKFxAMW18U|Qp|WhAYwK_Zxb4(7N~#`qmuAB9>M6I_`Ql^>X8!=wndw>z z8K3^h>7w|8^f27o%d_bkzLL&()V(9CmyHWHyrEY*=~|9kVr#>QRE=aWaN`l=%&R9*aKTjU zJC3~Q)S>?XaqN|DePUn>wtMPY+8ngEFEGRT=>l4>YMQjHa4?zzm}S>+(;;G|3)kK1r_;N}71Kje#N`>Ky-1X}^{{{V{=QtvbI4`Fs57=oEpNKxp5N0pp7vpRffgO`Hr73{{RS=2HO|k69k=T{9>|>kPp^U^RfH~)J;E-nKAg8 z>in|P$@rhBvF!NL&Ut`H75GAwqc(epEDClbZ>`G8adiqQ5M%EVNHkK1&}CyZI;MP> zB9v?^_(Yl3FN4Hco6Iv5stnBKAdiPqmE6N%-SYy5U0xzn-bLYF28_Ih3KO~_!pcmp=vyP5t zVqyfw9uO~DpTyaKv5w_M>uRNxG)cDhjdkv&c_Eii=;k_T*w=?JX@)P%O$6P=BXvDl z+7SG^4jf1BSogdN6B-AFLzz08!xW~KZ#lvk*mLw__bt>bucj95<9E7&bCFxp)VR4r z6u0odRzdNMh<>LYgZ1#|Fa~CaQA`4e7l}&860aR~9H{f+W6#3fP6+2v#jd^&P9n$D zOuH(XQ|o^-{heEu9M%|Dn4b*M?~*q{?0G*)BI-}@G%3l8fKqac7Yl87n!3m+s?3u^zYcljV z6L2*AWGmB{_BBsL%Y_$-bE7{}?qxMU(S<>@!LCo-#0IU%`cz0og*H%dK>C^E%y!tJ zg8c3~i!o>5R+S6qnc!(~`IQT%5iJHIbCFe#G}K+M3;p6#TIDWBK*r({+TZkJ^@!g! z16^7E?97SUa{x;%oA(5#SdT&jnheuMA~15O%@S7b@OZB}*`? z_=!PTQy%Altth2*ej>E({`2$DR|2sgX^%3Cc~F+&M49yqQwJ}`ALdr3z%jh%h{0&@ z?O3^YFskufefU?FgwM6rXPK&uXJ(UNIlI%6VzZ|kY27jE>6>vIE(fxruP(oF$QRe^ z6IK4|e|5?&xR$tHQx@Fu4B)SfH|6?>U94Ab#wTCiXVqg}yaVZE!33X+Gjl4SeN{bha#H$Av<4OJE zPaMC|s7`A(u%7yzA*opPK9Cz6cLY~Ps9>t+V*da!TsD({sLfd1DPCpnTwb9Ib(A_H zTc#=M01@q6pNZ7PXCIB{7xOJzzEM}uC;KrLs$Jx%V6x1yoQ`6oT)XC_U5%JU({MaYOfjoO zqT!0_?kTve58T1>vXcjxUvvx(n4{$-;qYd>G3pEIKy&wehGi{Ev+^e>if9f@zyNVS z%hal%CEi#X*ta!Iqbp{&Gs)Z60FFPI&}^%g4e)J{hne~3|C$ozaDxy9EA={zv5 zW;1f8(CDATHjWcVzmN1ux$XS?U**pK08!t@^Kxk$eW&e5_0RQv{2%lm6KQ_5-hQXW zu71?t+u;w>@c#gxLb6Z8&;|@c3}YNbUGw`BQlQ$*9#2m2B`8gFh4LiwfV{VOh;6!7Afg&3*CBT~p~fyKRm>uillTd|K`vT5VP2tXFzs^77~|DTC~dBh zpbC2-g=019)F_2(Bk=_ok#!wKGD5l|Q7ROKDyfEQ6Vx+Cqrs27OZQ>8bxvTq-sQ*! zn{t@z*}BwGH>9<)P|P^d7PiXE%eVp%-pEj+qolAo;Vi8)rV65-4azPoD&H>?kSZf_ z4?19z$L|J;2j(pp;20&j13X72aM1;FJ3i>o~zAi074kD8pS{FzS%XEX_iQtIybIL5Rb>~JwPXORZTAYaE^b?}7h(Zy zGl+#nz9V<@l$OEdh;%kUlzX{Fgrv=pb%EqeR;9;bZ@7>RV=I3$$SmJXA0>X$#@dcZ z*^W#pGplYrY2r}eYAu1(P)f_jp+JL(p?vL%$`f%a?-Jz4w|6Nzs%&aqDSg3L%e6HO z7g3K1VPoB9AUU68vV?M?8f>F)0%R3s-AYQ0xe$Y0DMTn;kiejgfr4KMP$WJHmb*JZ zB>?2h8}vjQjTYpa$3Erf@#+qWa)SwX>+L><`ehZ6Rw)ldXVm<6$v-2|9XF?)Upa8PpyNL{rayk5WV zV#b+e_cX&LBo|rmFbSZ9SbkQ7sS%EL3H1*r8%3mJDda?6-1 zh}MkAC*ca_S<&XGbkp}&w)lUy14~DVp>GQaZMGS%W8L~Cw38HzdXxg;J8;)RhDl?Sj10c zJ!7a7E4)mpePZ&RNu!(K6E?Lm6u3+jaJhM+(AW&f{K?L_W>}t2T`jB z4k0m8T#(}$GTMuvHcM-(60Hbu zmu66|P!Is})JnVDF>!YegOp2Y&;J04!lTc~MosiAiK{De@%QFXK77u_A?tx<^cKF2 zknQ_0W1w9;#us+VyPAMQTAtGZ;~mGWq4&gHB*oNJ0Y!k&AvxfX`nxLF%(c`PMzP>*drH?=!Se1bq0+izG%^}P4tgQGB}_}An_JD|KOC8j-Y?T*@Ju@n zui-zOS@pd~m3xiC5C;L=@Q?ubsvydf06dn|0(-D;(l>43F&G<7UEJo5mKxN0#0t?> z)S+9vqjsub=6$6KV|#@%CzCAH;W>%JIkYR=C;}GIzE=znk6VJ$B;wiJeizFTR25q= z3^RpdI{l~62x29v@LY8{9-I1T<1m!^C4CmXrwq}FqWmgvrQW3_KN$K`r|P7krsB0( zd2S4#4;6^2sYiLyGs1^oK-tB202VJCeCAoI;0CYEC^Ez2h-(}K(?e zGOjiosK*@)!OxSnI$O5rj_sp?!wTfBs3KM+v8&^cyb_o+OUVW*GVKxszhvAI-P9`~ zNQytOs6g(@Zw)FsB4+c(EJkg_#PZmTa%5I=n(9XEzXjuNOpJMvZ}JLXjNVI*OVJ&g z8B%GS0$NmpfZAPbOD`?OnHuEfg~F;LAT9{Z@ohpLc&$~}@#(lVTZBEUH4ryW_6U>0 zZWX3ADD1Z|`I!-WEkn`|F%>sxzLFB#{ZhT#DlB8*_=2e7c)m61O73k=?X32ZNKpd*#rG3aNK4rau*$_Af!j~zYrB)$D2ZU|LtW6cv6$DU2 z9@12-hdeT+mipv@tY2+R(yP} zsM~5| zaDYLke$v&4ZJ-{a(?(~N6gWj;Y0Oh^xG5ZRyk7f}>NB}o< z{wCC?F<+TcyG|lDsflUng$2t5leM7Mk7F?qZ0b}yYy~57gB2E-+G}qifF-alD`GB7 zdU1VC;Z)K&pjjtn8?9h2y_%I$^I*03AS19>C!n&vXk#9Nz7;EsZJIezQ{6>+)E*w! zFWOa*)5mLyWmn$9=q)V9C&!IGQ1wckgRsnK*QgiCy(ZZ~9zimc0FRWziA#^@V{!Yk zh|)wIS74Kb)H}O{gT$Rt*iP->yG>ZlOSuh3#=zaGHPxPjxn5VeiA=O)1Yu)3e87(U zMPLw2!!I1Xd}k50SFFF62t^6 zH$0TXYx6qOU0lW%W-QigBsFPt4J!DEB}25#5v>0JxzrBA2C@Owxt+X}fQZnCm_WIs zbxtr;D@M7F@Wl`c0AOIswbS&-|hut8Flo3Ir(J&&sr3pqd^BJREyZ0Hzd=l7K zu~>#%B||kuNM%qSw-SW~N?R4ixkdn@nz?H(ZV7A5!3Y`c^jxjV{{U~&u#(dLgrR3| zJ_LfDl zmYC_(3{lf^tSlWxXm(P#>ZN;bc7S-fX!RFSb~WPC$_TM;hEW;P<#;;@xjzw!UsYlT zU9#Mfhs~^@s}&{F?lA^x`;vkWPx}#+S~_w;YNqP31OawKf-Xx|=5@2G#A%GhYEgJf z&$9|)h+sWMl@}UDm>zj{{RW7?h^a{5g1n-m#frEMLK(giIj)l zF6HL3G6L*sx2+4D5zoZ-iU>!{8nfR}?cHz)iKJh8BEX)}4 z%)(Qx_-Jp-I^#kwq!moQ3-1dTpd2+fp5pY zHJrphJyZS_#Y(KYyX~MztdSAHhPdEyc2QBs$2Z2 z492e$5OwrT09k;rv!)|oVGInT;D{cJzqD+yj|j}{MEHQMd#V%;L$&~I1uJEynt?7C zE4T;@Mw8|e&?4kySrk6ajS&+zodilOu0?Xo+Qsv#5rw+}sH~!!xphp+avw0&C@9@| zfMyL7OB+o9&BEGH{pG6KDQd_>cTv9Ak+=eZ=_^w?Y&c!_6AeFUfJF*wh#FUq`$JU6 z2ANz%wD3Y#- zFt-Y-aCm^ktCruir@+&sZZQI^M2h6CTuM6AiAZp2;Igs8;)_^_BQb3+_*@p-4)+w~ zIF#A#4+@sCsZahCiEaH5sm=cYBH?eS3!Ei#Fg9Co6#Rh@(1XItU=F5=@fV5i3A;08 zz|olQ6s%h|QXV2)elHT}ix!?piiPbd%g%2#>SEe0Ze?*#B*dqLdPkaYO{}u8^3ob? zE35Xy+%X56Fo;;vMQfprg1PMeDqI1sT8Pa~h^V}E^l60`Y>m? zmc}v4w2Ijc7*^<@oGj3i^;|0uArf?%l%*Uh>I#fdDEzd&_}7Q$Z#7S<9DuuhbtP@L`fDDE>sEf6ElrPLHD;@(S+-uiWDaoTmM~E{9un_6PQh-|~ zM}H`sm&5?GTqgHXSeEc6-|Lmd7*n_0$0H6E{AmhsKK_eQqG@o7hIIZnr+h|Mff)rv zkYKS`LD~xZh*V%UA7|VQk9R0xq?oAe-9=J}uT-qu&7wnD64kU^ zgMd3Bf++Zh#Y_kUC`fE7HZH@splk&pvE-^}FsvJ|lu+%sZQV-Y4uovjM#>@(R#hs3 zWU-!7px85eBH|}|unJb5fd&Nzk{p`ofGxN#S;(V?D~ zQ+-S7%0M3G<={++A;EF7m_U?8Ym>mm0igweqceJzMMMmO3WXriZu$H39B;C6i>Y5r zsV2S1)1u$l!x*o}HQWVYI4tMWF}^v$!cA`I==mj4meb^1$ae3PuUNEeQBZloW$W(a zlydbl+z*P2!6JnMU1+nvH>pY9&vv1NNMULFt&Y0Whz^62#qE`YsvflIJuWz)grobbZ38(K6B ze8TofP~<`?-vXlZUNU>A%N2&gS}W;Hs7PTD3a7WZu2*aYoP0~nEc2)uQDJ|^-@uk-Vl@)moZRXBDA&K3KAM23`5+1{Yq+PJ7#%Tz z6E5vEM75{SP&Tf-$zO%rO4Y6uE^ih>o>yW!>q zI$0X?LnEvuel?ZtR|2(cs$E`N{qBd9yVrp3#~~kSi#dUsgskw={-N0st3;jPti;o;FQ)^h`ZmE8t>*A~1D=8u98sOK*97 z>R5{^iWTgOeL64iBev5wLk>1;r9UKCC9>T+l?|(+w+*iq3S6rZVB*Dqqi(C_Rseo} zlO;ChjM}MW&v zH3ET`40jxnK!D~2$fr%iAPa`$u^(tNd;F)Wa3Q9fW;=Ld6j*%EJ2uN`QEZKp2>oVNplhFrnwZVUEdZOGd(|)U~C}?lpBu;sZ;;(SSjC zf~$jq9S_;#D^Mj{@eR04K+REf;!#kqXwXvp zR7Jb+L|qjPN{5yKmbfr7l<+`q1?p0eHCzd2Rsy4yggg67jXvNh9j*s<2vXSCOPud0 z3+>+3L||b=2|U*PEO(LEZ`p!MFq8tYHBnvsLn&^?gwyz9oRxAJ;~4#t@R$1}pNd5G z!e|cjD#+lME)&5}Cz@lpbai3!khKe&74Bv`TEU2Bz!_(lDkCr1Ev`94PfFC%M2?71 z3ZxqiBnYw2R&HLY^F%Hd%m?{qg51BuBPpT{K*fPIb}Cw4b1ga7N_-^f7kEpLjX1on|erOMFBvyQoHX53AfU9QHoI4B zqyj2{5Q@8)^enRNI7M0oLflY(2s+?b0sKaike3}4uIe9G3~@r$PD0)yT9=_OfI4O0 zwhPm1Ko(R4TW;Zf@jU(zU4X7BhnmyQ&`bb#TRqFH5oyMyD|URvG&SlVL{1J%u%{ecOR0#Ke!~GH8fuY#GfmVh*y5;F1?120p=!2J?g8jGZ<}tQ4aK(hr$>7 zonXUcg-0P$nOFn~p7ev0a=e5_K-_ukDUgh*N*49h24};RPjSUkMAx;%Tku8<^uI?! zP?Z?YUr4K0CHm1s8>3=|VGDukqmg!K zTg{UKD_G(v%sQyHts&H2eG?HpS2Y{?gWfAcUZc-Zd{Yg#m2MOuu)JTn!Gnm7(?gOV z$v9YNkc=5k{P!0SgMbqZN1#bbdmsj|8Fk8Vv3%jBO81vsM+e~aDYydVOnj&~P<&K{ z07p=qFqpY_D4ufOVNiYD{TQs)pfTvpGi)4DW?(?xu?DO~Zi1{Tp9m@uQQ(VC#tWJj zUdM9u!sYm*)T|HtKY{dA_?F=k<*R2hoj*%`P;?JpTTC1NN~t+xRJS_@W?o<`aoX4>TUI-m>`2 zIfPJSsjSZPMiX>gCtnkU-~ZU`r}7;l)h&|7C*sTIf04tgq~O(WufLEY*F zaBWwe@JivR0P|^vXTU(Cq1Jho7;e{xlDLMXJ+!YRMt|%O6$^p!KwZZJiMM+13AkMg z5#d>iSS-e3lLqtmLFN?oq0RS(;{}cn9~lVYk>K&@mXogca}L{hEeMK@vJ^oyqNOw? zSP%!;Oc26Ix?;f=NHG&YCf23yc@XG$Nh~BpZt#2AcJ(N6?(WB)MxO6D{og)OWc`=I>Eq+m@mIY$EmNxm9?1AcA#hd}n zN}MGbvynn&y*imySzkioMh*dp$mq?O6e;KCe9C1U6|`+p^AVLAMywBk13ad+@?$K_ zA!U=-n1!s!I&wOM2O#1hZi(9SG+^Y5QHessSM+Tvq62DuIPat@fJ#b#GtPbg z04htnEX!!+yvp>qNne-%7%$jBMyxl?pjsh;Lf;T-qSHnoRS|GShG6k3EH#Z0KnL7n z3zdQ~=`9|++uU3b`yQ7s1cucV5nX92N>z=h3JD`;P<5~)k3OZRt{TCmk7rAb{Xk}nisgJ<+$(==XUf3 z>leG26^pM1HnAIzq(Z%>2f{l%Mx!98dzg@vCda`G;1{LuGPKA=SFaTnO?^6zOVcO~ zzYsMvTe#NO42&@cfk@e^h3}b?I;bFughBXEchc~k#JIIC?+reUgIoG31(l7q%YAA8 z0M>w7j}R`fEn&(vTa94J)F%KTw{T*Od@x)kX;!FYqsPjlv0!NU*Ash~;#Xv4C6xGB67j1VQr6~6`DquK%Q6>vTER;I(@OW8a4j!oqlx`hf9RfUUB-Tvlbw zQ4ybc8iQHg+;nszS1~(4cQT9l#3nX)?3~(HwTQ(4!H1c0bYYni#}`Vdo?x+Bt-Ae~ zpkZ+B^>a9(K`h^xELxs_?Gl&lAYC9l&pGB<&I-Q41GN#0d5o?mE`X)T=ykX@!|@9X z#8*HZQBZq(r}pSW8eDx@2hAa|%S&c*HgxcfBB`;Nbqx0<2epVLEg6@CC(mmzDR>}Z zSn7r;V*PgdCC+-yD&-|2TtcF;B`A56`rG+ir}>9@_Y#$pxCenU<9{jW~BNx*=O_A$A3s%LG(fQ>EMt0=)%gGnF$9j8$d(gvg76 z))ffgWml)ssi5Ru<6wjGf(HmhCAqi(0r*5Xqt@VMLu>XCxl>r(C`TSgG=k9qkjscA z1+Kz#q!_4G3GyaLk0;hS`=Q%4E1>alCvLlS`qIFH>~qkjMH=6qA^`T$st(k-j`+ez zKfTZU5-T5j8zegQ*fR_j!y1Sn29Vqq#$MG51Q@<0oHyqw9$Fi1r67jRA-InaDLS56 z;%3?e2ojDaFTUioZ?A}KZzuTauv4~_8arQjt)JB3;5;Jq_L`-O=f>))gnqd@Db zYERLk(9L?lO>|t^{3>!wDj@~*#=H`>FfHCRua*j|AhJT!&LU$&)#FH2fRk}_I++Uu z*l0SILYNq31Un76~ zzzW?ou(sc=gh1Vr=BOfU9=MBOrOZUKFm3_2jbl`Cic?TX6&H7X$6y+S1=?`(OQ1F^ z{{V3t!mjDKgW1Rj>YyG=mfd_1L=bjAYm1QFH;9IoFN82dYaj|JPXP(SWPkKlqMAgw5Y!;%3>9V_G3rw0}TaAusw~wkRBMW zy!Tc3jRO;ERn{T^NW(&XQI*mCqS7=b{8%|=<_ps=iwd&irH_IL$Pm)n-SU(Hhp0%?6-}i< z22@rifgGz10@lu>XY*e2v;z33Ss6yq_AmmQmqFC z!U^0ew{;p=wq)`|3wO7dYvNclR-)fc1Un8~=N2WN7{LS_G!QVnF|Ca}^j|n*$WYW$ zD9oU#-&3XG(8zFxH_pG9Oi`Sm9jzi4)9N zT%^ZG)e8P;f&T!_$xw-aC9akDLxL-~TB!oFIsxW4@SIf8`OG0MSsEhcKrh@iG3` zN`>Pi6cMHxoxisZV<9mb?yg%iDHwwW-D>ZtevF&lVypTB@#7@iB zJw zqVzzPOLRJDVRIf}7Fd={IO7%Cm)@-nKvo)}VZ1;wZVP4G3w;Y@4zn1CGCTImLE>VM zk{SqygL0}p6l!0h8v!8($WcH`%bF@Ji77Nvk#SOn%k{*51NMRf)YL6$+|fcJ>}3+g zu}Z3xY>3l&2=sZGxm86m4w*>`Bo#Ljgowc0!%F7ki*6;AVFhL!M-G^-lQDzQ%r%v2 zDG1LI)-irql}6X={UFeb$YI^W;M(sa*NBKji`&9R&2rMT5av+b1x$7219^`UpY^v1B_DK zF*UnSX?e$#=@752r9Z?J5HhPv%!4hXG;tKv6&4v63<=A?km9pu&<)Yl!Gl1lwh*dR zLaZZ_oACih0Kxf%8MlFm?S#=0XanYtNl+2&X`I6s-UYBpqlyQDs#F4kux>zR89t5_ zyA8Spn0w~F07XZ*X~U#r4C-9~sF$iVMgX7+&w>ideAJ$D#n=P8_)3K>SwNSaY%tEq zWH-Sq`EeZWk3toCQFp0P0AJ*+88Yq z#Rk7f3lT18)%;}v%Xe%S6pB4B9ap7R!NZc3@Y6&(jqo=V?YD%B|7WR5p1n zSLYWK7rPTRIEyQgD#Q)I>@+~qrs`r>FoR=bj}t30C`n1Y_RhnyQ`xcn+Sf`;#8c-k63^fHNvvS zM#}k1b8Ev2wSoy$!ysx?h5L=^1N<#59u+O6Te!pxue1`ZV>Z7(RAVyU3AElpL>8f{ z`UKYENnWxZBGrt_DlG0>0!~IyGIWfl>bV(G0RrF&!vUyc)|9;W?kfSb^pFjz0FD$; z+-L~K+E21z3bXSsijM+F2%Q#PP=`ZIeP1!2ZHo05qAt}8cObb8{DA;tW|?-!rLw9H zi^ZabVLO6s%2c41Sus>@DyfqOHMEWu__mV9_eK1tl`y#raErispJS!(+nt z3(^jubXpV13LaN^Kq#~{?f{Ev)s_cjbZhS`P*CbyJCFw25uOS;4k46OtZ#am%8A(JvF$$tyX0+eZvvOLDH_UEw<+90uzoOF7 zZ_&`t-33*B2w-AVI8!d-RLBp^QmhwfMBu*!uzesUOlM1Au|uPxHv-|OH7G@~l$ca+ zVW%2buE=JfWp%u-gbx{Qur{eTY(mc~sXX0)%`PAAK~AVDmQ&(eeq0xXd(w_#7>+wN z3get&ECw}@xyXCUGSyt^m3OI_#I6Jm{*G_yNVlxJg{D{iGMb5Uk!(rQY%?0m^|$ab zDgHI0TAm^g68)LNseZ^%qNuDv1l$|~U$w;*cu3e=QMNp}hY%hI?-M|@+5~hxKO= zsm;Kp%2W6QRRxX^B&4)xwq2NtsK^-Q0x{>@!pSgm4V+~{v2magrUGK4g{2tt16C(! zrBLuiWYTyvse}bqbr2_^gh#_H3M+5fN)e5v#Yco&ijd1I`n9*k$J)_hnt@%)4{;C7 z3q!aJ?igU?Q0CLOaYYd_@ho(c1)%F_A+#u3_`f#Hg$Hz^dRCzeF=s zIf$*oE>H@Mkqt_ff@CGR$RgBB+dk-$(=8Nsl8*j^l&Z4*7%rk2O`;GihP=C%NNj^@ zp@*2EC9oios?(z=G_Je<0IWPKrI-np*m`9T1jTV4@T8Bhi<=LuEXr~9l5U85T`c1` zmC${u^#vtT|V{SBK$)R8}4qSD0rC z?}>%8u~t2%6~SQ7L*{or*Umw~PSP8_5h*M$vhOrUBqRVs_RYbw9k2sZ3IJNpW z7~z@Uc@Xs~n52Dy9~N~Bk6bV&CbVfMF?+|7GLuFwfEV&+aCcJFOwT1hlt7KPF|_iW z+*MX{96(FWH%c(1nyvk7+xP+8j(w&X@M z(aZBOTSo;q)XqR~s4ysDRLZTtA(*DysHZ=SBFuqPOQG~J^v`Ka6p?d%#i>?2r)ibI zE9+>t^rm$G0DwdEy4E9fw^5*Gjs`nSKOwFLLxU=!!=0cB7MPq&Gwe?%#t2|(l7xPtBU^sv^VKNalwgEOZ2Cv zQVlLrDR&XS5pGajP7qyvDIAp&!3H0)Q^Q$PiN*>&4%v*fxj3&i3obygU^UeTHx#>X z2}pWOMAfcM_^3t1`Dj?T%LZxzOKnxRG#tkChd}gvo@H$sz#E8IrSS!D%eVncRwYXl zLksRZ)t>Qj1!0_t-`BJ>y0N|+&lyL8G>P8}XOgw`G zvJ~G$#4n^!N;ZQrW!3^Zd6!^@t&9@f?2JC97OR*k`eMScia9XGRlZU+ufYsGlOMQC z!r1_ODLr;W17UD|tpJ(GprJD5Xygi229JkGBtGxH(g|q9l7wBR74U9ilUTzG+zpPj z3Y@D&6vf=I>oWqB^#P!@`-19WG!Le1%UP%ENS6mlwe&5m{T`Cj3YD9PO2CEM6FZP| zk}-faYQ8lqOsH0Tt~o(Ein&v1Z%U)hR2UX81~U)Y8qsrvEK^YYJ1d~zzAL#L_1K&& z2s|fa5kL1Bmah2XU``IXE?!cWXfQ7pWsb+RR4Y=SOe%3uAi^KSFSZ!}0E$4SJ|QS8 z^6W7P_}>`@4HIlU>M2HF7>Q|?-h;T4*acq{hK7Rd;f&Nd8AvH>b=)~t{Fat&Y@Fw% zT@sC&Wq3s%lvvj)2Iu(^`IrmUY%eAe4`1nhu~ctDlt}T1qtkOW zM(YrHvMsd2xn;DtXE6^!Uck)EUI>~#2-4NMjr)v{T}n{Pbi+kYB3q_XQfSK#6>tOw z5m1y93XWwZLn3WU>oW5movO_Kamm>rg*lnI_$ql0Xk#F>t4u3X((bAbrtf8c_3gw@k`uk)iF2XYKoUYFKLyLr5lR1K%0qu+0Nrl)7<$)GLGUY>L5@0 zew3Z26%_+fuvNdKg50kIE-+lqg(nfmcv_K?;Km+q;R)g(-L1UFJSL zeH>+?r6@c_>DqZ`7A4%U$H%M(<-)`5Pz`pA#U9*(FiJ-me$pyJu!z^*-)0xG588Q< z&^XjhGrG0#L{SSF=@BOl1QB?CXL~c-^$@P*v}XI~>qS&;wmFRf^rHGd@j}OC7U&8h z4;gGWWQeD!*P%c#xyWJQ7UAxq4vVpY}5Ql#ntvTc%}wb)kRK^41pBV$YU ziv*U@!2}X@h7-X7FWG1~t+A)(prC}W2sD-1vNJ}-X#wbNslI*Z}4Gd`m1Zi!!{1;}&r9lNrC z0XE>V1uQp?r6qWrY>tA<-5QO$C_>Vyj$kMa44Y#Oa4QS6nTx`RF$%Gg&;ut7qCe{$oU0|X78VkCfBlgxcaWz9A`O{Au-Tu6@lss)5M{OcET>9XT~Bd9wCT^T6n7ombC5}0F|>= z*sHNp-e4)F0l3PkEf;T&B}GR^r`&74z^_a{l(Y*;%#j~bnB>p8?h?YmiDVz8r6G@_ z8)FMA5CY;{2$z0g;-l4+^8%t=q@-(ZS3E>g=o0wE>0SoyjOC0Rl>=Fd+<7kGV?}5j zwSf{j$yin=;Sj#SFYcyGpnOaUSFRvo4`|CKnR}_`7K#(1Y3r_{k)yjI&4N`iPb{D) z{{RGF!V{Xi2BlYWink=Ss|!W{03ucf!yg2V$jiHem-)6{z~SPShW57*HPeHZ zJqsYn?iGfBh&0&;V^9KQcL7lgHU8qLd>9C?fhoIB*75%U?*krDWk|O$ucru-u^6mj zQwn7gzP&%-(53R%w*)&qo{jJs{F5wHQN@TFsO%a0WMKFrITk zd8oA*35&fh^&MvM$08WYMKWe=nD?n+Kxk>GanI`B&gBZ$cn|250B-14+hQKk>L*2s zSdXZEvna7Ob^S@nb^%XtrLFP<%PF*>R0l}u%7Y8FtvOjLEiUF`tLg#@h8Z$C`JYpx=3h?h$PxGtrxzcEgu zo>=9#G0ZU86npwRm?QrH26%lTbjfPx9|Yk?6T>K?it{PpZ%!>PV%o}MC;>*&*yNjR z{o$@LmS_p@S_HldAp^kz&$%BUtMCpv3|87#QPT&cRZ(N=d#pgx`$nNlert#*@=T?{ z@s!JZqJSn%9+WfZkx#LSh2EX=#OREJ_E-(@Ie-L+LuWlf~lqB-OAY{>xm~0?_6j9>g z2+gj`;xBgFRXU{*8Bs0miq};T0^D~PaNV4c94S~F2#{DbCAl(IK>&-90Zk~`cx4m- z^k%CU+@*aHg~Z7J07w<4`jmK!Urgm}z`w1h3E$NhmQ(%)fwfpK0o%mfwCX=GWAaYB z6n+pF_ZOSTo69I9C{$l|GjmZ|fW_Bajb5%tY{9fjpj8h$+&=)8g@?c!ZQMnk4iChF zQELz#Q7BU-mx57`*^2{@aZx=*jH*ssl9JtTKO{}j7%3R_3vz5BLs6<~IY7j_j&rlV zVp=mP+?OKSk@7ZpBab_mpV^)A?Z-CrGTao+S{y#Y+Q%^?gE= zw-&J?#$mzT9!@K=TR@%;0(dY^76s3Gox%BD`&zeShr{;RZr;@xD6BC z^j<5T`IvnUgfpqdOc(IVeJLsQ*)QpD_#6D8UAn0E1)HwbEAqE6&C?>j<(Yu;nMmY! z3ECm4W1-?T#JMGS7MJu^y*C*@j5<@Jp~S!tLLo_qQmS5&8klb2@li^S33cXctR5G* z-s`#oGNI70;^ux!h19&?5FJgXsQM9#Ag3!LftwZ#Ao^RlXf1}S9+)lcn1H-16n-Q3 z9xkGZ8iO$cEk9~rpoA5S%RssA7?WOZTxse6T%@J6bEw@5saA$|wGC!xoMOh?#$yB> zXqA&v+%lmxTaPY8+5xv(u^8BGrHC4p@?VrhG|Y8w?QkXGs^+5M3c^Yz{w`CIWE+We z-dgCFBZJkpySO_iv=CBe^SNS$-%wIuLl~4-Y*R+Mc7?=jtj588VW8r@5C->%Jv<;C z+C7mNj{paj0s&4gQpZhIHJN7k4{_mNM*zz@n;^tNO-@zMxms7&-$b_N75@MOc2_Z| zKP9Dw-*PEMGlfK0IM(Va%B?vM5l0de{kejmTI=Y;ASBAMmf}+4`-ar0@h^7xxUfW= zEQbLY2;b&1uzkzKV&SV^?u4cmyK3j8yQz|nU{6VhI{8=gH#I>D?HP*%wzbD0-gN|E zd>41FaPYA>;#eMVM!1n!CR7*u1}VDhn7| z2h62;bSV3iu@HjY@-S9Gj~Rd_c7PAeVuL%o@hYoB8z7^+iz*5v_lzoL{B3^aU}Mn0 zI2uD1O5djud{0@H$^FYvGu1ZE9D*ipED3(mWvA@ z9^1KiNcN_ru8eew;Sn8cer(Y-1w+sn6 zky@eF&Ww^J3xm%1rHjHazhop9a%h$`Z0|DbR>yd#w1Wzv@IM}$D491Nr^zid`;31* zNGR~&{uK#2^#}JZHZLXq=!+ik7&Cm1j+?__nD>Q=jE_sp&)_sl7V zvn?~JSVDikR;&17Q=9()fgO|`;|qGMLci%=AhCcRvp0lLjw83z757)yk_#wk>Y~)M zvRU*WnD9#lhc*!uNA@6W!%MbWF*8E@rO!SK<0>(sfJ3h^c(z?@+zbsU#Ryaau+sT6 z*sCa%*m4u|2m>vQRAeY4P%AH1TuajZm5GI*%K|&}?DZ?1$w`>A-D#WK82|B~uFG2~GfK*2?pdoB!?%(|&c_UfQ?>4z#grh^iV|e_U_Y)VuqAg9Dm;^*)2fV}Z`IMq)cM|zv z%BET?9sLrm{{RZYZQ`EN;NV#0A4-3~FJ;$3r_8EG(+W`)wkj_$V+gX~CGl`kWK2b} z-$#L#g$iwy_oUevN{w=Zs=ghNqPqMOI>)kvqJp;V9aQWS`+dO5Wn~0BCg_rl=B#** zQyj+6q@_w&JvJ1%%V=~<+AmX5bzGw##olt=?^r%b#kiWo0p-fzo7L-UU zhvHQEf|<{j1wiK0@i4vW598E5gwk^KZ}AxbYvFm>7`XNXblxhx#66R_&4M@;<%qoi z__D&S?GbHw(lBFb&heO0>L;pJ3&Y%~HevV*7?aWlmWJ6vgg}C8H|;J7r)d8GTxY{* znvz!V%2BQ4M>k~WSoBpPt1SqC5>>+z!L!qGx(s1lMFk$00wVpmj=YH5V;dB(aLhD) zDxxfyR=klgU~O$cwP3D+S8M@EYYa^NW!yG9oVAJAj14lVY#eaAS{%jW=wmxRkMEv>JyoCKM^5&Z7v@SLg+b)T(;rvz9qQcd+`?9d4X&9kM4Xbg)m%- z_7dze&R8sG!T=RhRj9APQ2?lT?1Izc<%z?Geo~Mq+gQ2_qh=w+4OCBN0>qN@L2U5C zuVQoMDw#vgXlVZctaM}mD%R3N$eF5*pwFhC0dj!*@kba+$(#&{XYa`~J+$7_R*ClxC26Gdz3+F)ZW%!DyB z+dV(v5W~4$q!@Aze{;$TFuMzD#WA+vDk@khJ9ThIk4zEhJD2rEOb`%brHHQP6%{u_ zvLcahV*_Nz5tle1R=9$!ip*sx%R`JrqTu@G2Z^9?{LB+k6;{{GTvXZIA)4^Tz+3R8 z9H&u5RPu2E6FtsBwQ>NM^mnrOB4gE45FF_-RVWKq?T&0=mp8KehM+y3Bdc1jCk{$D zkLfHGH%o>4;yRHz(tASPUtC0pyf+bPjX?%;+D1j5RC+=mdVs1PZsG}7SJUninYTt7 zF{V;gO)``Ry8-|P-jMSSspf&{W{33`C(cOSJ6gXxDT))pj}*XeN5hnDG{C!gcG{!E zsOIT#Z2Qb=fE)}-ST90g9~TfQRLr$7vk*p**oy}x;E0jq8eq>2MYQvDF&SIY#JC5r zm<1KX48reoikdDa$L!)AlCCY7xVTTH6<xZYEVS7QCNnBZDk0crCGLR6nG(!9;P{_3A9fT zwWWR#1=RZ?0;e7&BQv=`JqU1t)&@YJ;iefx1L}B!K9Yxm<5Z%ASjDEBUIMfJD`l`-m52}lTq6?;2HnZ1 zBU&OcMU9XpgS22S_gRNxZ7}saPJPThw_;)vimS1NpiJR;0Z#XO2r`=MUn;IE)IX0X zB`qAeCSoELtwZ*(BZA`&emHHN{!c_TtP;rTP|S5P#Wusu<^lDQ{;;1JB*Vchp1yB45Sl#B@Rfr zxC&P*{gB6DvoKJ!iA}=7zUw4xIuLZc#uaKimG(v*62#rila8V{q!=ZTVpdb7Eb<2U zfbpSak^#X9TFei&bR)3U*_`}F+QRX|MS}2;*hW_XMa>vNZrzV?MOx{C0SAi(SVEa_ zwAuFVgQd|z%YY_OCj zwGM)Kg@I}1h1_B+!?U4>00xjLUC(v*0s;c-xCP;1xkCIUo!qjD9wM#fvWkTYmuW3Q z!O{S|lF|@Y%&piW4cK4<4q-EqLjJKi@qD4$XsZg6jcPSim0CI_UiLMMm z8oc*;g$xeuzlf&5n=4Tu1Fsi|MNoJ(EXnwdFuE>ao-GGq+)zBF%vcT&a}w5m*zii1 zht4N%u}DCn;EkFZMqxJwXrR}I^uJ@35dl5z$`Vh#-i6)K6a^z zdi9hnkg>$v5Or;}nwRv{^b)D6_LX{9SVW;!U;?Vr?s5%c4#N)|N{Ak{0JD9ukOBsS zn3YP>uwpe#jK>VPwC48dfJS<9x`4&{@dT^h?Q@q<3QAm+g4lLfB|p!hksp;GbxLl7Im?KQdD?0fn*nN(O;a8UeN+K4F;yvMlKnH%1w%6? zA;QAk8xZX72@lkZWQwm3aSyanve-XpgeCWl#ATwt7!`s+tPDj+&jg`L5O`n()#PDq zV(ejql8*%puT6yMUaBpo)MUg|(8@Nd>RjK^sD)Cm_J)`Ng_sp9&D=uOtP{B7xnN<^ zVV13T$YQNLgcgo>OwFkBA;J%=&CUf>c|?k{42ZqYF*YZXFEoA;1yFtokvM2pk5K{8 z#n|~n7Xj;Xn*tu8CODukU9(-mx>$mOEOqGvExS@uzG|Z>bhnp(+BZVn>^^1A@u)nE z7Zp@kfmbZbIb1OnyG2s$;uLHYe|1Fuo@DhE~Kd16 zIARI#gj*6QTTGQO%X>$Q>MuHR14i2-h@aGaw}@zm(bEkYw?5~zp@95Rpoe88pduG^ zWkWSYWJ}A*63mOkaD`2@Ap#5X#F;BDI>UQ_ z*ce2Mj#Rwg9dQ$oaf+Lq-WI!@9%dMyMY=eYUB$S!4WykW$SSrK++k1zr?2ylRAo2H zEg;v~eh2_v#I}*!PR7@+xt0;5?fG#SF`39^euMkauQ!wNw&lO4H!;F-q|Fz#^~7IckQofNVj z>eLe~MqyLq#EmuP0Y{tE zvGAU*Rb@a=hf$o@C5cftkg9pRhoNq?dYMT*6##&taW^f(VwQ-e;G&BWxg%@_HB*Lf zzHT<57FH_)?kz3`!z&X@nPtD2Z7N^`mvYYQ*bPe6fa$~bVu^SVY#W3XCGd&Ye*(i+ z1}-H_-Y;7Mc3%>U9N`A3%(Su_9mWRbaGR^1r5^4tM2_?`O3bBx6&jY+L6!nLb1O=A zN(KF=5r|O5Gm)g6^mrrM>iF2tc=bwUnI$}Z<9!FL-3 z4>?v8Q34JJ6_|$9Heu-k)n+>q3d9RG$9km(%3PL0FHfQhp<=tfE;9@b_7cxYik*}p z^GNvFN>lwyo?WPFT;6aQamJ`C?xEg++&vXXQ0$6u#$1@@D(PH|zTbqf)kc+WQ@p_9 z9ArGp=2cMeIUrKS5Tb~N>u|VA_JKECRk@fTXd?{Rs2Vm(mfG8brW-b~bx=YPu`DrG zB8O-x{@CrF1xPTJEtZaK^)IMfsp>1tinw5S^BOql7Zgm)9>|iFlL|1?R)GZU+;T0t zK-l0p_<%0;+)f*NA;XkK%$qaie5^Fp|P6m@>Rr!)N+<+Ix+Gs?IQ*w z0iibyJUW-hL!ya_4 zqY)|@8k82mx~3%**=MUO>&&6CEKYsI7%CpeqM~ct1NWplg?b^?4@qf4{70|p2&;oM z%moQsgJdNZ2ncX9W?02UUdvZlrYc=W7nugb*$G6$P0P7qplFqL4Pp5Xk>3eVhl2wwvh)u~lto|udzE-g?RIEj{5-YzA#Yk|}FM2Wp- zDgOXzp4ozlub`|${{R3#c8X&VT2u`arWtbzF^>~LAYa79TImBh5UAc8t7K|Zfq^eJ zh|FyXgQRI&x6jhT8pDy4#!$bVuxHcM&#B& z#ugpAsFv6I#3+=PX#x$mrQH{?L3KULF&+=<0fp-({ZvY`jV58_O<7vf>Dvga=q68D z^TJ+Nf-vwyZS4hi0@{!JiLO16wDkx@OE|yn4Xh^0Q#LNltq6+HNSO=Fe2uC|h>H-B?y0Aqc5@-hICXmz) zBQdivyMz@1PnQ1xP?oY;T}y$Il#OdTiOM4F)L-sb+SU9Cdi`+#?T*{~D3(FNAFBvS zz0g0InO}~YmI!jA8-P_&!7G=1YrHXSB4FVDBO!+sC~ec4`ZTCa>qOpFVw@~?jaO^& zSil|?5XFD}OvRs@Y(R`Ti|)m%`->ISrZdI?E+?YB>f zpG4p_28K)4Wq=TMQ<1uqkqXvs<1EM~8X!cRJop%#`NG-jfib%)GQ!Sdp`jbXa|SrU0~vnAPeIt?G(1LZV9G1V%sDhV zseN-$HZ1_V3WSJ1n02opUvS5|NRDs1DaR$_^1-Xj#{$qR!8zSu(F_`iWg=V~(!%hD zVig)kkj$&|Y#jSjVo^CQAux)}dJth_YN0PMohS^f!@+%`p)<{A$ROSi3d=9hcV?w% zQz6KO5Z6@>&ZU%@_XVya2+U($29^pnt(%BNzhm52QA=V6rCJ(o*j`y0gBX|75|^xw zBpvgoaFA{Az*NEJ&~B^Q+bCYG#(0#yG)pMj+CUl87}Ql;Jj+ZCnT(}ZisEt1OjkM> zqHUOiWzMNRL6%Y`=i8dxFJOTE&+T;M{I7d+#s*RfYhpoMP4F6sm>y4;D)cvT|w@^ z-IWa~k<1n(f`e(zlH53rC`GyO+zmA?CFZoZpQE4n3-N-l@Zwj_p>GI54@^3O9GQP8 z;0Cyl&ZRF3gn01<@$7Y<2tf{nQQHI!J~P1@VRm2&pbLV^Sopt*PqDcxfl|hs(e->l zs@m_Ul`IK-TbqN!D9P#15xaG(`R)X!%Se5&`Fn<=@etHBbssZ0Hbxk?s|zdki$@j* zq9fGqw+#3*Mi?aE?&VZM${K*cdzB~0XT{6#AU2Cst&j$#_T`MNfNqGW4o4qoq(@>Y zi~(z=6|HMhDHS`J8Td0jk>wb@&=5qlw5-$%mjH!Sq}6GHfXfB7T;C8PaRrIo15!hX zf-;At8@RemKy7)kRoie6vUmjHW={ve%mJ(EgwUbF;jm%3+8Df5tx8=4HTWh6piJF( zC^~{}!z!sj;mj{fp(&{8BjFN(Rxsd#Q}6CMxoS2?C3<3-dLjcVdLo!;c$O>&OEZae z#Cnuue8+YBW>7eA%q{@Z99X~5j?e+ST;dJFjr44&f24$<{{VoxJJUK4iluHPL91&L z4%4|^)5Hq-xN{55C){YVm{#0ql<9UdbXSPcLDN*>cZl?&-r({^h;G=Jov;o5pgjB> z7L{<^psZWtQvibME~31LqUiR8F?nCzm9ZE?_u6kbVvkK!UD|Qz@Jvc%!1ZzH`5RM; zMK&ok4_A4QV)<2#(Qt@@-h37KATg9gz^ z>+^5{NXocag-URQ+hi|b07JK3D81j9Zm4uz5qw)NpZ0^a2uAVpCk!vb2S>L zsJ7qYSZr<7weosPOJhfKC5w1s)u4Lr8(TvZ60mYw-adk|8$E7i4fM^4nVR93?Ee5a zlV_Cu+KgO{ikCi16%p+Yis0oHuyiW}vTxxgOfaIyXO_Fh#H#!`lo=)bGTAa>h$=nJ-ovWBB8X}TCR8SQTaNzX zorzrk0G}~v3qaVMm7#=nE6o}UTc4OH%B93EAXU5)_~mMt-SJB#7}ZXXJ|_NKYVPBx zC>lpZ7m1bq5xHnGTP%7aV#!#j4Z_duGVKFJ8ioWY!-i$VNYPKr=t3rW3@cU*s9HoY z7~0z@5E_i{yW9yds_h;aTGm}&Jiwqai~Ofobp0Y4RMg(G!qw5>VHyrp04`QHf&TzV z{{Uby9Cl;OH_a{!&7x}$D5K8BJ{WdVQF>t9 zv}?HOhaJk5a4~jx24gRmve!c^TU3YSsC;NwVDjXYe!*XBQaQo1&_@Z{2MrL5Xk>(tQZr3ZdKr>|7bDkLqs z*sN~m5ozK;sxpH62WJxCb+}LB0~Cisw=rJf^1ZFaHp4Znp}DU|xBxaST06{hT(qnu zzq^b4p)hWo{=kPQ6!qtYOtA$p3uBuvO$JH?d1!wB+!N!cznng*?iYBbK)&b!%8Q4j&W#xnLlZo~?^AHiRIMhyThwCe z7dpCDR$EjNRv<+PqQ8;=suWO1p)m346y$byLH5kK% zV`jo!4g0kyg4df&AZ;B*btn!ZAx{L+Vwav}jW9NrqCHcZwm1dYvoz_Dt6eyj6$msc z^na+#h4PjE05Bvx;-vE{m&3E1-=^WP1z-V2ogU?9Flc^pn_1mZ{hj4OC^C{9kneoh zr@;i8;7yQ*Eq>xvEGj&@5v9B$QQ};*COan$YUn>wXD~4s@Vq>}7}&vGehAaZLpVS* zUe&p+l?(`+y`?F$)xfr}h};(*68>TW+&pFEU?KdzAfZgE7=$9Ml(R=bQ zE6=e%b6j_o0wO16@U32Sm z@F6LiqL{y!!;DYS0&0b|gXR&!p0qp{9Cta&NeA~eRTU{-6htc^ z#dCEC*0(KBFdy17norn+qje8s-^H;5*dsCKUo_*yM>d{;`Ie22l{LOf9sjow%pyMYse< zP}}6h2ugBPRVmCe-FaMGugy#!X`lSZ{K_CWWKT5W<6(xdEl)lL(kh^NDW;+#R)Vhu zkjiBqCGt`+LZZw4mn@)n-4~27EI#HC&BWx$Acm|anBKDDQp`i{{FptG1ik}M4TOsn z*n=#2NXvvl{kI#(>fKzy8Y~C7Tmq?TrP_+nvgldT$@qXyWTM}QhSA(A&`e*Pge$4FfD{wm$%luqZ1zd6ExfpxJx8>js?m{ zbW4?gWn&kk3LxTM@s}#BAO8S%113i!E%7}je=rfelz=7LjXQUf@gD&0HS#!u(ybbL zq#IMlV~T-K`&CP|O|HCnU@gCHp2lXgAebfdww}I3B!`fr;^oU5n#4#{_W)*s$c3H} zC9UPk8~R|FGJz?eKwmXtTsda_?1EwO0TQ=NN}2M&+bRe48A@maOuQke zurk~pIE6{YK~O3I-zB4~mWk-Ns8VNu^Q7+3y-)-I@Cc@_F$z^HjcKuUDFjhe>K9F1 zTl;-Qqp&Il_S{X@@3LYNfQ9%q#D6Fluc$X;p_!LbF>s28`I=P=-W4J$9gPN92++Dz z3+`1hdJ|xe%=>>b%2#kUM^|)MuHGfMI2u$OD#kCw$Si&YEwLjd#siE2SXy1o-vkCL z)0p52zWIlr5HWcLhE31fDl2x{+zbVwcJ2Ti8Dq@FObiazY$=KF*h|cQKYd-Js3*Asb)L37*-3)H1Gmm_HtCe z-7Bj15_j$(qoJNj2!uq4mMP{nw7m=)fMy*r+Oloq;7NbRp%cY2%2&Tsuo_quOjRkf zWm+MjMdU7m6sQ19#%wrWd#RpDwbwGV7-@HDq+EdSVW`)}8(;aqlB>(*{D>dZe1tyUbS+<4`l%k|jqJ)kHGN z1~1^3(Jgq+rdB=ENI{_SaFQ%FUJK$^67~Vdk_Z~T!V3jJ0YT`f%Oj&_xuC4dYOq5= z0pg{vIdPa&rg0=4gPr8%P)oN=yxEtLU_#q>IKmJ^%n%FVShyeyd4Dk}!$$@CxaJfC zapd`hwmXw?Y17C|dnH3y?pD)qxb+-_%t}MlxUx36UTlS4eD~Z29Wb@~lrF0PwxcjZ zlgGJ+-Dn>IVH)67MOzw~u%-7J4R~7+!OPfVQs&{K5D@udIwc$?qGu87h~|-p%(b-4 zI0Dg_Xg$jmX)z`Z15FTH!^OLg0}GuZA5Rbp@}4jGbY)Z73Igoy&}{jNrFV%l-xrh+ z-jfR|$1=5-5O29`IRRU!@ew=6n@pP^MzYCTfu&GVy7Emn$lZs$&`aN} zTY4A+jj4?`rAzFE5#=jO?=q;khkbdnVrZc`d{sx)38g;f2wz%L^6DGd1rdU~cMJJ~ z8nxKZcx9k)YvD@lDhdaaG0Krbt%waex_N-3aT!^6_Beq{Qcb(6xL|qp4DxUbq%N&8 z)K2Sy7H`QIqT|XCZw;w3tg6*H%&yB-;7^*CvYI(hJzH!%7-5kG

    pnhDcR}qQFq- zI)ltWu^dbcsW05LM9`L>nA3V#_ zK%*-vR=ej0#9(Y5(fG*8?Y)D5b5 zE+Y-&&xjV0=w>usRZtMv=!*;~u8OE8NrhyTs93R=3Y?MIQHBS}(H5lpI-JTpq61}j z#IHc^8>^H7zIz~BjakP=Q~qFc1E_grOMAFEOVT&;INadGS<%UhIB1cQG4P6#&O#&x zx&S*Bi0vW=Da=l01ne986*9p803*`a8D=^6830iNoCz*i1=R#w!p(rg7zsV<1=<@Q zvuwj&uAp+}WPlC<;^I#Hn5)eZ!Xd0r%Luf=4kGHVz!d;FfQ5peh*ZWwJ-0>g=# zD(*FJVi+Een6%>Np59Zuwnn1^*)&`#butNgrsd(NVBN

    g9*ko1mktZ@JaWI{4} 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 + + + + + ); +} + +export default App; diff --git a/front-end-challenge/src/api/client.ts b/front-end-challenge/src/api/client.ts new file mode 100644 index 00000000..6e877078 --- /dev/null +++ b/front-end-challenge/src/api/client.ts @@ -0,0 +1,33 @@ +import axios from "axios"; + +const api = axios.create({ + baseURL: import.meta.env.VITE_BASE_URL_API_CLIENT, + timeout: 300000, + headers: { + "Content-Type": "application/json", + }, +}); + +api.interceptors.request.use( + (config) => { + return config; + }, + (error) => { + return Promise.reject(error); + }, +); + +api.interceptors.response.use( + (response) => { + return response; + }, + (error) => { + if (error.response?.status === 401) { + return Promise.reject(error); + } + console.error("Erro na resposta:", error.response?.status, error.message); + return Promise.reject(error); + }, +); + +export default api; diff --git a/front-end-challenge/src/components/layout/AsyncFallback/AsyncFallback.test.tsx b/front-end-challenge/src/components/layout/AsyncFallback/AsyncFallback.test.tsx new file mode 100644 index 00000000..b965ba58 --- /dev/null +++ b/front-end-challenge/src/components/layout/AsyncFallback/AsyncFallback.test.tsx @@ -0,0 +1,106 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; + +import AsyncFallback from "../AsyncFallback"; + +jest.mock("../../ui/Spinner", () => () =>
    ); +jest.mock( + "../FallbackContainer", + () => + ({ + className, + children, + }: { + className: string; + children: React.ReactNode; + }) => ( +
    + {children} +
    + ), +); + +describe("AsyncFallback component", () => { + it("renders children when not loading or error", () => { + render( + + Actual Content + , + ); + expect(screen.getByText("Actual Content")).toBeInTheDocument(); + expect(screen.queryByTestId("fallback")).toBeNull(); + }); + + it("renders errorContent inside FallbackContainer when isError is true", () => { + render( + + Child + , + ); + const fallback = screen.getByTestId("fallback"); + expect(fallback).toHaveClass("error-class"); + expect(fallback).toHaveTextContent("Custom Error"); + expect(screen.queryByText("Child")).toBeNull(); + }); + + it("uses default errorContent when isError and no errorContent provided", () => { + render( + + Child + , + ); + const fallback = screen.getByTestId("fallback"); + expect(fallback).toHaveTextContent("Ocorreu um erro"); + }); + + it("renders loadingContent inside FallbackContainer when isLoading is true and not error", () => { + render( + + Child + , + ); + const fallback = screen.getByTestId("fallback"); + expect(fallback).toHaveClass("load-class"); + expect(screen.getByTestId("spinner")).toBeInTheDocument(); + expect(screen.queryByText("Child")).toBeNull(); + }); + + it("uses custom loadingContent when provided", () => { + render( + Loading Now} + > + Child + , + ); + const fallback = screen.getByTestId("fallback"); + expect(fallback).toHaveTextContent("Loading Now"); + expect(screen.queryByText("Child")).toBeNull(); + }); + + it("matches snapshot for error state", () => { + const { asFragment } = render( + +
    Child
    +
    , + ); + expect(asFragment()).toMatchSnapshot(); + }); + + it("matches snapshot for loading state", () => { + const { asFragment } = render( + +
    Child
    +
    , + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/layout/AsyncFallback/__snapshots__/AsyncFallback.test.tsx.snap b/front-end-challenge/src/components/layout/AsyncFallback/__snapshots__/AsyncFallback.test.tsx.snap new file mode 100644 index 00000000..e1af7403 --- /dev/null +++ b/front-end-challenge/src/components/layout/AsyncFallback/__snapshots__/AsyncFallback.test.tsx.snap @@ -0,0 +1,23 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AsyncFallback component matches snapshot for error state 1`] = ` + +
    + Err +
    +
    +`; + +exports[`AsyncFallback component matches snapshot for loading state 1`] = ` + +
    +
    +
    + +`; diff --git a/front-end-challenge/src/components/layout/AsyncFallback/index.tsx b/front-end-challenge/src/components/layout/AsyncFallback/index.tsx new file mode 100644 index 00000000..3ed1d871 --- /dev/null +++ b/front-end-challenge/src/components/layout/AsyncFallback/index.tsx @@ -0,0 +1,34 @@ +import React from "react"; + +import Spinner from "../../ui/Spinner"; +import FallbackContainer from "../FallbackContainer"; +import type { AsyncFallbackProps } from "./types"; + +const AsyncFallback: React.FC = ({ + isLoading, + isError, + errorContent = "Ocorreu um erro", + loadingContent = , + children, + className, +}) => { + if (isLoading) { + return ( + + {loadingContent} + + ); + } + + if (isError) { + return ( + + {errorContent} + + ); + } + + return <>{children}; +}; + +export default AsyncFallback; diff --git a/front-end-challenge/src/components/layout/AsyncFallback/types.ts b/front-end-challenge/src/components/layout/AsyncFallback/types.ts new file mode 100644 index 00000000..e6944a79 --- /dev/null +++ b/front-end-challenge/src/components/layout/AsyncFallback/types.ts @@ -0,0 +1,8 @@ +export interface AsyncFallbackProps { + isLoading: boolean; + isError: boolean; + errorContent?: React.ReactNode; + loadingContent?: React.ReactNode; + children: React.ReactNode; + className?: string; +} diff --git a/front-end-challenge/src/components/layout/CTAButton/CTAButton.test.tsx b/front-end-challenge/src/components/layout/CTAButton/CTAButton.test.tsx new file mode 100644 index 00000000..e69de29b diff --git a/front-end-challenge/src/components/layout/CTAButton/index.tsx b/front-end-challenge/src/components/layout/CTAButton/index.tsx new file mode 100644 index 00000000..f7d3a152 --- /dev/null +++ b/front-end-challenge/src/components/layout/CTAButton/index.tsx @@ -0,0 +1,35 @@ +import ArrowForwardIosIcon from "@mui/icons-material/ArrowForwardIos"; +import clsx from "clsx"; +import { motion } from "framer-motion"; + +import type { CTAButtonProps } from "./types"; + +export function CTAButton({ href, text, className }: CTAButtonProps) { + return ( +
    + {text} + + + + + ); +} diff --git a/front-end-challenge/src/components/layout/CTAButton/types.ts b/front-end-challenge/src/components/layout/CTAButton/types.ts new file mode 100644 index 00000000..6c43282b --- /dev/null +++ b/front-end-challenge/src/components/layout/CTAButton/types.ts @@ -0,0 +1,5 @@ +export interface CTAButtonProps { + href: string; + text: string; + className?: string; +} diff --git a/front-end-challenge/src/components/layout/CardItems/index.tsx b/front-end-challenge/src/components/layout/CardItems/index.tsx new file mode 100644 index 00000000..c4e0551b --- /dev/null +++ b/front-end-challenge/src/components/layout/CardItems/index.tsx @@ -0,0 +1,96 @@ +import { FaArrowRightLong } from "react-icons/fa6"; +import { useNavigate } from "react-router-dom"; + +import type { Post } from "../../../types/Post"; +import { formatDateTimeWithRelative } from "../../../utils/generics/formatDate"; +import Image from "../../ui/Img"; +import { Link } from "../../ui/Link"; + +function CardItems(post: Post) { + const media = post.mediaUrl || ""; + const navigate = useNavigate(); + + const handleClick = () => { + navigate(`/post/${post.slug}`); + }; + + return ( +
    + {post.title} + +
    +

    + +
    +

    + {formatDateTimeWithRelative(post.date)} +

    + + Ler mais + +
    +

    +
    + ); +} + +export default CardItems; diff --git a/front-end-challenge/src/components/layout/FallbackContainer/FallbackContainer.test.tsx b/front-end-challenge/src/components/layout/FallbackContainer/FallbackContainer.test.tsx new file mode 100644 index 00000000..783e5500 --- /dev/null +++ b/front-end-challenge/src/components/layout/FallbackContainer/FallbackContainer.test.tsx @@ -0,0 +1,51 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; + +import FallbackContainer from "."; + +describe("FallbackContainer component", () => { + it("renders a div with default classes and children", () => { + render( + + Content + , + ); + const container = screen.getByText("Content").parentElement; + expect(container).toBeInTheDocument(); + expect(container?.tagName).toBe("DIV"); + [ + "h-[518px]", + "lg:h-[70vh]", + "overflow-hidden", + "rounded-2xl", + "border", + "border-slate-700/60", + "flex", + "items-center", + "justify-center", + ].forEach((cls) => { + expect(container).toHaveClass(cls); + }); + }); + + it("merges a custom className prop", () => { + render( + +

    Test

    +
    , + ); + const container = screen.getByText("Test").parentElement; + expect(container).toHaveClass("extra-class"); + expect(container).toHaveClass("another-class"); + }); + + it("matches snapshot", () => { + const { asFragment } = render( + +
    Snap
    +
    , + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/layout/FallbackContainer/__snapshots__/FallbackContainer.test.tsx.snap b/front-end-challenge/src/components/layout/FallbackContainer/__snapshots__/FallbackContainer.test.tsx.snap new file mode 100644 index 00000000..dccdf3de --- /dev/null +++ b/front-end-challenge/src/components/layout/FallbackContainer/__snapshots__/FallbackContainer.test.tsx.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FallbackContainer component matches snapshot 1`] = ` + +
    +
    + Snap +
    +
    +
    +`; diff --git a/front-end-challenge/src/components/layout/FallbackContainer/index.tsx b/front-end-challenge/src/components/layout/FallbackContainer/index.tsx new file mode 100644 index 00000000..ef77291a --- /dev/null +++ b/front-end-challenge/src/components/layout/FallbackContainer/index.tsx @@ -0,0 +1,21 @@ +import clsx from "clsx"; +import React from "react"; + +import type { FallbackContainerProps } from "./types"; + +const FallbackContainer: React.FC = ({ + className, + children, +}) => ( +
    + {children} +
    +); + +export default FallbackContainer; diff --git a/front-end-challenge/src/components/layout/FallbackContainer/types.ts b/front-end-challenge/src/components/layout/FallbackContainer/types.ts new file mode 100644 index 00000000..df5d739a --- /dev/null +++ b/front-end-challenge/src/components/layout/FallbackContainer/types.ts @@ -0,0 +1,4 @@ +export interface FallbackContainerProps { + className?: string; + children: React.ReactNode; +} diff --git a/front-end-challenge/src/components/layout/LinkCard/LinkCard.test.tsx b/front-end-challenge/src/components/layout/LinkCard/LinkCard.test.tsx new file mode 100644 index 00000000..e69de29b diff --git a/front-end-challenge/src/components/layout/LinkCard/index.tsx b/front-end-challenge/src/components/layout/LinkCard/index.tsx new file mode 100644 index 00000000..e342d7a6 --- /dev/null +++ b/front-end-challenge/src/components/layout/LinkCard/index.tsx @@ -0,0 +1,34 @@ +import clsx from "clsx"; +import { useNavigate } from "react-router-dom"; + +import type { LinkCardProps } from "./types"; + +export function LinkCard({ + href, + title, + icon, + className, + target, + ...props +}: LinkCardProps) { + const navigate = useNavigate(); + + return ( + + ); +} diff --git a/front-end-challenge/src/components/layout/LinkCard/types.ts b/front-end-challenge/src/components/layout/LinkCard/types.ts new file mode 100644 index 00000000..d7791ca1 --- /dev/null +++ b/front-end-challenge/src/components/layout/LinkCard/types.ts @@ -0,0 +1,7 @@ +export interface LinkCardProps { + href: string; + title: string; + icon?: React.ReactNode; + className?: string; + target?: string; +} diff --git a/front-end-challenge/src/components/layout/MainNews/index.tsx b/front-end-challenge/src/components/layout/MainNews/index.tsx new file mode 100644 index 00000000..8f1c94bb --- /dev/null +++ b/front-end-challenge/src/components/layout/MainNews/index.tsx @@ -0,0 +1,36 @@ +import { useNavigate } from "react-router-dom"; + +import type { Post } from "../../../types/Post"; +import { formatDateTimeWithRelative } from "../../../utils/generics/formatDate"; +import Image from "../../ui/Img"; + +function MainNews(post: Post) { + const media = post.mediaUrl; + const navigate = useNavigate(); + + const handleClick = () => { + navigate(`/post/${post.slug}`); + }; + + return ( +
    + {media && ( + {post.title} + )} +

    +

    {formatDateTimeWithRelative(post.date)}

    +

    + ); +} + +export default MainNews; diff --git a/front-end-challenge/src/components/layout/ProfileCard/index.tsx b/front-end-challenge/src/components/layout/ProfileCard/index.tsx new file mode 100644 index 00000000..7277cf87 --- /dev/null +++ b/front-end-challenge/src/components/layout/ProfileCard/index.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import { FaGithub, FaLinkedin, FaWhatsapp } from "react-icons/fa6"; + +import { hrefLinks } from "../../../utils/const/socialLinks"; +import Image from "../../ui/Img"; + +export interface ProfileCardProps { + imageUrl: string; + name: string; + description: string; +} + +export const ProfileCard: React.FC = ({ + imageUrl, + name, + description, +}) => { + const socialLinks = [ + { href: hrefLinks.hrefLinkedin, icon: }, + { href: hrefLinks.hrefGitHub, icon: }, + { href: hrefLinks.hrefWhatsApp, icon: }, + ]; + + return ( +
    +
    +
    + {name} +
    + +

    {name}

    +
    +
    +
    + +
    + + Conecte-se comigo nas redes sociais + +
    + {socialLinks.map((link, index) => ( + + {link.icon} + + ))} +
    +
    +
    + ); +}; + +export default ProfileCard; diff --git a/front-end-challenge/src/components/layout/Title/Title.test.tsx b/front-end-challenge/src/components/layout/Title/Title.test.tsx new file mode 100644 index 00000000..9e6efa54 --- /dev/null +++ b/front-end-challenge/src/components/layout/Title/Title.test.tsx @@ -0,0 +1,43 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; + +import Title from "../Title"; + +describe("Title component", () => { + it("renders an h1 element with the provided title text", () => { + render(); + const heading = screen.getByRole("heading", { + level: 1, + name: "My Page Title", + }); + expect(heading).toBeInTheDocument(); + }); + + it("applies the default classes", () => { + render(<Title title="Default Classes" />); + const heading = screen.getByText("Default Classes"); + expect(heading).toHaveClass( + "text-base", + "font-semibold", + "tracking-wide", + "font-poppins", + "color-light", + ); + }); + + it("merges a custom className when provided", () => { + render( + <Title title="Custom Class" className="extra-class another-class" />, + ); + const heading = screen.getByText("Custom Class"); + expect(heading).toHaveClass("extra-class", "another-class"); + }); + + it("matches snapshot", () => { + const { asFragment } = render( + <Title title="Snapshot Title" className="snapshot-class" />, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/layout/Title/__snapshots__/Title.test.tsx.snap b/front-end-challenge/src/components/layout/Title/__snapshots__/Title.test.tsx.snap new file mode 100644 index 00000000..230fc01d --- /dev/null +++ b/front-end-challenge/src/components/layout/Title/__snapshots__/Title.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Title component matches snapshot 1`] = ` +<DocumentFragment> + <h1 + class="text-base font-semibold tracking-wide font-poppins color-light snapshot-class" + > + Snapshot Title + </h1> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/layout/Title/index.tsx b/front-end-challenge/src/components/layout/Title/index.tsx new file mode 100644 index 00000000..db295f27 --- /dev/null +++ b/front-end-challenge/src/components/layout/Title/index.tsx @@ -0,0 +1,18 @@ +import clsx from "clsx"; + +import type { TitlePageProps } from "./types"; + +function Title({ title, className }: TitlePageProps) { + return ( + <h1 + className={clsx( + "text-base font-semibold tracking-wide font-poppins color-light", + className, + )} + > + {title} + </h1> + ); +} + +export default Title; diff --git a/front-end-challenge/src/components/layout/Title/types.ts b/front-end-challenge/src/components/layout/Title/types.ts new file mode 100644 index 00000000..69d45cfc --- /dev/null +++ b/front-end-challenge/src/components/layout/Title/types.ts @@ -0,0 +1,4 @@ +export type TitlePageProps = { + title: string; + className?: string; +}; diff --git a/front-end-challenge/src/components/ui/Button/Button.test.tsx b/front-end-challenge/src/components/ui/Button/Button.test.tsx new file mode 100644 index 00000000..db22110b --- /dev/null +++ b/front-end-challenge/src/components/ui/Button/Button.test.tsx @@ -0,0 +1,51 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; + +import Button from "../Button"; + +describe("Button component – testes adicionais", () => { + it("fica desabilitado quando `disabled` é true e não dispara onClick", () => { + const handleClick = jest.fn(); + render( + <Button disabled onClick={handleClick}> + Não posso + </Button>, + ); + const btn = screen.getByRole("button", { name: /não posso/i }); + expect(btn).toBeDisabled(); + fireEvent.click(btn); + expect(handleClick).not.toHaveBeenCalled(); + }); + + it("usa `type='button'` por padrão e permite sobrescrever para `submit`", () => { + render(<Button>Default</Button>); + expect(screen.getByRole("button")).toHaveAttribute("type", "button"); + + render(<Button type="submit">Enviar</Button>); + expect(screen.getByRole("button", { name: /enviar/i })).toHaveAttribute( + "type", + "submit", + ); + }); + + it("propaga atributos HTML arbitrários (`aria-label`, `data-*`, etc.)", () => { + render( + <Button aria-label="Fechar diálogo" data-testid="btn-123"> + X + </Button>, + ); + const btn = screen.getByTestId("btn-123"); + expect(btn).toHaveAttribute("aria-label", "Fechar diálogo"); + expect(btn).toHaveTextContent("X"); + }); + + it("combina com o snapshot", () => { + const { asFragment } = render( + <Button variant="tertiary" size="sm"> + Snap + </Button>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Button/__snapshots__/Button.test.tsx.snap b/front-end-challenge/src/components/ui/Button/__snapshots__/Button.test.tsx.snap new file mode 100644 index 00000000..e93c2f8e --- /dev/null +++ b/front-end-challenge/src/components/ui/Button/__snapshots__/Button.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Button component – testes adicionais combina com o snapshot 1`] = ` +<DocumentFragment> + <button + class="rounded-lg font-medium focus:outline-none focus-visible:ring text-poppins bg-tertiary text-light hover:bg-tertiary/80 focus-visible:ring-tertiary/60 px-3 py-1 text-sm" + type="button" + > + Snap + </button> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Button/index.tsx b/front-end-challenge/src/components/ui/Button/index.tsx new file mode 100644 index 00000000..d1f30f5d --- /dev/null +++ b/front-end-challenge/src/components/ui/Button/index.tsx @@ -0,0 +1,38 @@ +import clsx from "clsx"; + +import type { ButtonProps } from "./types"; + +export default function Button({ + variant = "primary", + size = "md", + type = "button", + className, + children, + ...props +}: ButtonProps) { + const base = + "rounded-lg font-medium focus:outline-none focus-visible:ring text-poppins"; + const variants: Record<string, string> = { + primary: + "bg-primary text-light hover:bg-primary/80 focus-visible:ring-primary/60", + secondary: + "bg-secondary text-light hover:bg-secondary/80 focus-visible:ring-secondary/60", + tertiary: + "bg-tertiary text-light hover:bg-tertiary/80 focus-visible:ring-tertiary/60", + }; + const sizes: Record<string, string> = { + sm: "px-3 py-1 text-sm", + md: "px-5 py-1.5 text-sm", + lg: "px-6 py-2 text-base", + }; + + return ( + <button + type={type} + className={clsx(base, variants[variant], sizes[size], className)} + {...props} + > + {children} + </button> + ); +} diff --git a/front-end-challenge/src/components/ui/Button/types.ts b/front-end-challenge/src/components/ui/Button/types.ts new file mode 100644 index 00000000..eb276d22 --- /dev/null +++ b/front-end-challenge/src/components/ui/Button/types.ts @@ -0,0 +1,7 @@ +import type { ButtonHTMLAttributes, ReactNode } from "react"; + +export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> { + variant?: "primary" | "secondary" | "tertiary"; + size?: "sm" | "md" | "lg"; + children: ReactNode; +} diff --git a/front-end-challenge/src/components/ui/CheckBox/index.tsx b/front-end-challenge/src/components/ui/CheckBox/index.tsx new file mode 100644 index 00000000..03e3196e --- /dev/null +++ b/front-end-challenge/src/components/ui/CheckBox/index.tsx @@ -0,0 +1,33 @@ +import { clsx } from "clsx"; +import { forwardRef, type InputHTMLAttributes } from "react"; + +interface CheckboxProps extends InputHTMLAttributes<HTMLInputElement> { + label: string; + id: string; +} + +const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>( + ({ id, label, className, ...props }, ref) => { + return ( + <div className={clsx("flex items-center gap-2", className)}> + <input + type="checkbox" + id={id} + ref={ref} + className="accent-blue-600 w-4 h-4 cursor-pointer" + {...props} + /> + <label + htmlFor={id} + className="text-sm text-white cursor-pointer select-none" + > + {label} + </label> + </div> + ); + }, +); + +Checkbox.displayName = "Checkbox"; + +export default Checkbox; diff --git a/front-end-challenge/src/components/ui/Footer/Footer.test.tsx b/front-end-challenge/src/components/ui/Footer/Footer.test.tsx new file mode 100644 index 00000000..e69de29b diff --git a/front-end-challenge/src/components/ui/Footer/index.tsx b/front-end-challenge/src/components/ui/Footer/index.tsx new file mode 100644 index 00000000..8e86b48d --- /dev/null +++ b/front-end-challenge/src/components/ui/Footer/index.tsx @@ -0,0 +1,86 @@ +import clsx from "clsx"; +import React from "react"; +import { v4 as uuidv4 } from "uuid"; + +import Image from "../Img"; + +const Footer = ({ + logo, + sections = [], + socialLinks = [], + className = "", +}: { + logo?: React.ReactNode; + sections?: { + title?: string; + links: { label: string; href: string }[]; + }[]; + socialLinks?: { href: string; icon: React.ReactNode }[]; + className?: string; +}) => { + return ( + <footer className={clsx("w-full bg-secondary text-dark py-8", className)}> + <div className="container mx-auto px-4 md:px-12 flex flex-col md:flex-row justify-between items-center"> + {logo && ( + <div + className="mb-6 md:mb-0 flex items-center cursor-pointer" + onClick={() => { + window.location.href = "/"; + }} + > + {typeof logo === "string" ? ( + <Image + src={logo} + alt="Logo" + className=" w-24 h-24 md:w-50 md:h-50 lg:w-50 lg:h-50 object-fit rounded-full" + /> + ) : ( + logo + )} + <div className="flex flex-col items-center"> + <h1 className="ml-4 font-bold text-xl">Geferson Lopes</h1> + <h3 className="ml-4 font-medium text-lg">Desenvolvedor Web</h3> + </div> + </div> + )} + + <div className="grid grid-cols-2 sm:grid-cols-2 gap-8 mb-6 md:mb-0 space-x-4"> + {sections.map((section) => ( + <div key={uuidv4()}> + {section.title && ( + <h3 className="font-semibold mb-4">{section.title}</h3> + )} + <ul> + {section.links.map((link) => ( + <li key={uuidv4()} className="mb-2"> + <a href={link.href} className="hover:underline"> + {link.label} + </a> + </li> + ))} + </ul> + </div> + ))} + </div> + + {socialLinks.length > 0 && ( + <div className="flex space-x-1 items-center"> + {socialLinks.map((social) => ( + <a + key={uuidv4()} + href={social.href} + target="_blank" + rel="noopener noreferrer" + className="hover:text-gray-400" + > + {social.icon} + </a> + ))} + </div> + )} + </div> + </footer> + ); +}; + +export default Footer; diff --git a/front-end-challenge/src/components/ui/Footer/types.ts b/front-end-challenge/src/components/ui/Footer/types.ts new file mode 100644 index 00000000..18116516 --- /dev/null +++ b/front-end-challenge/src/components/ui/Footer/types.ts @@ -0,0 +1,7 @@ +import type { ReactNode } from "react"; + +export interface HeaderProps { + title: string; + children?: ReactNode; + className?: string; +} diff --git a/front-end-challenge/src/components/ui/Header/Header.test.tsx b/front-end-challenge/src/components/ui/Header/Header.test.tsx new file mode 100644 index 00000000..e69de29b diff --git a/front-end-challenge/src/components/ui/Header/index.tsx b/front-end-challenge/src/components/ui/Header/index.tsx new file mode 100644 index 00000000..b4baa035 --- /dev/null +++ b/front-end-challenge/src/components/ui/Header/index.tsx @@ -0,0 +1,136 @@ +import { Menu, X } from "lucide-react"; +import { useState } from "react"; + +import Button from "../Button"; + +const Header = () => { + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + const links = [ + { label: "Início", href: "/", current: true }, + { label: "Story", href: "/story", current: false }, + { label: "Menu", href: "/menu", current: false }, + { label: "Espaço", href: "/space", current: false }, + { label: "Comunidade", href: "/community", current: false }, + { label: "Notícias", href: "/news", current: false }, + ]; + + return ( + <header className="w-full relative mb-10"> + <a + href="#main-content" + className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 bg-white px-2 py-1 rounded-md text-sm font-medium" + > + Pular para o conteúdo + </a> + + <nav + className="w-full bg-white py-4 shadow-sm" + aria-label="Menu de navegação principal" + > + <div className="max-w-6xl mx-auto flex items-center justify-between px-6"> + <h1 className="text-2xl font-bold text-gray-900"> + <a + href="/" + className="inline-flex items-center focus:outline-none focus:ring-2 focus:ring-amber-700" + > + Apiki + <span className="text-amber-700 ml-1">Geferson</span> + </a> + </h1> + + <ul className="hidden md:flex items-center space-x-4 lg:space-x-8 text-gray-600"> + {links.map(({ label, href, current }) => ( + <li key={label}> + <a + href={href} + className="transition-colors focus:outline-none focus:ring-2 focus:ring-amber-700" + aria-current={current ? "page" : undefined} + > + {label} + </a> + </li> + ))} + </ul> + + <div className="flex items-center space-x-4"> + <Button + type="button" + className="py-2 px-5 rounded-none hidden lg:inline-block" + > + Ordem + </Button> + <Button + type="button" + className="!bg-transparent border border-primary !text-primary py-2 px-5 rounded-none hidden md:inline-block" + > + Entrar + </Button> + + <button + onClick={() => setMobileMenuOpen((o) => !o)} + aria-controls="mobile-menu" + aria-expanded={mobileMenuOpen} + className="md:hidden p-2 rounded-md focus:outline-none focus:ring-2 focus:ring-amber-700" + > + {mobileMenuOpen ? ( + <X color="black" size={24} /> + ) : ( + <Menu color="black" size={24} /> + )} + </button> + </div> + </div> + + <div + id="mobile-menu" + className={` + fixed inset-0 z-50 bg-white md:hidden + transform ${mobileMenuOpen ? "translate-x-0" : "translate-x-full"} + transition-transform duration-300 ease-in-out + `} + aria-hidden={!mobileMenuOpen} + > + <div className="flex justify-end p-4"> + <button + onClick={() => setMobileMenuOpen(false)} + className="p-2 rounded-md focus:outline-none focus:ring-2 focus:ring-amber-700" + aria-label="Fechar menu" + > + <X size={24} color="black" /> + </button> + </div> + <ul className="flex flex-col space-y-2 px-6 pt-4 pb-2 text-gray-600"> + {links.map(({ label, href, current }) => ( + <li key={label}> + <a + href={href} + className="block py-2 transition-colors focus:outline-none focus:ring-2 focus:ring-amber-700" + aria-current={current ? "page" : undefined} + > + {label} + </a> + </li> + ))} + </ul> + <div className="flex flex-col space-y-2 px-6 pb-4"> + <a + href="/order" + className="block text-center bg-amber-700 text-white py-2 px-5 rounded-md focus:outline-none focus:ring-2 focus:ring-amber-700" + > + Ordem + </a> + <a + href="/login" + className="block text-center border border-amber-700 text-amber-700 py-2 px-5 rounded-md focus:outline-none focus:ring-2 focus:ring-amber-700" + > + Entrar + </a> + </div> + </div> + </nav> + </header> + ); +}; + +export default Header; diff --git a/front-end-challenge/src/components/ui/Header/types.ts b/front-end-challenge/src/components/ui/Header/types.ts new file mode 100644 index 00000000..18116516 --- /dev/null +++ b/front-end-challenge/src/components/ui/Header/types.ts @@ -0,0 +1,7 @@ +import type { ReactNode } from "react"; + +export interface HeaderProps { + title: string; + children?: ReactNode; + className?: string; +} diff --git a/front-end-challenge/src/components/ui/Img/index.tsx b/front-end-challenge/src/components/ui/Img/index.tsx new file mode 100644 index 00000000..fc4a88eb --- /dev/null +++ b/front-end-challenge/src/components/ui/Img/index.tsx @@ -0,0 +1,40 @@ +import React, { type ImgHTMLAttributes, useState } from "react"; + +export interface ImageProps extends ImgHTMLAttributes<HTMLImageElement> { + src: string; + alt: string; + className?: string; + fallbackSrc?: string; +} + +export const Image: React.FC<ImageProps> = ({ + src, + alt, + className, + fallbackSrc = "/assets/img/placeholder.png", + onError, + loading = "lazy", + ...rest +}) => { + const [currentSrc, setCurrentSrc] = useState(src || fallbackSrc); + + const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => { + if (fallbackSrc && currentSrc !== fallbackSrc) { + setCurrentSrc(fallbackSrc); + } + if (onError) onError(e); + }; + + return ( + <img + src={currentSrc} + alt={alt} + loading={loading} + className={className} + onError={handleError} + {...rest} + /> + ); +}; + +export default Image; diff --git a/front-end-challenge/src/components/ui/Input/index.tsx b/front-end-challenge/src/components/ui/Input/index.tsx new file mode 100644 index 00000000..555b6229 --- /dev/null +++ b/front-end-challenge/src/components/ui/Input/index.tsx @@ -0,0 +1,42 @@ +import clsx from "clsx"; +import { forwardRef, type InputHTMLAttributes } from "react"; + +export type InputProps = InputHTMLAttributes<HTMLInputElement> & { + size?: "sm" | "md" | "lg"; + label?: string; + error?: string; +}; + +const Input = forwardRef<HTMLInputElement, InputProps>( + ({ type = "text", size = "md", className, label, error, ...props }, ref) => { + const sizeClasses: Record<string, string> = { + sm: "h-7 w-40 md:w-56", + md: "h-9 w-56 md:w-72", + lg: "h-11 w-72 md:w-96", + }; + + return ( + <> + <label className="text-white text-sm mb-[-12px]">{label}</label> + <input + ref={ref} + type={type} + className={clsx( + "rounded-md border border-[#8A939D] bg-transparent", + "px-3 text-sm font-inter placeholder:text-[#8A939D]", + "placeholder:font-light placeholder:text-xs", + "placeholder:text-inter focus:border-cyan-600", + "focus:outline-none focus:ring-1 focus:ring-cyan-500", + sizeClasses[size], + className, + )} + {...props} + /> + <span className="text-red-500 text-sm mt-[-15px]">{error}</span> + </> + ); + }, +); + +Input.displayName = "Input"; +export default Input; diff --git a/front-end-challenge/src/components/ui/Link/Link.test.tsx b/front-end-challenge/src/components/ui/Link/Link.test.tsx new file mode 100644 index 00000000..ab6e47d5 --- /dev/null +++ b/front-end-challenge/src/components/ui/Link/Link.test.tsx @@ -0,0 +1,86 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; + +import { Link } from "."; + +describe("Link component", () => { + it("renderiza o texto passado como children e usa role=‘link’", () => { + render(<Link href="/home">Home</Link>); + const link = screen.getByRole("link", { name: /home/i }); + expect(link).toBeInTheDocument(); + expect(link).toHaveTextContent("Home"); + }); + + it("aplica as classes padrão `text-white underline underline-offset-3`", () => { + render(<Link href="/about">Sobre</Link>); + const link = screen.getByRole("link", { name: /sobre/i }); + expect(link).toHaveClass("text-white", "underline", "underline-offset-3"); + }); + + it("mescla uma `className` extra sem remover as classes padrão", () => { + render( + <Link href="/extra" className="minha-classe destaque"> + Extra + </Link>, + ); + const link = screen.getByRole("link", { name: /extra/i }); + expect(link).toHaveClass("text-white", "underline", "underline-offset-3"); + expect(link).toHaveClass("minha-classe", "destaque"); + }); + + it("atribui corretamente o atributo `href`", () => { + render(<Link href="https://exemplo.com">Visitar</Link>); + const link = screen.getByRole("link", { name: /visitar/i }); + expect(link).toHaveAttribute("href", "https://exemplo.com"); + }); + + it("propaga props arbitrários (`target`, `rel`, `aria-label`, `data-*`)", () => { + render( + <Link + href="#!" + target="_blank" + rel="noopener noreferrer" + aria-label="Fechar" + data-testid="link-test" + > + X + </Link>, + ); + const link = screen.getByTestId("link-test"); + expect(link).toHaveAttribute("target", "_blank"); + expect(link).toHaveAttribute("rel", "noopener noreferrer"); + expect(link).toHaveAttribute("aria-label", "Fechar"); + }); + + it("dispara onClick quando clicado", () => { + const handleClick = jest.fn(); + render( + <Link href="#!" onClick={handleClick}> + Clique + </Link>, + ); + fireEvent.click(screen.getByRole("link", { name: /clique/i })); + expect(handleClick).toHaveBeenCalledTimes(1); + }); + + it("preserva elementos complexos passados como children", () => { + render( + <Link href="/composto"> + <strong>Importante</strong> Texto + </Link>, + ); + const strong = screen.getByText("Importante"); + expect(strong.tagName).toBe("STRONG"); + expect(screen.getByRole("link")).toHaveTextContent("Importante Texto"); + }); + + it("combina com o snapshot", () => { + const { asFragment } = render( + <Link href="/snap" className="abc"> + <em>S</em>nap + </Link>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Link/__snapshots__/Link.test.tsx.snap b/front-end-challenge/src/components/ui/Link/__snapshots__/Link.test.tsx.snap new file mode 100644 index 00000000..c403d19d --- /dev/null +++ b/front-end-challenge/src/components/ui/Link/__snapshots__/Link.test.tsx.snap @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Link component combina com o snapshot 1`] = ` +<DocumentFragment> + <a + class="text-white underline underline-offset-3 abc" + href="/snap" + > + <em> + S + </em> + nap + </a> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Link/index.tsx b/front-end-challenge/src/components/ui/Link/index.tsx new file mode 100644 index 00000000..b9b06e80 --- /dev/null +++ b/front-end-challenge/src/components/ui/Link/index.tsx @@ -0,0 +1,21 @@ +// src/components/ui/Link.tsx +import clsx from "clsx"; +import React from "react"; +import { Link as RouterLink } from "react-router-dom"; + +import type { LinkProps } from "./types"; + +export const Link: React.FC<LinkProps> = ({ + href, + children, + className, + ...rest +}) => ( + <RouterLink + to={href} + className={clsx("text-primary underline underline-offset-3", className)} + {...rest} + > + {children} + </RouterLink> +); diff --git a/front-end-challenge/src/components/ui/Link/types.ts b/front-end-challenge/src/components/ui/Link/types.ts new file mode 100644 index 00000000..bbc01c67 --- /dev/null +++ b/front-end-challenge/src/components/ui/Link/types.ts @@ -0,0 +1,5 @@ +export interface LinkProps + extends React.AnchorHTMLAttributes<HTMLAnchorElement> { + href: string; + children: React.ReactNode; +} diff --git a/front-end-challenge/src/components/ui/List/List.test.tsx b/front-end-challenge/src/components/ui/List/List.test.tsx new file mode 100644 index 00000000..db22110b --- /dev/null +++ b/front-end-challenge/src/components/ui/List/List.test.tsx @@ -0,0 +1,51 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; + +import Button from "../Button"; + +describe("Button component – testes adicionais", () => { + it("fica desabilitado quando `disabled` é true e não dispara onClick", () => { + const handleClick = jest.fn(); + render( + <Button disabled onClick={handleClick}> + Não posso + </Button>, + ); + const btn = screen.getByRole("button", { name: /não posso/i }); + expect(btn).toBeDisabled(); + fireEvent.click(btn); + expect(handleClick).not.toHaveBeenCalled(); + }); + + it("usa `type='button'` por padrão e permite sobrescrever para `submit`", () => { + render(<Button>Default</Button>); + expect(screen.getByRole("button")).toHaveAttribute("type", "button"); + + render(<Button type="submit">Enviar</Button>); + expect(screen.getByRole("button", { name: /enviar/i })).toHaveAttribute( + "type", + "submit", + ); + }); + + it("propaga atributos HTML arbitrários (`aria-label`, `data-*`, etc.)", () => { + render( + <Button aria-label="Fechar diálogo" data-testid="btn-123"> + X + </Button>, + ); + const btn = screen.getByTestId("btn-123"); + expect(btn).toHaveAttribute("aria-label", "Fechar diálogo"); + expect(btn).toHaveTextContent("X"); + }); + + it("combina com o snapshot", () => { + const { asFragment } = render( + <Button variant="tertiary" size="sm"> + Snap + </Button>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/List/animation.ts b/front-end-challenge/src/components/ui/List/animation.ts new file mode 100644 index 00000000..a94137e3 --- /dev/null +++ b/front-end-challenge/src/components/ui/List/animation.ts @@ -0,0 +1,13 @@ +export const containerAnimation = { + hidden: {}, + visible: { + transition: { + staggerChildren: 0.15, + }, + }, +}; + +export const itemAnimation = { + hidden: { opacity: 0, y: 20 }, + visible: { opacity: 1, y: 0, transition: { duration: 0.5 } }, +}; diff --git a/front-end-challenge/src/components/ui/List/index.tsx b/front-end-challenge/src/components/ui/List/index.tsx new file mode 100644 index 00000000..960561cb --- /dev/null +++ b/front-end-challenge/src/components/ui/List/index.tsx @@ -0,0 +1,40 @@ +import clsx from "clsx"; +import { motion } from "framer-motion"; +import type { HTMLAttributes, ReactNode } from "react"; +import { v4 as uuidv4 } from "uuid"; + +import { containerAnimation, itemAnimation } from "./animation"; + +type ListProps<T> = { + items: T[]; + className?: string; + children: (item: T, index: number) => ReactNode; +} & Omit<HTMLAttributes<HTMLUListElement>, "children">; + +export function List<T>({ + items, + className, + children, + ...props +}: ListProps<T>) { + return ( + <ul className={clsx("mt-8 w-full px-4 space-y-4", className)} {...props}> + <motion.div + variants={containerAnimation} + initial="hidden" + animate="visible" + className="flex flex-col gap-4 w-full" + > + {items.map((item, idx) => ( + <motion.li + key={uuidv4()} + variants={itemAnimation} + className="flex items-center justify-center" + > + {children(item, idx)} + </motion.li> + ))} + </motion.div> + </ul> + ); +} diff --git a/front-end-challenge/src/components/ui/List/types.ts b/front-end-challenge/src/components/ui/List/types.ts new file mode 100644 index 00000000..eb276d22 --- /dev/null +++ b/front-end-challenge/src/components/ui/List/types.ts @@ -0,0 +1,7 @@ +import type { ButtonHTMLAttributes, ReactNode } from "react"; + +export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> { + variant?: "primary" | "secondary" | "tertiary"; + size?: "sm" | "md" | "lg"; + children: ReactNode; +} diff --git a/front-end-challenge/src/components/ui/Radio/Radio.test.tsx b/front-end-challenge/src/components/ui/Radio/Radio.test.tsx new file mode 100644 index 00000000..09bc2943 --- /dev/null +++ b/front-end-challenge/src/components/ui/Radio/Radio.test.tsx @@ -0,0 +1,89 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; + +import Radio from "../Radio"; + +describe("Radio component", () => { + const baseProps = { + id: "radio-1", + name: "group", + value: "val1", + label: "Opção 1", + onChange: () => {}, + }; + + it("renderiza o input radio com os atributos corretos e a classe sr-only", () => { + render(<Radio {...baseProps} />); + const input = screen.getByRole("radio", { name: /opção 1/i }); + expect(input).toBeInTheDocument(); + expect(input).toHaveAttribute("type", "radio"); + expect(input).toHaveAttribute("id", baseProps.id); + expect(input).toHaveAttribute("name", baseProps.name); + expect(input).toHaveAttribute("value", baseProps.value); + expect(input).toHaveClass("sr-only"); + }); + + it("renderiza o label apontando para o input e exibindo o texto", () => { + render(<Radio {...baseProps} />); + const label = screen.getByText(baseProps.label); + expect(label).toBeInTheDocument(); + expect(label.closest("label")).toHaveAttribute("for", baseProps.id); + }); + + it("envolve tudo em um container com as classes flex e gap e aceita className extra", () => { + render(<Radio {...baseProps} className="minha-classe" />); + const input = screen.getByRole("radio", { name: /opção 1/i }); + const container = input.closest("div"); + expect(container).toHaveClass("flex", "items-center", "gap-4"); + expect(container).toHaveClass("minha-classe"); + }); + + it("mostra o indicador interno com opacity-0 quando unchecked e opacity-100 quando checked", () => { + const { rerender } = render(<Radio {...baseProps} checked={false} />); + + const input = screen.getByRole("radio", { name: /opção 1/i }); + const container = input.closest("div")!; + const innerDot = container.querySelector("span > span")!; + expect(innerDot).toHaveClass("opacity-0"); + + rerender(<Radio {...baseProps} checked />); + const innerDotChecked = screen + .getByRole("radio", { name: /opção 1/i }) + .closest("div")! + .querySelector("span > span")!; + expect(innerDotChecked).toHaveClass("opacity-100"); + }); + + it("propaga props arbitrários como data-* e aria-*", () => { + render( + <Radio + {...baseProps} + data-testid="radio-test" + aria-label="Escolha uma opção" + />, + ); + const input = screen.getByTestId("radio-test"); + expect(input).toHaveAttribute("aria-label", "Escolha uma opção"); + }); + + it("dispara onChange quando clicado", () => { + const handleChange = jest.fn(); + render(<Radio {...baseProps} onChange={handleChange} />); + const input = screen.getByRole("radio", { name: /opção 1/i }); + fireEvent.click(input); + expect(handleChange).toHaveBeenCalledTimes(1); + }); + + it("combina com o snapshot", () => { + const { asFragment } = render( + <Radio + {...baseProps} + checked + className="snapshot-class" + onChange={() => {}} + />, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Radio/__snapshots__/Radio.test.tsx.snap b/front-end-challenge/src/components/ui/Radio/__snapshots__/Radio.test.tsx.snap new file mode 100644 index 00000000..0a874f33 --- /dev/null +++ b/front-end-challenge/src/components/ui/Radio/__snapshots__/Radio.test.tsx.snap @@ -0,0 +1,37 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Radio component combina com o snapshot 1`] = ` +<DocumentFragment> + <div + class="flex items-center gap-4 snapshot-class" + > + <input + checked="" + class="sr-only" + id="radio-1" + name="group" + type="radio" + value="val1" + /> + <label + class="flex items-center cursor-pointer select-none" + for="radio-1" + > + <span + aria-hidden="true" + class="inline-flex items-center justify-center w-5 h-5 border-2 rounded-full border-[var(--color-primary)] transition-colors" + > + <span + aria-hidden="true" + class="w-2.5 h-2.5 rounded-full bg-[var(--color-primary)] opacity-100 transition-opacity" + /> + </span> + <span + class="ml-2 text-xs font-inter text-[var(--color-light)]" + > + Opção 1 + </span> + </label> + </div> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Radio/index.tsx b/front-end-challenge/src/components/ui/Radio/index.tsx new file mode 100644 index 00000000..99da08b0 --- /dev/null +++ b/front-end-challenge/src/components/ui/Radio/index.tsx @@ -0,0 +1,33 @@ +import { clsx } from "clsx"; +import { forwardRef, type InputHTMLAttributes } from "react"; + +interface RadioProps extends InputHTMLAttributes<HTMLInputElement> { + label: string; + id: string; +} + +const Radio = forwardRef<HTMLInputElement, RadioProps>( + ({ id, label, className, ...props }, ref) => { + return ( + <div className={clsx("flex items-center gap-2", className)}> + <input + type="radio" + id={id} + ref={ref} + className="accent-blue-600 w-4 h-4 cursor-pointer" + {...props} + /> + <label + htmlFor={id} + className="text-sm text-white cursor-pointer select-none" + > + {label} + </label> + </div> + ); + }, +); + +Radio.displayName = "Radio"; + +export default Radio; diff --git a/front-end-challenge/src/components/ui/Radio/types.ts b/front-end-challenge/src/components/ui/Radio/types.ts new file mode 100644 index 00000000..72f7a9fa --- /dev/null +++ b/front-end-challenge/src/components/ui/Radio/types.ts @@ -0,0 +1,10 @@ +export interface RadioProps + extends React.InputHTMLAttributes<HTMLInputElement> { + id: string; + name: string; + value: string; + label: React.ReactNode; + checked?: boolean; + onChange?: React.ChangeEventHandler<HTMLInputElement>; + className?: string; +} diff --git a/front-end-challenge/src/components/ui/SearchInput/SearchInput.test.tsx b/front-end-challenge/src/components/ui/SearchInput/SearchInput.test.tsx new file mode 100644 index 00000000..a6fcf46e --- /dev/null +++ b/front-end-challenge/src/components/ui/SearchInput/SearchInput.test.tsx @@ -0,0 +1,81 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; +import { createRef } from "react"; + +import SearchInput from "../SearchInput"; +import type { SearchInputProps } from "./types"; + +describe("SearchInput component", () => { + it("renders input with type search and default placeholder and forwards ref", () => { + const ref = createRef<HTMLInputElement>(); + render(<SearchInput ref={ref} />); + const input = screen.getByRole("searchbox"); + expect(input).toHaveAttribute("type", "search"); + expect(input).toHaveAttribute("placeholder", "Buscar…"); + expect(ref.current).toBe(input); + }); + + it("accepts custom placeholder", () => { + render(<SearchInput placeholder="Pesquisar" />); + const input = screen.getByPlaceholderText("Pesquisar"); + expect(input).toBeInTheDocument(); + }); + + it("applies default md size classes", () => { + render(<SearchInput />); + const input = screen.getByRole("searchbox"); + expect(input).toHaveClass("h-9", "w-56", "md:w-72"); + }); + + it.each<[SearchInputProps["size"], string[]]>([ + ["sm", ["h-7", "w-40", "md:w-56"]], + ["md", ["h-9", "w-56", "md:w-72"]], + ["lg", ["h-11", "w-72", "md:w-96"]], + ])("applies correct classes for size '%s'", (size, expectedClasses) => { + render(<SearchInput size={size} />); + const input = screen.getByRole("searchbox"); + expectedClasses.forEach((cls) => { + expect(input).toHaveClass(cls); + }); + }); + + it("merges additional className", () => { + render(<SearchInput className="my-class" />); + const input = screen.getByRole("searchbox"); + expect(input).toHaveClass("my-class"); + }); + + it("forwards arbitrary props", () => { + render( + <SearchInput + data-testid="search-test" + aria-label="Pesquisar coisas" + maxLength={10} + />, + ); + const input = screen.getByTestId("search-test"); + expect(input).toHaveAttribute("aria-label", "Pesquisar coisas"); + expect(input).toHaveAttribute("maxlength", "10"); + }); + + it("calls onChange when input changes", () => { + const handleChange = jest.fn(); + render(<SearchInput onChange={handleChange} />); + const input = screen.getByRole("searchbox"); + fireEvent.change(input, { target: { value: "abc" } }); + expect(handleChange).toHaveBeenCalledTimes(1); + }); + + it("combines with snapshot", () => { + const { asFragment } = render( + <SearchInput + placeholder="Snap" + size="sm" + className="snap-class" + onChange={() => {}} + />, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/SearchInput/__snapshots__/SearchInput.test.tsx.snap b/front-end-challenge/src/components/ui/SearchInput/__snapshots__/SearchInput.test.tsx.snap new file mode 100644 index 00000000..a333392e --- /dev/null +++ b/front-end-challenge/src/components/ui/SearchInput/__snapshots__/SearchInput.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SearchInput component combines with snapshot 1`] = ` +<DocumentFragment> + <input + class="rounded-md border border-[#8A939D] bg-transparent px-3 text-sm font-inter placeholder:text-[#8A939D] placeholder:font-light placeholder:text-xs placeholder:text-inter focus:border-cyan-600 focus:outline-none focus:ring-1 focus:ring-cyan-500 h-7 w-40 md:w-56 snap-class" + placeholder="Snap" + type="search" + /> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/SearchInput/index.tsx b/front-end-challenge/src/components/ui/SearchInput/index.tsx new file mode 100644 index 00000000..65c40b88 --- /dev/null +++ b/front-end-challenge/src/components/ui/SearchInput/index.tsx @@ -0,0 +1,35 @@ +import clsx from "clsx"; +import { forwardRef } from "react"; + +import type { SearchInputProps } from "./types"; + +const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>( + ({ placeholder = "Buscar…", size = "md", className, ...props }, ref) => { + const sizeClasses: Record<string, string> = { + sm: "h-7 w-40 md:w-56", + md: "h-9 w-56 md:w-72", + lg: "h-11 w-72 md:w-96", + }; + + return ( + <input + ref={ref} + type="search" + placeholder={placeholder} + className={clsx( + "rounded-md border border-[#8A939D] bg-transparent", + "px-3 text-sm font-inter placeholder:text-[#8A939D]", + "placeholder:font-light placeholder:text-xs", + "placeholder:text-inter focus:border-cyan-600", + "focus:outline-none focus:ring-1 focus:ring-cyan-500", + sizeClasses[size], + className, + )} + {...props} + /> + ); + }, +); + +SearchInput.displayName = "SearchInput"; +export default SearchInput; diff --git a/front-end-challenge/src/components/ui/SearchInput/types.ts b/front-end-challenge/src/components/ui/SearchInput/types.ts new file mode 100644 index 00000000..c35c2033 --- /dev/null +++ b/front-end-challenge/src/components/ui/SearchInput/types.ts @@ -0,0 +1,7 @@ +import type { InputHTMLAttributes } from "react"; + +export interface SearchInputProps + extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "size"> { + placeholder?: string; + size?: "sm" | "md" | "lg"; +} diff --git a/front-end-challenge/src/components/ui/SocialMidia/SocialMidia.test.tsx b/front-end-challenge/src/components/ui/SocialMidia/SocialMidia.test.tsx new file mode 100644 index 00000000..db22110b --- /dev/null +++ b/front-end-challenge/src/components/ui/SocialMidia/SocialMidia.test.tsx @@ -0,0 +1,51 @@ +import "@testing-library/jest-dom"; + +import { fireEvent, render, screen } from "@testing-library/react"; + +import Button from "../Button"; + +describe("Button component – testes adicionais", () => { + it("fica desabilitado quando `disabled` é true e não dispara onClick", () => { + const handleClick = jest.fn(); + render( + <Button disabled onClick={handleClick}> + Não posso + </Button>, + ); + const btn = screen.getByRole("button", { name: /não posso/i }); + expect(btn).toBeDisabled(); + fireEvent.click(btn); + expect(handleClick).not.toHaveBeenCalled(); + }); + + it("usa `type='button'` por padrão e permite sobrescrever para `submit`", () => { + render(<Button>Default</Button>); + expect(screen.getByRole("button")).toHaveAttribute("type", "button"); + + render(<Button type="submit">Enviar</Button>); + expect(screen.getByRole("button", { name: /enviar/i })).toHaveAttribute( + "type", + "submit", + ); + }); + + it("propaga atributos HTML arbitrários (`aria-label`, `data-*`, etc.)", () => { + render( + <Button aria-label="Fechar diálogo" data-testid="btn-123"> + X + </Button>, + ); + const btn = screen.getByTestId("btn-123"); + expect(btn).toHaveAttribute("aria-label", "Fechar diálogo"); + expect(btn).toHaveTextContent("X"); + }); + + it("combina com o snapshot", () => { + const { asFragment } = render( + <Button variant="tertiary" size="sm"> + Snap + </Button>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/SocialMidia/index.tsx b/front-end-challenge/src/components/ui/SocialMidia/index.tsx new file mode 100644 index 00000000..862833cc --- /dev/null +++ b/front-end-challenge/src/components/ui/SocialMidia/index.tsx @@ -0,0 +1,35 @@ +import clsx from "clsx"; +import { v4 as uuidv4 } from "uuid"; + +import { Link } from "../Link"; + +interface LinkCardProps { + href: string; + title: string; + icon: React.ReactNode; +} + +export default function SocialMidia({ + className, + links, +}: { + className?: string; + links?: LinkCardProps[]; +}) { + return ( + <section + className={clsx("mt-4 flex gap-1 items-center justify-center", className)} + > + {links?.map((link) => ( + <Link + key={uuidv4()} + href={link.href} + target="_blank" + aria-label={link.title} + > + {link.icon} + </Link> + ))} + </section> + ); +} diff --git a/front-end-challenge/src/components/ui/SocialMidia/types.ts b/front-end-challenge/src/components/ui/SocialMidia/types.ts new file mode 100644 index 00000000..eb276d22 --- /dev/null +++ b/front-end-challenge/src/components/ui/SocialMidia/types.ts @@ -0,0 +1,7 @@ +import type { ButtonHTMLAttributes, ReactNode } from "react"; + +export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> { + variant?: "primary" | "secondary" | "tertiary"; + size?: "sm" | "md" | "lg"; + children: ReactNode; +} diff --git a/front-end-challenge/src/components/ui/Spinner/Spinner.test.tsx b/front-end-challenge/src/components/ui/Spinner/Spinner.test.tsx new file mode 100644 index 00000000..e02ac0d3 --- /dev/null +++ b/front-end-challenge/src/components/ui/Spinner/Spinner.test.tsx @@ -0,0 +1,41 @@ +import "@testing-library/jest-dom"; + +import { render } from "@testing-library/react"; + +import Spinner from "../Spinner"; + +describe("Spinner component", () => { + it("renders a span element with default spinner classes", () => { + const { container } = render(<Spinner />); + const span = container.querySelector("span"); + expect(span).toBeInTheDocument(); + expect(span).toHaveClass( + "animate-spin", + "rounded-full", + "h-8", + "w-8", + "border-4", + "border-gray-200", + "border-t-blue-500", + ); + }); + + it("renders an empty span without children", () => { + const { container } = render(<Spinner />); + const span = container.querySelector("span"); + expect(span).toBeEmptyDOMElement(); + }); + + it("merges a custom className prop", () => { + const { container } = render( + <Spinner className="extra-class another-class" />, + ); + const span = container.querySelector("span"); + expect(span).toHaveClass("extra-class", "another-class"); + }); + + it("matches snapshot", () => { + const { asFragment } = render(<Spinner className="snapshot-class" />); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Spinner/__snapshots__/Spinner.test.tsx.snap b/front-end-challenge/src/components/ui/Spinner/__snapshots__/Spinner.test.tsx.snap new file mode 100644 index 00000000..2ab5f231 --- /dev/null +++ b/front-end-challenge/src/components/ui/Spinner/__snapshots__/Spinner.test.tsx.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Spinner component matches snapshot 1`] = ` +<DocumentFragment> + <span + class="animate-spin rounded-full h-8 w-8 border-4 border-gray-200 border-t-blue-500 snapshot-class" + /> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Spinner/index.tsx b/front-end-challenge/src/components/ui/Spinner/index.tsx new file mode 100644 index 00000000..0911a4c4 --- /dev/null +++ b/front-end-challenge/src/components/ui/Spinner/index.tsx @@ -0,0 +1,17 @@ +import clsx from "clsx"; + +import type { SpinnerProps } from "./types"; + +function Spinner({ className }: SpinnerProps) { + return ( + <span + className={clsx( + "animate-spin rounded-full h-8 w-8", + "border-4 border-gray-200 border-t-blue-500", + className, + )} + ></span> + ); +} + +export default Spinner; diff --git a/front-end-challenge/src/components/ui/Spinner/types.ts b/front-end-challenge/src/components/ui/Spinner/types.ts new file mode 100644 index 00000000..387fa125 --- /dev/null +++ b/front-end-challenge/src/components/ui/Spinner/types.ts @@ -0,0 +1,3 @@ +export interface SpinnerProps { + className?: string; +} diff --git a/front-end-challenge/src/components/ui/Table/Table.test.tsx b/front-end-challenge/src/components/ui/Table/Table.test.tsx new file mode 100644 index 00000000..06c957d7 --- /dev/null +++ b/front-end-challenge/src/components/ui/Table/Table.test.tsx @@ -0,0 +1,123 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; +import { createRef } from "react"; + +import { Table, TableBody, TableHead, TableRow } from "../Table"; + +describe("Table component", () => { + it("renders children inside a table and merges className", () => { + const { container } = render( + <Table className="extra-table"> + <TableHead> + <th>H1</th> + </TableHead> + <TableBody> + <TableRow> + <td>Cell</td> + </TableRow> + </TableBody> + </Table>, + ); + + const outer = container.firstElementChild as HTMLElement; + expect(outer).toHaveClass( + "mt-10", + "rounded-2xl", + "bg-dark", + "border", + "border-quaternary", + "overflow-hidden", + "extra-table", + ); + + const table = screen.getByRole("table"); + expect(table).toBeInTheDocument(); + + expect(screen.getByText("H1")).toBeInTheDocument(); + expect(screen.getByText("Cell")).toBeInTheDocument(); + }); + + it("forwards ref to inner scroll container", () => { + const ref = createRef<HTMLDivElement>(); + render( + <Table ref={ref}> + <tbody /> + </Table>, + ); + + expect(ref.current).toBeInstanceOf(HTMLDivElement); + expect(ref.current).toHaveClass("max-h-[450px]", "overflow-y-auto"); + }); +}); + +describe("TableHead component", () => { + it("renders a thead with correct class and children", () => { + const { container } = render( + <table> + <TableHead> + <th>Header</th> + </TableHead> + </table>, + ); + const thead = container.querySelector("thead"); + expect(thead).toHaveClass("text-slate-300"); + const tr = thead!.querySelector("tr"); + expect(tr).toHaveClass("divide-x", "divide-y", "divide-quaternary"); + expect(tr).toContainHTML("<th>Header</th>"); + }); +}); + +describe("TableBody component", () => { + it("renders a tbody with correct class and children", () => { + const { container } = render( + <table> + <TableBody> + <tr> + <td>Row</td> + </tr> + </TableBody> + </table>, + ); + const tbody = container.querySelector("tbody"); + expect(tbody).toHaveClass("divide-x", "divide-y", "divide-quaternary"); + expect(tbody).toContainHTML("<td>Row</td>"); + }); +}); + +describe("TableRow component", () => { + it("renders a tr with default and extra classes and children", () => { + const { container } = render( + <table> + <tbody> + <TableRow className="extra-row"> + <td>Data</td> + </TableRow> + </tbody> + </table>, + ); + const tr = container.querySelector("tr"); + expect(tr).toHaveClass( + "hover:bg-slate-800/40", + "divide-x", + "divide-y", + "divide-quaternary", + "extra-row", + ); + expect(tr).toContainHTML("<td>Data</td>"); + }); + + it("forwards ref to tr element", () => { + const ref = createRef<HTMLTableRowElement>(); + render( + <table> + <tbody> + <TableRow ref={ref}> + <td>Data</td> + </TableRow> + </tbody> + </table>, + ); + expect(ref.current).toBeInstanceOf(HTMLTableRowElement); + }); +}); diff --git a/front-end-challenge/src/components/ui/Table/index.tsx b/front-end-challenge/src/components/ui/Table/index.tsx new file mode 100644 index 00000000..e45118cb --- /dev/null +++ b/front-end-challenge/src/components/ui/Table/index.tsx @@ -0,0 +1,52 @@ +import clsx from "clsx"; +import { forwardRef } from "react"; + +import type { RowProps, SectionProps, TableProps } from "./types"; + +export const Table = forwardRef<HTMLDivElement, TableProps>( + ({ children, className }, ref) => ( + <div + className={clsx( + "mt-10 rounded-2xl bg-dark border border-quaternary", + "overflow-hidden", + className, + )} + > + <div ref={ref} className="max-h-[450px] overflow-y-auto"> + <table className="min-w-full w-full text-sm border-collapse divide-y divide-x divide-quaternary"> + {children} + </table> + </div> + </div> + ), +); +Table.displayName = "Table"; + +export function TableHead({ children }: SectionProps) { + return ( + <thead className="text-slate-300"> + <tr className="divide-x divide-y divide-quaternary">{children}</tr> + </thead> + ); +} + +export function TableBody({ children }: SectionProps) { + return ( + <tbody className="divide-x divide-y divide-quaternary">{children}</tbody> + ); +} + +export const TableRow = forwardRef<HTMLTableRowElement, RowProps>( + ({ children, className }, ref) => ( + <tr + ref={ref} + className={clsx( + "hover:bg-slate-800/40 divide-x divide-y divide-quaternary", + className, + )} + > + {children} + </tr> + ), +); +TableRow.displayName = "TableRow"; diff --git a/front-end-challenge/src/components/ui/Table/types.ts b/front-end-challenge/src/components/ui/Table/types.ts new file mode 100644 index 00000000..ede64af9 --- /dev/null +++ b/front-end-challenge/src/components/ui/Table/types.ts @@ -0,0 +1,11 @@ +export type TableProps = { + children: React.ReactNode; + className?: string; +}; + +export type SectionProps = { children: React.ReactNode }; + +export type RowProps = { + children: React.ReactNode; + className?: string; +}; diff --git a/front-end-challenge/src/components/ui/Td/Td.test.tsx b/front-end-challenge/src/components/ui/Td/Td.test.tsx new file mode 100644 index 00000000..91350a54 --- /dev/null +++ b/front-end-challenge/src/components/ui/Td/Td.test.tsx @@ -0,0 +1,92 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; + +import Td from "../Td"; + +describe("Td component", () => { + it("renders a td element with default classes and children", () => { + render( + <table> + <tbody> + <tr> + <Td>Cell Content</Td> + </tr> + </tbody> + </table>, + ); + const cell = screen.getByText("Cell Content"); + expect(cell.tagName).toBe("TD"); + expect(cell).toHaveClass( + "px-4", + "h-[40px]", + "whitespace-nowrap", + "text-center", + "text-sm", + "text-white", + "text-normal", + "tracking-wide", + "font-inter", + ); + }); + + it("merges a custom className when provided", () => { + render( + <table> + <tbody> + <tr> + <Td className="extra-class another-class">Custom Cell</Td> + </tr> + </tbody> + </table>, + ); + const cell = screen.getByText("Custom Cell"); + expect(cell).toHaveClass("extra-class", "another-class"); + }); + + it("passes arbitrary HTML props to the td element", () => { + render( + <table> + <tbody> + <tr> + <Td data-testid="td-test" aria-label="label" title="my-title"> + Test + </Td> + </tr> + </tbody> + </table>, + ); + const cell = screen.getByTestId("td-test"); + expect(cell).toHaveAttribute("aria-label", "label"); + expect(cell).toHaveAttribute("title", "my-title"); + }); + + it("supports the colSpan prop", () => { + render( + <table> + <tbody> + <tr> + <Td colSpan={3}>Spanned Cell</Td> + </tr> + </tbody> + </table>, + ); + const cell = screen.getByText("Spanned Cell"); + expect(cell).toHaveAttribute("colspan", "3"); + }); + + it("matches the snapshot", () => { + const { asFragment } = render( + <table> + <tbody> + <tr> + <Td className="snapshot-class" colSpan={2} data-extra="x"> + Snap + </Td> + </tr> + </tbody> + </table>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Td/__snapshots__/Td.test.tsx.snap b/front-end-challenge/src/components/ui/Td/__snapshots__/Td.test.tsx.snap new file mode 100644 index 00000000..bd4d8e2c --- /dev/null +++ b/front-end-challenge/src/components/ui/Td/__snapshots__/Td.test.tsx.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Td component matches the snapshot 1`] = ` +<DocumentFragment> + <table> + <tbody> + <tr> + <td + class="px-4 h-[40px] whitespace-nowrap text-center text-sm text-white text-normal tracking-wide font-inter snapshot-class" + colspan="2" + data-extra="x" + > + Snap + </td> + </tr> + </tbody> + </table> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Td/index.tsx b/front-end-challenge/src/components/ui/Td/index.tsx new file mode 100644 index 00000000..a10d64d7 --- /dev/null +++ b/front-end-challenge/src/components/ui/Td/index.tsx @@ -0,0 +1,20 @@ +import clsx from "clsx"; + +import type { TdProps } from "./types"; + +function Td({ children, className, ...props }: TdProps) { + return ( + <td + className={clsx( + "px-4 h-[40px] whitespace-nowrap text-center", + "text-sm text-white text-normal tracking-wide font-inter", + className, + )} + {...props} + > + {children} + </td> + ); +} + +export default Td; diff --git a/front-end-challenge/src/components/ui/Td/types.ts b/front-end-challenge/src/components/ui/Td/types.ts new file mode 100644 index 00000000..4e8ebe98 --- /dev/null +++ b/front-end-challenge/src/components/ui/Td/types.ts @@ -0,0 +1,5 @@ +export interface TdProps extends React.HTMLAttributes<HTMLTableCellElement> { + children: React.ReactNode; + className?: string; + colSpan?: number; +} diff --git a/front-end-challenge/src/components/ui/Th/Th.test.tsx b/front-end-challenge/src/components/ui/Th/Th.test.tsx new file mode 100644 index 00000000..f53ec549 --- /dev/null +++ b/front-end-challenge/src/components/ui/Th/Th.test.tsx @@ -0,0 +1,81 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; + +import Th from "../Th"; + +describe("Th component", () => { + it("renders a th element with default classes and children", () => { + render( + <table> + <thead> + <tr> + <Th>Header</Th> + </tr> + </thead> + </table>, + ); + const headerCell = screen.getByText("Header"); + expect(headerCell.tagName).toBe("TH"); + expect(headerCell).toHaveClass( + "sticky", + "top-0", + "z-10", + "bg-dark", + "px-4", + "h-[55px]", + "text-center", + "font-semibold", + "font-poppins", + "text-sm", + "text-white", + "tracking-wide", + ); + }); + + it("merges a custom className when provided", () => { + render( + <table> + <thead> + <tr> + <Th className="extra-th custom">Col</Th> + </tr> + </thead> + </table>, + ); + const th = screen.getByText("Col"); + expect(th).toHaveClass("extra-th", "custom"); + }); + + it("passes arbitrary HTML props to the th element", () => { + render( + <table> + <thead> + <tr> + <Th data-testid="th-test" aria-label="Head" title="title-text"> + X + </Th> + </tr> + </thead> + </table>, + ); + const th = screen.getByTestId("th-test"); + expect(th).toHaveAttribute("aria-label", "Head"); + expect(th).toHaveAttribute("title", "title-text"); + }); + + it("matches the snapshot", () => { + const { asFragment } = render( + <table> + <thead> + <tr> + <Th className="snap-class" data-extra="y"> + Snap + </Th> + </tr> + </thead> + </table>, + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/front-end-challenge/src/components/ui/Th/__snapshots__/Th.test.tsx.snap b/front-end-challenge/src/components/ui/Th/__snapshots__/Th.test.tsx.snap new file mode 100644 index 00000000..e3481c6c --- /dev/null +++ b/front-end-challenge/src/components/ui/Th/__snapshots__/Th.test.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Th component matches the snapshot 1`] = ` +<DocumentFragment> + <table> + <thead> + <tr> + <th + class="sticky top-0 z-10 bg-dark px-4 h-[55px] text-center font-semibold font-poppins text-sm text-white tracking-wide snap-class" + data-extra="y" + > + Snap + </th> + </tr> + </thead> + </table> +</DocumentFragment> +`; diff --git a/front-end-challenge/src/components/ui/Th/index.tsx b/front-end-challenge/src/components/ui/Th/index.tsx new file mode 100644 index 00000000..b53ac9ed --- /dev/null +++ b/front-end-challenge/src/components/ui/Th/index.tsx @@ -0,0 +1,21 @@ +import clsx from "clsx"; + +import type { ThProps } from "./types"; + +function Th({ children, className, ...props }: ThProps) { + return ( + <th + className={clsx( + "sticky top-0 z-10 bg-dark", + "px-4 h-[55px] text-center font-semibold ", + "font-poppins text-sm text-white tracking-wide", + className, + )} + {...props} + > + {children} + </th> + ); +} + +export default Th; diff --git a/front-end-challenge/src/components/ui/Th/types.ts b/front-end-challenge/src/components/ui/Th/types.ts new file mode 100644 index 00000000..c92bf915 --- /dev/null +++ b/front-end-challenge/src/components/ui/Th/types.ts @@ -0,0 +1,5 @@ +export interface ThProps + extends React.HTMLAttributes<HTMLTableHeaderCellElement> { + children: React.ReactNode; + className?: string; +} diff --git a/front-end-challenge/src/hooks/useInfinitePosts.ts b/front-end-challenge/src/hooks/useInfinitePosts.ts new file mode 100644 index 00000000..905de06f --- /dev/null +++ b/front-end-challenge/src/hooks/useInfinitePosts.ts @@ -0,0 +1,46 @@ +import { type InfiniteData, useInfiniteQuery } from "@tanstack/react-query"; + +import api from "../api/client"; +import type { Page, Post, WPPost } from "../types/Post"; + +export function useInfinitePosts(categoryId = 518) { + return useInfiniteQuery< + Page, + Error, + InfiniteData<Page>, + ["posts", number], + number + >({ + queryKey: ["posts", categoryId], + queryFn: async ({ pageParam = 1 }) => { + const resp = await api.get<WPPost[]>("/posts", { + params: { + _embed: true, + categories: categoryId, + page: pageParam, + }, + }); + + const totalPages = Number(resp.headers["x-wp-totalpages"] || 1); + + const posts: Post[] = resp.data.map((wp) => ({ + id: wp.id, + date: wp.date, + slug: wp.slug, + title: wp.title.rendered, + excerpt: wp.excerpt.rendered, + content: wp.content.rendered, + mediaUrl: wp._embedded?.["wp:featuredmedia"]?.[0]?.source_url, + })); + + return { + posts, + totalPages, + currentPage: pageParam, + }; + }, + initialPageParam: 1, + getNextPageParam: (last) => + last.currentPage < last.totalPages ? last.currentPage + 1 : undefined, + }); +} diff --git a/front-end-challenge/src/hooks/usePost.ts b/front-end-challenge/src/hooks/usePost.ts new file mode 100644 index 00000000..3b96fa44 --- /dev/null +++ b/front-end-challenge/src/hooks/usePost.ts @@ -0,0 +1,31 @@ +import { useQuery } from "@tanstack/react-query"; + +import api from "../api/client"; +import type { Post, WPPost } from "../types/Post"; + +export function usePost(slug: string) { + return useQuery<Post>({ + queryKey: ["post", slug], + queryFn: async () => { + const resp = await api.get<WPPost[]>("/posts", { + params: { _embed: true, slug }, + }); + + const posts: Post[] = resp.data.map((wp) => ({ + id: wp.id, + date: wp.date, + slug: wp.slug, + title: wp.title.rendered, + excerpt: wp.excerpt.rendered, + content: wp.content.rendered, + embedded: wp._embedded, + mediaUrl: + wp._embedded?.["wp:featuredmedia"]?.[0]?.media_details?.sizes?.full + ?.source_url, + })); + + return posts[0]; + }, + enabled: !!slug, + }); +} diff --git a/front-end-challenge/src/i18n/index.ts b/front-end-challenge/src/i18n/index.ts new file mode 100644 index 00000000..77005069 --- /dev/null +++ b/front-end-challenge/src/i18n/index.ts @@ -0,0 +1,15 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; + +import pt from "./locales/pt/common.json"; + +i18n.use(initReactI18next).init({ + resources: { + pt: { translation: pt }, + }, + lng: "pt", + fallbackLng: "pt", + interpolation: { escapeValue: false }, +}); + +export default i18n; diff --git a/front-end-challenge/src/i18n/locales/en/common.json b/front-end-challenge/src/i18n/locales/en/common.json new file mode 100644 index 00000000..0db3279e --- /dev/null +++ b/front-end-challenge/src/i18n/locales/en/common.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/front-end-challenge/src/i18n/locales/pt/common.json b/front-end-challenge/src/i18n/locales/pt/common.json new file mode 100644 index 00000000..0db3279e --- /dev/null +++ b/front-end-challenge/src/i18n/locales/pt/common.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/front-end-challenge/src/main.tsx b/front-end-challenge/src/main.tsx new file mode 100644 index 00000000..f2b94aa4 --- /dev/null +++ b/front-end-challenge/src/main.tsx @@ -0,0 +1,16 @@ +import "./styles/global.css"; +import "./i18n"; + +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { BrowserRouter } from "react-router-dom"; + +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + <StrictMode> + <BrowserRouter> + <App /> + </BrowserRouter> + </StrictMode>, +); diff --git a/front-end-challenge/src/pages/HomePage.tsx b/front-end-challenge/src/pages/HomePage.tsx new file mode 100644 index 00000000..65140699 --- /dev/null +++ b/front-end-challenge/src/pages/HomePage.tsx @@ -0,0 +1,66 @@ +import AsyncFallback from "../components/layout/AsyncFallback"; +import CardItems from "../components/layout/CardItems"; +import MainNews from "../components/layout/MainNews"; +import Button from "../components/ui/Button"; +import { useInfinitePosts } from "../hooks/useInfinitePosts"; + +function HomePage() { + const { + data, + isLoading, + isError, + fetchNextPage, + hasNextPage, + isFetchingNextPage, + } = useInfinitePosts(); + + return ( + <AsyncFallback isLoading={isLoading} isError={isError}> + <div className="home mt-22"> + <h1 className="home__title text-6xl lg:text-8xl font-bold text-center mb-8"> + Últimas Notícias + </h1> + <p className="text-md text-center mb-6 font-light"> + Receba as últimas atualizações e uma experiência mais profunda do + Apiki + </p> + + {data && ( + <> + {(() => { + const allPosts = data.pages.flatMap((page) => page.posts); + const [firstPost, ...otherPosts] = allPosts; + + return ( + <> + {firstPost && <MainNews key={firstPost.id} {...firstPost} />} + + <div className="home__grid mt-4"> + {otherPosts.map((post) => ( + <CardItems key={post.id} {...post} /> + ))} + </div> + </> + ); + })()} + </> + )} + + {hasNextPage && ( + <div className="mt-8 w-full flex items-center justify-center"> + <Button + type="button" + className="!bg-transparent border border-secondary !text-secondary py-2 px-5 rounded-none cursor-pointer" + onClick={() => fetchNextPage()} + disabled={isFetchingNextPage} + > + {isFetchingNextPage ? "Carregando…" : "Carregar mais..."} + </Button> + </div> + )} + </div> + </AsyncFallback> + ); +} + +export default HomePage; diff --git a/front-end-challenge/src/pages/NotFoundPage.tsx b/front-end-challenge/src/pages/NotFoundPage.tsx new file mode 100644 index 00000000..407c78cc --- /dev/null +++ b/front-end-challenge/src/pages/NotFoundPage.tsx @@ -0,0 +1,25 @@ +function NotFoundPage() { + return ( + <main + role="main" + className="min-h-screen bg-quaternary text-slate-50 flex items-center justify-center" + > + <section + role="region" + aria-labelledby="error-title" + className="h-[518px] mx-auto w-[80%] max-w-7xl p-4 border rounded-2xl bg-dark" + > + <article className="flex flex-col items-center justify-center h-full p-4 text-center"> + <header> + <h1 id="error-title" className="text-4xl font-bold mb-2"> + 404 + </h1> + </header> + <p className="text-lg">Página não encontrada</p> + </article> + </section> + </main> + ); +} + +export default NotFoundPage; diff --git a/front-end-challenge/src/pages/PostPage.tsx b/front-end-challenge/src/pages/PostPage.tsx new file mode 100644 index 00000000..b9520e84 --- /dev/null +++ b/front-end-challenge/src/pages/PostPage.tsx @@ -0,0 +1,73 @@ +import { useEffect } from "react"; +import { FaArrowLeft } from "react-icons/fa6"; +import { Link, useParams } from "react-router-dom"; + +import AsyncFallback from "../components/layout/AsyncFallback"; +import ProfileCard from "../components/layout/ProfileCard"; +import Image from "../components/ui/Img"; +import { usePost } from "../hooks/usePost"; +import { extractYoastDescription } from "../utils/generics/extractYoastDescription"; +import { formatDateTimeWithRelative } from "../utils/generics/formatDate"; +import stripCaptionWidth from "../utils/generics/RemoveStyle"; + +const PostPage = () => { + const { slug } = useParams<{ slug: string }>(); + const { data: post, isLoading, isError } = usePost(slug || ""); + + useEffect(() => { + window.scrollTo(0, 0); + }, []); + + return ( + <AsyncFallback isLoading={isLoading} isError={isError || !post}> + <main className="flex flex-col items-center"> + <article className="post-detail mx-auto max-w-7xl"> + <Link + to="/" + className="flex items-center gap-2 text-primary hover:underline underline-offset-3" + > + <FaArrowLeft size={14} /> Voltar + </Link> + + <div className="relative"> + <Image + className="post-detail__img object-cover my-4 rounded" + src={post?.mediaUrl || ""} + alt={post?.title || "Imagem do post"} + /> + <header className="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4"> + <h1 + className="post-detail__title text-md sm:text-3xl font-bold mb-2" + dangerouslySetInnerHTML={{ + __html: post?.title || "Nenhum contéudo encontrado", + }} + /> + <p className="text-sm text-gray-600"> + {formatDateTimeWithRelative(post?.date || "")} + </p> + </header> + </div> + + <div + className="post-detail__content prose prose-lg" + dangerouslySetInnerHTML={{ + __html: stripCaptionWidth(post?.content || ""), + }} + /> + </article> + <article className="post-detail mx-auto max-w-7xl"> + <ProfileCard + imageUrl={post?.embedded?.author[0]?.avatar_urls?.["96"] || ""} + name={post?.embedded?.author[0]?.name || "Autor Desconhecido"} + description={ + extractYoastDescription(post?.embedded?.author[0]?.yoast_head) || + "Descrição não disponível" + } + /> + </article> + </main> + </AsyncFallback> + ); +}; + +export default PostPage; diff --git a/front-end-challenge/src/providers/ReactQueryProvider.tsx b/front-end-challenge/src/providers/ReactQueryProvider.tsx new file mode 100644 index 00000000..953291b9 --- /dev/null +++ b/front-end-challenge/src/providers/ReactQueryProvider.tsx @@ -0,0 +1,28 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import React from "react"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 1000 * 60 * 2, + gcTime: 1000 * 60 * 10, + refetchOnWindowFocus: false, + retry: 1, + }, + mutations: { + onError: (error: unknown) => { + console.error("Mutation error", error); + }, + }, + }, +}); + +export function ReactQueryProvider({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <QueryClientProvider client={queryClient}>{children}</QueryClientProvider> + ); +} diff --git a/front-end-challenge/src/routes/index.routes.tsx b/front-end-challenge/src/routes/index.routes.tsx new file mode 100644 index 00000000..25d2c30e --- /dev/null +++ b/front-end-challenge/src/routes/index.routes.tsx @@ -0,0 +1,20 @@ +import { Route, Routes } from "react-router-dom"; + +import HomePage from "../pages/HomePage"; +import NotFoundPage from "../pages/NotFoundPage"; +import PostPage from "../pages/PostPage"; +import Layout from "./layout.routes"; + +function UseRoutes() { + return ( + <Routes> + <Route element={<Layout />}> + <Route path="/" element={<HomePage />} /> + <Route path="/post/:slug" element={<PostPage />} /> + </Route> + <Route path="*" element={<NotFoundPage />} /> + </Routes> + ); +} + +export default UseRoutes; diff --git a/front-end-challenge/src/routes/layout.routes.tsx b/front-end-challenge/src/routes/layout.routes.tsx new file mode 100644 index 00000000..1510b236 --- /dev/null +++ b/front-end-challenge/src/routes/layout.routes.tsx @@ -0,0 +1,24 @@ +import { Outlet } from "react-router-dom"; + +import Footer from "../components/ui/Footer"; +import Header from "../components/ui/Header"; +import { footerSections } from "../utils/data/footer"; + +function Layout() { + return ( + <main className="bg-dark text-slate-50"> + <Header /> + <section className="w-full md:w-[85%] mx-auto mb-12 px-4"> + <Outlet /> + </section> + <Footer + logo="/assets/profile.jpg" + sections={footerSections} + socialLinks={[]} + className="mt-auto" + /> + </main> + ); +} + +export default Layout; diff --git a/front-end-challenge/src/styles/custom.css b/front-end-challenge/src/styles/custom.css new file mode 100644 index 00000000..95c77290 --- /dev/null +++ b/front-end-challenge/src/styles/custom.css @@ -0,0 +1,6 @@ +@import "./scroll.css"; +@import "./postContent.css"; + +* { + font-family: font-poppins, sans-serif; +} \ No newline at end of file diff --git a/front-end-challenge/src/styles/global.css b/front-end-challenge/src/styles/global.css new file mode 100644 index 00000000..965be877 --- /dev/null +++ b/front-end-challenge/src/styles/global.css @@ -0,0 +1,23 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=PT+Sans+Caption:wght@400;700&display=swap"); + +@import "tailwindcss/theme.css" layer(theme); +@import "tailwindcss/preflight.css" layer(base); +@import "tailwindcss/utilities.css" layer(utilities); +@import "tailwindcss"; + +@layer theme, base, components, utilities; + +@theme { + --color-primary: #a27b5c; + --color-secondary: #f9f8f2; + --color-tertiary: #f1997e; + --color-quaternary: #1b1b1b; + --color-dark: #000000; + --color-light: #ffffff; + + --font-inter: "Inter", sans-serif; + --font-poppins: "Poppins", sans-serif; + --font-pt-sans-caption: "PT Sans Caption", sans-serif; +} + +@import "./custom.css"; diff --git a/front-end-challenge/src/styles/postContent.css b/front-end-challenge/src/styles/postContent.css new file mode 100644 index 00000000..0ea438a5 --- /dev/null +++ b/front-end-challenge/src/styles/postContent.css @@ -0,0 +1,53 @@ +.post-detail__content, +.post-detail__content * { + box-sizing: border-box; +} + +.post-detail__content { + color: var(--color-white); + line-height: 1.6; + font-family: system-ui, sans-serif; +} + +.post-detail__content h1 { + font-size: 2.25rem; + margin: 1.5rem 0; +} +.post-detail__content h2 { + font-size: 1.75rem; + margin: 1.25rem 0; +} +.post-detail__content h3 { + font-size: 1.5rem; + margin: 1rem 0; +} +.post-detail__content p { + margin-bottom: 1rem; +} + +.post-detail__content a { + color: var(--color-primary); + text-decoration: underline; +} + +.post-detail__content img, +.post-detail__content iframe { + width: 100% !important; + max-width: 100% !important; + height: auto !important; + display: block; + margin: 1rem auto; +} + +.post-detail__content ul, +.post-detail__content ol { + padding-left: 1.5rem; + margin-bottom: 1rem; +} + +.post-detail__content pre { + background: var(--color-tertiary); + padding: 1rem; + overflow: auto; + border-radius: 0.5rem; +} diff --git a/front-end-challenge/src/styles/scroll.css b/front-end-challenge/src/styles/scroll.css new file mode 100644 index 00000000..74e9871e --- /dev/null +++ b/front-end-challenge/src/styles/scroll.css @@ -0,0 +1,25 @@ +::-webkit-scrollbar { + width: 10px; + height: 10px; + background-color: var(--color-dark); +} + +::-webkit-scrollbar-thumb { + width: 10px; + height: 137.78px; + border-radius: 8px; + background-color: var(--color-quaternary); +} + +::-webkit-scrollbar-thumb:hover { + background-color: #003b5e; + cursor: grab; +} + +::-webkit-scrollbar-thumb:hover:active { + cursor: grabbing; +} + +::-webkit-scrollbar-corner { + background-color: var(--color-dark); +} diff --git a/front-end-challenge/src/types/Post.ts b/front-end-challenge/src/types/Post.ts new file mode 100644 index 00000000..729a16f0 --- /dev/null +++ b/front-end-challenge/src/types/Post.ts @@ -0,0 +1,38 @@ +export interface Embedded { + "wp:featuredmedia": Array<{ + source_url: string; + slug: string; + title: { rendered: string }; + media_details?: { sizes: { full: { source_url: string } } }; + }>; +} + +export interface WPPost { + id: number; + date: string; + slug: string; + title: { rendered: string }; + excerpt: { rendered: string }; + content: { rendered: string }; + _embedded?: Embedded; +} + +export interface Post { + id: number; + date: string; + slug: string; + title: string; + excerpt: string; + content: string; + mediaUrl?: string; + mediaSrcSet?: string; + mediaSizes?: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + embedded?: any; +} + +export interface Page { + posts: Post[]; + totalPages: number; + currentPage: number; +} diff --git a/front-end-challenge/src/utils/const/socialLinks.ts b/front-end-challenge/src/utils/const/socialLinks.ts new file mode 100644 index 00000000..632a662a --- /dev/null +++ b/front-end-challenge/src/utils/const/socialLinks.ts @@ -0,0 +1,11 @@ +const hrefWhatsApp = `https://api.whatsapp.com/send?phone=${import.meta.env.VITE_CELLPHONE_NUMBER}`; +const hrefLinkedin = `https://www.linkedin.com/in/${import.meta.env.VITE_LINKEDIN_ACCOUNT}`; +const hrefGitHub = "https://github.com/GefersonLopes"; +const hrefPortfolio = "https://portifolio-cuw8.vercel.app/"; + +export const hrefLinks = { + hrefWhatsApp, + hrefLinkedin, + hrefGitHub, + hrefPortfolio, +}; diff --git a/front-end-challenge/src/utils/data/footer.ts b/front-end-challenge/src/utils/data/footer.ts new file mode 100644 index 00000000..23caa33e --- /dev/null +++ b/front-end-challenge/src/utils/data/footer.ts @@ -0,0 +1,18 @@ +import { hrefLinks } from "../const/socialLinks"; + +export const footerSections = [ + { + title: "Sobre mim", + links: [ + { label: "Quem sou eu", href: hrefLinks.hrefLinkedin }, + { label: "Contato", href: hrefLinks.hrefWhatsApp }, + ], + }, + { + title: "Desenvolvimento", + links: [ + { label: "GitHub", href: hrefLinks.hrefGitHub }, + { label: "Portifólio", href: hrefLinks.hrefPortfolio }, + ], + }, +]; diff --git a/front-end-challenge/src/utils/generics/RemoveStyle.ts b/front-end-challenge/src/utils/generics/RemoveStyle.ts new file mode 100644 index 00000000..8052611d --- /dev/null +++ b/front-end-challenge/src/utils/generics/RemoveStyle.ts @@ -0,0 +1,8 @@ +const stripCaptionWidth = function (html: string) { + return html.replace( + /<div([^>]*?)style="[^"]*?width:\s*\d+px;?([^"]*)"([^>]*)>/g, + `<div$1$3>`, + ); +}; + +export default stripCaptionWidth; diff --git a/front-end-challenge/src/utils/generics/extractYoastDescription.ts b/front-end-challenge/src/utils/generics/extractYoastDescription.ts new file mode 100644 index 00000000..49088ecc --- /dev/null +++ b/front-end-challenge/src/utils/generics/extractYoastDescription.ts @@ -0,0 +1,6 @@ +export function extractYoastDescription(html: string): string { + const match = html?.match( + /<meta\s+name=["']description["']\s+content=["']([^"']+)["']/, + ); + return match ? match[1] : ""; +} diff --git a/front-end-challenge/src/utils/generics/formatDate.ts b/front-end-challenge/src/utils/generics/formatDate.ts new file mode 100644 index 00000000..9294d0a7 --- /dev/null +++ b/front-end-challenge/src/utils/generics/formatDate.ts @@ -0,0 +1,59 @@ +import { + differenceInDays, + differenceInHours, + differenceInMinutes, + differenceInMonths, + differenceInYears, + format, + parseISO, +} from "date-fns"; +import { ptBR } from "date-fns/locale"; + +export function formatDate(date: string | Date) { + return format(parseISO(date.toString()), "dd/MM/yyyy"); +} + +export function formatTime(date: string | Date) { + return format(parseISO(date.toString()), "HH:mm:ss"); +} + +export function formatDateTime(date: string | Date) { + return format(parseISO(date.toString()), "dd/MM/yyyy - HH:mm"); +} + +export function formatDateTimeWithRelative(date: string | Date): string { + if (!date) return "Sem data disponível"; + + const d = typeof date === "string" ? parseISO(date) : date; + const now = new Date(); + + const mins = differenceInMinutes(now, d); + let rel: string; + if (mins < 1) { + rel = "Agora"; + } else if (mins < 60) { + rel = `${mins} Min`; + } else { + const hrs = differenceInHours(now, d); + if (hrs < 24) { + rel = `${hrs} Hrs`; + } else { + const days = differenceInDays(now, d); + if (days < 30) { + rel = `${days} Dias`; + } else { + const months = differenceInMonths(now, d); + if (months < 12) { + rel = `${months} Meses`; + } else { + const years = differenceInYears(now, d); + rel = `${years} anos`; + } + } + } + } + + const fixed = format(d, "MMMM dd',' yyyy", { locale: ptBR }); + + return `${rel} • ${fixed}`; +} diff --git a/front-end-challenge/src/vite-env.d.ts b/front-end-challenge/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/front-end-challenge/src/vite-env.d.ts @@ -0,0 +1 @@ +/// <reference types="vite/client" /> diff --git a/front-end-challenge/tsconfig.app.json b/front-end-challenge/tsconfig.app.json new file mode 100644 index 00000000..26190bec --- /dev/null +++ b/front-end-challenge/tsconfig.app.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src"] +} diff --git a/front-end-challenge/tsconfig.cypress.json b/front-end-challenge/tsconfig.cypress.json new file mode 100644 index 00000000..2a716c29 --- /dev/null +++ b/front-end-challenge/tsconfig.cypress.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.node.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "node", + "verbatimModuleSyntax": false, + "types": ["node"] + }, + "include": ["cypress.config.ts", "cypress/support/**/*.ts"] +} diff --git a/front-end-challenge/tsconfig.jest.json b/front-end-challenge/tsconfig.jest.json new file mode 100644 index 00000000..87e4f732 --- /dev/null +++ b/front-end-challenge/tsconfig.jest.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.app.json", + "compilerOptions": { + "module": "CommonJS", + "verbatimModuleSyntax": false, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "react-jsx", + "types": ["jest", "node"] + }, + "include": [ + "src/**/*", + "jest.config.ts", + "jest.setup.ts", + "**/*.test.ts", + "**/*.test.tsx" + ] +} diff --git a/front-end-challenge/tsconfig.json b/front-end-challenge/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/front-end-challenge/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/front-end-challenge/tsconfig.node.json b/front-end-challenge/tsconfig.node.json new file mode 100644 index 00000000..1277197e --- /dev/null +++ b/front-end-challenge/tsconfig.node.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": [ + "vite.config.ts", + "cypress.config.ts", + "cypress/**/*.ts", + "cypress/e2e/home.cy.tsx", + "jest.config.ts", + "jest.setup.ts" + ] +} diff --git a/front-end-challenge/vite.config.ts b/front-end-challenge/vite.config.ts new file mode 100644 index 00000000..fcdeea23 --- /dev/null +++ b/front-end-challenge/vite.config.ts @@ -0,0 +1,7 @@ +import tailwindcss from "@tailwindcss/vite"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [react(), tailwindcss()], +}); From 1c1529f6de2baa1c77a55590946f10c951c0fb26 Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 12:24:30 -0300 Subject: [PATCH 2/7] feat: update infos to run project --- front-end-challenge/.env.example | 6 ++-- front-end-challenge/README.md | 43 ++++++++++---------------- front-end-challenge/docker-compose.yml | 7 ++--- 3 files changed, 23 insertions(+), 33 deletions(-) diff --git a/front-end-challenge/.env.example b/front-end-challenge/.env.example index 0f8c5312..a520f4dd 100644 --- a/front-end-challenge/.env.example +++ b/front-end-challenge/.env.example @@ -1,3 +1,3 @@ -VITE_BASE_URL_API_CLIENT= -VITE_CELLPHONE_NUMBER= -VITE_LINKEDIN_ACCOUNT= \ No newline at end of file +VITE_BASE_URL_API_CLIENT=https://blog.apiki.com/wp-json/wp/v2/ +VITE_CELLPHONE_NUMBER=5571996063783 +VITE_LINKEDIN_ACCOUNT=algeferson \ No newline at end of file diff --git a/front-end-challenge/README.md b/front-end-challenge/README.md index a5e02c72..0d2febce 100644 --- a/front-end-challenge/README.md +++ b/front-end-challenge/README.md @@ -1,6 +1,6 @@ -# XXXXXXXXXXX 🚀 +# Apiki 🚀 -> Aplicação React de XXXXXXX. +> Aplicação React de Apiki. [![CI](https://github.com/seu-usuario/control361/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/seu-usuario/control361/actions/workflows/ci-cd.yml) [![Docker](https://img.shields.io/badge/docker-ready-blue)](#docker) @@ -10,7 +10,7 @@ ## 📋 Sumário -- [XXXXXXXXXXX 🚀](#xxxxxxxxxxx-) +- [Apiki 🚀](#apiki-) - [📋 Sumário](#-sumário) - [🧐 Sobre](#-sobre) - [✨ Funcionalidades](#-funcionalidades) @@ -29,17 +29,14 @@ ## 🧐 Sobre -Este repositório contém a aplicação **Control361**, desenvolvida em React + TypeScript, gerenciador global de estado com Zustand, formulários com React Hook Form + Zod e exibição de marcadores no mapa via Google Maps API. +Este repositório contém a aplicação **Apiki**, desenvolvida em React + TypeScript, gerenciador global de estado com Zustand, formulários com React Hook Form + Zod. --- ## ✨ Funcionalidades -- Filtro por status (rastreados / outros). -- Busca por placa ou frota. -- Mapas interativos com pins e infowindows. -- Estado global via Zustand. -- Validação de formulários com Zod. +- Listagem das notícias. +- Visualização de detalhes de cada notícia. --- @@ -57,18 +54,18 @@ Este repositório contém a aplicação **Control361**, desenvolvida em React + 1. Clone o repositório: ```bash - git clone https://github.com/GefersonLopes/control361 - cd control361 + git clone https://github.com/GefersonLopes/front-end-challenge + cd front-end-challenge ``` 2. Instale as dependências: ```bash - npm ci + npm i ``` 3. Crie um arquivo `.env` na raiz, copiando de `.env.example`: ```bash cp .env.example .env ``` -4. Ajuste as variáveis de ambiente conforme necessário. +4. Ajuste as variáveis de ambiente conforme necessário. (Deixei já o padrão que será funcional) --- @@ -77,16 +74,11 @@ Este repositório contém a aplicação **Control361**, desenvolvida em React + As seguintes variáveis devem estar definidas no seu `.env`: ```dotenv -VITE_GOOGLE_MAPS_API_KEY=... # Chave da Google Maps JavaScript API -VITE_API_CLIENT_KEY=... # Token de autenticação do client -VITE_BASE_URL_API_CLIENT=... # URL base da API backend -VITE_GOOGLE_MAPS_COORDINATES_URL="https://www.google.com/maps/search/?api=1&query=" +VITE_BASE_URL_API_CLIENT=https://blog.apiki.com/wp-json/wp/v2/ +VITE_CELLPHONE_NUMBER=5571996063783 +VITE_LINKEDIN_ACCOUNT=algeferson ``` -> Mantenha o `.env` fora do controle de versão! - ---- - ## 🧑‍💻 Desenvolvimento Local Execute em modo de desenvolvimento com Vite e hot-reload: @@ -125,10 +117,9 @@ services: ports: - "5173:5173" environment: - - VITE_GOOGLE_MAPS_API_KEY=${VITE_GOOGLE_MAPS_API_KEY} - - VITE_API_CLIENT_KEY=${VITE_API_CLIENT_KEY} - - VITE_BASE_URL_API_CLIENT=${VITE_BASE_URL_API_CLIENT} - - VITE_GOOGLE_MAPS_COORDINATES_URL=${VITE_GOOGLE_MAPS_COORDINATES_URL} + - VITE_BASE_URL_API_CLIENT={{ VITE_BASE_URL_API_CLIENT }} + - VITE_CELLPHONE_NUMBER={{ VITE_CELLPHONE_NUMBER }} + - VITE_LINKEDIN_ACCOUNT={{ VITE_LINKEDIN_ACCOUNT }} ``` Para rodar: @@ -182,7 +173,7 @@ Defina as mesmas variáveis de ambiente no painel Vercel (Production & Preview). ## 🗂️ Estrutura de Pastas ``` -XXXXXXXXXXX/ +Apiki/ ├── .env.example ├── Dockerfile ├── Dockerfile.dev diff --git a/front-end-challenge/docker-compose.yml b/front-end-challenge/docker-compose.yml index 147fb98f..c20f4ac0 100644 --- a/front-end-challenge/docker-compose.yml +++ b/front-end-challenge/docker-compose.yml @@ -9,7 +9,6 @@ services: ports: - "5173:5173" environment: - - VITE_GOOGLE_MAPS_API_KEY=${VITE_GOOGLE_MAPS_API_KEY} - - VITE_API_CLIENT_KEY=${VITE_API_CLIENT_KEY} - - VITE_BASE_URL_API_CLIENT=${VITE_BASE_URL_API_CLIENT} - - VITE_GOOGLE_MAPS_COORDINATES_URL=${VITE_GOOGLE_MAPS_COORDINATES_URL} + - VITE_BASE_URL_API_CLIENT={{ VITE_BASE_URL_API_CLIENT }} + - VITE_CELLPHONE_NUMBER={{ VITE_CELLPHONE_NUMBER }} + - VITE_LINKEDIN_ACCOUNT={{ VITE_LINKEDIN_ACCOUNT }} From 2740ac57bb61314eb4b7befd2b75eabb78625caa Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 12:52:55 -0300 Subject: [PATCH 3/7] fix: structure --- front-end-challenge/README.md => README.md | 0 front-end-challenge/eslint.config.js | 7 +- front-end-challenge/package-lock.json | 11525 +++++++++++++++++++ front-end-challenge/package.json | 1 + 4 files changed, 11532 insertions(+), 1 deletion(-) rename front-end-challenge/README.md => README.md (100%) create mode 100644 front-end-challenge/package-lock.json diff --git a/front-end-challenge/README.md b/README.md similarity index 100% rename from front-end-challenge/README.md rename to README.md diff --git a/front-end-challenge/eslint.config.js b/front-end-challenge/eslint.config.js index 48565b08..c7ba124a 100644 --- a/front-end-challenge/eslint.config.js +++ b/front-end-challenge/eslint.config.js @@ -50,7 +50,12 @@ export default [ "unused-imports": unusedImports, }, rules: { - "prettier/prettier": ["error", {}, { usePrettierrc: true }], + "prettier/prettier": [ + "error", + {}, + { usePrettierrc: true }, + { endOfLine: "auto" }, + ], "simple-import-sort/imports": "error", "simple-import-sort/exports": "error", "unused-imports/no-unused-imports": "error", diff --git a/front-end-challenge/package-lock.json b/front-end-challenge/package-lock.json new file mode 100644 index 00000000..8b55751b --- /dev/null +++ b/front-end-challenge/package-lock.json @@ -0,0 +1,11525 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@hookform/resolvers": "^5.0.1", + "@mui/icons-material": "^7.1.0", + "@react-google-maps/api": "^2.20.6", + "@react-oauth/google": "^0.12.2", + "@tailwindcss/vite": "^4.1.5", + "@tanstack/react-query": "^5.75.7", + "@tanstack/react-query-devtools": "^5.75.7", + "@testing-library/user-event": "^14.6.1", + "@types/testing-library__user-event": "^4.1.1", + "axios": "^1.9.0", + "client": "file:", + "clsx": "^2.1.1", + "control361": "file:", + "date-fns": "^4.1.0", + "framer-motion": "^12.12.1", + "graphql-request": "^7.2.0", + "i18next": "^25.1.2", + "jwt-decode": "^4.0.0", + "lucide-react": "^0.535.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-hook-form": "^7.56.3", + "react-i18next": "^15.5.1", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0", + "react-router-dom": "^7.6.0", + "react-select": "^5.10.2", + "uuid": "^11.1.0", + "zod": "^3.24.4", + "zustand": "^5.0.4" + }, + "devDependencies": { + "@cypress/react": "^9.0.1", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.25.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.3.0", + "@types/jest": "^29.5.14", + "@types/leaflet": "^1.9.17", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@typescript-eslint/eslint-plugin": "^8.32.0", + "@typescript-eslint/parser": "^8.32.0", + "@vitejs/plugin-react": "^4.4.1", + "autoprefixer": "^10.4.21", + "cross-env": "^7.0.3", + "cypress": "^14.3.3", + "esbuild": "^0.25.4", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.3", + "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "eslint-plugin-simple-import-sort": "^12.1.1", + "eslint-plugin-unused-imports": "^4.1.4", + "globals": "^16.0.0", + "husky": "^9.1.7", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "postcss": "^8.5.3", + "prettier": "^3.5.3", + "tailwindcss": "^4.1.5", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.2", + "typescript": "~5.8.3", + "typescript-eslint": "^8.30.1", + "vite": "^6.3.5" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@cypress/react": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@cypress/react/-/react-9.0.1.tgz", + "integrity": "sha512-qu6ziP2smdlfy3Yvrhm6PadxEtkc/cl6YhZu3h6KCtz+0s54joqxp6uGYOglpwyMBp3qjtSil1JVlFX0hUi5LQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18 || ^19", + "@types/react-dom": "^18 || ^19", + "cypress": "*", + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@cypress/request": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.4", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.14.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/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/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "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/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.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "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.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "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/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/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "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.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz", + "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@googlemaps/js-api-loader": { + "version": "1.16.8", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.8.tgz", + "integrity": "sha512-CROqqwfKotdO6EBjZO/gQGVTbeDps5V7Mt9+8+5Q+jTg5CRMi3Ii/L9PmV3USROrt2uWxtGzJHORmByxyo9pSQ==", + "license": "Apache-2.0" + }, + "node_modules/@googlemaps/markerclusterer": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.5.3.tgz", + "integrity": "sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==", + "license": "Apache-2.0", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "supercluster": "^8.0.1" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.1.tgz", + "integrity": "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.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.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz", + "integrity": "sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz", + "integrity": "sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^7.2.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz", + "integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/core-downloads-tracker": "^7.2.0", + "@mui/system": "^7.2.0", + "@mui/types": "^7.4.4", + "@mui/utils": "^7.2.0", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.1.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^7.2.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz", + "integrity": "sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz", + "integrity": "sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz", + "integrity": "sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/private-theming": "^7.2.0", + "@mui/styled-engine": "^7.2.0", + "@mui/types": "^7.4.4", + "@mui/utils": "^7.2.0", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz", + "integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/types": "^7.4.4", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-google-maps/api": { + "version": "2.20.7", + "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.20.7.tgz", + "integrity": "sha512-ys7uri3V6gjhYZUI43srHzSKDC6/jiKTwHNlwXFTvjeaJE3M3OaYBt9FZKvJs8qnOhL6i6nD1BKJoi1KrnkCkg==", + "license": "MIT", + "dependencies": { + "@googlemaps/js-api-loader": "1.16.8", + "@googlemaps/markerclusterer": "2.5.3", + "@react-google-maps/infobox": "2.20.0", + "@react-google-maps/marker-clusterer": "2.20.0", + "@types/google.maps": "3.58.1", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19", + "react-dom": "^16.8 || ^17 || ^18 || ^19" + } + }, + "node_modules/@react-google-maps/infobox": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.20.0.tgz", + "integrity": "sha512-03PJHjohhaVLkX6+NHhlr8CIlvUxWaXhryqDjyaZ8iIqqix/nV8GFdz9O3m5OsjtxtNho09F/15j14yV0nuyLQ==", + "license": "MIT" + }, + "node_modules/@react-google-maps/marker-clusterer": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.20.0.tgz", + "integrity": "sha512-tieX9Va5w1yP88vMgfH1pHTacDQ9TgDTjox3tLlisKDXRQWdjw+QeVVghhf5XqqIxXHgPdcGwBvKY6UP+SIvLw==", + "license": "MIT" + }, + "node_modules/@react-leaflet/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz", + "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/@react-oauth/google": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@react-oauth/google/-/google-0.12.2.tgz", + "integrity": "sha512-d1GVm2uD4E44EJft2RbKtp8Z1fp/gK8Lb6KHgs3pHlM0PxCXGLaq8LLYQYENnN4xPWO1gkL4apBtlPKzpLvZwg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.4.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.4.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.0", + "inBundle": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", + "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "tailwindcss": "4.1.11" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.83.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.83.1.tgz", + "integrity": "sha512-OG69LQgT7jSp+5pPuCfzltq/+7l2xoweggjme9vlbCPa/d7D7zaqv5vN/S82SzSYZ4EDLTxNO1PWrv49RAS64Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.84.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.84.0.tgz", + "integrity": "sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.84.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.84.1.tgz", + "integrity": "sha512-zo7EUygcWJMQfFNWDSG7CBhy8irje/XY0RDVKKV4IQJAysb+ZJkkJPcnQi+KboyGUgT+SQebRFoTqLuTtfoDLw==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.83.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.84.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.84.1.tgz", + "integrity": "sha512-nle+OQ9B3Z3EG2R3ixvaNcJ6OeqGwmAc5iMDW6Vj+emLZkWRrN3BDsrzZQu414n34lpxplnC7z1jmKuU/scHCQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-devtools": "5.84.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.84.1", + "react": "^18 || ^19" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.4.tgz", + "integrity": "sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/google.maps": { + "version": "3.58.1", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", + "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==", + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/leaflet": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.20.tgz", + "integrity": "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/node": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/react": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/testing-library__user-event": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/testing-library__user-event/-/testing-library__user-event-4.1.1.tgz", + "integrity": "sha512-CIpTxvHwoLEe88deUttZ724SE28hX/x3zAdJIQLoltnngl//akeEKFB5DeNqBOWu7ZCEHFiTqRBMKuswXJqYqg==", + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.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/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.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": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.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/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "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.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.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.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.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.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "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/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "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/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/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/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "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.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001731", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", + "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "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/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "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/chalk/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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client": { + "resolved": "", + "link": true + }, + "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/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "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/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/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.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/control361": { + "resolved": "", + "link": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "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.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cypress": { + "version": "14.5.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.5.3.tgz", + "integrity": "sha512-syLwKjDeMg77FRRx68bytLdlqHXDT4yBVh0/PPkcgesChYDjUZbwxLqMXuryYKzAyJsPsQHUDW1YU74/IYEUIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^3.0.9", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-table3": "0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "hasha": "5.2.2", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.7.1", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + } + }, + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "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/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "license": "MIT", + "peer": true + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.194", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz", + "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@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.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.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-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "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-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", + "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/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/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/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/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "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/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.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/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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/framer-motion": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "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/graphql": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.2.0.tgz", + "integrity": "sha512-0GR7eQHBFYz372u9lxS16cOtEekFlZYB2qOyq8wDvzRmdRSJ0mgUVX1tzNcIzk3G+4NY+mGtSz411wZdeDF/+A==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "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-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.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/i18next": { + "version": "25.3.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.3.2.tgz", + "integrity": "sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause" + }, + "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==", + "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-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "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==", + "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/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "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.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "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.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.535.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.535.0.tgz", + "integrity": "sha512-2E3+YWGLpjZ8ejIYrdqxVjWMSMiRQHmU6xZYE9xA2SC5j2m0NeB4/acjhRdhxbfniBKoNEukDDQnmShTxwOQ4g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "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/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "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/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "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-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "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/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "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==", + "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/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.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==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "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==", + "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT", + "peer": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.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/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.61.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", + "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-i18next": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.6.1.tgz", + "integrity": "sha512-uGrzSsOUUe2sDBG/+FJq2J1MM+Y4368/QW8OLEKSFvnDflHBbZhSd1u3UkW0Z06rMhZmnB/AQrhCpYfE5/5XNg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0", + "typescript": "^5" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", + "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", + "license": "MIT", + "peer": true + }, + "node_modules/react-leaflet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz", + "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^3.0.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.1.tgz", + "integrity": "sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.7.1.tgz", + "integrity": "sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.7.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "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/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "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-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "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": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/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/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "license": "MIT", + "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/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "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.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "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/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "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/ts-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.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/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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/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": "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "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/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.7.tgz", + "integrity": "sha512-Ot6uqHDW/O2VdYsKLLU8GQu8sCOM1LcoE8RwvLv9uuRT9s6SOHCKs0ZEOhxg+I1Ld+A1Q5lwx+UlKXXUoCZITg==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/front-end-challenge/package.json b/front-end-challenge/package.json index 588b0b2b..2c7e2d11 100644 --- a/front-end-challenge/package.json +++ b/front-end-challenge/package.json @@ -32,6 +32,7 @@ "control361": "file:", "date-fns": "^4.1.0", "framer-motion": "^12.12.1", + "graphql-request": "^7.2.0", "i18next": "^25.1.2", "jwt-decode": "^4.0.0", "lucide-react": "^0.535.0", From 98e946f63c029edcf2a69576afb8b089fdcb06af Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 12:53:27 -0300 Subject: [PATCH 4/7] fix: layout in post page --- .../components/layout/ProfileCard/index.tsx | 79 +++++++++++-------- front-end-challenge/src/pages/PostPage.tsx | 5 +- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/front-end-challenge/src/components/layout/ProfileCard/index.tsx b/front-end-challenge/src/components/layout/ProfileCard/index.tsx index 7277cf87..f1b195e6 100644 --- a/front-end-challenge/src/components/layout/ProfileCard/index.tsx +++ b/front-end-challenge/src/components/layout/ProfileCard/index.tsx @@ -8,12 +8,14 @@ export interface ProfileCardProps { imageUrl: string; name: string; description: string; + secundaryDescription?: string; } export const ProfileCard: React.FC<ProfileCardProps> = ({ imageUrl, name, description, + secundaryDescription, }) => { const socialLinks = [ { href: hrefLinks.hrefLinkedin, icon: <FaLinkedin size={20} /> }, @@ -22,45 +24,54 @@ export const ProfileCard: React.FC<ProfileCardProps> = ({ ]; return ( - <div className="max-w-sm w-full bg-gradient-to-br from-purple-600 to-indigo-600 text-white rounded-lg overflow-hidden"> - <div className="p-6 flex flex-col items-center"> - <div className="relative w-24 h-24 rounded-lg overflow-hidden ring-2 ring-white"> - <Image - src={imageUrl} - alt={name} - className="object-cover w-full h-full" + <section className="flex flex-col lg:flex-row items-center justify-center"> + <div className="max-w-sm w-full bg-gradient-to-br from-purple-600 to-indigo-600 text-white rounded-lg overflow-hidden"> + <div className="p-6 flex flex-col items-center"> + <div className="relative w-24 h-24 rounded-lg overflow-hidden ring-2 ring-white"> + <Image + src={imageUrl} + alt={name} + className="object-cover w-full h-full" + /> + </div> + + <h2 className="mt-4 text-xl font-semibold text-center">{name}</h2> + <div className="w-full border-t border-white/50 my-4" /> + <div + className="post-detail__content prose prose-lg" + dangerouslySetInnerHTML={{ + __html: description || "Nenhum contéudo encontrado", + }} /> </div> - <h2 className="mt-4 text-xl font-semibold text-center">{name}</h2> - <div className="w-full border-t border-white/50 my-4" /> - <div - className="post-detail__content prose prose-lg" - dangerouslySetInnerHTML={{ - __html: description || "Nenhum contéudo encontrado", - }} - /> - </div> - - <div className="bg-gradient-to-br from-indigo-700 to-indigo-900 px-6 py-4 flex flex-col items-center justify-center space-y-4"> - <span className="text-sm font-medium text-center"> - Conecte-se comigo nas redes sociais - </span> - <div className="flex items-center space-x-3"> - {socialLinks.map((link, index) => ( - <a - key={index} - href={link.href} - target="_blank" - rel="noopener noreferrer" - className="text-white hover:text-gray-200 transition-colors" - > - {link.icon} - </a> - ))} + <div className="bg-gradient-to-br from-indigo-700 to-indigo-900 px-6 py-4 flex flex-col items-center justify-center space-y-4"> + <span className="text-sm font-medium text-center"> + Conecte-se comigo nas redes sociais + </span> + <div className="flex items-center space-x-3"> + {socialLinks.map((link, index) => ( + <a + key={index} + href={link.href} + target="_blank" + rel="noopener noreferrer" + className="text-white hover:text-gray-200 transition-colors" + > + {link.icon} + </a> + ))} + </div> </div> </div> - </div> + <aside className="w-full lg:w-1/2 p-6 lg:pl-12"> + {secundaryDescription && ( + <p className="mt-4 text-sm text-gray-500 text-justify"> + {secundaryDescription} + </p> + )} + </aside> + </section> ); }; diff --git a/front-end-challenge/src/pages/PostPage.tsx b/front-end-challenge/src/pages/PostPage.tsx index b9520e84..7204b811 100644 --- a/front-end-challenge/src/pages/PostPage.tsx +++ b/front-end-challenge/src/pages/PostPage.tsx @@ -55,7 +55,7 @@ const PostPage = () => { }} /> </article> - <article className="post-detail mx-auto max-w-7xl"> + <article className="post-detail flex flex-col items-start w-full mt-8"> <ProfileCard imageUrl={post?.embedded?.author[0]?.avatar_urls?.["96"] || ""} name={post?.embedded?.author[0]?.name || "Autor Desconhecido"} @@ -63,6 +63,9 @@ const PostPage = () => { extractYoastDescription(post?.embedded?.author[0]?.yoast_head) || "Descrição não disponível" } + secundaryDescription={ + post?.embedded?.author[0]?.description || "Nenhum contéudo encontrado" + } /> </article> </main> From 7a46e26fb9cca3f966c380e6045ed9007757de81 Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 13:34:21 -0300 Subject: [PATCH 5/7] feat: improving performance --- .../layout/FallbackSpinner/index.tsx | 12 +++ .../src/components/ui/Img/index.tsx | 6 ++ front-end-challenge/src/pages/HomePage.tsx | 17 +++- front-end-challenge/src/pages/PostPage.tsx | 96 ++++++++++--------- .../src/routes/index.routes.tsx | 25 +++-- 5 files changed, 98 insertions(+), 58 deletions(-) create mode 100644 front-end-challenge/src/components/layout/FallbackSpinner/index.tsx diff --git a/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx b/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx new file mode 100644 index 00000000..2f6c22b4 --- /dev/null +++ b/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx @@ -0,0 +1,12 @@ +import Spinner from "../../ui/Spinner"; +import FallbackContainer from "../FallbackContainer"; + +function FallbackSpinner() { + return ( + <FallbackContainer> + <Spinner /> + </FallbackContainer> + ); +} + +export default FallbackSpinner; \ No newline at end of file diff --git a/front-end-challenge/src/components/ui/Img/index.tsx b/front-end-challenge/src/components/ui/Img/index.tsx index fc4a88eb..85278014 100644 --- a/front-end-challenge/src/components/ui/Img/index.tsx +++ b/front-end-challenge/src/components/ui/Img/index.tsx @@ -5,6 +5,8 @@ export interface ImageProps extends ImgHTMLAttributes<HTMLImageElement> { alt: string; className?: string; fallbackSrc?: string; + srcSet?: string; + sizes?: string; } export const Image: React.FC<ImageProps> = ({ @@ -14,6 +16,8 @@ export const Image: React.FC<ImageProps> = ({ fallbackSrc = "/assets/img/placeholder.png", onError, loading = "lazy", + srcSet, + sizes, ...rest }) => { const [currentSrc, setCurrentSrc] = useState(src || fallbackSrc); @@ -32,6 +36,8 @@ export const Image: React.FC<ImageProps> = ({ loading={loading} className={className} onError={handleError} + srcSet={srcSet} + sizes={sizes} {...rest} /> ); diff --git a/front-end-challenge/src/pages/HomePage.tsx b/front-end-challenge/src/pages/HomePage.tsx index 65140699..6b53e75a 100644 --- a/front-end-challenge/src/pages/HomePage.tsx +++ b/front-end-challenge/src/pages/HomePage.tsx @@ -1,8 +1,11 @@ +import { lazy, Suspense } from "react"; import AsyncFallback from "../components/layout/AsyncFallback"; -import CardItems from "../components/layout/CardItems"; -import MainNews from "../components/layout/MainNews"; import Button from "../components/ui/Button"; import { useInfinitePosts } from "../hooks/useInfinitePosts"; +import FallbackSpinner from "../components/layout/FallbackSpinner"; + +const CardItems = lazy(() => import("../components/layout/CardItems")); +const MainNews = lazy(() => import("../components/layout/MainNews")); function HomePage() { const { @@ -33,11 +36,17 @@ function HomePage() { return ( <> - {firstPost && <MainNews key={firstPost.id} {...firstPost} />} + {firstPost && ( + <Suspense fallback={<FallbackSpinner />}> + <MainNews key={firstPost.id} {...firstPost} /> + </Suspense> + )} <div className="home__grid mt-4"> {otherPosts.map((post) => ( - <CardItems key={post.id} {...post} /> + <Suspense key={post.id} fallback={<FallbackSpinner />}> + <CardItems key={post.id} {...post} /> + </Suspense> ))} </div> </> diff --git a/front-end-challenge/src/pages/PostPage.tsx b/front-end-challenge/src/pages/PostPage.tsx index 7204b811..48db5f74 100644 --- a/front-end-challenge/src/pages/PostPage.tsx +++ b/front-end-challenge/src/pages/PostPage.tsx @@ -1,14 +1,16 @@ -import { useEffect } from "react"; +import { lazy, Suspense, useEffect } from "react"; import { FaArrowLeft } from "react-icons/fa6"; import { Link, useParams } from "react-router-dom"; import AsyncFallback from "../components/layout/AsyncFallback"; -import ProfileCard from "../components/layout/ProfileCard"; import Image from "../components/ui/Img"; import { usePost } from "../hooks/usePost"; import { extractYoastDescription } from "../utils/generics/extractYoastDescription"; import { formatDateTimeWithRelative } from "../utils/generics/formatDate"; import stripCaptionWidth from "../utils/generics/RemoveStyle"; +import FallbackSpinner from "../components/layout/FallbackSpinner"; + +const ProfileCard = lazy(() => import("../components/layout/ProfileCard")); const PostPage = () => { const { slug } = useParams<{ slug: string }>(); @@ -21,52 +23,58 @@ const PostPage = () => { return ( <AsyncFallback isLoading={isLoading} isError={isError || !post}> <main className="flex flex-col items-center"> - <article className="post-detail mx-auto max-w-7xl"> - <Link - to="/" - className="flex items-center gap-2 text-primary hover:underline underline-offset-3" - > - <FaArrowLeft size={14} /> Voltar - </Link> + <Suspense fallback={<FallbackSpinner />}> + <article className="post-detail mx-auto max-w-7xl"> + <Link + to="/" + className="flex items-center gap-2 text-primary hover:underline underline-offset-3" + > + <FaArrowLeft size={14} /> Voltar + </Link> - <div className="relative"> - <Image - className="post-detail__img object-cover my-4 rounded" - src={post?.mediaUrl || ""} - alt={post?.title || "Imagem do post"} - /> - <header className="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4"> - <h1 - className="post-detail__title text-md sm:text-3xl font-bold mb-2" - dangerouslySetInnerHTML={{ - __html: post?.title || "Nenhum contéudo encontrado", - }} + <div className="relative"> + <Image + className="post-detail__img object-cover my-4 rounded" + src={post?.mediaUrl || ""} + alt={post?.title || "Imagem do post"} /> - <p className="text-sm text-gray-600"> - {formatDateTimeWithRelative(post?.date || "")} - </p> - </header> - </div> + <header className="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4"> + <h1 + className="post-detail__title text-md sm:text-3xl font-bold mb-2" + dangerouslySetInnerHTML={{ + __html: post?.title || "Nenhum contéudo encontrado", + }} + /> + <p className="text-sm text-gray-600"> + {formatDateTimeWithRelative(post?.date || "")} + </p> + </header> + </div> - <div - className="post-detail__content prose prose-lg" - dangerouslySetInnerHTML={{ - __html: stripCaptionWidth(post?.content || ""), - }} - /> - </article> + <div + className="post-detail__content prose prose-lg" + dangerouslySetInnerHTML={{ + __html: stripCaptionWidth(post?.content || ""), + }} + /> + </article> + </Suspense> <article className="post-detail flex flex-col items-start w-full mt-8"> - <ProfileCard - imageUrl={post?.embedded?.author[0]?.avatar_urls?.["96"] || ""} - name={post?.embedded?.author[0]?.name || "Autor Desconhecido"} - description={ - extractYoastDescription(post?.embedded?.author[0]?.yoast_head) || - "Descrição não disponível" - } - secundaryDescription={ - post?.embedded?.author[0]?.description || "Nenhum contéudo encontrado" - } - /> + <Suspense fallback={<FallbackSpinner />}> + <ProfileCard + imageUrl={post?.embedded?.author[0]?.avatar_urls?.["96"] || ""} + name={post?.embedded?.author[0]?.name || "Autor Desconhecido"} + description={ + extractYoastDescription( + post?.embedded?.author[0]?.yoast_head, + ) || "Descrição não disponível" + } + secundaryDescription={ + post?.embedded?.author[0]?.description || + "Nenhum contéudo encontrado" + } + /> + </Suspense> </article> </main> </AsyncFallback> diff --git a/front-end-challenge/src/routes/index.routes.tsx b/front-end-challenge/src/routes/index.routes.tsx index 25d2c30e..1f0f86de 100644 --- a/front-end-challenge/src/routes/index.routes.tsx +++ b/front-end-challenge/src/routes/index.routes.tsx @@ -1,19 +1,24 @@ import { Route, Routes } from "react-router-dom"; +import { lazy, Suspense } from "react"; -import HomePage from "../pages/HomePage"; -import NotFoundPage from "../pages/NotFoundPage"; -import PostPage from "../pages/PostPage"; import Layout from "./layout.routes"; +import FallbackSpinner from "../components/layout/FallbackSpinner"; + +const HomePage = lazy(() => import("../pages/HomePage")); +const NotFoundPage = lazy(() => import("../pages/NotFoundPage")); +const PostPage = lazy(() => import("../pages/PostPage")); function UseRoutes() { return ( - <Routes> - <Route element={<Layout />}> - <Route path="/" element={<HomePage />} /> - <Route path="/post/:slug" element={<PostPage />} /> - </Route> - <Route path="*" element={<NotFoundPage />} /> - </Routes> + <Suspense fallback={<FallbackSpinner />}> + <Routes> + <Route element={<Layout />}> + <Route path="/" element={<HomePage />} /> + <Route path="/post/:slug" element={<PostPage />} /> + </Route> + <Route path="*" element={<NotFoundPage />} /> + </Routes> + </Suspense> ); } From bf1d004d4da458a82fb1e4f3fcb3992f35897532 Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 13:42:40 -0300 Subject: [PATCH 6/7] fix: error in lint --- front-end-challenge/eslint.config.js | 2 +- .../src/components/layout/FallbackSpinner/index.tsx | 2 +- front-end-challenge/src/pages/HomePage.tsx | 3 ++- front-end-challenge/src/pages/PostPage.tsx | 2 +- front-end-challenge/src/routes/index.routes.tsx | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/front-end-challenge/eslint.config.js b/front-end-challenge/eslint.config.js index c7ba124a..1a8351fe 100644 --- a/front-end-challenge/eslint.config.js +++ b/front-end-challenge/eslint.config.js @@ -54,7 +54,7 @@ export default [ "error", {}, { usePrettierrc: true }, - { endOfLine: "auto" }, + // { endOfLine: "auto" }, ], "simple-import-sort/imports": "error", "simple-import-sort/exports": "error", diff --git a/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx b/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx index 2f6c22b4..88447e64 100644 --- a/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx +++ b/front-end-challenge/src/components/layout/FallbackSpinner/index.tsx @@ -9,4 +9,4 @@ function FallbackSpinner() { ); } -export default FallbackSpinner; \ No newline at end of file +export default FallbackSpinner; diff --git a/front-end-challenge/src/pages/HomePage.tsx b/front-end-challenge/src/pages/HomePage.tsx index 6b53e75a..8f8576c9 100644 --- a/front-end-challenge/src/pages/HomePage.tsx +++ b/front-end-challenge/src/pages/HomePage.tsx @@ -1,8 +1,9 @@ import { lazy, Suspense } from "react"; + import AsyncFallback from "../components/layout/AsyncFallback"; +import FallbackSpinner from "../components/layout/FallbackSpinner"; import Button from "../components/ui/Button"; import { useInfinitePosts } from "../hooks/useInfinitePosts"; -import FallbackSpinner from "../components/layout/FallbackSpinner"; const CardItems = lazy(() => import("../components/layout/CardItems")); const MainNews = lazy(() => import("../components/layout/MainNews")); diff --git a/front-end-challenge/src/pages/PostPage.tsx b/front-end-challenge/src/pages/PostPage.tsx index 48db5f74..5b83adc5 100644 --- a/front-end-challenge/src/pages/PostPage.tsx +++ b/front-end-challenge/src/pages/PostPage.tsx @@ -3,12 +3,12 @@ import { FaArrowLeft } from "react-icons/fa6"; import { Link, useParams } from "react-router-dom"; import AsyncFallback from "../components/layout/AsyncFallback"; +import FallbackSpinner from "../components/layout/FallbackSpinner"; import Image from "../components/ui/Img"; import { usePost } from "../hooks/usePost"; import { extractYoastDescription } from "../utils/generics/extractYoastDescription"; import { formatDateTimeWithRelative } from "../utils/generics/formatDate"; import stripCaptionWidth from "../utils/generics/RemoveStyle"; -import FallbackSpinner from "../components/layout/FallbackSpinner"; const ProfileCard = lazy(() => import("../components/layout/ProfileCard")); diff --git a/front-end-challenge/src/routes/index.routes.tsx b/front-end-challenge/src/routes/index.routes.tsx index 1f0f86de..8ffb3271 100644 --- a/front-end-challenge/src/routes/index.routes.tsx +++ b/front-end-challenge/src/routes/index.routes.tsx @@ -1,8 +1,8 @@ -import { Route, Routes } from "react-router-dom"; import { lazy, Suspense } from "react"; +import { Route, Routes } from "react-router-dom"; -import Layout from "./layout.routes"; import FallbackSpinner from "../components/layout/FallbackSpinner"; +import Layout from "./layout.routes"; const HomePage = lazy(() => import("../pages/HomePage")); const NotFoundPage = lazy(() => import("../pages/NotFoundPage")); From 5c44e59e647875acb5fc9a94197205561f9d2b33 Mon Sep 17 00:00:00 2001 From: Geferson Lopes <gefersonjefreey@gmail.com> Date: Fri, 1 Aug 2025 14:53:03 -0300 Subject: [PATCH 7/7] fix: env to compose --- front-end-challenge/docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front-end-challenge/docker-compose.yml b/front-end-challenge/docker-compose.yml index c20f4ac0..75b75194 100644 --- a/front-end-challenge/docker-compose.yml +++ b/front-end-challenge/docker-compose.yml @@ -9,6 +9,6 @@ services: ports: - "5173:5173" environment: - - VITE_BASE_URL_API_CLIENT={{ VITE_BASE_URL_API_CLIENT }} - - VITE_CELLPHONE_NUMBER={{ VITE_CELLPHONE_NUMBER }} - - VITE_LINKEDIN_ACCOUNT={{ VITE_LINKEDIN_ACCOUNT }} + - VITE_BASE_URL_API_CLIENT=${VITE_BASE_URL_API_CLIENT} + - VITE_CELLPHONE_NUMBER=${VITE_CELLPHONE_NUMBER} + - VITE_LINKEDIN_ACCOUNT=${VITE_LINKEDIN_ACCOUNT}
  • h1;s<1X~TZa3pxNHeN{C{L&v53GBM#AFC+ za6goNSR#YSEPmt6Xz-t?`j)C~upSu0%go(eP{uZU!wyNqF_S4M+o57oP{S+~H{+OV zB(>Wv_?F$=wQ(rbr5oxSRl3B%w*sR+@OJdT3LC-%3R2{4V~IpB8Gp7a)45+hBKvXQ z`8-R*ywbUUm#1H7>=WIf>R1{VO#7Dg&3ZzHc&a+M%vOh!&vBrP>NYGqyk>i>UZr>= zGJe*LzFfW`kpjM>j1lDVFgAeD?m9}TW7JUJ?#!t2#$PpEGUn7Dv?*bX)I~tMN00F@ z_9&gUusoQU50I!I+vz(^b8=<`*^y!eEYddq<{3uL`%2zAfFnA+bDI5WRp5sc z*YPu)x&Huzcw!uPC^^qmYuu(P@;-3|t7$*XimVX?)A`(}UWKe;Fw;e^f8shK?Y%%1 zLWg_z>Qb5Z#26`@%A~8T`(}=;AIzbuKiZB~yw>J4DCv}Hj<+B!_b2i*40g&BFS=Wv6b1|3RHGmix8f>@ zt!+`}WlW;4@Ri>Xpr1&b<*0~HU}N)9EugwMxPTQaBR_kDM9xEA5v$RC2caq#6eY90 z%Qu1(o-P_sVx?WLBmUencO$p=5XN%B8&IOL4=w3~=VNTAX`-M~u+uO0m)a1q;-`GfDyY%z z4AXjn!K;gHe~BO^5Er0CfMbe3QbbPY)+FNeV;xJQO zRAc%ktb-8Rc^8 zTf8|+#>&UcWdKSweT2N?d4rQrZblWd)Te^+0nV2hKbd=XYM)Z|EF#^-EUI-ia)*%) zOv0RE7+*&Cnk~gdUm3();g1s)X66;&w=v3%bv1b(e0r8VE%}zng_oFz=cH(|sypQf zZ!6`o;7rw}+wtS0u&BH>S0dpPm^dK==m5iW8xeSGlpu7vZO7E0z=x9tRaI&^D)SM_ zggz@$Qi6+@lnz7uN|eJ_F#Uyw0Zwv^eOj05P$0%ISBk_{;g74AC}On)fITQTe{!32 z>I&ByYlb~=U>OlWS1)nxa6f5QB^kCDX~Jz*>rutSW2u^`Y& z10hB$pk%mnCdL=646@R7s<{0|bP2Ic(BmtG+I_z?|DQT>FZYOXRlCX9d=SU7?K zs<{OQD@tOl1G-aZ)JKa$#K*MPfe%p_2HiztoSI{`_SJ7%-u(0p5jXV5-nF3h+q=xv#GWGc$BJA$1#0G^q;s!Sp1=auPz}=SvTNv z!|)GLQ>=ek?55It(VBFBcD?$*yxy4qOoLt8W>`Aa!1X#0(q1%ZZf2F{-E3s10?@ z&C<*`iZWNZu*1c=Y6u`u3A;j?3z zSCNN^B+YSdp+yU)iCb%5%3dWy1Guq)d2?_jZnR5F9 z?e1)9hENsg<%5LMrCaOw0mHsJ_b+MOUl{5b#@M5hn1)vyKZJ9hB^~{I?q5jLiuEGb z+@YS6ON2+FEzBPd6met_?wZ|F;gZ=H!Q3`QO^^to6m{M%kY@K<7aOv(Tb&R zTAh2A?Dk4g)wLW=yIql5miRe?vEKYA!sY{|4bR^2t47VIN>VypD^2|Kk0=)1w=<6sky5Um$)a2 zXG0RQRt!`Db?>Nx+Ao}OY0T8Mg9am7jl<0c$gD-`WvxUq>%9HKqW0I>=2x%XQcApz z<#K&koS|*Qd2YvX@?PeCu19q-1Q@*P9BlSI&L#F8o_$Id_Z6q4+3H!mn|EFzM|2;e z(zcY`{PKz{Ja5&_U9$#Hbcwy%}ruX5#f zuDpD(f`yoAs2*$kk)(~=`1dXiS|s`5en0aqCA- zQHVqw9$U7%xlKY>A@t(q6>_L90YHtJ+@fWTrYp}rW62667yB^fFC0M`YNpW~h)@z& zPURV+E|(sebkn~i!-Y(hb4t2(8)XxfSY3w~GaNfZ=39rPYtya3gw|oq0g-n0_Z==a z*dRnq*an=;I3kv-`H#1~4}PXX7*PDK0xWYS*Wm(yI`Y=lhQ#v=rI9 zG?6N{9DdS;+XE$4O{_$Q;-1mH9hemPK0ctLC}I~OGX21Tqk$UDbd4$-;st`Cwb?GS zm2yj9s^S2_+fxOsc!XU9tMe=<07_!!imV6R*cMwXSh=Q`ehd?{$TtiN*AH=YvlW=} zIg90Y7L`Xy&q^6S)+IpRpt=t2r^Nn$`P8p4;ubegm<%jA{5Xep)+qRH+)As2zT+5Y z3N|{J3mws1`01S9A< zhNB~!!ZIZ*E>2J7miOZrQTrgfWr4OcZ=$OVqI@X(ijv`T1z^WjQC?19r5wSwoG5yh zTKbstibn^wqhhr87PC`q#k*07f(dz)HB`L})T82ESGJfh3-8>xj{K2pdYk2@;dB+ z7p9Ev+)ydGR_{>kg2xsVuR{}!*C!ta4$4o->)i71{n-XiUB9$A(xn9vF1U+p?;|?; z34m|7=^wa;7BlF$hYpxH5v=A{o_6$VsTsa!?s zb9~L|V{<&gbfbvsU+$f?mtAKN9(i3#0iWSta^Pwk_XVPJbq!}}pgOh|-9887iDu>W zmJ>_ja#&+CXM9R7+?$1!QD1##U^GUQ(<>B0>SbKDqURfcDr>Nd=}78kXl35;IYD`( zKIq ze;WFmsV&+>J@9Ao6}T9tG!{0)re+jg{{Z})jF-SYcwqx_1D>udZ3?=v_bhxOR9a%X zFWmEHFiUS*sj5`K#8bgf#o{*hk<(Uv8GjVGIIbhSH|)+)%>WEoE%}1NblO!oyvIr&Vp zwI5g;Pht*4@LtSHXvukx;yz_EKi|H8_@LabIF4D<^qCfKderAdk;4Z%Xw!_`sh6Cr z%n(_XVBZCb(r|J5j94)GxV$W?VhVGfoqbJOZf#8oU~gtU%hcka*nL+KEo;~P!HqHB z_nxBb7k|X&Gf9R& z)2^A~P=AalJ98E+M~^VmsFi4X$j6>FlU(4~%B9k#f3z8{p_2HR5#H`oTKP^@WTD>= z#KXKHO7a}c7S=k6=Vxxg~w)hm4Yjf&@~>>RwtIX(>6GhE9QvZc|A z>TAG&!UXY0hv5k}{tg?T*#Yay;yfi7v&uaE4gADeIkv&u)X!cB;`&7ciwi1?X_mEE zj}E;vER~@eJR%A>%$X6!=G{V}Do&w_alvgON5zQj>aVEuN4GM-%g#8K1+^Je8-Gz+ zjhiPe7k?ybn1Ytsn*L>d#XWN|@E>2UO>Shv{{SKz%jP~xRYMjU9?7_R6%%U99F-j_ zh544{(6`l08L}1$%s#Fx*4;wbKlWoy;}3ZzB0AhGY{C2{%wd)pTQvBAiuz9+%A1VW z!#KWY?Es2>CNf)h1k&wv=AgGp!R}`9lgx>axr?2Mz$(R0a{mCtkr%J+;rX{vqg7b! z{M5od-43pG9v=v6`qU*cxmAy-P|Jg0V(arYxDx)6{vfn5C>|r+!V0sELtv`pfk7?q zDOZM*ESYmHw=3vnOR(@jYfJkhT?2y@3@PcC{z4_}?jep#dEu0D!b;ssIm}U4lw)iI zmUxt4TtVAISy1W;%KM!d?q3zXeu0%lWL>SU2^3? z$n4So0OAbY%2%)l51FA|3&a37qr@8oh+O_5N&;e+{6Q%O-1o%U#W@6})%o1TEp#e( z8tgdr5Ycb$TPwxe6D3vD;kKo=8h~@$e@O1R{Yr5-zn51p;g)9A`1^pR$jp($Q$Fyi zkV~?+6>yHVmRwW`3O&v4$1zTWwY0;~Ofno&>IxXE+P>kGy{hp!dzW@?&;I~j9kpxz zHJ7OW00l`~ji1|s=cIHvfr^Rt5d&$!x(MuysHIc5^rw|fE$c*kp3oA~)AK8izPMry z*Ybpm2k?jvy%OwOwq#|QylX^F7gXE>jlKT>h<0MuzOQ6izzC zR`};IjF>x}r^}cbp*)dGRdHg)-Nmle>?1{DSe3oN+!lmanc`D|92`wI#Y??$xK~qx z9YHB$sRJ3gWw~i-`j)U=c_*~7IX|-;C+IIyv?%1|(qJ+jKejKSXnT@}M{C0e^)~f4 zFk<1jYvZM@pM*itIEqmo)db#^%ScCX*|ke3R~h5 zT;{hv3BukC!#Eh{uhg#z&R-F;e-yFLxY#u2qfPNnZa4!&s2rXrYg7-omK6ESrPShQ z=DSPhiFYfDRbC+0!!u~iXH{Dz{kvW*69@gcMJ53I^7Yma_lM3>}#Y)jbv}P&|`=nBbE2vJX0o=YvK z+2#{C%sr3u4;jyVO1{6|UAX9Em2$a%l3W=%pWK&(dltV_`0q?_c<}WcFLtUl!TOp1 z00K-lij>sDTZk@q#8+`8ml|p`Kwd^X56r!d#T-LEB{Y1aW(d=tp5{#9ST`tU6yPDP zMw*+vO(4a%j{a;J?pR>MHU@Q%Gb^q`VK2rx0)z@M7%jgu1>rTphY5Le^qs%s^%w>0 ziM+W^V`BdRq~!b@VVZm@n%p)YHw6b~=aLR}{l1^s1Rb`Z?Ea^ZjP2^G6ll%Hf{!C{ zDjb~6gF>cY0Nn`LW6H|_F z=p|n^4leUwQ|=Psy`u?d>qhPseV56O`G8mi`R%+*O0XU!YPE=Tdv_}fuO6VDy9xXd zf!B2&$gyzbMllugB)A_dwxID(ANw*{$F2@-A=Y;>)~{KPHvVN#C#ETR#dbxsE-2^V9RB+{!TW``{Jl-VhTqgKkmvN$&+#|8kzNl| zvJ@9>%W%3ta&SD$(W>43p|IYgRgFcq<+w~$P1uT7=2Cn?;$m=A}!MIspc_*H* zHP8?DAJb3HjN=x|WgNArlm>a0j^1Jnxl_Y%cD2U4QwJ>kZa_iFXwMH!q(4!#NQ2a%qB$MK zSrjT@;nl#KNKy7D?U^`a#9ng{T)|yOn?Dl_Ea=q8CcB8Wg5!zUf$%w%x8j&BU3GbzJak7e2DdqhO-Fg+e$zzo7*lZhN(Nty z>$cdgWA0h5W$>@L=Hr=)%-H65h?KJ#PDLHDkmc*Vd4w=6j4#w~TpVN@P@>mIskZ7n zUHN#KDl10UksMXvD{2K9Ki1_h60aU`E2k6GyETaE&ZQJ8xsUp4z(&AcIhM)~_Dr43 zO8)8nEEA!yap5@rjQxC}R=B2O@Kt7BRW6Tn94xg;3oEZQ>OMN+H`c>EW>TJfbu277 zw@4!4NOjDp*q2;!DNcXN83^>r6)yc zJXFG$U%1Sm4ox?L$Q!c9&+aDXrB}GdqmTCMsxF&2j@I+2uK6WXak|9FrHjo&IAa;EqAIg8eiGcQEuVOvV^vn;-3aIz~2$Ug5Ft`yZPbp_bv_n zp5Fwutnm0e!J&+rdwzau4a{|xws3Q6(qhvu9#q0hWtTqY3*J1zE*;Ak#LGFFm;!EXFM0m}gyHfR zekYiau*vX+ZS3k(P$e`aWw8GMK4Gf+htN-(BL}VXVF|7I&Fw7ZG^NORhZu$xHF9B$ zuXkJSWA-x|hn4+6*5%vy-11#)U#4;hv-Y%$0A z+_MKT#=5~Pu)rU4gXHnOTyG*VnOd92qXk1O{x_wMZ_B=;9>s1Tt=aJCn7NaO&e~_EH z)~|W^)45G0RgV(oi(fZ#szWiS1iIFZd_)dgRwj$OE{)4DXq~FzRo|%6&9}c06`*Rj zE5qNZ#_F6IoDAY-C8q}ZmxS8>#7#Lz4jz9~6VDR*DamJ;;6OEB(G-2YZZBWzNOt)ebGc8_uf;pdY8ntd~ zgu4ie)3PQeE!Ul?OOL~hKyI8g@^#b<YkIzgj^jk-mDIF5z5u3@!U$5G+0g;>1CAMY-Hkc~i~LBA6$W@|FVjC9P? zolGMp@JFWQP9qj&4Nrx2=4x6jC0k{9f({0HcOTn3y=u(ICa`Qb0bSyPzf5QaEaR_G zbg_mIe?)3kbdIIdkzu0o{g5y%aEW)>zql=d>}7!u4rRJ9v{9)><9tmTuA(FGuAp*8 zvigf-*%Qp+CF=2p9}OK!va?CcsD+Co)lY_{7@uz8;9VCTToXb5Wi+p;nJB4PgZtt8 zjwNMTZ`2Je)5K=D95=X`cHGZXa9<=1v{lsN%I+x$=P<`vO`Pvmb?U z>w>6!rcmIUxAXN0x0frs`HytaK`SG1ERgZ@t_xKBsglek8AWYkw%@3soJETqsg6k1 z!IxMJZdyaU4fu$?!r<@X9^h2=m8Vm|F%@?f0hG{9%kgBVFYy)-6rBym{mXamCf5-) zgS@qfd%2Rmyd??Uzs&$@@sDvvm74gL_#AQ6p_BFOvre~2qzRvYz8LO9Qky6m@1@d8S+NrjKGAqL^-R5fE|S{qOKH|Cti3An1WGo^q$HNrlbWtcI@JxT=% z{{Szj+FSP`I8=s!{`DcP`ajb!qnqp$qa9)3^ASz-o*-73IO%6v4i4%qdJ|k&Hr8~g%m3Il~Y-7@GAK&IRG_Hd<@a&rb zcGOjE($ksRY3gI5^XZ;|;%T%Le9YtA&tFtAISn4xc9%s3|E0}FWjzjC7o=&fKInH5WO9kiPvqs+mHG| z6TJzVuee^jX?o95ycO!4aWGQm~A6F+I+q$&&JRZXM-*7Fv$?m1c1$`H(ZismL) zxltEPAY)fN_>U@txkqyd&N`ZERd4eLMo$xRnMXIWTw%{MYgoGSJxXC#!l?dGy{Ux# z%n}+C2bn^%9p$D!zzaciHiwTgi*vQpE#yC9aarL0@~zw7QpMk=GVP7|zG`7jt(>`1 znK>!XXsT*k-0{p1m~=~9$H2_Wh+|U&$+#JP{-zJPTd46I#UebB)M1*&Bh;gq9~Qwt z{{S#B($~Jeok6_&j>k+ffq;T0GnvEl{{XQQFFZ^(97?gQN-cjeHX*~zH^AKQlvKe{ zPx6jT>RzwzJ6|!(z|YHRo}$tD`i`0%L2G3DjZsq;-0v`{fvUYG;&cB1rULf`gO1=W zLa6Na#$8$g$vVC_a9r*M);s#(8|O-uLNR_x{=u%UJv-1MgVYBBZ~h}t=~ zj-Zw-9v}<;&Qs&E<`4~Hxqy^j!^CTNkuWnEH;7f)NiGw(s)OR1T(K<(1Yr4vLk8Q> zwmJ|%1s`2XKR<=IrBq;-nU!)Lpqw0Fydd!^(yeOS%bX6?IUZ4D;{ckRxt={8!qq1T zKg4qeOb>r>zI-^cr9;O4VGs2N=JGa66>^7Ln9^@c#f201S5bD@G*n zhcR&qZ7;@j`)bocMtpa_bLx4Xn%p5 zli`S?TdEr`QMV?egr*v+g3fHain!L39EH2_F*0;_9e{178(wu2CS@Csp&ZR1&zXFy z#O>>Ix$E)pve>pvjcya*+%vm19vI?jMJ~`+F8e=mgvwVQ54l2vETW)A-D_Lcr2%@N zLXGh#YhW$}^`i1*fGNdP=DD=OQ;SS1twQnco^udnR9E(#$*s;NNwIde{U#XLMVNVa z4^~pepy_ir`*Z80^<3pl4=f2!>_NA0 zkJ1ku%J}gPT*VoJR6wtS&!IAW=k*QqwKtc%#hc;@2!Z;UA;`amb3X>*aA9)bn?8md zzV9$~?Q=;a8aQ zXYVODsaFD}PX_8+3;@xiN%@e<4%Wr0+#M^2*|^_O48Mqu8LHP+ah51G2-iX)(Ly@p z8S6bw?HKuB;yMEGD))%0lFakwJcg?O0K8U?63&LM7=Yc6?;Z6hI{JrordDoW1dWOZgcR#M44~SlPox?}E` zMRxD%8VZTG?qymyWjkb*iC`C<#lvS|Y9M(-o1YP@4q1aRRnzVdz++d^6&9Hl)E>v8 z>M*!fUB00sC?RebR6QU{ze$8N&HE61G4cg4xgv2?-aJMZ{Zva((_J~izhot~