From cbbf5516fa874b0d34f66e9e0673a8ff4a135fc9 Mon Sep 17 00:00:00 2001 From: JeffersonSenaa Date: Wed, 7 Aug 2024 16:48:12 -0300 Subject: [PATCH 01/11] Estrutura do template DAS --- .../4.1.PadroesArquiteturais.md | 52 ++++++++++++++++--- docs/_sidebar.md | 2 +- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md b/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md index 92ea42c..64874ec 100644 --- a/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md +++ b/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md @@ -1,13 +1,51 @@ -# 4.1. Módulo Estilos e Padrões Arquiteturais +# Módulo Estilos e Padrões Arquiteturais -Foco_01: Arquitetura de Software +## 1.0 Introdução -Entrega Mínina: Especificação de 2 Visões do DAS (ESCOPO: necessariamente a Lógica, e mais uma (Processo; Implementação; Implantação ou Dados)). +### 1.1 Propósito -OBS: A Visão de Caso de Uso, por ser uma visão já conhecida por vocês em outras disciplinas, não faz parte do escopo. Mas, pode ser explorada caso queiram. +### 1.2 Escopo -Apresentação (em sala) explicando o Documento de Arquitetura (DAS), com: (i) rastro claro aos membros participantes (MOSTRAR QUADRO DE PARTICIPAÇÕES & COMMITS); (ii) justificativas & senso crítico sobre esse artefato, em especial detalhando particularidades sobre estilos e padrões arquiteturais idealizados para a aplicação; (iii) breve apresentação das visões do DAS no escopo da aplicação, e (iv) comentários gerais sobre o trabalho em equipe. Tempo da Apresentação: +/- 8min. Recomendação: Apresentar diretamente via Wiki ou GitPages do Projeto. Baixar os conteúdos com antecedência, evitando problemas de internet no momento de exposição nas Dinâmicas de Avaliação. +### 1.3 Definições, Acrônimos e Abreviações -A Wiki ou GitPages do Projeto deve conter um tópico dedicado ao Módulo Estilos e Padrões Arquiteturais, com Especificação das Visões do DAS, histórico de versões, referências, e demais detalhamentos gerados pela equipe nesse escopo. +### 1.4 Referências -Demais orientações disponíveis nas Diretrizes (vide Moodle). +### 1.5 Visão Geral + +## 2.0 Representação Arquitetural + +## 3.0 Objetivos e restrições arquiteturais + +## 4.0 Casos de Uso + +## 5.0 Visão lógica + +### 5.1 Diagrama de Classes +![Diagrama de Classes](../img/Modelagem/DiagramClasse.jpg) + +### 5.2 Diagrama de Pacotes +![Diagrama de Pacotes](../img/diagramas/diagrama_de_pacotes.jpeg) + +## 6.0 Visão de Processos + +## 7.0 Visão de Implantação + +## 8.0 Visão de Implementação + +## 9.0 Tamanho e Desempenho + +### 9.1 Diagrama de Componentes +![Diagrama de Componentes](../img/diagramas/Diagrama_de_componentes.svg) + + + +## 10.0 Qualidade + +## Histórico de Versão +
+ +| Versão | Data | Alteração | Participantes | +| :----: | :------: |:-------------------------------------------------------------:|:--------------------------------------------------------------------------------------------:| +| 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | + +
\ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md index b7291ac..aca8c17 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -31,7 +31,7 @@ - [3.5. Participações](/PadroesDeProjeto/3.4.ParticipacoesPadroes.md) - **Arquitetura de Software & Reutilização** - - [4. Desenho de Software (Arquitetura & Reutilização de Software)](/ArquiteturaReutilizacao/4.ArquiteturaReutilizacao.md) + - **4. Desenho de Software (Arquitetura & Reutilização de Software)** - [4.1. Módulo Estilos e Padrões Arquiteturais](/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md) - [4.2. Módulo Reutilização de Software](/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md) - [4.3. Participações - Arquitetura & Reutilização de Software](/ArquiteturaReutilizacao/4.3.ParticipacoesArqReutilizacao.md) From 70b908afbb1d7f9b2a0f726909300e98e91401f5 Mon Sep 17 00:00:00 2001 From: JeffersonSenaa Date: Wed, 7 Aug 2024 16:54:45 -0300 Subject: [PATCH 02/11] Ajuste em imagem do GOF --- docs/PadroesDeProjeto/3.2.GoFsEstruturais.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PadroesDeProjeto/3.2.GoFsEstruturais.md b/docs/PadroesDeProjeto/3.2.GoFsEstruturais.md index ab3c968..32630ac 100644 --- a/docs/PadroesDeProjeto/3.2.GoFsEstruturais.md +++ b/docs/PadroesDeProjeto/3.2.GoFsEstruturais.md @@ -13,7 +13,7 @@ Uma vez que o projeto trabalhado apresenta dois principais subsistemas complexos ## Diagrama
-Facade diagrama +Facade diagrama

Figura 1: GoF estrutural Facade. Autores: Francisco Mizael, Pedro Torreão, 2024.

From b69a1cda9881da2e90f61087dea8d02c3a6b30f8 Mon Sep 17 00:00:00 2001 From: Pedro Torreao Date: Thu, 8 Aug 2024 20:50:18 -0300 Subject: [PATCH 03/11] Adicionando textos e UC DAS Adicionando textos introdutorios e tabela de casos de usos. --- .../4.1.PadroesArquiteturais.md | 32 +++++++++++++++---- .../4.2.ReutilizacaoDeSoftware.md | 6 ++-- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md b/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md index 64874ec..5dc7732 100644 --- a/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md +++ b/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md @@ -2,6 +2,8 @@ ## 1.0 Introdução +O Documento de Arquitetura de Software (DAS) é uma peça fundamental no processo de desenvolvimento de sistemas, pois descreve de forma detalhada a estrutura, os componentes principais e as interações do software. Ele serve como um guia para a equipe de desenvolvimento, garantindo que todos os envolvidos tenham uma compreensão clara e unificada da arquitetura proposta. O DAS facilita a comunicação entre as partes interessadas, documenta decisões críticas e assegura que o sistema seja construído de maneira consistente e alinhada com os objetivos técnicos e de negócios. + ### 1.1 Propósito ### 1.2 Escopo @@ -18,12 +20,30 @@ ## 4.0 Casos de Uso +Visões de casos de uso são representações visuais ou textuais que descrevem como os usuários (atores) interagem com um sistema para alcançar um objetivo específico. Elas ajudam a capturar os requisitos funcionais do sistema ao ilustrar as principais funcionalidades e o fluxo de interações entre os usuários e o sistema. Através de diagramas e descrições detalhadas, as visões de casos de uso permitem uma melhor compreensão das necessidades dos usuários, facilitando a comunicação entre desenvolvedores, stakeholders e equipes de design, além de servir como base para a implementação e teste do sistema. + +Casos Elicitados: + +| ID | Descrição do Caso de Uso | +| --- | ------------------------------------ | +| UC1 | Traduzir textos e frases. | +| UC2 | Traduzir Arquivos. | +| UC3 | Buscar sinonimo de uma palavra. | +| UC4 | Consultar significados das palavras. | +| UC5 | Obter Historico de Tradução. | +| UC6 | Fornecer Feedback. | +| UC7 | Detectar Idioma. | +| UC8 | Corrigir Erros Ortograficos. | +| UC9 | Traduzir Expressões Idiomaticas. | + ## 5.0 Visão lógica ### 5.1 Diagrama de Classes + ![Diagrama de Classes](../img/Modelagem/DiagramClasse.jpg) ### 5.2 Diagrama de Pacotes + ![Diagrama de Pacotes](../img/diagramas/diagrama_de_pacotes.jpeg) ## 6.0 Visão de Processos @@ -35,17 +55,17 @@ ## 9.0 Tamanho e Desempenho ### 9.1 Diagrama de Componentes -![Diagrama de Componentes](../img/diagramas/Diagrama_de_componentes.svg) - +![Diagrama de Componentes](../img/diagramas/Diagrama_de_componentes.svg) ## 10.0 Qualidade ## Histórico de Versão +
-| Versão | Data | Alteração | Participantes | -| :----: | :------: |:-------------------------------------------------------------:|:--------------------------------------------------------------------------------------------:| -| 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | +| Versão | Data | Alteração | Participantes | +| :----: | :------: | :-------------------------------------------: | :--------------------------------------------------: | +| 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | -
\ No newline at end of file + diff --git a/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md b/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md index 0a3c946..6193211 100644 --- a/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md +++ b/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md @@ -1,8 +1,10 @@ # 4.2. Módulo Reutilização de Software -Foco_02: Reutilização de Software +## 1.0 Introdução -Entrega Mínima: Exemplo de Reutilização, evidenciando parte conceitual e código. +A reutilização de software é uma prática essencial no desenvolvimento moderno, onde componentes previamente desenvolvidos são reaproveitados em novos projetos, economizando tempo, recursos e promovendo a consistência do código. Essa abordagem não só acelera o ciclo de desenvolvimento, como também melhora a qualidade e a manutenção dos sistemas, permitindo que as equipes se concentrem na inovação em vez de reinventar soluções. Ao integrar peças de software já testadas e comprovadas, a reutilização contribui para a criação de produtos mais robustos e eficientes, refletindo diretamente no sucesso das organizações em um mercado altamente competitivo. + +Entrega Mínima: Exemplo de Reutilização, evidenciando parte conceitual e código. Apresentação (em sala) conferindo reflexões sobre reutilização de software no escopo da aplicação, com: (i) rastro claro aos membros participantes (MOSTRAR QUADRO DE PARTICIPAÇÕES & COMMIITS); (ii) justificativas & senso crítico sobre reutilização de software; (iii) breve análise do exemplo (parte conceitual & código) no escopo da aplicação, e (iv) comentários gerais sobre o trabalho em equipe. Tempo da Apresentação: +/- 7min. Recomendação: Apresentar diretamente via Wiki ou GitPages do Projeto. Baixar os conteúdos com antecedência, evitando problemas de internet no momento de exposição nas Dinâmicas de Avaliação. From 9382e4b421a4096aca2548924868e67be40bed10 Mon Sep 17 00:00:00 2001 From: danieloda Date: Thu, 8 Aug 2024 20:57:24 -0300 Subject: [PATCH 04/11] Adicionando diagrama de casos de uso --- .../{4.1.PadroesArquiteturais.md => 4.1.DAS.md} | 0 .../DiagramaCasosDeUso.png | Bin 0 -> 86049 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/ArquiteturaReutilizacao/{4.1.PadroesArquiteturais.md => 4.1.DAS.md} (100%) create mode 100644 docs/img/ArquiteturaReutilizacao/DiagramaCasosDeUso.png diff --git a/docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md b/docs/ArquiteturaReutilizacao/4.1.DAS.md similarity index 100% rename from docs/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md rename to docs/ArquiteturaReutilizacao/4.1.DAS.md diff --git a/docs/img/ArquiteturaReutilizacao/DiagramaCasosDeUso.png b/docs/img/ArquiteturaReutilizacao/DiagramaCasosDeUso.png new file mode 100644 index 0000000000000000000000000000000000000000..393ef690e7d723a186f16c5927bcdaa70495f523 GIT binary patch literal 86049 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%0A{MDhU92 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 Date: Thu, 8 Aug 2024 20:58:32 -0300 Subject: [PATCH 05/11] Alterando das --- docs/ArquiteturaReutilizacao/4.1.DAS.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.DAS.md b/docs/ArquiteturaReutilizacao/4.1.DAS.md index 5dc7732..94c49e3 100644 --- a/docs/ArquiteturaReutilizacao/4.1.DAS.md +++ b/docs/ArquiteturaReutilizacao/4.1.DAS.md @@ -10,9 +10,7 @@ O Documento de Arquitetura de Software (DAS) é uma peça fundamental no process ### 1.3 Definições, Acrônimos e Abreviações -### 1.4 Referências - -### 1.5 Visão Geral +### 1.4 Visão Geral ## 2.0 Representação Arquitetural @@ -36,6 +34,8 @@ Casos Elicitados: | UC8 | Corrigir Erros Ortograficos. | | UC9 | Traduzir Expressões Idiomaticas. | +![Diagrama de Casos de Uso](../img/ArquiteturaReutilizacao/DiagramaCasosDeUso.png) + ## 5.0 Visão lógica ### 5.1 Diagrama de Classes @@ -60,6 +60,11 @@ Casos Elicitados: ## 10.0 Qualidade +## Referências + +> **Arquitetura e Desenho de Software - Aula DAS**. Material de apoio em slides. Milene Serrano. +> **Use-case diagrams - IBM**. Disponível em: https://www.ibm.com/docs/en/rational-soft-arch/9.6.1?topic=diagrams-use-case. Acesso em 08/08/2024. + ## Histórico de Versão
@@ -67,5 +72,6 @@ Casos Elicitados: | Versão | Data | Alteração | Participantes | | :----: | :------: | :-------------------------------------------: | :--------------------------------------------------: | | 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | +| 1.1 | 08/08/24 | Criando diagrama de casos de uso | [Daniel Oda](https://github.com/danieloda/), [Pedro Torreão](https://github.com/PedroTorreao21/) |
From f6b96585d72899051ef45b4cb7c3dd0c9bdea4e7 Mon Sep 17 00:00:00 2001 From: JeffersonSenaa Date: Fri, 9 Aug 2024 00:31:04 -0300 Subject: [PATCH 06/11] =?UTF-8?q?Adicionando=20descri=C3=A7=C3=B5es=20dos?= =?UTF-8?q?=20diagramas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ArquiteturaReutilizacao/4.1.DAS.md | 8 ++++++++ docs/_sidebar.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.DAS.md b/docs/ArquiteturaReutilizacao/4.1.DAS.md index 94c49e3..a494d9f 100644 --- a/docs/ArquiteturaReutilizacao/4.1.DAS.md +++ b/docs/ArquiteturaReutilizacao/4.1.DAS.md @@ -37,12 +37,16 @@ Casos Elicitados: ![Diagrama de Casos de Uso](../img/ArquiteturaReutilizacao/DiagramaCasosDeUso.png) ## 5.0 Visão lógica +A visão lógica na arquitetura de software refere-se a uma parte do conjunto que inclui Classes e Pacotes. Essa visão é uma abstração dos modelos criados, destacando suas principais características e simplificando suas representações. A modelagem do diagrama de classes e do diagrama de pacotes permite uma análise mais detalhada das principais camadas arquiteturais desenvolvidas no projeto. Além disso, para uma perspectiva ainda mais abstrata, utilizam-se o diagrama de atividades. A seguir, é apresentado os diagramas desenvolvidos e como relacionam-se entre si. ### 5.1 Diagrama de Classes +O diagrama de classes oferece uma representação visual das classes que formam um sistema, assim como os relacionamentos entre elas. Através desse diagrama, é possível entender o comportamento do sistema, identificar as responsabilidades na criação de instâncias, definir a visibilidade de atributos e métodos, além de visualizar relacionamentos como composição, agregação, entre outros. +O diagrama de classes abaixo demonstra as requisições feitas a API do Deepl por meio da classe Translate. ![Diagrama de Classes](../img/Modelagem/DiagramClasse.jpg) ### 5.2 Diagrama de Pacotes +O diagrama de pacotes organiza e agrupa elementos de um sistema em pacotes, mostrando as dependências e relações entre eles. Ele ajuda a visualizar a estrutura modular do sistema, representando como as classes e outros componentes são agrupados e interagem em um nível mais alto de abstração. Esse diagrama é útil para organizar e gerenciar a complexidade do software, facilitando o entendimento da arquitetura e a manutenção do sistema. ![Diagrama de Pacotes](../img/diagramas/diagrama_de_pacotes.jpeg) @@ -55,6 +59,9 @@ Casos Elicitados: ## 9.0 Tamanho e Desempenho ### 9.1 Diagrama de Componentes +O diagrama de componentes ilustra a estrutura física de um sistema de software, destacando os componentes que o compõem e suas interações. Ele representa módulos de software, como bibliotecas, arquivos executáveis, e outros elementos que fazem parte do sistema, e mostra como esses componentes se conectam através de interfaces ou dependências. + +Esse diagrama é particularmente útil para visualizar e planejar a arquitetura de implementação, ajudando a garantir que os componentes do sistema sejam organizados de maneira eficiente, com responsabilidades claramente definidas e interações bem delineadas. Em essência, o diagrama de componentes foca em como o sistema é fisicamente montado e como suas partes se relacionam para formar uma solução funcional. ![Diagrama de Componentes](../img/diagramas/Diagrama_de_componentes.svg) @@ -73,5 +80,6 @@ Casos Elicitados: | :----: | :------: | :-------------------------------------------: | :--------------------------------------------------: | | 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | | 1.1 | 08/08/24 | Criando diagrama de casos de uso | [Daniel Oda](https://github.com/danieloda/), [Pedro Torreão](https://github.com/PedroTorreao21/) | +| 1.2 | 08/08/24 | Adicionando descrições dos diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | diff --git a/docs/_sidebar.md b/docs/_sidebar.md index aca8c17..0e3260c 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -32,6 +32,6 @@ - **Arquitetura de Software & Reutilização** - **4. Desenho de Software (Arquitetura & Reutilização de Software)** - - [4.1. Módulo Estilos e Padrões Arquiteturais](/ArquiteturaReutilizacao/4.1.PadroesArquiteturais.md) + - [4.1. Módulo Estilos e Padrões Arquiteturais](/ArquiteturaReutilizacao/4.1.DAS.md) - [4.2. Módulo Reutilização de Software](/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md) - [4.3. Participações - Arquitetura & Reutilização de Software](/ArquiteturaReutilizacao/4.3.ParticipacoesArqReutilizacao.md) From d74faa61704454401525d0a6b5a28f897414f51b Mon Sep 17 00:00:00 2001 From: pedrocampos0 Date: Fri, 9 Aug 2024 11:00:32 -0300 Subject: [PATCH 07/11] add: visao de processo :books: --- docs/ArquiteturaReutilizacao/4.1.DAS.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.DAS.md b/docs/ArquiteturaReutilizacao/4.1.DAS.md index a494d9f..a9af75d 100644 --- a/docs/ArquiteturaReutilizacao/4.1.DAS.md +++ b/docs/ArquiteturaReutilizacao/4.1.DAS.md @@ -52,6 +52,13 @@ O diagrama de pacotes organiza e agrupa elementos de um sistema em pacotes, most ## 6.0 Visão de Processos +A visão de processos na arquitetura de sistemas de software oferece uma compreensão detalhada de como os processos e tarefas são organizados, estruturados e interagem entre si. Essa perspectiva é essencial para identificar e mapear os processos-chave do sistema, permitindo a compreensão de sua comunicação, coordenação, sincronização e compartilhamento de recursos, sendo vital para modelar a interação entre componentes, módulos e serviços, direcionando-os para o cumprimento dos objetivos globais do sistema. +Essa abordagem permite um mapeamento preciso das entradas, saídas e fluxos de informação no software, delineando claramente as responsabilidades e interações de cada componente, exercendo um papel crucial na análise de desempenho, na identificação de gargalos, na otimização do fluxo de trabalho e na verificação de conformidade com os requisitos funcionais e não funcionais. +Além disso, essa análise detalhada promove a eficiência operacional, a escalabilidade e a facilidade de manutenção do software, permitindo uma melhor alocação de recursos e facilitando a adaptação da arquitetura às mudanças nas necessidades do negócio. Com isso, a visão de processos não apenas fortalece a robustez e a resiliência do sistema, mas também assegura que ele possa evoluir de forma contínua. +Partindo desse conceito, podemos encaixar os diagramas de: +- [Artefato do Diagrama de atividades](https://unbarqdsw2024-1.github.io/2024.1_G9_My_Translator/#/Modelagem/Dinamicos/1.1.DiagramaDeAtividades), ele consegue nos fornecer uma visão do "todo", premitindo que realizemos a análise do fluxo por completo, tanto da parte de usuário como a parte do sistema de tradução. +- [Artefato do Diagrama de comunicação](https://unbarqdsw2024-1.github.io/2024.1_G9_My_Translator/#/Modelagem/Dinamicos/1.2.DiagramaDeComunicação), Esse artefato consegue descrever os fluxos de informação e as interações entre as diferentes entidades do sistema. + ## 7.0 Visão de Implantação ## 8.0 Visão de Implementação @@ -76,10 +83,11 @@ Esse diagrama é particularmente útil para visualizar e planejar a arquitetura
-| Versão | Data | Alteração | Participantes | -| :----: | :------: | :-------------------------------------------: | :--------------------------------------------------: | -| 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | -| 1.1 | 08/08/24 | Criando diagrama de casos de uso | [Daniel Oda](https://github.com/danieloda/), [Pedro Torreão](https://github.com/PedroTorreao21/) | -| 1.2 | 08/08/24 | Adicionando descrições dos diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | +| Versão | Data | Alteração | Participantes | +|:------:|:--------:|:---------------------------------------------:|:------------------------------------------------------------------------------------------------:| +| 1.0 | 07/08/24 | Estruturando template e adicionando diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | +| 1.1 | 08/08/24 | Criando diagrama de casos de uso | [Daniel Oda](https://github.com/danieloda/), [Pedro Torreão](https://github.com/PedroTorreao21/) | +| 1.2 | 08/08/24 | Adicionando descrições dos diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | +| 1.3 | 09/08/24 | Adicionando visão de processos | [Pedro Campos](https://github.com/pedrocampos0/) |
From 5a55732ec7dfdb46feb43c85893e770032c09ad0 Mon Sep 17 00:00:00 2001 From: pedrocampos0 Date: Fri, 9 Aug 2024 13:17:34 -0300 Subject: [PATCH 08/11] add: implementacao inicial :sparkles: --- .../__pycache__/input_model.cpython-311.pyc | Bin 0 -> 1013 bytes backend/models/input_model.py | 15 ++++++ backend/models/origin_model.py | 48 ++++++++++++++++++ backend/requirements.txt | 1 + backend/services/control_service.py | 44 ++++++++++++++++ backend/teste/Teste.docx | Bin 0 -> 9525 bytes backend/teste/teste.json | 3 ++ backend/teste/teste.txt | 1 + backend/utilities/read_utility.py | 24 +++++++++ 9 files changed, 136 insertions(+) create mode 100644 backend/models/__pycache__/input_model.cpython-311.pyc create mode 100644 backend/models/input_model.py create mode 100644 backend/models/origin_model.py create mode 100644 backend/requirements.txt create mode 100644 backend/services/control_service.py create mode 100644 backend/teste/Teste.docx create mode 100644 backend/teste/teste.json create mode 100644 backend/teste/teste.txt create mode 100644 backend/utilities/read_utility.py diff --git a/backend/models/__pycache__/input_model.cpython-311.pyc b/backend/models/__pycache__/input_model.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f804f06d63f4fb72a4288bc616cbe4dd1ae81710 GIT binary patch literal 1013 zcmah{y>HV%6u+}$$8nn$2#qKbY#oA11r-dSilKZ|8Tuj73dyo`a&i}N@kcm2QoRL< zKcHJXc0eEmGk*bM&cG1e%ET5FrcS))BnmA^oX_um=l6T}o`3J&m&-PR@%6^%)^$qA zcic>dIR?XH07rxqP6HBBhf>5^poO}l=U5L4q2U;z>6nxVT@-~SXiHz5oJ5?GMm7j9 zydm5WhA{W@tmyt^zAF&&5#G^oW^!f`nAU%ov%K__)a)M^Sfi@Ao~0tGZv!;;B0r95 znkub(iP(&}2$b>oAeCNooF-rN@n(1xz!4F|p`19{9{xgs(>3_YHAtZ=dsiH!+l_tE zOjRKTyj3%l#aQHpf-z+?7RJ02Af9FHRmTg)9z98=nrF<5qB!+Zs48LX0~uoG)7^*n z-MvJ}#BB>MV|OQOzVKwYBV$aIxU08T@2uQr8~4~|#&)F_C4ra5(rtLnmm=aW{D=+^u)(ui@?1<%J0sMT6fuClK6-d<-waG8IVZ z4#)$-Xv%)#2Vx`)NFuSVat6&T7-cuGB`nR_LKRxTl=JAzvtC4Wd1A@{k_wnR_^3hh1<{9 literal 0 HcmV?d00001 diff --git a/backend/models/input_model.py b/backend/models/input_model.py new file mode 100644 index 0000000..630b637 --- /dev/null +++ b/backend/models/input_model.py @@ -0,0 +1,15 @@ +from io import BytesIO +from typing import Union, Any +from pydantic import BaseModel, Extra + + +bytes_type = Union[bytes, BytesIO] + + +class TextObject(BaseModel, extra=Extra.forbid): + text: str + + +class FileObject(BaseModel, extra=Extra.forbid, arbitrary_types_allowed=True): + file: bytes_type + file_extension: str diff --git a/backend/models/origin_model.py b/backend/models/origin_model.py new file mode 100644 index 0000000..1c180c1 --- /dev/null +++ b/backend/models/origin_model.py @@ -0,0 +1,48 @@ +from enum import Enum +from typing import Union, Optional +from backend.models.input_model import TextObject, FileObject, bytes_type +from backend.utilities.read_utility import ReadUtility + + +class FileTypeModel(Enum): + DOCX: str = 'docx' + JSON: str = 'json' + TXT: str = 'txt' + + +class OriginModel(Enum): + TEXT: Optional[str] = 'text' + FILE: Optional[str] = 'file' + + +class Origin: + def __init__(self): + self.ReadUtility = ReadUtility(self) + self.file_content = None + self.translate_object = None + self.text = None + self.file = None + self.file_type = None + + def set_origin(self, origin: OriginModel, translate_object: Union[TextObject, FileObject]): + self.translate_object = translate_object + if origin == OriginModel.TEXT and isinstance(translate_object, TextObject): + self.text = translate_object.text + elif origin == OriginModel.FILE and isinstance(translate_object, FileObject): + self.file = translate_object.file + self.file_type = self._get_file_type() + else: + raise Exception('Origem inválida') + + def _get_file_type(self): + if self.translate_object.file_extension == FileTypeModel.DOCX.value: + self.file_content = self.ReadUtility.read_docx_file() + return FileTypeModel.DOCX + elif self.translate_object.file_extension == FileTypeModel.JSON.value: + self.file_content = self.ReadUtility.read_json_file() + return FileTypeModel.JSON + elif self.translate_object.file_extension == FileTypeModel.TXT.value: + self.file_content = self.ReadUtility.read_txt_file() + return FileTypeModel.TXT + else: + raise Exception('Formato de arquivo não suportado') diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..59cc1e9 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1 @@ +pydantic \ No newline at end of file diff --git a/backend/services/control_service.py b/backend/services/control_service.py new file mode 100644 index 0000000..a2e201b --- /dev/null +++ b/backend/services/control_service.py @@ -0,0 +1,44 @@ +from backend.models.input_model import TextObject, FileObject +from backend.models.origin_model import Origin, OriginModel + + +class ControlService: + def __init__(self, origin_obj: Origin): + if origin_obj.text: + print('TEXTO') + print(origin_obj.text) + else: + print('ARQUIVO') + print(origin_obj.file_type.value) + print(origin_obj.file_content) + #self.deepl_service = DeeplService(origin) + #self.historic_service = HistoricService(origin) + + +if __name__ == '__main__': + # Exemplos de uso + origin = Origin() + text = TextObject(text='Hello world!') + origin.set_origin(OriginModel.TEXT, text) + ControlService(origin) + + origin = Origin() + with open('../teste/teste.txt', 'rb') as f: + file_extension = f.name.split('.')[-1] + file = FileObject(file=f.read(), file_extension=file_extension) + origin.set_origin(OriginModel.FILE, file) + ControlService(origin) + + origin = Origin() + with open('../teste/teste.docx', 'rb') as f: + file_extension = f.name.split('.')[-1] + file = FileObject(file=f.read(), file_extension=file_extension) + origin.set_origin(OriginModel.FILE, file) + ControlService(origin) + + origin = Origin() + with open('../teste/teste.json', 'rb') as f: + file_extension = f.name.split('.')[-1] + file = FileObject(file=f.read(), file_extension=file_extension) + origin.set_origin(OriginModel.FILE, file) + ControlService(origin) \ No newline at end of file diff --git a/backend/teste/Teste.docx b/backend/teste/Teste.docx new file mode 100644 index 0000000000000000000000000000000000000000..ec3013436ce653e84c5a4312ba0009a4da1320ea GIT binary patch literal 9525 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 DwzU^n literal 0 HcmV?d00001 diff --git a/backend/teste/teste.json b/backend/teste/teste.json new file mode 100644 index 0000000..e6caf0c --- /dev/null +++ b/backend/teste/teste.json @@ -0,0 +1,3 @@ +{ + "texto": "My name is Pedro" +} diff --git a/backend/teste/teste.txt b/backend/teste/teste.txt new file mode 100644 index 0000000..c7e3d08 --- /dev/null +++ b/backend/teste/teste.txt @@ -0,0 +1 @@ +My name is Pedro \ No newline at end of file diff --git a/backend/utilities/read_utility.py b/backend/utilities/read_utility.py new file mode 100644 index 0000000..bfd817f --- /dev/null +++ b/backend/utilities/read_utility.py @@ -0,0 +1,24 @@ +import json +import docx +import io + + +class ReadUtility: + def __init__(self, origin): + self.origin = origin + + def read_docx_file(self): + doc = docx.Document(io.BytesIO(self.origin.file)) + text = '' + for p in doc.paragraphs: + text += p.text + '\n' + text = text.strip() + return text + + def read_json_file(self): + dict_json = json.loads(self.origin.file) + text = [v for k, v in dict_json.items()][0] + return text + + def read_txt_file(self): + return self.origin.file.decode('utf-8') From fa3dff3de4411a8eb59466383c2daea5cafdd292 Mon Sep 17 00:00:00 2001 From: PedroEduardoSS Date: Mon, 12 Aug 2024 19:39:31 -0300 Subject: [PATCH 09/11] Adiciona reutilizacao de software MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Início da documentação da reutilização de software e correção do DAS --- docs/ArquiteturaReutilizacao/4.1.DAS.md | 7 ++-- .../4.2.ReutilizacaoDeSoftware.md | 35 ++++++++++++++++--- package-lock.json | 1 - 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/docs/ArquiteturaReutilizacao/4.1.DAS.md b/docs/ArquiteturaReutilizacao/4.1.DAS.md index a9af75d..a3eb579 100644 --- a/docs/ArquiteturaReutilizacao/4.1.DAS.md +++ b/docs/ArquiteturaReutilizacao/4.1.DAS.md @@ -63,15 +63,15 @@ Partindo desse conceito, podemos encaixar os diagramas de: ## 8.0 Visão de Implementação -## 9.0 Tamanho e Desempenho - -### 9.1 Diagrama de Componentes +### 8.1 Diagrama de Componentes O diagrama de componentes ilustra a estrutura física de um sistema de software, destacando os componentes que o compõem e suas interações. Ele representa módulos de software, como bibliotecas, arquivos executáveis, e outros elementos que fazem parte do sistema, e mostra como esses componentes se conectam através de interfaces ou dependências. Esse diagrama é particularmente útil para visualizar e planejar a arquitetura de implementação, ajudando a garantir que os componentes do sistema sejam organizados de maneira eficiente, com responsabilidades claramente definidas e interações bem delineadas. Em essência, o diagrama de componentes foca em como o sistema é fisicamente montado e como suas partes se relacionam para formar uma solução funcional. ![Diagrama de Componentes](../img/diagramas/Diagrama_de_componentes.svg) +## 9.0 Tamanho e Desempenho + ## 10.0 Qualidade ## Referências @@ -89,5 +89,6 @@ Esse diagrama é particularmente útil para visualizar e planejar a arquitetura | 1.1 | 08/08/24 | Criando diagrama de casos de uso | [Daniel Oda](https://github.com/danieloda/), [Pedro Torreão](https://github.com/PedroTorreao21/) | | 1.2 | 08/08/24 | Adicionando descrições dos diagramas | [Jefferson Sena](https://github.com/JeffersonSenaa/) | | 1.3 | 09/08/24 | Adicionando visão de processos | [Pedro Campos](https://github.com/pedrocampos0/) | +| 1.4 | 12/08/24 | Corrigindo a visão de implementação | [Pedro Eduardo](https://github.com/PedroEduardoSS/) | diff --git a/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md b/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md index 6193211..7c07236 100644 --- a/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md +++ b/docs/ArquiteturaReutilizacao/4.2.ReutilizacaoDeSoftware.md @@ -2,12 +2,37 @@ ## 1.0 Introdução -A reutilização de software é uma prática essencial no desenvolvimento moderno, onde componentes previamente desenvolvidos são reaproveitados em novos projetos, economizando tempo, recursos e promovendo a consistência do código. Essa abordagem não só acelera o ciclo de desenvolvimento, como também melhora a qualidade e a manutenção dos sistemas, permitindo que as equipes se concentrem na inovação em vez de reinventar soluções. Ao integrar peças de software já testadas e comprovadas, a reutilização contribui para a criação de produtos mais robustos e eficientes, refletindo diretamente no sucesso das organizações em um mercado altamente competitivo. +Ao modelar e desenhar a arquiteutra de um software, nos preocupamos em utilizar os padrões de projeto para que facilite e evite problemas na manutenção do mesmo em versões posteriores. As principais partes reutilizáveis desse projeto são os componentes do React e a utilização da API de tradução do DeepL -Entrega Mínima: Exemplo de Reutilização, evidenciando parte conceitual e código. +### 1.1 Front End -Apresentação (em sala) conferindo reflexões sobre reutilização de software no escopo da aplicação, com: (i) rastro claro aos membros participantes (MOSTRAR QUADRO DE PARTICIPAÇÕES & COMMIITS); (ii) justificativas & senso crítico sobre reutilização de software; (iii) breve análise do exemplo (parte conceitual & código) no escopo da aplicação, e (iv) comentários gerais sobre o trabalho em equipe. Tempo da Apresentação: +/- 7min. Recomendação: Apresentar diretamente via Wiki ou GitPages do Projeto. Baixar os conteúdos com antecedência, evitando problemas de internet no momento de exposição nas Dinâmicas de Avaliação. +#### React Components -A Wiki ou GitPages do Projeto deve conter um tópico dedicado ao Módulo Reutilização de Software, com exemplo de reutilização de software (parte conceitual & código), histórico de versões, referências, e demais detalhamentos gerados pela equipe nesse escopo. +### 1.2 Back End -Demais orientações disponíveis nas Diretrizes (vide Moodle). +#### API DeepL + +A API do DeepL fornece acesso programático à tecnologia de tradução automática do DeepL, possibilitando tradução de alta qualidade. + +Exemplo de código: + +import deepl +auth_key = "f63c02c5-f056-..." +translator = deepl.Translator(auth_key) +result = translator.translate_text("Hello, world!", target_lang="FR") +print(result.text) + + +## Referências + +> **Arquitetura e Desenho de Software - Aula Reutilização**. Material de apoio em slides. Milene Serrano. + +## Histórico de Versão + +
+ +| Versão | Data | Alteração | Participantes | +|:------:|:--------:|:---------------------------------------------:|:------------------------------------------------------------------------------------------------:| +| 1.0 | 12/08/24 | Iniciando exemplos de reutilização | [Pedro Eduardo](https://github.com/PedroEduardoSS/) | + +
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1b770ad..a65e5ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,7 +4,6 @@ "requires": true, "packages": { "": { - "name": "2024.1_G9_My_Translator", "dependencies": { "docsify-cli": "^1.0.0" } From d630fd9974a2679f002e2587ce36cbcff94fd222 Mon Sep 17 00:00:00 2001 From: JeffersonSenaa Date: Tue, 13 Aug 2024 16:42:01 -0300 Subject: [PATCH 10/11] =?UTF-8?q?Vers=C3=A3o=20inicial=20do=20frontend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/my-translator/.gitignore | 24 + frontend/my-translator/eslint.config.js | 38 + frontend/my-translator/index.html | 13 + frontend/my-translator/package-lock.json | 4149 +++++++++++++++++ frontend/my-translator/package.json | 28 + frontend/my-translator/src/App.css | 0 frontend/my-translator/src/App.jsx | 13 + .../my-translator/src/components/Header.jsx | 11 + .../src/components/TranslationInput.jsx | 20 + .../src/components/TranslationOutput.jsx | 13 + .../src/components/TranslatorPage.jsx | 24 + frontend/my-translator/src/index.css | 27 + frontend/my-translator/src/main.jsx | 10 + frontend/my-translator/vite.config.js | 7 + 14 files changed, 4377 insertions(+) create mode 100644 frontend/my-translator/.gitignore create mode 100644 frontend/my-translator/eslint.config.js create mode 100644 frontend/my-translator/index.html create mode 100644 frontend/my-translator/package-lock.json create mode 100644 frontend/my-translator/package.json create mode 100644 frontend/my-translator/src/App.css create mode 100644 frontend/my-translator/src/App.jsx create mode 100644 frontend/my-translator/src/components/Header.jsx create mode 100644 frontend/my-translator/src/components/TranslationInput.jsx create mode 100644 frontend/my-translator/src/components/TranslationOutput.jsx create mode 100644 frontend/my-translator/src/components/TranslatorPage.jsx create mode 100644 frontend/my-translator/src/index.css create mode 100644 frontend/my-translator/src/main.jsx create mode 100644 frontend/my-translator/vite.config.js diff --git a/frontend/my-translator/.gitignore b/frontend/my-translator/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/my-translator/.gitignore @@ -0,0 +1,24 @@ +# 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? diff --git a/frontend/my-translator/eslint.config.js b/frontend/my-translator/eslint.config.js new file mode 100644 index 0000000..964a299 --- /dev/null +++ b/frontend/my-translator/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { + files: ['**/*.{js,jsx}'], + ignores: ['dist'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/frontend/my-translator/index.html b/frontend/my-translator/index.html new file mode 100644 index 0000000..7eae40f --- /dev/null +++ b/frontend/my-translator/index.html @@ -0,0 +1,13 @@ + + + + + + + My Translator + + +
+ + + diff --git a/frontend/my-translator/package-lock.json b/frontend/my-translator/package-lock.json new file mode 100644 index 0000000..ed239fc --- /dev/null +++ b/frontend/my-translator/package-lock.json @@ -0,0 +1,4149 @@ +{ + "name": "my-translator", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-translator", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.8.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.8.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "vite": "^5.4.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "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.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "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, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz", + "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "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, + "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.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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, + "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-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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 + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "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 + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz", + "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.0.tgz", + "integrity": "sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.9.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.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", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "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-plugin-react": { + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", + "dev": true, + "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.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", + "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "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, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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 + }, + "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 + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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, + "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, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "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, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "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==" + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "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 + }, + "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, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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 + }, + "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==", + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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 + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", + "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.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", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/my-translator/package.json b/frontend/my-translator/package.json new file mode 100644 index 0000000..d62ca12 --- /dev/null +++ b/frontend/my-translator/package.json @@ -0,0 +1,28 @@ +{ + "name": "my-translator", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.8.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.8.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "vite": "^5.4.0" + } +} diff --git a/frontend/my-translator/src/App.css b/frontend/my-translator/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/my-translator/src/App.jsx b/frontend/my-translator/src/App.jsx new file mode 100644 index 0000000..2aebbe5 --- /dev/null +++ b/frontend/my-translator/src/App.jsx @@ -0,0 +1,13 @@ +import TranslatorPage from "./components/TranslatorPage" +import Header from "./components/Header" + +function App(){ + return ( +
+
+ +
+ ) +} + +export default App \ No newline at end of file diff --git a/frontend/my-translator/src/components/Header.jsx b/frontend/my-translator/src/components/Header.jsx new file mode 100644 index 0000000..7f5d3bf --- /dev/null +++ b/frontend/my-translator/src/components/Header.jsx @@ -0,0 +1,11 @@ +import React from 'react'; + +function Header() { + return ( +
+

My Translator

+
+ ); +} + +export default Header; diff --git a/frontend/my-translator/src/components/TranslationInput.jsx b/frontend/my-translator/src/components/TranslationInput.jsx new file mode 100644 index 0000000..2ba356b --- /dev/null +++ b/frontend/my-translator/src/components/TranslationInput.jsx @@ -0,0 +1,20 @@ +import { useState } from "react" + +function TranslationInput({onChange}){ + const [text, setText] =useState(''); + + const handleChange = (e) => { + setText(e.target.value); + onChange(e.target.value); + }; + + return ( +